This commit is contained in:
Saufi
2026-06-03 08:51:22 +08:00
commit a14d43fe34
347 changed files with 38197 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
<?php
namespace App\Http\Controllers\Kewangan;
use App\Http\Concerns\SortsQuery;
use App\Http\Controllers\Controller;
use App\Http\Requests\Kewangan\UpdateBankVerificationRequest;
use App\Models\BankVerification;
use App\Models\Position;
use App\Models\PusatMengundi;
use App\Services\Finance\BankVerificationService;
use App\Services\Finance\FinanceExportService;
use App\Services\Finance\FinanceVerificationQuery;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\View\View;
use Symfony\Component\HttpFoundation\StreamedResponse;
class BankVerificationController extends Controller
{
use SortsQuery;
public function index(Request $request, FinanceVerificationQuery $verificationQuery): View
{
$filters = $this->filters($request);
return view('kewangan.bank.index', [
'verifications' => $this->sortedQuery(
$verificationQuery->build($filters),
['status'],
'id',
'desc'
)->paginate(15)->withQueryString(),
'positions' => Position::query()->orderBy('sort_order')->orderBy('name')->get(),
'pusats' => PusatMengundi::query()->orderBy('name')->get(),
'filters' => $filters,
]);
}
public function show(BankVerification $bankVerification): View
{
return view('kewangan.bank.show', [
'verification' => $bankVerification->load([
'application.election',
'application.pusatMengundi',
'application.approvedPosition',
'application.requestedPosition',
'application.documents',
'application.staffAssignments.position',
'application.staffAssignments.saluranMengundi',
'verifiedBy',
]),
]);
}
public function update(UpdateBankVerificationRequest $request, BankVerification $bankVerification, BankVerificationService $service): RedirectResponse
{
$service->update($bankVerification, $request->user(), $request->validated());
return redirect()->route('kewangan.bank.show', $bankVerification)
->with('status', 'Status verifikasi bank telah dikemas kini.');
}
public function export(Request $request, FinanceExportService $exportService): StreamedResponse
{
$exportLog = $exportService->export($request->user(), $this->filters($request));
return Storage::disk($exportLog->disk ?? 'local')
->download($exportLog->path, $exportLog->file_name);
}
/**
* @return array<string, mixed>
*/
private function filters(Request $request): array
{
return [
'status' => $request->filled('status') ? $request->string('status')->toString() : null,
'pusat_mengundi_id' => $request->filled('pusat_mengundi_id') ? $request->integer('pusat_mengundi_id') : null,
'role_id' => $request->filled('role_id') ? $request->integer('role_id') : null,
'missing_bank_statement' => $request->boolean('missing_bank_statement'),
'missing_account_number' => $request->boolean('missing_account_number'),
'q' => $request->filled('q') ? $request->string('q')->toString() : null,
];
}
}