Leave Requests (طلبات الإجازة)
Employees submit leave requests which go through an approval workflow. Includes calendar view and automatic balance deduction.
Attributes
| Field | Type | Description |
|---|---|---|
id | integer | Primary key |
employee_id | integer | Employee FK |
leave_type_id | integer | Leave Type FK |
start_date | date | Leave start date |
end_date | date | Leave end date |
total_days | decimal | Calculated working days |
reason | string | Reason for leave |
status | enum | draft, pending, manager_approved, approved, rejected, cancelled |
attachment_path | string | Attachment file path (nullable) |
contact_during_leave | string | Contact info while on leave (nullable) |
Status Workflow
API Endpoints
| Method | URL | Description |
|---|---|---|
GET | /api/hr/leave-requests | List leave requests |
POST | /api/hr/leave-requests | Submit leave request |
GET | /api/hr/leave-requests/calendar | Calendar view of leaves |
GET | /api/hr/leave-requests/{id} | Show leave request |
POST | /api/hr/leave-requests/{id}/approve | Approve request |
POST | /api/hr/leave-requests/{id}/reject | Reject request |
POST | /api/hr/leave-requests/{id}/cancel | Cancel request |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
employee_id | integer | Filter by employee |
leave_type_id | integer | Filter by leave type |
status | string | Filter by status |
date_from | date | Filter from date |
date_to | date | Filter to date |
Examples
bash
# Submit leave request
curl -X POST "https://moon-erp.elbaset.com/api/hr/leave-requests" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"employee_id": 1,
"leave_type_id": 1,
"start_date": "2026-03-10",
"end_date": "2026-03-14",
"reason": "Family vacation"
}'
# Approve
curl -X POST "https://moon-erp.elbaset.com/api/hr/leave-requests/1/approve" \
-H "Authorization: Bearer {token}"
# Reject
curl -X POST "https://moon-erp.elbaset.com/api/hr/leave-requests/1/reject" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{ "rejection_reason": "Team is understaffed this week" }'
# Calendar
curl -X GET "https://moon-erp.elbaset.com/api/hr/leave-requests/calendar?month=3&year=2026" \
-H "Authorization: Bearer {token}"dart
// Submit leave request
final response = await dio.post('/api/hr/leave-requests', data: {
'employee_id': 1,
'leave_type_id': 1,
'start_date': '2026-03-10',
'end_date': '2026-03-14',
'reason': 'Family vacation',
});
// Approve
await dio.post('/api/hr/leave-requests/1/approve');Business Rules
total_daysis auto-calculated from working days (excludes weekends based on company settings)- Validates against the employee's remaining leave balance
requires_attachmenton the leave type enforces file upload- Gender restriction on leave type is validated
- Minimum service months checked against employee's hire date
- Approving a leave request deducts from the employee's balance
- Cancelling restores the balance