diff --git a/cor_custom/models/project_hours.py b/cor_custom/models/project_hours.py index 9464a02..59aeb73 100755 --- a/cor_custom/models/project_hours.py +++ b/cor_custom/models/project_hours.py @@ -15,7 +15,7 @@ class ProjectConsultantHrs(models.Model): _order = 'employee_id, end_date desc' project_id = fields.Many2one('project.project', string="Project", required=True) - employee_id = fields.Many2one('hr.employee', string="Consultant", required=True) + employee_id = fields.Many2one('hr.employee', string="Consultant", required=False) start_date = fields.Date('Start Date', required=True) end_date = fields.Date('End Date', required=True) percentage = fields.Float("Budgeted Percentage (%)") @@ -33,6 +33,13 @@ class ProjectConsultantHrs(models.Model): @api.constrains('employee_id', 'percentage') def _check_percent(self): for val in self: + if not val.employee_id and val.percentage: + rec2 = val.search([('employee_id','=',False),('project_id','=',val.project_id.id)]) + #print("rec2", rec2) + per2 = [r2.percentage for r2 in rec2] + #print("perccccccc22222222", per2) + if sum(per2) > 100: + raise ValidationError(_('Non Consultant total percentage should not be greater than 100')) if val.employee_id and val.percentage: rec = val.search([('employee_id','=',val.employee_id.id),('project_id','=',val.project_id.id)]) per = [r.percentage for r in rec] diff --git a/cor_custom/wizard/project_multi_budget_assign.py b/cor_custom/wizard/project_multi_budget_assign.py index fd488e0..0a0dcc7 100755 --- a/cor_custom/wizard/project_multi_budget_assign.py +++ b/cor_custom/wizard/project_multi_budget_assign.py @@ -21,7 +21,8 @@ class ProjectMultiBudgetAssign(models.TransientModel): record = self.env['project.project'].browse(res_id) lines = [] emp_id = [] - for rec in record.sale_line_employee_ids: + non_emp_id = 0 + for i, rec in enumerate(record.sale_line_employee_ids): cons = {} all_cons = self.env['project.consultant.hrs'].search([('employee_id','=',rec.employee_id.id),('project_id','=',rec.project_id.id)]) all_per = [v.percentage for v in all_cons] @@ -29,6 +30,13 @@ class ProjectMultiBudgetAssign(models.TransientModel): emp_id.append(rec.employee_id.id) cons.update({'employee_id': rec.employee_id.id, 'emp_map_id':rec.id, 'project_id':res_id}) lines.append((0, 0, cons)) + non_cons = self.env['project.consultant.hrs'].search([('employee_id','=',False),('project_id', '=', rec.project_id.id)]) + non_cons_per = [non_con.percentage for non_con in non_cons] + if sum(non_cons_per) < 100 and non_emp_id == 0: + non_emp_id += 1 + non_cons_data = {} + non_cons_data.update({'employee_id': False, 'emp_map_id':False, 'project_id': res_id}) + lines.append((0, 0, non_cons_data)) if record and (not record.pricing_type == 'employee_rate' or not record.project_type == 'hours_in_consultant'): raise ValidationError(_('Not applicable for this project type ')) if not lines: @@ -77,8 +85,8 @@ class ProjectMultiBudgetAssignLine(models.TransientModel): line_id = fields.Many2one('project.multi.budget.assign', string="Line ID", required=True) project_id = fields.Many2one('project.project', string="Project", required=True) - emp_map_id = fields.Many2one('project.sale.line.employee.map', string="Consultant Map", required=True) - employee_id = fields.Many2one('hr.employee', string="Consultant", required=True) + emp_map_id = fields.Many2one('project.sale.line.employee.map', string="Consultant Map", required=False) + employee_id = fields.Many2one('hr.employee', string="Consultant", required=False) budgeted_qty = fields.Float(string='Budgeted Hours', related="emp_map_id.budgeted_qty") all_percentage = fields.Float("Total Allocated %", compute='_compute_allocation') rem_percentage = fields.Float("Total Unallocated %", compute='_compute_allocation') @@ -105,6 +113,14 @@ class ProjectMultiBudgetAssignLine(models.TransientModel): val.all_percentage = all_per val.rem_percentage = 100 - all_per val.remaining = 100 - all_per + elif val.project_id and not val.employee_id: + non_cons = self.env['project.consultant.hrs'].search([('employee_id','=',False),('project_id','=',val.project_id.id)]) + non_all_per = 0 + for res2 in non_cons: + non_all_per += res2.percentage + val.all_percentage = non_all_per + val.rem_percentage = 100 - non_all_per + val.remaining = 100 - non_all_per else: val.all_percentage = 0 val.rem_percentage = 0