41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from odoo import http
|
|
from odoo.http import request
|
|
|
|
class EmployeeDashboard(http.Controller):
|
|
|
|
@http.route('/employee/leave/balance', auth='user', type='json')
|
|
def get_leave_balance(self):
|
|
employee = request.env.user.employee_id
|
|
if not employee:
|
|
return {'error': 'No employee linked to this user'}
|
|
|
|
leave_data = {}
|
|
leave_types = request.env['hr.leave.type'].search([
|
|
])
|
|
if not leave_types:
|
|
return []
|
|
|
|
for leave_type in leave_types:
|
|
allocations = request.env['hr.leave.allocation'].search([
|
|
('employee_id', '=', employee.id),
|
|
('holiday_status_id', '=', leave_type.id),
|
|
('state', '=', 'validate'),
|
|
])
|
|
taken_leaves = request.env['hr.leave'].search([
|
|
('employee_id', '=', employee.id),
|
|
('holiday_status_id', '=', leave_type.id),
|
|
('state', '=', 'validate'),
|
|
])
|
|
|
|
total_allocated = sum(a.number_of_days for a in allocations)
|
|
total_taken = sum(l.number_of_days for l in taken_leaves)
|
|
remaining = total_allocated - total_taken
|
|
|
|
leave_data[leave_type.name] = {
|
|
'allocated': total_allocated,
|
|
'taken': total_taken,
|
|
'remaining': remaining,
|
|
}
|
|
|
|
return leave_data
|