Updated Resource allocation wizard to add value and onchange calc
This commit is contained in:
parent
200e70edd1
commit
163bec94a1
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -8,12 +8,19 @@
|
|||
<group>
|
||||
<field name="project_id" readonly="1"/>
|
||||
</group>
|
||||
<field name="add_project_resource">
|
||||
<field name="add_project_resource" context="{'default_project_id': active_id}">
|
||||
<tree editable="bottom">
|
||||
<field name="project_id"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="role"/>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
<field name="distribution_per" attrs="{'invisible': [('hour_distribution','!=','Percentage')], 'required': [('hour_distribution','=','Percentage')]}"/>
|
||||
<field name="price_unit"/>
|
||||
<field name="budgeted_qty"/>
|
||||
<field name="cost"/>
|
||||
<field name="employee_price"/>
|
||||
<field name="project_id" invisible="1"/>
|
||||
<field name="hour_distribution" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</group>
|
||||
|
@ -30,6 +37,6 @@
|
|||
<field name="res_model">project.resource.wizard</field>
|
||||
<field name="view_id" ref="cor_custom.view_edit_project_resource_lines"/>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{ 'default_project_id': active_id, 'project_id': active_id }</field>
|
||||
<field name="context">{ 'default_project_id':active_id, 'project_id': active_id}</field>
|
||||
</record>
|
||||
</odoo>
|
Loading…
Reference in New Issue