mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
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:
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user