mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
Initial commit of hr_payroll_attendance and hr_payroll_attendance_holidays modules for 11.0.
The purpose of this new functionality is to better distinguish between timesheets and attendance, as well as preventing the stock "salaried" time computations from working.
This commit is contained in:
1
hr_payroll_attendance_holidays/__init__.py
Executable file
1
hr_payroll_attendance_holidays/__init__.py
Executable file
@@ -0,0 +1 @@
|
||||
from . import hr_payslip
|
||||
15
hr_payroll_attendance_holidays/__manifest__.py
Executable file
15
hr_payroll_attendance_holidays/__manifest__.py
Executable file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
'name': 'Payroll Attendance Holidays',
|
||||
'author': 'Hibou Corp. <hello@hibou.io>',
|
||||
'version': '11.0.1.0.0',
|
||||
'category': 'Human Resources',
|
||||
'sequence': 95,
|
||||
'summary': 'Holiday Pay',
|
||||
'description': """
|
||||
Simplifies getting approved Holiday Leaves onto an employee Payslip.
|
||||
""",
|
||||
'website': 'https://hibou.io/',
|
||||
'depends': ['hr_payroll_attendance', 'hr_holidays'],
|
||||
'installable': True,
|
||||
'application': False,
|
||||
}
|
||||
52
hr_payroll_attendance_holidays/hr_payslip.py
Executable file
52
hr_payroll_attendance_holidays/hr_payslip.py
Executable file
@@ -0,0 +1,52 @@
|
||||
from odoo import models, api
|
||||
from odoo.addons.hr_holidays.models.hr_holidays import HOURS_PER_DAY
|
||||
|
||||
|
||||
class HrPayslip(models.Model):
|
||||
_inherit = 'hr.payslip'
|
||||
|
||||
@api.model
|
||||
def get_worked_day_lines(self, contracts, date_from, date_to):
|
||||
leaves = {}
|
||||
|
||||
for contract in contracts.filtered(lambda c: c.paid_hourly_attendance):
|
||||
for leave in self._fetch_valid_leaves(contract.employee_id.id, date_from, date_to):
|
||||
leave_code = self._create_leave_code(leave.holiday_status_id.name)
|
||||
if leave_code in leaves:
|
||||
leaves[leave_code]['number_of_days'] += leave.number_of_days_temp
|
||||
leaves[leave_code]['number_of_hours'] += leave.number_of_days_temp * HOURS_PER_DAY
|
||||
else:
|
||||
leaves[leave_code] = {
|
||||
'name': leave.holiday_status_id.name,
|
||||
'sequence': 15,
|
||||
'code': leave_code,
|
||||
'number_of_days': leave.number_of_days_temp,
|
||||
'number_of_hours': leave.number_of_days_temp * HOURS_PER_DAY,
|
||||
'contract_id': contract.id,
|
||||
}
|
||||
|
||||
res = super(HrPayslip, self).get_worked_day_lines(contracts.filtered(lambda c: not c.paid_hourly_attendance), date_from, date_to)
|
||||
res.extend(leaves.values())
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def action_payslip_done(self):
|
||||
for slip in self.filtered(lambda s: s.contract_id.paid_hourly_attendance):
|
||||
leaves = self._fetch_valid_leaves(slip.employee_id.id, slip.date_from, slip.date_to)
|
||||
leaves.write({'payslip_status': True})
|
||||
return super(HrPayslip, self).action_payslip_done()
|
||||
|
||||
def _fetch_valid_leaves(self, employee_id, date_from, date_to):
|
||||
valid_leaves = [
|
||||
('employee_id', '=', employee_id),
|
||||
('state', '=', 'validate'),
|
||||
('date_from', '>=', date_from),
|
||||
('date_from', '<=', date_to),
|
||||
('payslip_status', '=', False),
|
||||
('type', '=', 'remove'),
|
||||
]
|
||||
|
||||
return self.env['hr.holidays'].search(valid_leaves)
|
||||
|
||||
def _create_leave_code(self, name):
|
||||
return 'L_' + name.replace(' ', '_')
|
||||
Reference in New Issue
Block a user