From f5895e070bd7506ac260036cc1e2b218c6dc1b20 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Mon, 31 Jan 2022 16:22:18 -0800 Subject: [PATCH] [IMP] hr_commission: extended ahead of timesheet based commission * Allow invoice to see commission it is deriving amount for. This allows for basing on amounts that may depend on the employee or contract config. * Prevent making commissions if the employee rate or admin rates are not set. * Updated views to work in both CE and EE --- hr_commission/models/account.py | 2 +- hr_commission/models/commission.py | 8 ++--- hr_commission/views/commission_views.xml | 40 ++++++++++-------------- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/hr_commission/models/account.py b/hr_commission/models/account.py index de04bee4..ed12acb8 100644 --- a/hr_commission/models/account.py +++ b/hr_commission/models/account.py @@ -36,7 +36,7 @@ class AccountMove(models.Model): self.env['hr.commission'].invoice_paid(self) return res - def amount_for_commission(self): + def amount_for_commission(self, commission=None): if hasattr(self, 'margin') and self.company_id.commission_amount_type == 'on_invoice_margin': sign = -1 if self.type in ['in_refund', 'out_refund'] else 1 return self.margin * sign diff --git a/hr_commission/models/commission.py b/hr_commission/models/commission.py index 3a491080..3defd162 100644 --- a/hr_commission/models/commission.py +++ b/hr_commission/models/commission.py @@ -71,14 +71,14 @@ class Commission(models.Model): elif commission.contract_id and commission.rate_type != 'manual': if commission.rate_type == 'normal': commission.rate = commission.contract_id.commission_rate - else: + elif commission.rate_type == 'admin': commission.rate = commission.contract_id.admin_commission_rate rounding = 2 if commission.source_move_id: rounding = commission.source_move_id.company_currency_id.rounding commission.base_total = commission.source_move_id.amount_total_signed - commission.base_amount = commission.source_move_id.amount_for_commission() + commission.base_amount = commission.source_move_id.amount_for_commission(commission) amount = (commission.base_amount * commission.rate) / 100.0 if float_is_zero(amount, precision_rounding=rounding): @@ -126,7 +126,7 @@ class Commission(models.Model): else: employee = employee_obj.search([('user_id', '=', move.user_id.id)], limit=1) contract = employee.contract_id - if all((employee, contract)): + if all((employee, contract, contract.commission_rate)): move.commission_ids += commission_obj.create({ 'employee_id': employee.id, 'contract_id': contract.id, @@ -139,7 +139,7 @@ class Commission(models.Model): # Admin/Coach commission. employee = employee.coach_id contract = employee.contract_id - if all((employee, contract)): + if all((employee, contract, contract.admin_commission_rate)): move.commission_ids += commission_obj.create({ 'employee_id': employee.id, 'contract_id': contract.id, diff --git a/hr_commission/views/commission_views.xml b/hr_commission/views/commission_views.xml index 887cbbe8..b46d3772 100644 --- a/hr_commission/views/commission_views.xml +++ b/hr_commission/views/commission_views.xml @@ -54,7 +54,7 @@ - + @@ -120,28 +120,14 @@ action="action_hr_commission" id="menu_action_account_commission_root" parent="account.menu_finance_receivables" - sequence="5" + sequence="120" /> - - - - @@ -228,13 +214,6 @@ action = records.action_mark_paid() sequence="10" /> - - hr.commission.structure.form @@ -261,4 +240,17 @@ action = records.action_mark_paid() + + Commission Structures + hr.commission.structure + tree,form + + + +