Files
enterprise-addons/hr_payroll_sale_commission/models/hr_payslip.py
T

46 lines
2.0 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, Command
import logging
_logger = logging.getLogger(__name__)
class HrPayslip(models.Model):
_inherit = 'hr.payslip'
def _compute_input_line_ids(self):
"""
Set commission on the related input_line_ids of the payslip.
"""
res = super()._compute_input_line_ids()
payroll_commission_plan = self.env['sale.commission.plan'].search([('commission_payroll_input', '!=', 'False')])
for (date_from, date_to, company_id), slips_sudo in self.sudo().grouped(lambda slip: (slip.date_from, slip.date_to, slip.company_id.id)).items():
commissions = self.env['sale.commission.report'].sudo().search_fetch(
[('user_id', 'in', slips_sudo.employee_id.user_id.ids), ('payment_date', '>=', date_from),
('payment_date', '<=', date_to), ('company_id', '=', company_id),
('plan_id', 'in', payroll_commission_plan.ids)],
['commission', 'user_id', 'currency_id']
)
commission_per_user = commissions.grouped('user_id')
for slip_sudo in slips_sudo:
user_commissions = commission_per_user.get(slip_sudo.employee_id.user_id, self.env['sale.commission.report'])
for input, coms in user_commissions.grouped(lambda com: com.plan_id.commission_payroll_input).items():
if not input:
continue
total = 0
for commission in coms:
total += commission.currency_id._convert(
commission.commission, to_currency=slip_sudo.currency_id,
date=slip_sudo.date_to, company=slip_sudo.company_id
)
if total:
slip_sudo.input_line_ids = [Command.create({
'amount': total,
'input_type_id': input.id
})]
return res