From 04b319e372894de242181870736638f50fedfc7a Mon Sep 17 00:00:00 2001 From: Pawan Kumar Date: Mon, 25 Jan 2021 15:37:39 +0530 Subject: [PATCH 1/4] make employee price editable --- cor_custom/models/project.py | 36 ++++++++++++++++++++----------- cor_custom/views/project_view.xml | 2 +- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py index af6d059..378cdfb 100755 --- a/cor_custom/models/project.py +++ b/cor_custom/models/project.py @@ -92,7 +92,6 @@ class Project(models.Model): self.sale_line_employee_ids.create({'project_id': self._origin.id, 'employee_id': employee})""" - def _onchange_calculate_timesheet_hours(self): self.consultant_timesheet_hrs = [(6, 0, False)] if self._origin.id: @@ -104,8 +103,8 @@ class Project(models.Model): if res: for rec in res: self.consultant_timesheet_hrs.create({'project_id': rec[0], - 'employee_id': rec[1], - 'timesheet_hour': rec[2]}) + 'employee_id': rec[1], + 'timesheet_hour': rec[2]}) @api.depends('cost', 'expenses_amt', 'budgeted_revenue') def _compute_calc(self): @@ -134,7 +133,6 @@ class Project(models.Model): if record.project_type == 'hours_no_limit' and record.budgeted_hours2 > 0.0: record.hourly_rate = (record.budgeted_revenue / record.budgeted_hours2) - @api.depends('manager_per', 'hour_distribution') def compute_percentage_hours(self): for record in self: @@ -145,7 +143,6 @@ class Project(models.Model): # if self.manager_per > 100: # raise ValidationError(_("Percentage should be less than or equal to 100")) - @api.onchange('budgeted_revenue', 'expenses_per') def onchange_expenses_per(self): if self.budgeted_revenue > 0 and self.expenses_per > 0: @@ -197,16 +194,23 @@ class ProjectConsultantTimesheetHrs(models.Model): project_id = fields.Many2one('project.project', "Project") employee_id = fields.Many2one('hr.employee') - employee_price = fields.Float(string="Consultant Price", compute='_compute_consultant_timesheet_cost', default=0.0) + employee_price = fields.Float(string="Consultant Price", default=0.0) timesheet_hour = fields.Float("Timesheet Hour", default=0.0) consultant_cost = fields.Float("Actual Cost", compute='_compute_consultant_timesheet_cost', default=0.0) + @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 + def _compute_consultant_timesheet_cost(self): for val in self: - if val.employee_id.timesheet_cost: - val.employee_price = val.employee_id.timesheet_cost - else: - val.employee_price = 0.0 + # if val.employee_id.timesheet_cost: + # val.employee_price = val.employee_id.timesheet_cost + # else: + # val.employee_price = 0.0 if val.timesheet_hour and val.employee_id.timesheet_cost: val.consultant_cost = val.timesheet_hour * val.employee_id.timesheet_cost else: @@ -220,7 +224,7 @@ class InheritProjectProductEmployeeMap(models.Model): budgeted_uom = fields.Many2one('uom.uom', string='Budgeted UOM', related='sale_line_id.product_uom', readonly=True) # budgeted_uom = fields.Many2one('uom.uom', string='Budgeted UOM', related='timesheet_product_id.uom_id', readonly=True) timesheet_hour = fields.Float("Timesheet Hour", compute='_compute_timesheet_hour', default=0.0) - employee_price = fields.Monetary(string="Consultant Price", related="employee_id.timesheet_cost", readonly=True) + employee_price = fields.Monetary(string="Consultant Price") budgeted_hour_week = fields.Float("Budgeted Hours per week", compute='_compute_budgeted_hour_week') price_unit = fields.Float("Hourly Rate") currency_id = fields.Many2one('res.currency', string="Currency", compute='_compute_price_unit', store=True, @@ -235,6 +239,13 @@ class InheritProjectProductEmployeeMap(models.Model): ('Employee', 'Employee'), ], string="Role", default="Employee") 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 + def _compute_timesheet_hour(self): for val in self: self._cr.execute('''SELECT project_id, employee_id, SUM(unit_amount) FROM account_analytic_line @@ -292,6 +303,7 @@ class InheritProjectProductEmployeeMap(models.Model): # line.price_unit = 0 line.currency_id = False + class CustomProjectTags(models.Model): """ Tags of project's tasks """ _name = "custom.project.tags" @@ -301,4 +313,4 @@ class CustomProjectTags(models.Model): _sql_constraints = [ ('name_uniq', 'unique (name)', "Tag name already exists!"), - ] \ No newline at end of file + ] diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml index 96850c2..6bfa483 100755 --- a/cor_custom/views/project_view.xml +++ b/cor_custom/views/project_view.xml @@ -125,8 +125,8 @@ attrs="{'column_invisible': [('parent.sale_order_id', '=', False)]}"/>--> + - From 6b89e32bb138d865acc9bec60e4ca57c602d94c1 Mon Sep 17 00:00:00 2001 From: Pawan Kumar Date: Wed, 27 Jan 2021 11:25:43 +0530 Subject: [PATCH 2/4] remove conflict --- project_report/rng/graph_view.rng | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 project_report/rng/graph_view.rng diff --git a/project_report/rng/graph_view.rng b/project_report/rng/graph_view.rng old mode 100644 new mode 100755 From 2405293663272ade168fd80a97a2bfd7dbbde105 Mon Sep 17 00:00:00 2001 From: Pawan Kumar Date: Wed, 27 Jan 2021 11:34:33 +0530 Subject: [PATCH 3/4] add parent project in timesheet --- cor_custom/models/analytic.py | 1 + cor_custom/views/analytic_view.xml | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/cor_custom/models/analytic.py b/cor_custom/models/analytic.py index d263d23..744bbfa 100755 --- a/cor_custom/models/analytic.py +++ b/cor_custom/models/analytic.py @@ -16,6 +16,7 @@ class AccountAnalyticLine(models.Model): start_time = fields.Float(string='Start Time', digits=(16, 2)) end_time = fields.Float(string='End Time', digits=(16, 2)) unit_amount = fields.Float('Duration', default=0.0) + parent_project = fields.Many2one('project.project', string='Parent Project', related='project_id.parent_project', readonly=True) @api.onchange('employee_id') def _onchange_employee_id(self): diff --git a/cor_custom/views/analytic_view.xml b/cor_custom/views/analytic_view.xml index 2961d11..101f44e 100755 --- a/cor_custom/views/analytic_view.xml +++ b/cor_custom/views/analytic_view.xml @@ -24,6 +24,9 @@ + @@ -47,6 +50,9 @@ + + + From 76059a1af35f4d4d8be331eecd89d28f51ef66d4 Mon Sep 17 00:00:00 2001 From: Pawan Kumar Date: Wed, 27 Jan 2021 12:24:46 +0530 Subject: [PATCH 4/4] add total timesheet hours --- cor_custom/models/project.py | 5 +++++ cor_custom/views/project_view.xml | 1 + 2 files changed, 6 insertions(+) diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py index 378cdfb..0857af9 100755 --- a/cor_custom/models/project.py +++ b/cor_custom/models/project.py @@ -41,6 +41,7 @@ class Project(models.Model): date_start = fields.Date(string='Start Date') date = fields.Date(string='End Date', index=True, tracking=True) + timesheet_hour = fields.Float(string='Total Timesheet Hours', compute='_compute_calc', store=True) budgeted_hours = fields.Float(string='Total Budgeted Hours', compute='_compute_calc') budgeted_hours2 = fields.Float(string='Total Budgeted Hours') budgeted_revenue = fields.Float(string='Budgeted Revenue', digits=(16, 2)) @@ -112,16 +113,20 @@ class Project(models.Model): consultant_cost = 0.0 actual_revenue = 0.0 hour = 0.0 + timesheet_hour = 0.0 for rec in record.sale_line_employee_ids: consultant_cost = consultant_cost + rec.consultant_cost actual_revenue = actual_revenue + rec.actual_revenue hour = hour + rec.budgeted_qty + timesheet_hour = timesheet_hour + rec.timesheet_hour if record.pricing_type == 'fixed_rate': for rec in record.consultant_timesheet_hrs: consultant_cost = consultant_cost + rec.consultant_cost + timesheet_hour = timesheet_hour + rec.timesheet_hour record.consultant_cost = consultant_cost record.actual_revenue = actual_revenue record.budgeted_hours = hour + record.timesheet_hour = timesheet_hour total_exp = record.consultant_cost + record.expenses_amt record.total_expenses = total_exp profit_amt = record.budgeted_revenue - total_exp diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml index 6bfa483..8fb2358 100755 --- a/cor_custom/views/project_view.xml +++ b/cor_custom/views/project_view.xml @@ -157,6 +157,7 @@ attrs="{'invisible': [('project_type','!=','hours_in_consultant')]}"/> +