feat: penanganan pelanggaran (handling system)

- Migration: handling_status, handled_at, handled_by ke violations
- Migration: tabel violation_handlings, handling_participants
- Model: ViolationHandling, HandlingParticipant + relasi
- Routes: storeHandling, resolveHandling, destroyHandling, calendar data
- ViolationController: CRUD penanganan + filter status handling
- DashboardController: data handling stats + calendar endpoint
- Dashboard view: kalender pelanggaran interaktif (Alpine.js)
- Violations index: filter status penanganan + kolom status
- Violations show: stat card penanganan + timeline + modal tambah
- Menambahkan handling_status filter di index
This commit is contained in:
Bro
2026-07-22 22:19:19 +07:00
parent f86aa84d12
commit 8529a49174
24 changed files with 2152 additions and 842 deletions
+26 -1
View File
@@ -16,7 +16,7 @@ class Violation extends Model
'description', 'points', 'sanction', 'location',
'violation_date', 'violation_time',
'is_verified', 'verified_by', 'verified_at',
'notes',
'notes', 'handling_status', 'handled_at', 'handled_by',
];
protected function casts(): array
@@ -54,4 +54,29 @@ class Violation extends Model
{
return $this->hasMany(ViolationEvidence::class);
}
public function handlings(): HasMany
{
return $this->hasMany(ViolationHandling::class);
}
public function handler(): BelongsTo
{
return $this->belongsTo(User::class, 'handled_by');
}
public function isUnhandled(): bool
{
return $this->handling_status === 'unhandled';
}
public function isInProgress(): bool
{
return $this->handling_status === 'in_progress';
}
public function isResolved(): bool
{
return $this->handling_status === 'resolved';
}
}