bulkPaymentImportService->activePaymentSchedules(); $unpaidSchedules = $activeSchedules->whereIn('payment_status', ['belum_bayar', 'lewat']); $paidSchedules = $activeSchedules->whereIn('payment_status', ['dibayar', 'selesai']); return view('staff.bulk-payments-index', [ 'activeSchedules' => $activeSchedules, 'activeAccountCount' => $activeSchedules->pluck('installment_application_id')->unique()->count(), 'unpaidScheduleCount' => $unpaidSchedules->count(), 'paidScheduleCount' => $paidSchedules->count(), 'totalUnpaidAmount' => $unpaidSchedules->sum(fn ($schedule) => (float) $schedule->amount), 'importResult' => session('bulk_payment_result'), ]); } public function downloadTemplate(): BinaryFileResponse { return Excel::download( new SimpleArrayExport( BulkPaymentImportService::HEADINGS, $this->bulkPaymentImportService->templateRows(), ), 'template-kemaskini-bayaran-pukal.xlsx' ); } public function store(ImportBulkPaymentRequest $request): RedirectResponse { $result = $this->bulkPaymentImportService->import($request->file('file'), $request->user()); $message = 'Fail bayaran pukal selesai diproses. Berjaya: '.$result['success'].', gagal: '.$result['failed'].', diabaikan: '.$result['skipped'].'.'; return redirect() ->route('staff.bulk-payments.index') ->with($result['failed'] > 0 ? 'warning' : 'success', $message) ->with('bulk_payment_result', $result); } }