From e6db96d923b24ec8d39cb27641e6b4c295a93b72 Mon Sep 17 00:00:00 2001 From: projectsodoo Date: Wed, 30 Dec 2020 22:18:44 +0530 Subject: [PATCH] Updated project expenses and profit, report --- cor_custom/models/project.py | 21 +++++++++++++++++++ cor_custom/views/project_view.xml | 11 +++++++++- .../report/project_budget_hrs_analysis.py | 4 ++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py index 2f92558..8d42ee8 100755 --- a/cor_custom/models/project.py +++ b/cor_custom/models/project.py @@ -40,9 +40,30 @@ class Project(models.Model): budgeted_hours = fields.Float(string='Total Budgeted Hours', digits=(16, 2)) budgeted_revenue = fields.Float(string='Budgeted Revenue', digits=(16, 2)) + expenses_per = fields.Float(string='Expenses (%)', digits=(16, 2)) + expenses_amt = fields.Float(string='Expenses Amount', digits=(16, 2)) cost = fields.Float("Sum of Cost", compute='onchange_compute_values', store=True) hourly_rate = fields.Float("Sum of Hourly rate", compute='onchange_compute_values', store=True) budgeted_hour_week = fields.Float("Budgeted Hours(per week)", compute='onchange_compute_values', store=True) + total_expenses = fields.Float(string='Total Expenses', digits=(16, 2), compute='_compute_calc', store=True) + profit_amt = fields.Float(string='Profit Amount', digits=(16, 2), compute='_compute_calc', store=True) + profit_per = fields.Float(string='Porfit Percentage', digits=(16, 2), compute='_compute_calc', store=True) + + @api.onchange('budgeted_revenue', 'expenses_per') + def onchange_expenses_per(self): + if self.budgeted_revenue > 0 and self.expenses_per > 0: + expense_amount = self.budgeted_revenue * (self.expenses_per / 100) + self.expenses_amt = expense_amount + + @api.depends('cost', 'expenses_amt', 'budgeted_revenue') + def _compute_calc(self): + for record in self: + total_exp = record.cost + record.expenses_amt + record.total_expenses = total_exp + profit_amt = record.budgeted_revenue - total_exp + record.profit_amt = profit_amt + if record.profit_amt > 0 and record.budgeted_revenue > 0: + record.profit_per = (record.profit_amt / record.budgeted_revenue) * 100 @api.depends('sale_line_employee_ids') def onchange_compute_values(self): diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml index 605c378..d7c8efb 100755 --- a/cor_custom/views/project_view.xml +++ b/cor_custom/views/project_view.xml @@ -41,6 +41,8 @@ widget="radio"/> + + @@ -87,11 +89,18 @@ - + + + + + + + + diff --git a/project_report/report/project_budget_hrs_analysis.py b/project_report/report/project_budget_hrs_analysis.py index 206b1b7..b0205d2 100755 --- a/project_report/report/project_budget_hrs_analysis.py +++ b/project_report/report/project_budget_hrs_analysis.py @@ -26,7 +26,7 @@ class BudgetHrsAnalysis(models.Model): SELECT row_number() OVER() AS id, PRO.id AS project_id, PRO.partner_id AS partner_id, - AAL.employee_id AS employee_id, + Pro_emp.employee_id AS employee_id, CASE WHEN Pro_emp.id is null THEN Pro.budgeted_hours ELSE Pro_emp.budgeted_qty @@ -38,7 +38,7 @@ class BudgetHrsAnalysis(models.Model): LEFT JOIN account_analytic_line AAL ON AAL.account_id = AA.id and AAL.project_id = Pro.id and AAL.employee_id = Pro_emp.employee_id Where PRO.active = 't' and PRO.pricing_type!='fixed_rate' - group by Pro.id, Pro_emp.id, PRO.partner_id, AAL.employee_id, AAL.unit_amount + group by Pro.id, Pro_emp.id, PRO.partner_id, Pro_emp.employee_id, AAL.unit_amount )""" % (self._table,))