diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py index 9e9eb42..3b85e57 100755 --- a/cor_custom/models/project.py +++ b/cor_custom/models/project.py @@ -317,6 +317,28 @@ class InheritProjectProductEmployeeMap(models.Model): role = fields.Selection([('Manager', 'Manager'), ('Employee', 'Employee'), ], string="Role", default="Employee") distribution_per = fields.Float("%") + start_date = fields.Date(string="Start Date") + end_date = fields.Date(string="End Date") + + _sql_constraints = [ + ('uniqueness_employee', 'CHECK(1=1)', 'An employee cannot be selected more than once in the mapping. Please remove duplicate(s) and try again.'), + ] + + @api.constrains('start_date', 'end_date') + def _check_dates(self): + for val in self: + if val.end_date < val.start_date: + raise ValidationError(_('Start date must be earlier than end date.')) + domain = [ + ('start_date', '<=', val.end_date), + ('end_date', '>=', val.start_date), + ('project_id', '=', val.project_id.id), + ('employee_id', '=', val.employee_id.id), + ('id', '!=', val.id) + ] + res = self.search_count(domain) + if res > 0: + raise ValidationError(_('Same Consultant can not have 2 same date that overlaps on same day!')) @api.onchange('employee_id') def onchange_employee_price(self): @@ -327,10 +349,22 @@ class InheritProjectProductEmployeeMap(models.Model): 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, }) + date_clause = "" + query_params = [val.project_id._origin.id, val.employee_id.id] + if val.start_date: + date_clause += "and start_datetime >= %s" + query_params.append(val.start_date) + if val.end_date: + date_clause += " and end_datetime <= %s" + query_params.append(val.end_date) + query = """SELECT project_id, employee_id, SUM(unit_amount) FROM account_analytic_line + where project_id = %s and employee_id = %s {date_clause} + GROUP BY project_id, employee_id""".format(date_clause=date_clause) + self.env.cr.execute(query, query_params) + #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, }) res = self._cr.fetchone() if res and res[2]: val.timesheet_hour = res[2] diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml index 879ad51..2cd64ce 100755 --- a/cor_custom/views/project_view.xml +++ b/cor_custom/views/project_view.xml @@ -70,6 +70,8 @@ + +