diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py index caa4e0f..8c1729f 100755 --- a/cor_custom/models/project.py +++ b/cor_custom/models/project.py @@ -41,7 +41,7 @@ class Project(models.Model): start_date = fields.Date(string='Start Date') end_date = fields.Date(string='End Date') - budgeted_hours = fields.Float(string='Total Budgeted Hours', digits=(16, 2)) + budgeted_hours = fields.Float(string='Total Budgeted Hours') budgeted_revenue = fields.Float(string='Budgeted Revenue', digits=(16, 2)) expenses_per = fields.Float(string='Expenses (%)', digits=(16, 2)) expenses_amt = fields.Float(string='Expenses Amount', digits=(16, 2)) @@ -49,7 +49,7 @@ class Project(models.Model): consultant_cost = fields.Float("Actual Cost", compute='_compute_consultant_timesheet_hours') other_expenses = fields.Float(string='Other Expenses', related='expenses_amt') total_expenses = fields.Float(string='Total Expenses', digits=(16, 2), compute='_compute_calc', store=True) - hourly_rate = fields.Float("Hourly Rate", default=0.0, readonly=1) + hourly_rate = fields.Float("Hourly Rate", default=0.0) hourly_rate2 = fields.Float("Hourly Ratee") budgeted_hour_week = fields.Float("Budgeted Hours(per week)", compute='onchange_compute_values', store=True) profit_amt = fields.Float(string='Profit Amount', digits=(16, 2), compute='_compute_calc', store=True) @@ -97,6 +97,20 @@ class Project(models.Model): expense_amount = self.budgeted_revenue * (self.expenses_per / 100) self.expenses_amt = expense_amount + @api.onchange('budgeted_revenue', 'sale_line_employee_ids') + def onchange_budgeted_hour(self): + self.sale_line_employee_ids._compute_total_cost() + hour = 0.0 + for rec in self.sale_line_employee_ids: + hour = hour + rec.budgeted_qty + print('TTTTTTTTTTTTTTT', hour, rec.budgeted_qty) + print('SSSSSSSSS', hour) + self.budgeted_hours = hour + print('TTTTTTTTTTTTTTT', hour) + print('UUUUUUUUUUU', self.budgeted_hours) + if self.budgeted_hours > 0.0: + self.hourly_rate = (self.budgeted_revenue / self.budgeted_hours) + @api.depends('cost', 'expenses_amt', 'budgeted_revenue') def _compute_calc(self): for record in self: @@ -107,30 +121,30 @@ class Project(models.Model): if record.profit_amt > 0 and record.budgeted_revenue > 0: record.profit_per = (record.profit_amt / record.budgeted_revenue) * 100 - @api.depends('sale_line_employee_ids', 'budgeted_hours') + @api.depends('sale_line_employee_ids') def onchange_compute_values(self): for record in self: - hour = 0.0 + # hour = 0.0 cost = 0.0 budgeted_hour_week = 0.0 for rec in record.sale_line_employee_ids: - hour = hour + rec.budgeted_qty + # hour = hour + rec.budgeted_qty cost = cost + rec.cost budgeted_hour_week = budgeted_hour_week + rec.budgeted_hour_week if record.project_type == 'hours_in_consultant': record.cost = cost - record.budgeted_hours = hour - #if hour > 0.0: - #record.hourly_rate = (cost / hour) - else: - record.cost = record.budgeted_hours * record.hourly_rate + # record.budgeted_hours = hour + # if hour > 0.0: + # record.hourly_rate = (cost / hour) + # else: + # record.cost = record.budgeted_hours * record.hourly_rate record.budgeted_hour_week = budgeted_hour_week class InheritProjectProductEmployeeMap(models.Model): _inherit = 'project.sale.line.employee.map' - budgeted_qty = fields.Float(string='Budgeted Hours', store=True) + budgeted_qty = fields.Float(string='Budgeted Hours') 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) timesheet_hour = fields.Float("Timesheet Hour", compute='_compute_timesheet_hour', default=0.0) @@ -140,15 +154,14 @@ class InheritProjectProductEmployeeMap(models.Model): currency_id = fields.Many2one('res.currency', string="Currency", compute='_compute_price_unit', store=True, readonly=False) sale_line_id = fields.Many2one('sale.order.line', "Service", domain=[('is_service', '=', True)]) - cost = fields.Float("Cost", compute='_compute_total_cost', default=0.0, store=True) - consultant_cost = fields.Float("Actual Cost", compute='_compute_total_cost') + cost = fields.Float("Cost", default=0.0, store=True) + consultant_cost = fields.Float("Actual Cost") hour_distribution = fields.Selection(related='project_id.hour_distribution') role = fields.Selection([('Manager', 'Manager'), ('Employee', 'Employee'), ], string="Role", default="Employee") distribution_per = fields.Float("%") - def _compute_timesheet_hour(self): for val in self: self._cr.execute('''SELECT project_id, employee_id, SUM(unit_amount) FROM account_analytic_line @@ -160,8 +173,8 @@ class InheritProjectProductEmployeeMap(models.Model): val.timesheet_hour = res[2] else: val.timesheet_hour = 0.0 - #Run another method - #val.project_id.onchange_compute_values() + # Run another method + # val.project_id.onchange_compute_values() def _compute_budgeted_hour_week(self): for val in self: @@ -170,20 +183,24 @@ class InheritProjectProductEmployeeMap(models.Model): else: val.budgeted_hour_week = 0 + @api.onchange('project_id.budgeted_revenue', 'price_unit', 'distribution_per', 'employee_id', 'role') def _compute_total_cost(self): for val in self: if val.project_id.project_type == 'hours_in_consultant': if val.hour_distribution == 'Percentage': if val.role == 'Manager': - val.cost = val.project_id.budgeted_revenue * (val.project_id.manager_per/100) * (val.distribution_per/100) + val.cost = val.project_id.budgeted_revenue * (val.project_id.manager_per / 100) * ( + val.distribution_per / 100) else: - val.cost = val.project_id.budgeted_revenue * (val.project_id.employee_per/100) * (val.distribution_per/100) + val.cost = val.project_id.budgeted_revenue * (val.project_id.employee_per / 100) * ( + val.distribution_per / 100) if val.price_unit > 0.0: - val.budgeted_qty = val.cost/val.price_unit + val.budgeted_qty = val.cost / val.price_unit else: val.cost = 0.0 - #val.cost = val.budgeted_qty * val.price_unit + # val.cost = val.budgeted_qty * val.price_unit val.consultant_cost = val.timesheet_hour * val.employee_price + #self.project_id.onchange_budgeted_hour() @api.depends('sale_line_id', 'sale_line_id.price_unit', 'timesheet_product_id') def _compute_price_unit(self): diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml index 865408f..bdbf97d 100755 --- a/cor_custom/views/project_view.xml +++ b/cor_custom/views/project_view.xml @@ -107,10 +107,8 @@ - - + +