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.
|
||||
|
||||
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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user