fix payroll domain

This commit is contained in:
Bakry 2024-07-31 11:44:13 +03:00
parent c9750c0656
commit 037f251e87
3 changed files with 56 additions and 8 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<data noupdate="1">
<record id="contrib_register_employees" model="hr.contribution.register">
<field name="name">Employees</field>
<field name="partner_id" eval="False"/>

View File

@ -2246,7 +2246,7 @@ class HrPayslipRun(models.Model):
# Relational fields
salary_scale = fields.Many2one('hr.payroll.structure', string='Salary Scale')
employee_ids = fields.Many2many('hr.employee', 'hr_employee_payslip_rel', 'payslip_id', 'employee_id', 'Employees',
index=True)
index=True,domain="[('id', 'in', employee_value_ids)]")
department_ids = fields.Many2many('hr.department', 'hr_department_payslip_rel',
'payslip_id', 'department_id', 'Departments')
journal_id = fields.Many2one('account.journal', 'Salary Journal')
@ -2254,6 +2254,7 @@ class HrPayslipRun(models.Model):
percentage = fields.Float(string='Percentage', default=100)
move_id = fields.Many2one('account.move', string="Move Number")
company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.company)
employee_value_ids = fields.Many2many(comodel_name="hr.employee", compute="_compute_allowed_value_ids")
@api.onchange('date_start')
def check_date_start(self):
@ -2278,11 +2279,49 @@ class HrPayslipRun(models.Model):
else:
self.required_condition = False
# domain the employee to compute salary
@api.depends('salary_scale','department_ids','date_start')
def _compute_allowed_value_ids(self):
for item in self:
date_from = str(item.date_start)
date_to = str(item.date_end)
if item.salary_scale:
if item.department_ids:
depart = item.department_ids._origin
#for dep in item.department_ids._origin:
employee_contracts = self.env['hr.contract'].search(
[('salary_scale', '=', item.salary_scale.id),
('state', '=', 'program_directory')]).filtered(
lambda item: item.employee_id.department_id in depart and item.employee_id.state == 'open'
and str(item.employee_id.first_hiring_date) <= date_to)
item.employee_value_ids = employee_contracts.mapped("employee_id")
else:
employee_contracts = self.env['hr.contract'].search(
[('salary_scale', '=', item.salary_scale.id), ('state', '=', 'program_directory')]).filtered(
lambda item: item.employee_id.state == 'open' and str(item.employee_id.first_hiring_date) <= date_to)
item.employee_value_ids = employee_contracts.mapped("employee_id")
else:
item.employee_value_ids = False
@api.onchange('salary_scale')
def _onchange_salary_scale_id(self):
for item in self:
if item.salary_scale:
item.employee_ids = False
item.department_ids = False
@api.onchange('department_ids','date_start')
def _onchange_department_ids(self):
for item in self:
item.employee_ids = False
'''@api.onchange('salary_scale')
def onchange_salary_scale_id(self):
for item in self:
if item.salary_scale:
item.employee_ids = False
item.department_ids = False
if item.department_ids:
for dep in item.department_ids:
employee_contracts = self.env['hr.contract'].search(
@ -2302,10 +2341,11 @@ class HrPayslipRun(models.Model):
emps.append(contract.employee_id.id)
return {'domain': {'employee_ids': [('id', 'in', emps)]}}
else:
return {'domain': {'employee_ids': [('id', 'in', [])]}}
return {'domain': {'employee_ids': [('id', 'in', [])]}}'''
# Override function compute sheet in Payslip Batches
def compute_sheet(self):
payslips = self.env['hr.payslip']
[data] = self.read()
@ -2553,7 +2593,7 @@ class HrPayslipRun(models.Model):
# else:
# payslips += item_payslip
else:
if not employee_slip_line:
if not employee_slip_line and str(employee.first_hiring_date) < from_date:
if employee.leaving_date:
if str(employee.leaving_date) <= from_date:
pass
@ -2590,7 +2630,7 @@ class HrPayslipRun(models.Model):
payslips += self.env['hr.payslip'].create(res)
else:
if employee.leaving_date:
if employee.leaving_date and str(employee.first_hiring_date) < from_date:
if str(employee.leaving_date) <= from_date:
pass
else:
@ -2759,7 +2799,7 @@ class HrPayslipRun(models.Model):
# else:
# payslips += item_payslip
else:
if not employee_slip_line:
if not employee_slip_line and str(emp.first_hiring_date) < from_date:
if emp.leaving_date:
if str(emp.leaving_date) <= from_date:
pass
@ -2804,7 +2844,7 @@ class HrPayslipRun(models.Model):
# else:
payslips += self.env['hr.payslip'].create(res)
else:
if emp.leaving_date:
if emp.leaving_date and str(emp.first_hiring_date) < from_date:
if str(emp.leaving_date) <= from_date:
pass
else:

View File

@ -35,6 +35,13 @@
<field name="state" widget="statusbar" statusbar_visible="draft,computed,confirmed,transfered"/>
</header>
</xpath>
<xpath expr="//form" position="attributes">
<attribute name="edit">0</attribute>
<attribute name="delete">0</attribute>
<attribute name="create">0</attribute>
</xpath>
<xpath expr="//field[@name='name']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
@ -162,6 +169,7 @@
<field name="company_id" groups="base.group_multi_company" readonly="1" options="{'no_create': True}"/>
<!--field name="percentage" string="Percentage" attrs="{'readonly': [('state','!=','draft')]}"/-->
<field name="required_condition" invisible="1"/>
<field name="employee_value_ids" invisible="1"/>
</xpath>
<xpath expr="//field[@name='slip_ids']" position="attributes">
<attribute name="invisible">1</attribute>
@ -266,7 +274,7 @@
<field name="inherit_id" ref="exp_hr_payroll.view_hr_payslip_tree"/>
<field name="arch" type="xml">
<tree position="replace">
<tree decoration-success="state=='transfered'" decoration-info="state == 'draft'">
<tree decoration-success="state=='transfered'" decoration-info="state == 'draft'" create="false" edit="false" delete="false">
<field name="number"/>
<field name="employee_id"/>
<field name="name"/>