diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py
index 7809738..4c270d6 100755
--- a/cor_custom/models/project.py
+++ b/cor_custom/models/project.py
@@ -329,18 +329,19 @@ class InheritProjectProductEmployeeMap(models.Model):
@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!'))
+ if val.end_date and val.start_date:
+ 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):
diff --git a/cor_custom/wizard/project_resource_wizard.py b/cor_custom/wizard/project_resource_wizard.py
index 3530362..337d6fc 100755
--- a/cor_custom/wizard/project_resource_wizard.py
+++ b/cor_custom/wizard/project_resource_wizard.py
@@ -7,21 +7,44 @@ from dateutil import relativedelta
class ProjectResourceWizard(models.TransientModel):
_name = 'project.resource.wizard'
+ @api.model
+ def default_get(self, fields):
+ res = super(ProjectResourceWizard, self).default_get(fields)
+ res_id = self._context.get('active_id')
+ record = self.env['project.project'].browse(res_id)
+ lines = []
+ emp_id = []
+ for rec in record.sale_line_employee_ids:
+ resource_rec = {}
+ if rec.employee_id and rec.employee_id.id not in emp_id:
+ emp_id.append(rec.employee_id.id)
+ resource_rec.update({'employee_id':rec.employee_id.id, 'project_id': res_id})
+ lines.append((0, 0, resource_rec))
+ res.update({'add_project_resource': lines})
+ return res
+
project_id = fields.Many2one('project.project')
add_project_resource = fields.One2many('project.resource.line', 'wizard_id')
def action_add_project_lines(self):
- print('11111111111', self.project_id, self.project_id.sale_line_employee_ids)
- for record in self.add_project_resource:
+ record = self.env['project.sale.line.employee.map']
+ for val in self.add_project_resource:
values = {
- 'project_id':record.project_id.id,
- 'employee_id': record.employee_id.id,
- 'start_date':record.start_date,
- 'end_date':record.end_date,
+ 'project_id': self.project_id.id,
+ 'employee_id': val.employee_id.id,
+ 'role': val.role,
+ 'start_date': val.start_date,
+ 'end_date': val.end_date,
+ 'price_unit': val.price_unit,
+ 'budgeted_qty': val.budgeted_qty,
+ 'cost': val.cost,
+ 'employee_price': val.employee_price,
}
- res = self.project_id.sale_line_employee_ids.create(values)
- return res
+ if self.project_id.hour_distribution == 'Percentage':
+ values.update({'distribution_per': val.distribution_per})
+ record.create(values)
+ return True
class ProjectResourceLine(models.Model):
_name = "project.resource.line"
@@ -30,5 +53,32 @@ class ProjectResourceLine(models.Model):
wizard_id = fields.Integer()
project_id = fields.Many2one('project.project')
employee_id = fields.Many2one('hr.employee')
+ role = fields.Selection([('Manager', 'Manager'),('Employee', 'Employee'), ], string="Role", default="Employee")
start_date = fields.Date(required=True)
end_date = fields.Date(required=True)
+ price_unit = fields.Float("Hourly Rate")
+ budgeted_qty = fields.Float(string='Bud. Hours', digits=(16, 2))
+ cost = fields.Float("Bud. Revenue", default=0.0)
+ employee_price = fields.Float(string="Cons. Price")
+ hour_distribution = fields.Selection(related='project_id.hour_distribution')
+ distribution_per = fields.Float("%")
+
+ @api.onchange('employee_id')
+ def onchange_employee_price(self):
+ if self.employee_id:
+ self.employee_price = self.employee_id.timesheet_cost
+ else:
+ self.employee_price = 0.0
+
+ @api.onchange('price_unit', 'budgeted_qty')
+ def _calculate_total_cost(self):
+ #if self.env.context.get('active_model') == 'project.project' and self.env.context.get('active_id'):
+ #pro = self.env['project.project'].browse(self.env.context.get('active_id'))
+ if self.project_id.project_type == 'hours_in_consultant':
+ if self.hour_distribution == 'Manual':
+ self.cost = self.price_unit * self.budgeted_qty
+
+ @api.onchange('start_date')
+ def onchange_start_date(self):
+ if self.start_date:
+ self.end_date = self.start_date + relativedelta.relativedelta(months=1) - relativedelta.relativedelta(days=1)
diff --git a/cor_custom/wizard/project_resource_wizard.xml b/cor_custom/wizard/project_resource_wizard.xml
index e3e7de0..b7243cc 100755
--- a/cor_custom/wizard/project_resource_wizard.xml
+++ b/cor_custom/wizard/project_resource_wizard.xml
@@ -8,12 +8,19 @@
-
+
-
+
+
+
+
+
+
+
+
@@ -30,6 +37,6 @@
project.resource.wizard
new
- { 'default_project_id': active_id, 'project_id': active_id }
+ { 'default_project_id':active_id, 'project_id': active_id}
\ No newline at end of file