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,58 @@
<?php
namespace App\Services\Finance;
use App\Exports\FinanceVerificationExport;
use App\Models\Application;
use App\Models\ExportLog;
use App\Models\User;
use Illuminate\Support\Facades\Storage;
class FinanceExportService
{
public function __construct(
private readonly FinanceVerificationQuery $verificationQuery,
private readonly FinanceVerificationExport $export,
) {}
/**
* @param array<string, mixed> $filters
*/
public function export(User $actor, array $filters): ExportLog
{
$verifications = $this->verificationQuery->build($filters)->get();
$fileName = 'finance-verification-'.now()->format('Ymd-His').'.xlsx';
$path = 'exports/finance/'.$fileName;
Storage::disk('local')->makeDirectory('exports/finance');
$absolutePath = Storage::disk('local')->path($path);
$this->export->write($verifications, $absolutePath);
$firstApplication = $verifications->first()?->application;
$electionId = $firstApplication instanceof Application ? $firstApplication->election_id : null;
$log = ExportLog::query()->create([
'election_id' => $electionId,
'generated_by_user_id' => $actor->id,
'generated_at' => now(),
'report_type' => 'finance_verification_list',
'filter_parameters' => $filters,
'file_name' => $fileName,
'disk' => 'local',
'path' => $path,
]);
activity('exports')
->performedOn($log)
->causedBy($actor)
->withProperties([
'report_type' => 'finance_verification_list',
'filters' => $filters,
'row_count' => $verifications->count(),
])
->log('finance_verification_export_generated');
return $log;
}
}