88 lines
3.3 KiB
PHP
88 lines
3.3 KiB
PHP
<?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,
|
|
];
|
|
}
|
|
}
|