From 3de90ee7ceac19310237e41edada8ac5eee584d7 Mon Sep 17 00:00:00 2001 From: seshikanth Date: Tue, 30 Jun 2026 12:24:02 +0530 Subject: [PATCH] #fix:Payrollstatement --- .../models/it_tax_statement_wiz.py | 69 ++++++++++++++++++- .../views/it_tax_menu_and_wizard_view.xml | 3 +- 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/addons_extensions/employee_it_declaration/models/it_tax_statement_wiz.py b/addons_extensions/employee_it_declaration/models/it_tax_statement_wiz.py index 3f19c27df..1919c4acb 100644 --- a/addons_extensions/employee_it_declaration/models/it_tax_statement_wiz.py +++ b/addons_extensions/employee_it_declaration/models/it_tax_statement_wiz.py @@ -4,6 +4,8 @@ from odoo.exceptions import ValidationError from datetime import date, timedelta from dateutil.relativedelta import relativedelta import math +import logging +_logger = logging.getLogger(__name__) class ITTaxStatementWizard(models.TransientModel): @@ -18,9 +20,47 @@ class ITTaxStatementWizard(models.TransientModel): contract_id = fields.Many2one('hr.contract', related='employee_id.contract_id', required=True) currency_id = fields.Many2one('res.currency', related='employee_id.company_id.currency_id') - period_id = fields.Many2one('payroll.period', required=True) - period_line = fields.Many2one('payroll.period.line', - domain="[('period_id', '=', period_id), ('to_date', '<', fields.Date.today())]") + def _default_period(self): + today = fields.Date.today() + return self.env['payroll.period'].search([ + ('from_date', '<=', today), + ('to_date', '>=', today), + ], limit=1) + + def _default_period_line(self): + previous_month_end = fields.Date.today().replace(day=1) - relativedelta(days=1) + + _logger.info("Today: %s", fields.Date.today()) + _logger.info("Previous Month End: %s", previous_month_end) + + period = self._default_period() + _logger.info("Period: %s", period.name if period else "None") + + lines = self.env['payroll.period.line'].search([ + ('period_id', '=', period.id), + ], order='from_date') + + for line in lines: + _logger.info( + "Month=%s From=%s To=%s", + line.name, + line.from_date, + line.to_date + ) + + month = self.env['payroll.period.line'].search([ + ('period_id', '=', period.id), + ('from_date', '<=', previous_month_end), + ('to_date', '>=', previous_month_end), + ], limit=1) + + _logger.info("Selected Month: %s", month.name if month else "None") + + return month + + period_id = fields.Many2one('payroll.period', required=True, default=_default_period,) + period_line = fields.Many2one('payroll.period.line', default=_default_period_line, + domain="[('period_id', '=', period_id),('to_date','<=', previous_month_end)]") # Taxpayer profile taxpayer_name = fields.Char(related='employee_id.name') @@ -96,6 +136,29 @@ class ITTaxStatementWizard(models.TransientModel): ('new', 'New Regime') ], string="Beneficial Regime", readonly=True) is_hr_manager = fields.Boolean(compute="_compute_is_hr_manager") + available_period_ids = fields.Many2many( + 'payroll.period', + compute='_compute_available_period_ids' + ) + + @api.depends('employee_id') + def _compute_available_period_ids(self): + today = fields.Date.today() + + for rec in self: + employee = rec.employee_id or self.env.user.employee_id + if not employee: + rec.available_period_ids = False + continue + + joining_date = employee.doj or today + + periods = self.env['payroll.period'].search([ + ('to_date', '>=', joining_date), + ('from_date', '<=', today), + ]) + + rec.available_period_ids = periods def _compute_is_hr_manager(self): for rec in self: diff --git a/addons_extensions/employee_it_declaration/views/it_tax_menu_and_wizard_view.xml b/addons_extensions/employee_it_declaration/views/it_tax_menu_and_wizard_view.xml index 203375040..adc3a1c90 100644 --- a/addons_extensions/employee_it_declaration/views/it_tax_menu_and_wizard_view.xml +++ b/addons_extensions/employee_it_declaration/views/it_tax_menu_and_wizard_view.xml @@ -55,7 +55,8 @@ - +