diff --git a/cor_custom/models/project.py b/cor_custom/models/project.py
index f00fe0c..0a644f0 100755
--- a/cor_custom/models/project.py
+++ b/cor_custom/models/project.py
@@ -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
diff --git a/cor_custom/views/project_view.xml b/cor_custom/views/project_view.xml
index 49bb694..e88a31e 100755
--- a/cor_custom/views/project_view.xml
+++ b/cor_custom/views/project_view.xml
@@ -17,6 +17,8 @@