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. # 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): 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): if not self.input_line_ids.filtered(lambda line: line.input_type_id == commission_type):
self.commission_payment_ids.write({'payslip_id': False}) self.commission_payment_ids.write({'payslip_id': False})
@api.onchange('employee_id', 'struct_id', 'contract_id', 'date_from', 'date_to') def action_refresh_from_work_entries(self):
def _onchange_employee(self): res = super().action_refresh_from_work_entries()
res = super()._onchange_employee() for slip in self.filtered(lambda s: s.state in ('draft', 'verify')):
if self.state == 'draft': commission_payments = self.env['hr.commission.payment'].browse()
self.commission_payment_ids = self.env['hr.commission.payment'].search([ if slip.employee_id:
('employee_id', '=', self.employee_id.id), commission_payments = self.env['hr.commission.payment'].search([
('pay_in_payslip', '=', True), ('employee_id', '=', self.employee_id.id),
('payslip_id', '=', False)]) ('pay_in_payslip', '=', True),
self._onchange_commission_payment_ids() ('payslip_id', '=', False)])
slip.commission_payment_ids = commission_payments
return res return res
@api.onchange('commission_payment_ids') @api.depends('employee_id', 'contract_id', 'struct_id', 'date_from', 'date_to', 'struct_id', 'commission_payment_ids')
def _onchange_commission_payment_ids(self): 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) commission_type = self.env.ref('hr_payroll_commission.commission_other_input', raise_if_not_found=False)
if not commission_type: if not commission_type:
return return res
total = sum(self.commission_payment_ids.mapped('commission_amount')) for slip in self:
if not total: amount = sum(self.commission_payment_ids.mapped('commission_amount'))
return 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,
}),
],
})
lines_to_keep = self.input_line_ids.filtered(lambda x: x.input_type_id != commission_type) return res
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})
def open_commissions(self): def open_commissions(self):
self.ensure_one() self.ensure_one()

View File

@@ -7,6 +7,22 @@ from odoo.addons.hr_commission.tests import test_commission
class TestCommissionPayslip(test_commission.TestCommission): 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): def test_commission(self):
super().test_commission() super().test_commission()
commission_type = self.env.ref('hr_payroll_commission.commission_other_input') 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_from': date.today() - timedelta(days=1),
'date_to': date.today() + timedelta(days=14), 'date_to': date.today() + timedelta(days=14),
}) })
payslip._onchange_employee() payslip.action_refresh_from_work_entries()
self.assertFalse(payslip.commission_payment_ids) self.assertFalse(payslip.commission_payment_ids)
# find unpaid commission payments from super().test_commission() # 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 # press the button to pay it via payroll
commission_payments.action_report_in_next_payslip() commission_payments.action_report_in_next_payslip()
payslip._onchange_employee() payslip.action_refresh_from_work_entries()
# has attached commission payments # has attached commission payments
self.assertTrue(payslip.commission_payment_ids) self.assertTrue(payslip.commission_payment_ids)
commission_input_lines = payslip.input_line_ids.filtered(lambda l: l.input_type_id == commission_type) commission_input_lines = payslip.input_line_ids.filtered(lambda l: l.input_type_id == commission_type)