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__linking_commission_payments' into '15.0'
WIP: fix/15.0/hr_payroll_commission__linking_commission_payments into 15.0 See merge request hibou-io/hibou-odoo/suite!1377
This commit is contained in:
@@ -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({
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
<field name="model">account.journal</field>
|
||||
<field name="inherit_id" ref="account.view_account_journal_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='default_account_id' and @attrs="{'required': [('type', '=', 'purchase')], 'invisible': [('type', '!=', 'purchase')]}"]" position="attributes">
|
||||
<attribute name="attrs">{'required': [('type', '=', 'purchase')], 'invisible': [('type', 'not in', ('purchase', 'general'))]}</attribute>
|
||||
<xpath expr="//field[@name='default_account_type']" position="after">
|
||||
<field name="default_account_id" string="Default Account" attrs="{'invisible': [('type', '!=', 'general')]}" groups="account.group_account_readonly"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -13,7 +13,7 @@ Reimburse Commissions in Payslips
|
||||
""",
|
||||
'depends': [
|
||||
'hr_commission',
|
||||
'hr_payroll',
|
||||
'hr_payroll_hibou',
|
||||
],
|
||||
'data': [
|
||||
'views/hr_commission_views.xml',
|
||||
|
||||
@@ -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
|
||||
|
||||
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),
|
||||
('employee_id', 'in', draft_slips.mapped('employee_id').ids),
|
||||
('pay_in_payslip', '=', True),
|
||||
('payslip_id', '=', False)])
|
||||
slip.commission_payment_ids = commission_payments
|
||||
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 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
|
||||
|
||||
@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 _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})
|
||||
|
||||
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',
|
||||
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,
|
||||
}),
|
||||
],
|
||||
})
|
||||
|
||||
return res
|
||||
'input_type_id': commission_type.id
|
||||
}))
|
||||
payslip.update({'input_line_ids': input_lines_vals})
|
||||
|
||||
def open_commissions(self):
|
||||
self.ensure_one()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<odoo>
|
||||
|
||||
<record id="view_hr_commission_payment_form_inherit" model="ir.ui.view">
|
||||
<field name="name">hr.expense.sheet.view.form.payroll</field>
|
||||
<field name="name">hr.commission.payment.form.payroll</field>
|
||||
<field name="model">hr.commission.payment</field>
|
||||
<field name="inherit_id" ref="hr_commission.view_hr_commission_payment_form"/>
|
||||
<field name="arch" type="xml">
|
||||
@@ -20,4 +20,16 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_commission_payment_tree_inherit" model="ir.ui.view">
|
||||
<field name="name">hr.commission.payment.tree.payroll</field>
|
||||
<field name="model">hr.commission.payment</field>
|
||||
<field name="inherit_id" ref="hr_commission.view_hr_commission_payment_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='employee_id']" position="before">
|
||||
<field name="pay_in_payslip" />
|
||||
<field name="payslip_id" />
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user