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

62 lines
2.5 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from dateutil.relativedelta import relativedelta
from odoo import models, _
class HrPayslip(models.Model):
_inherit = 'hr.payslip'
def _get_data_files_to_update(self):
# Note: file order should be maintained
return super()._get_data_files_to_update() + [(
'l10n_us_hr_payroll', [
'data/hr_salary_rule_category_data.xml',
'data/hr_payroll_structure_type_data.xml',
'data/hr_payroll_structure_data.xml',
'data/hr_rule_parameters_data.xml',
])]
def _l10n_us_get_leave_lines(self):
self.ensure_one()
leaves_allocations = self.env['hr.leave.allocation'].search([
('employee_id', '=', self.employee_id.id),
('state', '=', 'validate'),
('date_from', '<', self.date_to),
'|',
('date_to', '=', False),
('date_to', '>', self.date_from),
])
if not leaves_allocations:
return []
day_before_period = self.date_from + relativedelta(days=-1)
before_period_durations_by_leave_type = self.env['hr.work.entry']._get_leaves_duration_between_two_dates(
self.employee_id, min(leaves_allocations.mapped('date_from')), day_before_period)
period_durations_by_leave_type = self.env['hr.work.entry']._get_leaves_duration_between_two_dates(
self.employee_id, self.date_from, self.date_to)
# Only get the leave types associated to valid allocations
leave_types = leaves_allocations.holiday_status_id
leave_lines = []
for leave_type in leave_types.filtered(lambda h: h.l10n_us_show_on_payslip):
related_allocations = leaves_allocations.filtered(lambda a: a.holiday_status_id == leave_type)
allocated_before = related_allocations._l10n_us_get_total_allocated(day_before_period)
allocated_now = related_allocations._l10n_us_get_total_allocated(self.date_to)
total_used_before = before_period_durations_by_leave_type.get(leave_type, 0.0)
used = period_durations_by_leave_type.get(leave_type, 0.0)
gain = allocated_now - allocated_before
balance = allocated_now - total_used_before - used
leave_lines.append({
'type': leave_type.name,
'used': used,
'accrual': gain,
'balance': balance,
})
return leave_lines