You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

45 lines
1.9 KiB

from odoo import api, fields, models, _
class HRSalaryRule(models.Model):
_inherit = 'hr.salary.rule'
is_lunch = fields.Boolean(string='Is Lunch ?')
class HRPayslip(models.Model):
_inherit = 'hr.payslip'
@api.multi
def compute_sheet(self):
"""overrding the compute sheet method to add the lunch value to the payslip"""
for payslip in self:
number = payslip.number or self.env['ir.sequence'].next_by_code('salary.slip')
# delete old payslip lines
payslip.line_ids.unlink()
# set the list of contract for which the rules have to be applied
# if we don't give the contract, then the rules to apply should be for all current contracts of the employee
contract_ids = payslip.contract_id.ids or \
self.get_contract(payslip.employee_id, payslip.date_from, payslip.date_to)
lines = [(0, 0, line) for line in self._get_payslip_lines(contract_ids, payslip.id)]
lunch_rules = self.env['hr.salary.rule'].search([('is_lunch', '=', True)]).mapped('id')
for line in lines:
if line[2]['salary_rule_id'] in lunch_rules:
amount = self.compute_lunch()
line[2]['amount'] = -amount
payslip.write({'line_ids': lines, 'number': number})
return True
@api.multi
def compute_lunch(self):
employee = self.employee_id
amount = 0
user_id = employee.user_id
if user_id:
lunch_rec = self.env['lunch.order'].search([('user_id', '=', user_id.id),
('date', '>=', self.date_from),
('date', '<=', self.date_to),
('state', '=', 'confirmed')])
if lunch_rec:
amount = sum(lunch_rec.mapped('total'))
return amount