Files
webstatement/app/Http/Controllers/WebstatementController.php
Daeng Deni Mardaeni d4efa58f1b feat(webstatement): tambahkan fitur ekspor statement rekening
- Menambahkan fungsi `printStatementRekening` pada `WebstatementController` untuk mendukung ekspor statement rekening:
  - Mengambil saldo rekening berdasarkan `account_number` dan `period`.
  - Melakukan validasi input seperti `accountNumber`, `period`, dan `clientName`.
  - Menambah log proses ekspor, termasuk saat fungsi dijalankan, keberhasilan pengiriman job, dan error jika terjadi.
  - Mengantrekan job `ExportStatementPeriodJob` dengan parameter seperti `account_number`, `period`, `balance`, dan `client_name`.
  - Menangani error dengan logging detail kegagalan ekspor dan memberikan respon yang sesuai.

- Memperbarui rute pada file `web.php`:
  - Menambahkan endpoint baru `/debug/test-statement` untuk debugging ekspor statement menggunakan controller `WebstatementController`.

- Tujuan perubahan ini:
  - Mendukung proses ekspor data statement rekening secara terstruktur.
  - Memberikan kemudahan debugging dan pelacakan proses ekspor.
  - Memastikan fleksibilitas dalam pengelolaan saldo dan data rekening.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-06-04 14:52:35 +07:00

206 lines
7.4 KiB
PHP

<?php
namespace Modules\Webstatement\Http\Controllers;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Contracts\Bus\Dispatcher;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Modules\Webstatement\Jobs\ExportStatementJob;
use Modules\Webstatement\Models\AccountBalance;
use Modules\Webstatement\Models\StmtEntry;
use Modules\Webstatement\Models\TempFundsTransfer;
use Modules\Webstatement\Models\TempStmtNarrFormat;
use Modules\Webstatement\Models\TempStmtNarrParam;
class WebstatementController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$jobIds = [];
$data = [];
foreach ($this->listAccount() as $clientName => $accounts) {
foreach ($accounts as $accountNumber) {
foreach ($this->listPeriod() as $period) {
$job = new ExportStatementJob(
$accountNumber,
$period,
$this->getAccountBalance($accountNumber, $period),
$clientName // Pass the client name to the job
);
$jobIds[] = app(Dispatcher::class)->dispatch($job);
$data[] = [
'client_name' => $clientName,
'account_number' => $accountNumber,
'period' => $period
];
}
}
}
return response()->json([
'message' => 'Statement export jobs have been queued',
'jobs' => array_map(function ($index, $jobId) use ($data) {
return [
'job_id' => $jobId,
'client_name' => $data[$index]['client_name'],
'account_number' => $data[$index]['account_number'],
'period' => $data[$index]['period'],
'file_name' => "{$data[$index]['client_name']}_{$data[$index]['account_number']}_{$data[$index]['period']}.csv"
];
}, array_keys($jobIds), $jobIds)
]);
}
function listAccount(){
return [
'PLUANG' => [
'1080426085',
'1080425781',
],
'OY' => [
'1081647484',
'1081647485',
],
'INDORAYA' => [
'1083123710',
'1083123711',
'1083123712',
'1083123713',
'1083123714',
'1083123715',
'1083123716',
'1083123718',
'1083123719',
'1083123721',
'1083123722',
'1083123723',
'1083123724',
'1083123726',
'1083123727',
'1083123728',
'1083123730',
'1083123731',
'1083123732',
'1083123734',
'1083123735',
],
'TDC' => [
'1086677889',
'1086677890',
'1086677891',
'1086677892',
'1086677893',
'1086677894',
'1086677895',
'1086677896',
'1086677897',
],
'ASIA_PARKING' => [
'1080119298',
'1080119361',
'1080119425',
'1080119387',
'1082208069',
],
'DAU' => [
'1085151668',
],
'EGR' => [
'1085368601',
],
'SARANA_PACTINDO' => [
'1078333878',
],
'SWADAYA_PANDU' => [
'0081272689',
]
];
}
function listPeriod(){
return [
date('Ymd', strtotime('-1 day'))
];
}
function getAccountBalance($accountNumber, $period)
{
$accountBalance = AccountBalance::where('account_number', $accountNumber)
->where('period', '<', $period)
->orderBy('period', 'desc')
->first();
return $accountBalance->actual_balance ?? 0;
}
function printStatementRekening() {
$accountNumber = '1234567890';
$period = '202505';
$balance = AccountBalance::where('account_number', $accountNumber)
->when($period === '202505', function($query) {
return $query->where('period', '>=', '20250512')
->orderBy('period', 'asc');
}, function($query) use ($period) {
// Get balance from last day of previous month
$firstDayOfMonth = Carbon::createFromFormat('Ym', $period)->startOfMonth();
$lastDayPrevMonth = $firstDayOfMonth->copy()->subDay()->format('Ymd');
return $query->where('period', $lastDayPrevMonth);
})
->first()
->actual_balance ?? '0.00';
$clientName = 'client1';
try {
\Log::info("Starting statement export for account: {$accountNumber}, period: {$period}, client: {$clientName}");
// Validate inputs
if (empty($accountNumber) || empty($period) || empty($clientName)) {
throw new \Exception('Required parameters missing');
}
// Dispatch the job
$job = ExportStatementPeriodJob::dispatch($accountNumber, $period, $balance, $clientName);
\Log::info("Statement export job dispatched successfully", [
'job_id' => $job->job_id ?? null,
'account' => $accountNumber,
'period' => $period,
'client' => $clientName
]);
return [
'success' => true,
'message' => 'Statement export job queued successfully',
'data' => [
'job_id' => $job->job_id ?? null,
'account_number' => $accountNumber,
'period' => $period,
'client_name' => $clientName
]
];
} catch (\Exception $e) {
\Log::error("Failed to export statement", [
'error' => $e->getMessage(),
'account' => $accountNumber,
'period' => $period
]);
return [
'success' => false,
'message' => 'Failed to queue statement export job',
'error' => $e->getMessage()
];
}
}
}