#fix:payrolland leave
This commit is contained in:
parent
80e90ca88a
commit
257e05cc34
|
|
@ -3,6 +3,10 @@ import re
|
|||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools.safe_eval import safe_eval
|
||||
from dateutil.relativedelta import relativedelta
|
||||
import logging
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
||||
class EmployeePayslipDownloadWizard(models.TransientModel):
|
||||
|
|
@ -10,6 +14,58 @@ class EmployeePayslipDownloadWizard(models.TransientModel):
|
|||
_rec_name = 'employee_id'
|
||||
_description = 'Employee Payslip Download Wizard'
|
||||
|
||||
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
|
||||
|
||||
# def _default_period_line(self):
|
||||
# # Last day of the previous month
|
||||
# previous_month_end = fields.Date.today().replace(day=1) - relativedelta(days=1)
|
||||
#
|
||||
# period = self._default_period()
|
||||
# if not period:
|
||||
# return False
|
||||
#
|
||||
# return self.env['payroll.period.line'].search([
|
||||
# ('period_id', '=', period.id),
|
||||
# ('from_date', '<=', previous_month_end),
|
||||
# ('to_date', '<=', previous_month_end),
|
||||
# ], limit=1)
|
||||
|
||||
employee_id = fields.Many2one(
|
||||
'hr.employee',
|
||||
required=True,
|
||||
|
|
@ -28,18 +84,33 @@ class EmployeePayslipDownloadWizard(models.TransientModel):
|
|||
'payroll.period',
|
||||
string='Payroll Period',
|
||||
required=True,
|
||||
default=_default_period,
|
||||
)
|
||||
today = fields.Date(
|
||||
default=fields.Date.today
|
||||
)
|
||||
period_line = fields.Many2one(
|
||||
'payroll.period.line',
|
||||
string='Month',
|
||||
domain="[('period_id', '=', period_id)]",
|
||||
string="Month",
|
||||
default=_default_period_line,
|
||||
domain="[('period_id','=',period_id), ('to_date','<=', previous_month_end)]",
|
||||
)
|
||||
payslip_count = fields.Integer(
|
||||
string='Available Payslips',
|
||||
compute='_compute_payslip_count',
|
||||
)
|
||||
is_hr_manager = fields.Boolean(compute="_compute_is_hr_manager")
|
||||
|
||||
previous_month_end = fields.Date(
|
||||
default=lambda self: (
|
||||
fields.Date.today().replace(day=1)
|
||||
- relativedelta(days=1)
|
||||
)
|
||||
)
|
||||
available_period_ids = fields.Many2many(
|
||||
'payroll.period',
|
||||
compute='_compute_available_period_ids'
|
||||
)
|
||||
|
||||
def _compute_is_hr_manager(self):
|
||||
for rec in self:
|
||||
rec.is_hr_manager = self.env.user.has_group('hr.group_hr_manager')
|
||||
|
|
@ -129,3 +200,112 @@ class EmployeePayslipDownloadWizard(models.TransientModel):
|
|||
'url': '/employee_it_declaration/my_payslips/%s' % self.id,
|
||||
'target': 'self',
|
||||
}
|
||||
|
||||
# @api.onchange('employee_id')
|
||||
# def _onchange_employee_id(self):
|
||||
#
|
||||
# if not self.employee_id:
|
||||
# return {}
|
||||
#
|
||||
# # Replace joining_date with your employee joining field
|
||||
# joining_date = self.employee_id.doj
|
||||
# today = fields.Date.today()
|
||||
#
|
||||
# if not joining_date:
|
||||
# joining_date = today
|
||||
# # today = fields.Date.today()
|
||||
# current_period = self.env['payroll.period'].search([
|
||||
# ('from_date', '<=', today),
|
||||
# ('to_date', '>=', today),
|
||||
# ], limit=1)
|
||||
#
|
||||
# if current_period:
|
||||
# self.period_id = current_period
|
||||
#
|
||||
# return {
|
||||
# 'domain': {
|
||||
# 'period_id': [
|
||||
# ('to_date', '>=', joining_date),
|
||||
# ('from_date', '<=', today),
|
||||
# ]
|
||||
# }
|
||||
# }
|
||||
|
||||
@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
|
||||
|
||||
# @api.onchange('employee_id')
|
||||
# def _onchange_employee_id(self):
|
||||
# if not self.employee_id:
|
||||
# return {}
|
||||
#
|
||||
# joining_date = self.employee_id.doj
|
||||
# today = fields.Date.today()
|
||||
#
|
||||
# if not joining_date:
|
||||
# joining_date = today
|
||||
#
|
||||
# # Current Financial Year
|
||||
# current_period = self.env['payroll.period'].search([
|
||||
# ('from_date', '<=', today),
|
||||
# ('to_date', '>=', today),
|
||||
# ], limit=1)
|
||||
# if current_period:
|
||||
# self.period_id = current_period
|
||||
#
|
||||
# return {
|
||||
# 'domain': {
|
||||
# 'period_id': [
|
||||
# ('to_date', '>=', joining_date), # DOJ year onwards
|
||||
# ('from_date', '<=', today), # No future FY
|
||||
# ]
|
||||
# }
|
||||
# }
|
||||
|
||||
|
||||
@api.onchange('period_id')
|
||||
def _onchange_period_id(self):
|
||||
|
||||
self.period_line = False
|
||||
|
||||
if not self.period_id:
|
||||
return {}
|
||||
|
||||
previous_month_end = (
|
||||
fields.Date.today().replace(day=1)
|
||||
- relativedelta(days=1)
|
||||
)
|
||||
|
||||
month = self.env['payroll.period.line'].search([
|
||||
('period_id', '=', self.period_id.id),
|
||||
('from_date', '<=', previous_month_end),
|
||||
('to_date', '>=', previous_month_end),
|
||||
], limit=1)
|
||||
|
||||
if month:
|
||||
self.period_line = month
|
||||
|
||||
return {
|
||||
'domain': {
|
||||
'period_line': [
|
||||
('period_id', '=', self.period_id.id),
|
||||
('to_date', '<=', previous_month_end),
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -27,12 +27,11 @@
|
|||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="period_id" options="{'no_edit': True, 'no_create': True, 'no_open': True}"/>
|
||||
<field name="period_id" domain="[('id', 'in', available_period_ids)]" options="{'no_edit': True, 'no_create': True, 'no_open': True}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="period_line"
|
||||
force_save="1"
|
||||
domain="[('period_id', '=', period_id)]"
|
||||
required="download_type == 'single'"
|
||||
invisible="download_type != 'single'"/>
|
||||
</group>
|
||||
|
|
|
|||
|
|
@ -349,11 +349,18 @@ class HRLeave(models.Model):
|
|||
action = self.sudo().env.ref('hr_holidays.hr_leave_action_my')
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': action.name,
|
||||
'res_model': action.res_model,
|
||||
'view_mode': action.view_mode,
|
||||
'res_model': 'hr.leave',
|
||||
'res_id': rec.id,
|
||||
'view_mode': 'form',
|
||||
'target': 'current',
|
||||
}
|
||||
# return {
|
||||
# 'type': 'ir.actions.act_window',
|
||||
# 'name': action.name,
|
||||
# 'res_model': action.res_model,
|
||||
# 'view_mode': 'form',
|
||||
# 'target': 'current',
|
||||
# }
|
||||
|
||||
def action_reset_confirm(self):
|
||||
if any(holiday.state not in ['cancel', 'refuse'] for holiday in self):
|
||||
|
|
|
|||
|
|
@ -5,11 +5,23 @@ from odoo.exceptions import UserError
|
|||
class HrLeaveAllocation(models.Model):
|
||||
_inherit = 'hr.leave.allocation'
|
||||
|
||||
state = fields.Selection(selection_add=[
|
||||
# state = fields.Selection(selection_add=[
|
||||
# ('draft', 'Draft'),
|
||||
# ('submitted', 'Submitted'),
|
||||
# ('refuse', 'Rejected')
|
||||
# ],default='draft',)
|
||||
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('submitted', 'Submitted'),
|
||||
('confirm', 'To Approve'),
|
||||
('validate1', 'Second Approval'),
|
||||
('validate', 'Approved'),
|
||||
('refuse', 'Rejected'),
|
||||
])
|
||||
],
|
||||
string='Status',
|
||||
tracking=True,copy=False)
|
||||
|
||||
|
||||
def action_submit(self):
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue