update percentage code
This commit is contained in:
parent
5466c81065
commit
53b424fbfd
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError, AccessError, ValidationError
|
||||
|
||||
|
||||
class Project(models.Model):
|
||||
|
@ -53,9 +54,30 @@ class Project(models.Model):
|
|||
budgeted_hour_week = fields.Float("Budgeted Hours(per week)", compute='onchange_compute_values', 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)
|
||||
hour_distribution = fields.Selection([
|
||||
('Manual', 'Manual'),
|
||||
('Percentage', 'Percentage'),
|
||||
], string="Hours Distribution", default="Manual")
|
||||
manager_per = fields.Float(string='Manager Percentage', digits=(16, 2))
|
||||
employee_per = fields.Float(string='Employee Percentage', digits=(16, 2), compute='compute_percentage_hours', store=True)
|
||||
|
||||
manager_hour = fields.Float(string='Manager Hour')
|
||||
employee_hour = fields.Float(string='Employee Hour')
|
||||
|
||||
@api.depends('manager_per', 'hour_distribution')
|
||||
def compute_percentage_hours(self):
|
||||
for record in self:
|
||||
if record.manager_per > 100:
|
||||
raise ValidationError(_("Percentage should be less than or equal to 100"))
|
||||
if record.manager_per > 0.0:
|
||||
record.employee_per = 100 - record.manager_per
|
||||
# if self.manager_per > 100:
|
||||
# raise ValidationError(_("Percentage should be less than or equal to 100"))
|
||||
|
||||
_sql_constraints = [
|
||||
('end_date_greater', 'check(end_date >= start_date)', 'Error ! Ending Date cannot be set before Beginning Date.')
|
||||
(
|
||||
'end_date_greater', 'check(end_date >= start_date)',
|
||||
'Error ! Ending Date cannot be set before Beginning Date.')
|
||||
]
|
||||
|
||||
@api.onchange('budgeted_revenue', 'expenses_per')
|
||||
|
@ -67,7 +89,7 @@ class Project(models.Model):
|
|||
@api.depends('cost', 'expenses_amt', 'budgeted_revenue')
|
||||
def _compute_calc(self):
|
||||
for record in self:
|
||||
total_exp = record.consultant_cost + record.expenses_amt
|
||||
total_exp = record.consultant_cost + record.expenses_amt
|
||||
record.total_expenses = total_exp
|
||||
profit_amt = record.budgeted_revenue - total_exp
|
||||
record.profit_amt = profit_amt
|
||||
|
@ -77,25 +99,26 @@ class Project(models.Model):
|
|||
@api.depends('sale_line_employee_ids', 'hourly_rate2', 'budgeted_hours')
|
||||
def onchange_compute_values(self):
|
||||
for record in self:
|
||||
hour = 0.0
|
||||
cost = 0.0
|
||||
consultant_cost = 0.0
|
||||
budgeted_hour_week = 0.0
|
||||
for rec in record.sale_line_employee_ids:
|
||||
hour = hour + rec.budgeted_qty
|
||||
consultant_cost = consultant_cost + rec.consultant_cost
|
||||
cost = cost + rec.cost
|
||||
budgeted_hour_week = budgeted_hour_week + rec.budgeted_hour_week
|
||||
if record.project_type == 'hours_in_consultant':
|
||||
hour = 0.0
|
||||
cost = 0.0
|
||||
consultant_cost = 0.0
|
||||
budgeted_hour_week = 0.0
|
||||
for rec in record.sale_line_employee_ids:
|
||||
hour = hour + rec.budgeted_qty
|
||||
cost = cost + rec.cost
|
||||
consultant_cost = consultant_cost + rec.consultant_cost
|
||||
budgeted_hour_week = budgeted_hour_week + rec.budgeted_hour_week
|
||||
record.budgeted_hours = hour
|
||||
record.cost = cost
|
||||
record.consultant_cost = consultant_cost
|
||||
if hour > 0.0:
|
||||
record.hourly_rate = (cost/hour)
|
||||
record.budgeted_hour_week = budgeted_hour_week
|
||||
record.budgeted_hours = hour
|
||||
else:
|
||||
record.cost = record.budgeted_hours * record.hourly_rate2
|
||||
record.consultant_cost = consultant_cost
|
||||
if hour > 0.0:
|
||||
record.hourly_rate = (cost / hour)
|
||||
record.budgeted_hour_week = budgeted_hour_week
|
||||
|
||||
|
||||
if record.project_type == 'hours_no_limit':
|
||||
record.consultant_cost = record.budgeted_hours * record.hourly_rate2
|
||||
# price_unit = 0.0
|
||||
# count = 0.0
|
||||
# for rec in record.sale_line_employee_ids:
|
||||
|
@ -107,7 +130,6 @@ class Project(models.Model):
|
|||
# record.hourly_rate = (price_unit * avg)/record.budgeted_hours
|
||||
|
||||
|
||||
|
||||
class InheritProjectProductEmployeeMap(models.Model):
|
||||
_inherit = 'project.sale.line.employee.map'
|
||||
|
||||
|
@ -117,13 +139,17 @@ class InheritProjectProductEmployeeMap(models.Model):
|
|||
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)
|
||||
budgeted_hour_week = fields.Float("Budgeted Hours per week", compute='_compute_budgeted_hour_week')
|
||||
price_unit = fields.Float("Hourly rate")
|
||||
price_unit = fields.Float("Hourly Rate")
|
||||
currency_id = fields.Many2one('res.currency', string="Currency", compute='_compute_price_unit', store=True,
|
||||
readonly=False)
|
||||
sale_line_id = fields.Many2one('sale.order.line', "Service", domain=[('is_service', '=', True)])
|
||||
cost = fields.Float("Cost", compute='_compute_total_cost')
|
||||
consultant_cost = fields.Float("Cost", compute='_compute_total_cost')
|
||||
total = fields.Float("Total")
|
||||
cost = fields.Float("Timesheet Cost", compute='_compute_total_cost', default=0.0, store=True)
|
||||
consultant_cost = fields.Float("Total", compute='_compute_total_cost')
|
||||
|
||||
hour_distribution = fields.Selection(related='project_id.hour_distribution')
|
||||
role = fields.Selection([('Manager', 'Manager'),
|
||||
('Employee', 'Employee'), ], string=" ", default="Employee")
|
||||
distribution_per = fields.Float("%")
|
||||
|
||||
def _compute_timesheet_hour(self):
|
||||
for val in self:
|
||||
|
@ -146,7 +172,16 @@ class InheritProjectProductEmployeeMap(models.Model):
|
|||
|
||||
def _compute_total_cost(self):
|
||||
for val in self:
|
||||
val.cost = val.budgeted_qty * val.price_unit
|
||||
if val.project_id.project_type == 'hours_in_consultant':
|
||||
if val.hour_distribution == 'Percentage':
|
||||
if val.role == 'Manager':
|
||||
val.cost = val.project_id.budgeted_revenue * (val.project_id.manager_per/100) * (val.distribution_per/100)
|
||||
else:
|
||||
val.cost = val.project_id.budgeted_revenue * (val.project_id.employee_per/100) * (val.distribution_per/100)
|
||||
val.budgeted_qty = val.cost/val.price_unit
|
||||
else:
|
||||
val.cost = 0.0
|
||||
#val.cost = val.budgeted_qty * val.price_unit
|
||||
val.consultant_cost = val.timesheet_hour * val.employee_price
|
||||
|
||||
@api.depends('sale_line_id', 'sale_line_id.price_unit', 'timesheet_product_id')
|
||||
|
@ -159,5 +194,5 @@ class InheritProjectProductEmployeeMap(models.Model):
|
|||
line.price_unit = line.timesheet_product_id.lst_price
|
||||
line.currency_id = line.timesheet_product_id.currency_id
|
||||
else:
|
||||
#line.price_unit = 0
|
||||
# line.price_unit = 0
|
||||
line.currency_id = False
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
</xpath>
|
||||
<xpath expr="//field[@name='partner_id']" position="replace">
|
||||
<field name="partner_id" string="Client" required="0"/>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -39,10 +41,12 @@
|
|||
widget="radio"/>
|
||||
<field name="project_type" attrs="{'invisible': [('pricing_type', '=', 'fixed_rate')]}"
|
||||
widget="radio"/>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
<field name="budgeted_revenue"
|
||||
attrs="{'invisible': [('pricing_type','=','fixed_rate')], 'required': [('pricing_type','!=','fixed_rate')]}"/>
|
||||
<field name="hour_distribution" widget="radio"
|
||||
attrs="{'invisible': [('project_type','!=','hours_in_consultant')]}"/>
|
||||
<field name="manager_per" attrs="{'invisible': [('hour_distribution','!=','Percentage')]}"/>
|
||||
<field name="employee_per" attrs="{'invisible': [('hour_distribution','!=','Percentage')]}"/>
|
||||
<field name="expenses_per" attrs="{'invisible': [('pricing_type','=','fixed_rate')]}"/>
|
||||
<field name="expenses_amt" attrs="{'invisible': [('pricing_type','=','fixed_rate')]}"/>
|
||||
<div class="o_td_label"
|
||||
|
@ -65,7 +69,12 @@
|
|||
<tree editable="top">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="project_id" invisible="1"/>
|
||||
<field name="hour_distribution" invisible="1"/>
|
||||
<field name="employee_id" options="{'no_create': True}" string="Consultant Name"/>
|
||||
<field name="role"
|
||||
attrs="{'invisible': [('hour_distribution','!=','Percentage')], 'required': [('hour_distribution','=','Percentage')]}"/>
|
||||
<field name="distribution_per"
|
||||
attrs="{'invisible': [('hour_distribution','!=','Percentage')], 'required': [('hour_distribution','=','Percentage')]}"/>
|
||||
<!--<field name="sale_line_id" options="{'no_create': True}"
|
||||
attrs="{'column_invisible': [('parent.sale_order_id', '=', False)]}"
|
||||
domain="[('order_id','=',parent.sale_order_id), ('is_service', '=', True)]"/>
|
||||
|
@ -99,7 +108,7 @@
|
|||
</group>
|
||||
<group>
|
||||
<field name="budgeted_hours"
|
||||
attrs="{'invisible': [('pricing_type','=','fixed_rate')], 'readonly': [('project_type','=','hours_in_consultant')],
|
||||
attrs="{'invisible': [('pricing_type','=','fixed_rate')], 'readonly': [('project_type','=','hours_in_consultant')],
|
||||
'required': [('pricing_type','!=','fixed_rate')]}"/>
|
||||
<field name="hourly_rate" attrs="{'invisible': [('project_type','=','hours_no_limit')]}"/>
|
||||
<field name="hourly_rate2" attrs="{'invisible': [('project_type','!=','hours_no_limit')],
|
||||
|
|
Loading…
Reference in New Issue