l10n_ir_hr_payroll/models/hr_payslip_run.py

70 lines
2.5 KiB
Python

# -*- coding: utf-8 -*-
# Jalali-aware inheritance for hr.payslip.run defaults
import jdatetime
from datetime import date, datetime
from dateutil.relativedelta import relativedelta
from odoo import models, fields, api, _
class HrPayslipRun(models.Model):
_inherit = 'hr.payslip.run'
# Redefine fields with Jalali-aware defaults
date_start = fields.Date(
string='Date From', required=True,
default=lambda self: self._default_date_start()
)
date_end = fields.Date(
string='Date To', required=True,
default=lambda self: self._default_date_end()
)
@api.model
def _default_date_start(self):
"""
Compute the first day of the current month.
Uses Jalali calendar for Persian users (fa_IR), otherwise Gregorian.
Returns an ISO-formatted date string.
"""
lang = self.env.user.lang or 'en_US'
if lang == 'fa_IR':
j_today = jdatetime.date.fromgregorian(date=date.today())
j_start = jdatetime.date(j_today.year, j_today.month, 1)
return fields.Date.to_string(j_start.togregorian())
return fields.Date.to_string(date.today().replace(day=1))
@api.model
def _default_date_end(self):
"""
Compute the last day of the current month.
Uses Jalali calendar for Persian users (fa_IR), otherwise Gregorian.
Returns an ISO-formatted date string.
"""
lang = self.env.user.lang or 'en_US'
if lang == 'fa_IR':
j_today = jdatetime.date.fromgregorian(date=date.today())
if j_today.month == 12:
j_next = jdatetime.date(j_today.year + 1, 1, 1)
else:
j_next = jdatetime.date(j_today.year, j_today.month + 1, 1)
j_end = j_next - jdatetime.timedelta(days=1)
return fields.Date.to_string(j_end.togregorian())
# Gregorian fallback: last day of this month
end_date = (datetime.now() + relativedelta(months=1, day=1, days=-1)).date()
return fields.Date.to_string(end_date)
@api.model
def default_get(self, fields_list):
"""
Override default_get to inject Jalali-aware defaults
for date_start and date_end on record creation.
"""
res = super(HrPayslipRun, self).default_get(fields_list)
if 'date_start' in fields_list:
res['date_start'] = self._default_date_start()
if 'date_end' in fields_list:
res['date_end'] = self._default_date_end()
return res