# Leave Request

- Module key: `LeaveRequest`
- Category: `HRIS`
- Path: `app/Modules/LeaveRequest`

## Ringkasan

Leave Request berada di kategori HRIS. Modul ini memiliki 26 definisi route, 1 controller, 1 model, dan 1 view. Database module terdeteksi pada tabel: `leave_requests`.

## Flowchart

```mermaid
flowchart TD
    A[User / Operator] --> B[Menu Leave Request]
    B --> C[Routes: 26]
    C --> D[Controllers: 1]
    D --> E[Views: 1]
    D --> F[(Tables: 1<br/>leave_requests)]
    D --> G[Validation / Business Rules]
    G --> F
    F --> H[Report / Export / Audit]
```


## Routes

- `Route::middleware(['auth', 'ip.block', 'menu.access'])->group(function () {`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::prefix('leave-request')->name('leave_request.')->group(function () {`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::get('/', [LeaveRequestController::class, 'index'])->name('index');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::get('refs', [LeaveRequestController::class, 'refs'])->name('refs');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::get('data', [LeaveRequestController::class, 'data'])->name('data');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::get('import/template', [LeaveRequestController::class, 'downloadImportTemplate'])->name('import.template');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('import/preview', [LeaveRequestController::class, 'importPreview'])->name('import.preview');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('import/confirm', [LeaveRequestController::class, 'importConfirm'])->name('import.confirm');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::get('import/error-report/{token}', [LeaveRequestController::class, 'downloadImportErrorReport'])->name('import.error_report');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('/', [LeaveRequestController::class, 'store'])->name('store');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('bulk', [LeaveRequestController::class, 'bulkStore'])->name('bulk_store');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('bulk-update', [LeaveRequestController::class, 'bulkUpdate'])->name('bulk_update');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('bulk-delete', [LeaveRequestController::class, 'bulkDestroy'])->name('bulk_delete');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('bulk-submit', [LeaveRequestController::class, 'bulkSubmit'])->name('bulk_submit');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('bulk-cancel-submit', [LeaveRequestController::class, 'bulkCancelSubmit'])->name('bulk_cancel_submit');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('bulk-approve', [LeaveRequestController::class, 'bulkApprove'])->name('bulk_approve');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('bulk-unapprove', [LeaveRequestController::class, 'bulkUnapprove'])->name('bulk_unapprove');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('bulk-reject', [LeaveRequestController::class, 'bulkReject'])->name('bulk_reject');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::put('{id}', [LeaveRequestController::class, 'update'])->name('update');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::delete('{id}', [LeaveRequestController::class, 'destroy'])->name('destroy');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('{id}/submit', [LeaveRequestController::class, 'submit'])->name('submit');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('{id}/upload-attachment', [LeaveRequestController::class, 'uploadAttachment'])->name('upload_attachment');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('{id}/cancel-submit', [LeaveRequestController::class, 'cancelSubmit'])->name('cancel_submit');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('{id}/approve', [LeaveRequestController::class, 'approve'])->name('approve');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('{id}/unapprove', [LeaveRequestController::class, 'unapprove'])->name('unapprove');`  
  File: `app/Modules/LeaveRequest/routes/web.php`
- `Route::post('{id}/reject', [LeaveRequestController::class, 'reject'])->name('reject');`  
  File: `app/Modules/LeaveRequest/routes/web.php`

## Controllers

- `app/Modules/LeaveRequest/Http/Controllers/LeaveRequestController.php`

## Models

- `app/Modules/LeaveRequest/Models/LeaveRequestModel.php`

## Views

- `app/Modules/LeaveRequest/Resources/views/index.blade.php`

## Database / Migration

### `leave_requests`
- Actions: `create`, `table`
- Columns: 21
  - `request_no:string`
  - `karyawan_id:unsignedBigInteger`
  - `approval_flow_id:unsignedBigInteger`
  - `approval_request_id:unsignedBigInteger`
  - `leave_type:string`
  - `start_date:date`
  - `end_date:date`
  - `total_days:decimal`
  - `reason:text`
  - `status:string`
  - `created_by:unsignedBigInteger`
  - `is_active:boolean`
  - `karyawan_id:foreign`
  - `approval_flow_id:foreign`
  - `approval_request_id:foreign`
  - `created_by:foreign`
  - `start_date:index`
  - `attachment_path:string`
  - `attachment_name:string`
  - `attachment_name:dropColumn`
  - `attachment_path:dropColumn`
- Migrations:
  - `app/Modules/LeaveRequest/Database/migrations/2026_02_24_180500_create_leave_requests_table.php`
  - `app/Modules/LeaveRequest/Database/migrations/2026_02_24_181000_add_attachment_columns_to_leave_requests_table.php`
