Merge branch 'fix/15.0/hr_payroll_commission__employee_onchange_depr' into '15.0'

fix/15.0/hr_payroll_commission__employee_onchange_depr into 15.0

See merge request hibou-io/hibou-odoo/suite!1204
This commit is contained in:
Jared Kipe
2021-12-02 21:05:20 +00:00
2 changed files with 49 additions and 26 deletions

View File

@@ -1,6 +1,6 @@
# Part of Hibou Suite Professional. See LICENSE_PROFESSIONAL file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo import api, Command, fields, models, _
class HrPayslip(models.Model):
@@ -23,34 +23,41 @@ class HrPayslip(models.Model):
if not self.input_line_ids.filtered(lambda line: line.input_type_id == commission_type):
self.commission_payment_ids.write({'payslip_id': False})
@api.onchange('employee_id', 'struct_id', 'contract_id', 'date_from', 'date_to')
def _onchange_employee(self):
res = super()._onchange_employee()
if self.state == 'draft':
self.commission_payment_ids = self.env['hr.commission.payment'].search([
('employee_id', '=', self.employee_id.id),
('pay_in_payslip', '=', True),
('payslip_id', '=', False)])
self._onchange_commission_payment_ids()
def action_refresh_from_work_entries(self):
res = super().action_refresh_from_work_entries()
for slip in self.filtered(lambda s: s.state in ('draft', 'verify')):
commission_payments = self.env['hr.commission.payment'].browse()
if slip.employee_id:
commission_payments = self.env['hr.commission.payment'].search([
('employee_id', '=', self.employee_id.id),
('pay_in_payslip', '=', True),
('payslip_id', '=', False)])
slip.commission_payment_ids = commission_payments
return res
@api.onchange('commission_payment_ids')
def _onchange_commission_payment_ids(self):
@api.depends('employee_id', 'contract_id', 'struct_id', 'date_from', 'date_to', 'struct_id', 'commission_payment_ids')
def _compute_input_line_ids(self):
res = super()._compute_input_line_ids()
commission_type = self.env.ref('hr_payroll_commission.commission_other_input', raise_if_not_found=False)
if not commission_type:
return
return res
total = sum(self.commission_payment_ids.mapped('commission_amount'))
if not total:
return
lines_to_keep = self.input_line_ids.filtered(lambda x: x.input_type_id != commission_type)
input_lines_vals = [(5, 0, 0)] + [(4, line.id, False) for line in lines_to_keep]
input_lines_vals.append((0, 0, {
'amount': total,
'input_type_id': commission_type.id,
}))
self.update({'input_line_ids': input_lines_vals})
for slip in self:
amount = sum(self.commission_payment_ids.mapped('commission_amount'))
if not amount:
continue
slip.update({
'input_line_ids': [
Command.create({
'name': commission_type.name or 'Commission',
'amount': amount,
'input_type_id': commission_type.id,
}),
],
})
return res
def open_commissions(self):
self.ensure_one()

View File

@@ -7,6 +7,22 @@ from odoo.addons.hr_commission.tests import test_commission
class TestCommissionPayslip(test_commission.TestCommission):
def _createContract(self, employee, commission_rate, admin_commission_rate=0.0):
return self.env['hr.contract'].create({
'date_start': '2016-01-01',
'date_end': '2030-12-31',
'name': 'Contract for tests',
'wage': 1000.0,
'wage_type': 'monthly',
# 'type_id': self.ref('hr_contract.hr_contract_type_emp'),
'structure_type_id': self.ref('hr_contract.structure_type_worker'),
'employee_id': employee.id,
'resource_calendar_id': self.ref('resource.resource_calendar_std'),
'commission_rate': commission_rate,
'admin_commission_rate': admin_commission_rate,
'state': 'open', # if not "Running" then no automatic selection when Payslip is created in 11.0
})
def test_commission(self):
super().test_commission()
commission_type = self.env.ref('hr_payroll_commission.commission_other_input')
@@ -16,7 +32,7 @@ class TestCommissionPayslip(test_commission.TestCommission):
'date_from': date.today() - timedelta(days=1),
'date_to': date.today() + timedelta(days=14),
})
payslip._onchange_employee()
payslip.action_refresh_from_work_entries()
self.assertFalse(payslip.commission_payment_ids)
# find unpaid commission payments from super().test_commission()
@@ -28,7 +44,7 @@ class TestCommissionPayslip(test_commission.TestCommission):
# press the button to pay it via payroll
commission_payments.action_report_in_next_payslip()
payslip._onchange_employee()
payslip.action_refresh_from_work_entries()
# has attached commission payments
self.assertTrue(payslip.commission_payment_ids)
commission_input_lines = payslip.input_line_ids.filtered(lambda l: l.input_type_id == commission_type)