You need to go with a new module.
One way to do this is inherit from hr.payslip
, and patch the method get_inputs
so that you go over employees attendance, check if worked on holidays and his attendance records and create inputs for them.
class hr_payslip(osv.osv):
'''
Pay Slip
'''
_inherit = 'hr.payslip'
def get_inputs(self, cr, uid, contract_ids, date_from, date_to, context=None):
res = super(hr_payslip, self).get_inputs(cr, uid, contract_ids, date_from, date_to, context=context)
contract_obj = self.pool.get('hr.contract')
for contract in contract_obj.browse(cr, uid, contract_ids, context=context):
"""
Your code here to find out if emplooyee has more than 75% attendance.
Suppose you set a flag called 'good_attendance'
"""
input = {
'name': 'Attendance over 75 percent',
'code': 'ATTENDANCE_OVER_75',
'contract_id': contract.id,
'amount': good_attendance,
}
res += [input]
return res
Then you create a rule that checks for ATTENDANCE_OVER_75
input and adds a bonus if true...
Similar will be for checking if employee worked on holidays...
<record id="extra_hr_salaire_hs" model="hr.salary.rule">
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="name">heure supplémentaire</field>
<field name="code">STAR0002</field>
<field name="appears_on_payslip">True</field>
<field name="sequence">00002</field>
<field name="condition_select">none</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">if worked_days.number_of_days > 30:
result = contract.wage + contract.wage * (worked_days.number_of_days-30) /100
else:
result = contract.wage </field>