feat(webstatement): tambahkan atribut client untuk pemisahan data per klien
- Mengubah struktur listAccount menjadi array multidimensional untuk mendukung penamaan klien. - Menambahkan parameter `client_name` pada data yang dikirimkan ke job ExportStatementJob. - Memperbaiki penulisan nama file export dengan menambahkan informasi nama klien. - Mengimplementasikan pembuatan direktori berdasarkan nama klien dan nomor akun untuk pengelompokan file secara terstruktur. - Menambahkan atribut baru `client` pada ExportStatementJob untuk mengelola data terkait klien secara lebih spesifik. - Melakukan perubahan pada proses export CSV: - Menentukan struktur direktori berdasarkan klien dan akun. - Menambahkan langkah untuk membuat direktori klien dan akun jika belum ada. - Menyesuaikan log informasi dan path untuk setiap file yang di-export. - Perubahan ini bertujuan untuk mempermudah pengelolaan statement per klien dengan struktur file yang lebih terorganisir. Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
protected $period;
|
||||
protected $saldo;
|
||||
protected $disk;
|
||||
protected $client;
|
||||
protected $fileName;
|
||||
protected $chunkSize = 1000; // Proses data dalam chunk untuk mengurangi penggunaan memori
|
||||
|
||||
@@ -37,12 +38,13 @@
|
||||
* @param string $saldo
|
||||
* @param string $disk
|
||||
*/
|
||||
public function __construct(string $account_number, string $period, string $saldo, string $disk = 'local')
|
||||
public function __construct(string $account_number, string $period, string $saldo, string $client = '', string $disk = 'local')
|
||||
{
|
||||
$this->account_number = $account_number;
|
||||
$this->period = $period;
|
||||
$this->saldo = $saldo;
|
||||
$this->disk = $disk;
|
||||
$this->client = $client;
|
||||
$this->fileName = "{$account_number}_{$period}.csv";
|
||||
}
|
||||
|
||||
@@ -298,9 +300,25 @@
|
||||
private function exportToCsv()
|
||||
: void
|
||||
{
|
||||
// Determine the base path based on client
|
||||
$basePath = !empty($this->client)
|
||||
? "statements/{$this->client}"
|
||||
: "statements";
|
||||
|
||||
// Create client directory if it doesn't exist
|
||||
if (!empty($this->client)) {
|
||||
Storage::disk($this->disk)->makeDirectory($basePath);
|
||||
}
|
||||
|
||||
// Create account directory
|
||||
$accountPath = "{$basePath}/{$this->account_number}";
|
||||
Storage::disk($this->disk)->makeDirectory($accountPath);
|
||||
|
||||
$filePath = "{$accountPath}/{$this->fileName}";
|
||||
|
||||
// Delete existing file if it exists
|
||||
if (Storage::disk($this->disk)->exists("statements/{$this->fileName}")) {
|
||||
Storage::disk($this->disk)->delete("statements/{$this->fileName}");
|
||||
if (Storage::disk($this->disk)->exists($filePath)) {
|
||||
Storage::disk($this->disk)->delete($filePath);
|
||||
}
|
||||
|
||||
$csvContent = "NO|TRANSACTION.DATE|REFERENCE.NUMBER|TRANSACTION.AMOUNT|TRANSACTION.TYPE|DESCRIPTION|END.BALANCE|ACTUAL.DATE\n";
|
||||
@@ -309,7 +327,7 @@
|
||||
ProcessedStatement::where('account_number', $this->account_number)
|
||||
->where('period', $this->period)
|
||||
->orderBy('sequence_no')
|
||||
->chunk($this->chunkSize, function ($statements) use (&$csvContent) {
|
||||
->chunk($this->chunkSize, function ($statements) use (&$csvContent, $filePath) {
|
||||
foreach ($statements as $statement) {
|
||||
$csvContent .= implode('|', [
|
||||
$statement->sequence_no,
|
||||
@@ -324,11 +342,11 @@
|
||||
}
|
||||
|
||||
// Tulis ke file secara bertahap untuk mengurangi penggunaan memori
|
||||
Storage::disk($this->disk)->append("statements/{$this->fileName}", $csvContent);
|
||||
Storage::disk($this->disk)->append($filePath, $csvContent);
|
||||
$csvContent = ''; // Reset content setelah ditulis
|
||||
});
|
||||
|
||||
Log::info("Statement exported to {$this->disk} disk: statements/{$this->fileName}");
|
||||
Log::info("Statement exported to {$this->disk} disk: {$filePath}");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user