From cd2fa2d350d6dc0d8e140c55ddd835cd25b9bcd8 Mon Sep 17 00:00:00 2001 From: tuxarmy Date: Fri, 3 Apr 2026 08:12:12 +0700 Subject: [PATCH] fix: tambah notifikasi ke ketua saat transaksi butuh persetujuan, dan ke bendahara setelah disetujui/ditolak --- .../CashRecords/Tables/CashRecordsTable.php | 17 +++++++++++++++ app/Observers/CashRecordObserver.php | 21 ++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/Filament/Resources/CashRecords/Tables/CashRecordsTable.php b/app/Filament/Resources/CashRecords/Tables/CashRecordsTable.php index 01313a4..b14ef85 100644 --- a/app/Filament/Resources/CashRecords/Tables/CashRecordsTable.php +++ b/app/Filament/Resources/CashRecords/Tables/CashRecordsTable.php @@ -6,6 +6,7 @@ use App\Models\Approval; use App\Models\ApprovalItem; use App\Models\CashCategory; use App\Models\CashRecord; +use App\Services\NotificationService; use Filament\Actions\Action; use Filament\Actions\BulkActionGroup; use Filament\Actions\DeleteBulkAction; @@ -83,6 +84,14 @@ class CashRecordsTable 'notes' => $data['notes'] ?? null, ]); $approval->update(['status' => 'approved']); + + NotificationService::send( + $record->creator, + 'Transaksi Kas Disetujui', + "Transaksi \"{$record->description}\" senilai Rp " . number_format($record->amount, 0, ',', '.') . " telah disetujui. Silakan lakukan verifikasi.", + 'success', + route('filament.admin.resources.cash-records.index') + ); }), // Ketua: tolak transaksi 500rb–2jt @@ -108,6 +117,14 @@ class CashRecordsTable 'notes' => $data['notes'], ]); $approval->update(['status' => 'rejected']); + + NotificationService::send( + $record->creator, + 'Transaksi Kas Ditolak', + "Transaksi \"{$record->description}\" ditolak: {$data['notes']}", + 'danger', + route('filament.admin.resources.cash-records.index') + ); }), // Bendahara/ketua: verifikasi (hanya jika approval sudah selesai atau tidak diperlukan) diff --git a/app/Observers/CashRecordObserver.php b/app/Observers/CashRecordObserver.php index 9c7ad18..ef42494 100644 --- a/app/Observers/CashRecordObserver.php +++ b/app/Observers/CashRecordObserver.php @@ -6,6 +6,7 @@ use App\Models\ActivityLog; use App\Models\Approval; use App\Models\CashRecord; use App\Models\Vote; +use App\Services\NotificationService; use Illuminate\Support\Facades\Auth; class CashRecordObserver @@ -20,17 +21,24 @@ class CashRecordObserver 'description' => "Transaksi kas baru: {$record->description} sebesar Rp " . number_format($record->amount, 0, ',', '.'), ]); - // Threshold: 500rb–2jt → buat approval ketua + // Threshold: 500rb–2jt → buat approval ketua + notif if ($record->amount >= 500_000 && $record->amount <= 2_000_000) { - Approval::create([ + $approval = Approval::create([ 'model_type' => CashRecord::class, 'model_id' => $record->id, 'required_approvals' => 1, 'status' => 'pending', ]); + + NotificationService::toRole('ketua', + 'Transaksi Kas Butuh Persetujuan', + "Transaksi \"{$record->description}\" senilai Rp " . number_format($record->amount, 0, ',', '.') . " menunggu persetujuan Anda.", + 'warning', + route('filament.admin.resources.cash-records.index') + ); } - // Threshold: > 2jt → buat voting + // Threshold: > 2jt → buat voting + notif semua anggota if ($record->amount > 2_000_000) { Vote::create([ 'title' => "Persetujuan Transaksi: {$record->description}", @@ -41,6 +49,13 @@ class CashRecordObserver 'deadline' => now()->addDays(3), 'created_by' => Auth::id(), ]); + + NotificationService::toRole('ketua', + 'Voting Transaksi Besar Dibuat', + "Transaksi \"{$record->description}\" senilai Rp " . number_format($record->amount, 0, ',', '.') . " memerlukan voting.", + 'warning', + route('filament.admin.resources.votes.index') + ); } }