Updated project expenses and profit, report
This commit is contained in:
parent
43b543e059
commit
e6db96d923
|
@ -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):
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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,))
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue