From 65e591c7a3a3903d52fb9009c39c33c8bfe9ac86 Mon Sep 17 00:00:00 2001 From: Pawan Kumar Date: Wed, 30 Dec 2020 18:34:01 +0530 Subject: [PATCH] add calculation for budget hour --- cor_custom/models/project.py | 55 +++++++++++++++++++++---------- cor_custom/views/project_view.xml | 10 ++++-- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py index ea297e9..055b14b 100755 --- a/cor_custom/models/project.py +++ b/cor_custom/models/project.py @@ -38,41 +38,47 @@ class Project(models.Model): " them or by someone of their company.") allow_billable = fields.Boolean("Billable", default=True, help="Invoice your time and material from tasks.") - budgeted_hours = fields.Float(string='Budgeted Hours', digits=(16, 2)) + budgeted_hours = fields.Float(string='Total Budgeted Hours', digits=(16, 2)) budgeted_revenue = fields.Float(string='Budgeted Revenue', digits=(16, 2)) + cost = fields.Float("Sum of Cost", compute='onchange_compute_hours') + hourly_rate = fields.Float("Sum of Hourly rate", compute='onchange_compute_hours') + budgeted_hour_week = fields.Float("Budgeted Hours(per week)", compute='onchange_compute_hours') - # @api.onchange('sale_line_employee_ids','sale_line_employee_ids.budgeted_qty', 'project_id') - # def onchange_(self): - # if self.project_type == 'hours_in_consultant': - # print('555555555') - # val = 0.0 - # for rec in self.sale_line_employee_ids: - # val = val + rec.budgeted_qty - # print('66666666666666666', val) - # print('777777777', val) - # self.budgeted_hours = val - - - + @api.depends('sale_line_employee_ids.budgeted_qty', 'sale_line_employee_ids.budgeted_qty') + def onchange_compute_hours(self): + if self.project_type == 'hours_in_consultant': + val = 0.0 + cost = 0.0 + budgeted_hour_week = 0.0 + for rec in self.sale_line_employee_ids: + val = val + rec.budgeted_qty + cost = cost + rec.cost + budgeted_hour_week = budgeted_hour_week + rec.budgeted_hour_week + self.budgeted_hours = val + self.cost = cost + self.hourly_rate = (self.cost/self.budgeted_hours) + self.budgeted_hour_week = budgeted_hour_week class InheritProjectProductEmployeeMap(models.Model): _inherit = 'project.sale.line.employee.map' employee_price = fields.Monetary(string="Consultant Price", related="employee_id.timesheet_cost", readonly=True) - budgeted_qty = fields.Float(string='Budgeted Hours', store=True) + budgeted_qty = fields.Float(string='Budgeted Hours', store=True) budgeted_uom = fields.Many2one('uom.uom', string='Budgeted UOM', related='sale_line_id.product_uom', readonly=True) - #budgeted_uom = fields.Many2one('uom.uom', string='Budgeted UOM', related='timesheet_product_id.uom_id', readonly=True) + # budgeted_uom = fields.Many2one('uom.uom', string='Budgeted UOM', related='timesheet_product_id.uom_id', readonly=True) timesheet_hour = fields.Float("Timesheet Hour", compute='_compute_timesheet_hour', default=0.0) budgeted_hour_week = fields.Float("Budgeted Hours per week ", compute='_compute_budgeted_hour_week') price_unit = fields.Float("Hourly rate", compute='_compute_price_unit', store=True, readonly=True) sale_line_id = fields.Many2one('sale.order.line', "Service", domain=[('is_service', '=', True)]) + cost = fields.Float("Cost", compute='_compute_total_cost') def _compute_timesheet_hour(self): for val in self: self._cr.execute('''SELECT project_id, employee_id, SUM(unit_amount) FROM account_analytic_line where project_id = %(project_id)s and employee_id = %(employee_id)s - GROUP BY project_id, employee_id''', { 'project_id': val.project_id._origin.id, 'employee_id': val.employee_id.id,}) + GROUP BY project_id, employee_id''', + {'project_id': val.project_id._origin.id, 'employee_id': val.employee_id.id, }) res = self._cr.fetchone() if res and res[2]: val.timesheet_hour = res[2] @@ -82,8 +88,21 @@ class InheritProjectProductEmployeeMap(models.Model): def _compute_budgeted_hour_week(self): for val in self: if val.employee_id and val.employee_id.budgeted_hour_week > 0 and val.budgeted_qty: - val.budgeted_hour_week = (val.budgeted_qty /val.employee_id.budgeted_hour_week) + val.budgeted_hour_week = (val.budgeted_qty / val.employee_id.budgeted_hour_week) else: val.budgeted_hour_week = 0 + def _compute_total_cost(self): + for val in self: + val.cost = val.budgeted_qty * val.price_unit + # @api.onchange('employee_id', 'budgeted_qty') + # def onchange_(self): + # for val in self: + # rec = 0.0 + # if val.project_id.project_type == 'hours_in_consultant': + # print('555555555') + # rec = rec + rec.budgeted_qty + # print('66666666666666666', rec) + # print('777777777', rec) + # self.budgeted_hours = rec diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml index a6120e8..14ca10b 100755 --- a/cor_custom/views/project_view.xml +++ b/cor_custom/views/project_view.xml @@ -39,11 +39,11 @@ widget="radio"/> + -