Updated Resource allocation wizard to add value and onchange calc

This commit is contained in:
root 2022-08-18 18:39:44 +05:30
parent 200e70edd1
commit 163bec94a1
3 changed files with 81 additions and 23 deletions

View File

@ -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):

View File

@ -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)

View File

@ -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>