diff --git a/hr_commission/tests/test_commission.py b/hr_commission/tests/test_commission.py
index 1d15ef70..021652e7 100644
--- a/hr_commission/tests/test_commission.py
+++ b/hr_commission/tests/test_commission.py
@@ -10,6 +10,8 @@ class TestCommission(common.TransactionCase):
super().setUp()
self.user = self.browse_ref('base.user_demo')
self.employee = self.browse_ref('hr.employee_qdp') # This is the employee associated with above user.
+ # arcive all current contracts
+ self.employee.contract_ids.write({'active': False})
def _createUser(self):
return self.env['res.users'].create({
diff --git a/hr_commission/views/account_views.xml b/hr_commission/views/account_views.xml
index ec9e4836..a0a100d9 100644
--- a/hr_commission/views/account_views.xml
+++ b/hr_commission/views/account_views.xml
@@ -20,8 +20,8 @@
account.journal
-
- {'required': [('type', '=', 'purchase')], 'invisible': [('type', 'not in', ('purchase', 'general'))]}
+
+
diff --git a/hr_payroll_commission/__manifest__.py b/hr_payroll_commission/__manifest__.py
index 54ff434e..fd9f631d 100644
--- a/hr_payroll_commission/__manifest__.py
+++ b/hr_payroll_commission/__manifest__.py
@@ -13,7 +13,7 @@ Reimburse Commissions in Payslips
""",
'depends': [
'hr_commission',
- 'hr_payroll',
+ 'hr_payroll_hibou',
],
'data': [
'views/hr_commission_views.xml',
diff --git a/hr_payroll_commission/models/hr_payslip.py b/hr_payroll_commission/models/hr_payslip.py
index 0e6df68e..dbd1b1e6 100644
--- a/hr_payroll_commission/models/hr_payslip.py
+++ b/hr_payroll_commission/models/hr_payslip.py
@@ -17,47 +17,51 @@ class HrPayslip(models.Model):
for payslip in self:
payslip.commission_count = len(payslip.mapped('commission_payment_ids.commission_ids'))
- @api.onchange('input_line_ids')
- def _onchange_input_line_ids(self):
- commission_type = self.env.ref('hr_payroll_commission.commission_other_input', raise_if_not_found=False)
- if not self.input_line_ids.filtered(lambda line: line.input_type_id == commission_type):
- self.commission_payment_ids.write({'payslip_id': False})
+ @api.model_create_multi
+ def create(self, vals_list):
+ payslips = super().create(vals_list)
+ draft_slips = payslips.filtered(lambda p: p.employee_id and p.state == 'draft')
+ if not draft_slips:
+ return payslips
+
+ commission_payments = self.env['hr.commission.payment'].search([
+ ('employee_id', 'in', draft_slips.mapped('employee_id').ids),
+ ('pay_in_payslip', '=', True),
+ ('payslip_id', '=', False)])
+ for slip in draft_slips:
+ payslip_commission_payments = commission_payments.filtered(lambda c: c.employee_id == slip.employee_id)
+ slip.commission_payment_ids = [(5, 0, 0)] + [(4, c.id, False) for c in payslip_commission_payments]
+ return payslips
- 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
+ def write(self, vals):
+ res = super().write(vals)
+ if 'commission_payment_ids' in vals:
+ self._compute_commission_input_line_ids()
+ if 'input_line_ids' in vals:
+ self._update_commission()
return res
+
+ def _update_commission(self):
+ commission_type = self.env.ref('hr_payroll_commission.commission_other_input', raise_if_not_found=False)
+ for payslip in self:
+ if not payslip.input_line_ids.filtered(lambda line: line.input_type_id == commission_type):
+ payslip.commission_payment_ids.write({'payslip_id': False})
- @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()
-
+ def _compute_commission_input_line_ids(self):
commission_type = self.env.ref('hr_payroll_commission.commission_other_input', raise_if_not_found=False)
if not commission_type:
- return res
-
- for slip in self:
+ return
+ for payslip 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
+ lines_to_remove = payslip.input_line_ids.filtered(lambda x: x.input_type_id == commission_type)
+ input_lines_vals = [(2, line.id, False) for line in lines_to_remove]
+ input_lines_vals.append((0, 0, {
+ 'amount': amount,
+ 'input_type_id': commission_type.id
+ }))
+ payslip.update({'input_line_ids': input_lines_vals})
def open_commissions(self):
self.ensure_one()
diff --git a/hr_payroll_commission/tests/test_payslip_commission.py b/hr_payroll_commission/tests/test_payslip_commission.py
index 2e52ede9..ee0526a3 100644
--- a/hr_payroll_commission/tests/test_payslip_commission.py
+++ b/hr_payroll_commission/tests/test_payslip_commission.py
@@ -32,8 +32,8 @@ class TestCommissionPayslip(test_commission.TestCommission):
'date_from': date.today() - timedelta(days=1),
'date_to': date.today() + timedelta(days=14),
})
- payslip.action_refresh_from_work_entries()
self.assertFalse(payslip.commission_payment_ids)
+ payslip.action_payslip_cancel()
# find unpaid commission payments from super().test_commission()
commission_payments = self.env['hr.commission.payment'].search([
@@ -44,7 +44,12 @@ class TestCommissionPayslip(test_commission.TestCommission):
# press the button to pay it via payroll
commission_payments.action_report_in_next_payslip()
- payslip.action_refresh_from_work_entries()
+ payslip = self.env['hr.payslip'].create({
+ 'name': 'test slip',
+ 'employee_id': self.employee.id,
+ 'date_from': date.today() - timedelta(days=1),
+ 'date_to': date.today() + timedelta(days=14),
+ })
# 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)
diff --git a/hr_payroll_commission/views/hr_commission_views.xml b/hr_payroll_commission/views/hr_commission_views.xml
index cbc1cb27..291ecc9a 100644
--- a/hr_payroll_commission/views/hr_commission_views.xml
+++ b/hr_payroll_commission/views/hr_commission_views.xml
@@ -2,7 +2,7 @@
- hr.expense.sheet.view.form.payroll
+ hr.commission.payment.form.payroll
hr.commission.payment
@@ -20,4 +20,16 @@
+
+ hr.commission.payment.tree.payroll
+ hr.commission.payment
+
+
+
+
+
+
+
+
+