- **WebstatementController.php**: - Menyederhanakan fungsi `index()` dengan mengubah parameter menjadi langsung `string $queueName='default'`. - Menghapus pengambilan parameter `$queueName` dari objek `Request`. - **ExportStatementPeriodJob.php**: - Memperbaiki perhitungan saldo berjalan (`running balance`) dengan mempertimbangkan mata uang. - Menambahkan logika penggunaan `amount_fcy` jika mata uang bukan IDR. - Menyesuaikan tipe transaksi (D/C) menggunakan nilai `amount` yang telah disesuaikan. - **GenerateBiayaKartuCsvJob.php**: - Mengubah daftar produk yang dikecualikan menjadi `['6031','6021','6042']`. - Memperbaiki filter khusus dengan mengecualikan `product_code` 6004 jika `ctdesc` = CLASSIC. - Menambahkan kolom hash unik 16 digit pada data CSV untuk identifikasi setiap record. - **ProcessCustomerDataJob.php**: - Menambahkan mapping baru `name_1` → `name` pada `getHeaderMapping`. - Menambahkan logging untuk field `fillable` agar debugging lebih mudah.
245 lines
8.2 KiB
PHP
245 lines
8.2 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 Modules\Webstatement\Jobs\ExportStatementJob;
|
|
use Modules\Webstatement\Models\AccountBalance;
|
|
use Modules\Webstatement\Jobs\ExportStatementPeriodJob;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class WebstatementController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
* Menjalankan export statement untuk semua akun dengan queue name yang dapat dikustomisasi
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function index(string $queueName='default')
|
|
{
|
|
Log::info('Starting statement export process', [
|
|
'queue_name' => $queueName
|
|
]);
|
|
|
|
$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
|
|
);
|
|
|
|
// Dispatch job dengan queue name yang spesifik
|
|
$jobIds[] = app(Dispatcher::class)->dispatch($job->onQueue($queueName));
|
|
$data[] = [
|
|
'client_name' => $clientName,
|
|
'account_number' => $accountNumber,
|
|
'period' => $period,
|
|
'queue_name' => $queueName
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
Log::info('Statement export jobs queued successfully', [
|
|
'total_jobs' => count($jobIds),
|
|
'queue_name' => $queueName
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Statement export jobs have been queued',
|
|
'queue_name' => $queueName,
|
|
'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'],
|
|
'queue_name' => $data[$index]['queue_name'],
|
|
'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',
|
|
],
|
|
"AWAN_LINTANG_SOLUSI"=> [
|
|
"1084269430"
|
|
],
|
|
"MONETA"=> [
|
|
"1085667890"
|
|
]
|
|
];
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
/**
|
|
* Print statement rekening dengan queue name yang dapat dikustomisasi
|
|
*
|
|
* @param string $accountNumber
|
|
* @param string|null $period
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
function printStatementRekening($accountNumber, $period = null, Request $request = null) {
|
|
$queueName = $request ? $request->get('queue_name', 'default') : 'default';
|
|
$period = $period ?? date('Ym');
|
|
|
|
$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}", [
|
|
'account_number' => $accountNumber,
|
|
'period' => $period,
|
|
'client_name' => $clientName,
|
|
'queue_name' => $queueName
|
|
]);
|
|
|
|
// Validate inputs
|
|
if (empty($accountNumber) || empty($period) || empty($clientName)) {
|
|
throw new \Exception('Required parameters missing');
|
|
}
|
|
|
|
// Dispatch the job dengan queue name yang spesifik
|
|
$job = ExportStatementPeriodJob::dispatch($accountNumber, $period, $balance, $clientName)
|
|
->onQueue($queueName);
|
|
|
|
Log::info("Statement export job dispatched successfully", [
|
|
'job_id' => $job->job_id ?? null,
|
|
'account' => $accountNumber,
|
|
'period' => $period,
|
|
'client' => $clientName,
|
|
'queue_name' => $queueName
|
|
]);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Statement export job queued successfully',
|
|
'data' => [
|
|
'job_id' => $job->job_id ?? null,
|
|
'account_number' => $accountNumber,
|
|
'period' => $period,
|
|
'client_name' => $clientName,
|
|
'queue_name' => $queueName
|
|
]
|
|
]);
|
|
|
|
} catch (\Exception $e) {
|
|
Log::error("Failed to export statement", [
|
|
'error' => $e->getMessage(),
|
|
'account' => $accountNumber,
|
|
'period' => $period,
|
|
'queue_name' => $queueName
|
|
]);
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Failed to queue statement export job',
|
|
'error' => $e->getMessage(),
|
|
'queue_name' => $queueName
|
|
]);
|
|
}
|
|
}
|
|
}
|