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