Updated project expenses and profit, report

This commit is contained in:
projectsodoo 2020-12-30 22:18:44 +05:30
parent 43b543e059
commit e6db96d923
3 changed files with 33 additions and 3 deletions

View File

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

View File

@ -41,6 +41,8 @@
widget="radio"/>
<field name="budgeted_revenue"
attrs="{'invisible': [('pricing_type','=','fixed_rate')], 'required': [('pricing_type','!=','fixed_rate')]}"/>
<field name="expenses_per" attrs="{'invisible': [('pricing_type','=','fixed_rate')]}"/>
<field name="expenses_amt" attrs="{'invisible': [('pricing_type','=','fixed_rate')]}"/>
<field name="budgeted_hours"
attrs="{'invisible': [('pricing_type','=','fixed_rate')], 'readonly': [('project_type','=','hours_in_consultant')],
'required': [('pricing_type','!=','fixed_rate')]}"/>
@ -87,11 +89,18 @@
<!--<field name="employee_price" widget="monetary" options="{'currency_field': 'currency_id'}"/>-->
</tree>
</field>
<group col="4" colspan="4">
<group attrs="{'invisible': [('pricing_type','=','fixed_rate')]}">
<group>
<field name="total_expenses"/>
<field name="profit_amt"/>
<field name="profit_per"/>
</group>
<group>
<field name="cost"/>
<field name="hourly_rate"/>
<field name="budgeted_hour_week"/>
</group>
</group>
</page>
</xpath>

View File

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