feat(webstatement): perbarui proses pembuatan dan pengunggahan file CSV per cabang

- Menambahkan logika untuk membagi kartu ATM berdasarkan cabang menggunakan `groupBy`.
- Memperbarui pembuatan nama file CSV agar mencakup informasi cabang dan timestamp.
- Menyesuaikan proses pembuatan dan penulisan file CSV agar mendukung pemrosesan kartu per cabang.
- Menambahkan validasi untuk memastikan file CSV dapat dibuat sebelum proses penulisan.
- Memisahkan dan membersihkan file CSV untuk setiap cabang setelah selesai diproses.
- Memodifikasi proses pengunggahan file ke SFTP dengan parameter cabang.
- Mengganti struktur output fungsi `generateAtmCardCsv` menjadi array dengan rincian:
  - Nama cabang (`branch`).
  - Lokasi file CSV yang dihasilkan (`localFilePath`).
  - Jumlah kartu yang diproses per cabang (`recordCount`).
  - Status pengunggahan ke SFTP (`uploadToSftp`).
  - Tanggal dan waktu proses (`timestamp`).

Perubahan ini bertujuan meningkatkan fleksibilitas dan efisiensi dalam pengelolaan file CSV berdasarkan cabang, serta memudahkan pelacakan hasil proses per cabang.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
This commit is contained in:
Daeng Deni Mardaeni
2025-05-17 16:47:57 +07:00
parent c35731c92f
commit 795c90a229

View File

@@ -110,46 +110,51 @@
*
* @return array Information about the generated file and upload status
*/
private function generateAtmCardCsv()
: array
private function generateAtmCardCsv(): array
{
$cards = $this->getEligibleAtmCards();
//$filename = storage_path('app/' . $this->csvFilename);
$cardsByBranch = $cards->groupBy('branch');
$results = [];
// Add date-time to filename
$dateTime = now()->format('Ymd_Hi');
$filenameWithDate = pathinfo($this->csvFilename, PATHINFO_FILENAME) .
'_' . $dateTime . '.' .
pathinfo($this->csvFilename, PATHINFO_EXTENSION);
foreach ($cardsByBranch as $branch => $branchCards) {
$dateTime = now()->format('Ymd_Hi');
$branchFilename = pathinfo($this->csvFilename, PATHINFO_FILENAME)
. '_' . $branch
. '_' . $dateTime . '.'
. pathinfo($this->csvFilename, PATHINFO_EXTENSION);
$filename = storage_path('app/' . $filenameWithDate);
$filename = storage_path('app/' . $branchFilename);
$handle = fopen($filename, 'w+');
if (!$handle) {
throw new RuntimeException("Tidak dapat membuat file CSV: $filename");
}
try {
foreach ($cards as $card) {
$fee = $this->determineCardFee($card);
$csvRow = $this->createCsvRow($card, $fee);
fputcsv($handle, $csvRow, '|');
$handle = fopen($filename, 'w+');
if (!$handle) {
throw new RuntimeException("Tidak dapat membuat file CSV: $filename");
}
} finally {
fclose($handle);
try {
foreach ($branchCards as $card) {
$fee = $this->determineCardFee($card);
$csvRow = $this->createCsvRow($card, $fee);
fputcsv($handle, $csvRow, '|');
}
} finally {
fclose($handle);
}
$this->cleanupCsvFile($filename);
// Upload file ke SFTP
$uploadSuccess = $this->uploadToSftpKartu($filename, $card->branch);
$results[] = [
'branch' => $branch,
'localFilePath' => $filename,
'recordCount' => count($branchCards),
'uploadToSftp' => $uploadSuccess,
'timestamp' => now()->format('Y-m-d H:i:s')
];
}
$this->cleanupCsvFile($filename);
// Upload file ke SFTP
$uploadSuccess = $this->uploadToSftpKartu($filename);
return [
'localFilePath' => $filename,
'recordCount' => count($cards),
'uploadToSftp' => $uploadSuccess,
'timestamp' => now()->format('Y-m-d H:i:s')
];
return $results;
}
/**