70 lines
2.5 KiB
Python
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
|