update percentage code

This commit is contained in:
Pawan Kumar 2021-01-06 17:14:17 +05:30
parent 5466c81065
commit 53b424fbfd
2 changed files with 72 additions and 28 deletions

View File

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

View File

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