You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gn_odoo/gn_payroll/data/gn_payroll_sickness.xml

156 lines
7.2 KiB
XML

<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="SICKNESS" model="hr.salary.rule.category">
<field name="name">Gestion des arrêts maladie</field>
<field name="code">SICKNESS</field>
</record>
<record id ="CALENDAR_SICKNESS_DAYS" model="hr.salary.rule">
<field name="name">Arrêt maladie (Jours Calendaires)</field>
<field name="code">CALENDAR_SICKNESS_DAYS</field>
<field name="active">true</field>
<field name="appears_on_payslip">false</field>
<field name="sequence" eval="100" />
<field name="category_id" ref="gn_payroll.SICKNESS" />
<field name="condition_select">python</field>
<field name="condition_python">
if (inputs.SICKNESS_FIRST_DAY and inputs.SICKNESS_FIRST_DAY.amount > 0) or (inputs.SICKNESS_LAST_DAY and inputs.SICKNESS_LAST_DAY.amount > 0):
result = True
</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
first_day = payroll.date_from.day
if inputs.SICKNESS_FIRST_DAY and \
inputs.SICKNESS_FIRST_DAY.amount and \
inputs.SICKNESS_FIRST_DAY.amount > 0:
if (inputs.SICKNESS_FIRST_DAY.amount > payroll.date_to.day) or \
(payroll.date_from.day > inputs.SICKNESS_FIRST_DAY.amount):
raise UserError("La date de début de l'arrêt maladie ne peut pas être en dehors des dates de la fiche de paye.")
else:
first_day = inputs.SICKNESS_FIRST_DAY.amount
last_day = payroll.date_to.day
if inputs.SICKNESS_LAST_DAY and \
inputs.SICKNESS_LAST_DAY.amount and \
inputs.SICKNESS_LAST_DAY.amount > 0:
if (inputs.SICKNESS_LAST_DAY.amount > payroll.date_to.day) or \
(payroll.date_from.day > inputs.SICKNESS_LAST_DAY.amount):
raise UserError("La date de fin de l'arrêt maladie ne peut pas être en dehors des dates de la fiche de paye.")
else:
last_day = inputs.SICKNESS_LAST_DAY.amount
calendar_days = []
for day in range(first_day, last_day, 1):
calendar_days.append(first_day)
result = calendar_days
</field>
</record>
<record id="SICKNESS_FIRST_DAY" model="hr.rule.input">
<field name="name">Arrêt maladie (Jour du mois de début de l'arrêt maladie)</field>
<field name="code">SICKNESS_FIRST_DAY_INPUT</field>
<field name="input_id" ref="gn_payroll.CALENDAR_SICKNESS_DAYS" />
</record>
<record id="SICKNESS_LAST_DAY" model="hr.rule.input">
<field name="name">Arrêt maladie (Jour du mois de fin de l'arrêt maladie)</field>
<field name="code">SICKNESS_LAST_DAY_INPUT</field>
<field name="input_id" ref="gn_payroll.CALENDAR_SICKNESS_DAYS" />
</record>
<record id="NON_WORKED_SICKNESS_DAYS_INPUT" model="hr.rule.input">
<field name="name">Arrêt maladie (Jours non-travaillés)</field>
<field name="code">NON_WORKED_SICKNESS_DAYS_INPUT</field>
<field name="input_id" ref="gn_payroll.CALENDAR_SICKNESS_DAYS" />
</record>
<record id="CALENDAR_SICKNESS_DAYS_INPUT" model="hr.rule.input">
<field name="name">Arrêt maladie (Jours calendaires)</field>
<field name="code">CALENDAR_SICKNESS_DAYS_INPUT</field>
<field name="input_id" ref="gn_payroll.CALENDAR_SICKNESS_DAYS" />
</record>
<record id ="NON_WORKED_SICKNESS_DAYS" model="hr.salary.rule">
<field name="name">Arrêt maladie (Jours non-travaillés)</field>
<field name="code">NON_WORKED_SICKNESS_DAYS</field>
<field name="active">true</field>
<field name="appears_on_payslip">false</field>
<field name="sequence" eval="101" />
<field name="category_id" ref="gn_payroll.SICKNESS" />
<field name="condition_select">python</field>
<field name="condition_python">
if rules.CALENDAR_SICKNESS_DAYS:
result = True
</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
non_worked_days = []
for sick_day in CALENDAR_SICKNESS_DAYS:
is_day_worked = payslip.date_from.replace(day = sick_day).weekday()
for planned_day in contract.resource_calendar_id.attendance_ids:
if is_day_worked == int(x.dayofweek):
non_worked_days.append(sick_day)
break
result = non_worked_days
</field>
</record>
<record id ="WAITING_SICKNESS_DAYS" model="hr.salary.rule">
<field name="name">Arrêt maladie (Jours de Carence)</field>
<field name="code">WAITING_SICKNESS_DAYS</field>
<field name="active">true</field>
<field name="appears_on_payslip">false</field>
<field name="sequence" eval="101" />
<field name="category_id" ref="gn_payroll.SICKNESS" />
<field name="condition_select">python</field>
<field name="condition_python">
if rules.CALENDAR_SICKNESS_DAYS:
result = True
</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
from operator import itemgetter
if payslip.company_id.cc.idcc == 1518:
sickness_start_day = payslip.date_from.replace(day=CALENDAR_SICKNESS_DAYS[0])
# Let's check if contract (or 1st contract if consecutive contracts) is older than 6 months:
first_contract_day = payslip.contract_id.date_start
employee_contracts = [contract for contract in payslip.employee_id.contract_ids if \
(contract.id != payslip.contract_id.id and payslip.date_from >= contract.date_start) else None]
sorted_employee_contracts = sorted(employee_contracts, key=itemgetter('date_start'), reverse=True)
for contract in sorted_employee_contracts:
if contract.date_end == first_contract_day - 1:
first_contract_day = contract.date_start
else:
break
if 90 >= sickness_start_day - first_contract_day:
result = 3
else:
result = 0
</field>
</record>
<record id="WAITING_SICKNESS_DAYS_INPUT" model="hr.rule.input">
<field name="name">Arrêt maladie (Jours de Carence)</field>
<field name="code">WAITING_SICKNESS_DAYS_INPUT</field>
<field name="input_id" ref="gn_payroll.WAITING_SICKNESS_DAYS" />
</record>
<record id ="IJSS_SICKNESS" model="hr.salary.rule">
<field name="name">Arrêt maladie (Montant IJSS Brut)</field>
<field name="code">IJSS_SICKNESS</field>
<field name="active">true</field>
<field name="appears_on_payslip">false</field>
<field name="sequence" eval="101" />
<field name="category_id" ref="gn_payroll.SICKNESS" />
<field name="condition_select">python</field>
<field name="condition_python">
if rules.CALENDAR_SICKNESS_DAYS:
result = True
</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
daily_wage = contract.wage * 3 / 91.25
daily_ijss = daily_wage / 2
number_of_compensated_days = len(CALENDAR_SICKNESS_DAYS) - WAITING_SICKNESS_DAYS
result = daily_ijss * number_of_compensated_days
</field>
</record>
<record id="IJSS_SICKNESS_INPUT" model="hr.rule.input">
<field name="name">Arrêt maladie (Montant IJSS)</field>
<field name="code">IJSS_SICKNESS_INPUT</field>
<field name="input_id" ref="gn_payroll.IJSS_SICKNESS" />
</record>
</odoo>