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,19 +110,20 @@
* *
* @return array Information about the generated file and upload status * @return array Information about the generated file and upload status
*/ */
private function generateAtmCardCsv() private function generateAtmCardCsv(): array
: array
{ {
$cards = $this->getEligibleAtmCards(); $cards = $this->getEligibleAtmCards();
//$filename = storage_path('app/' . $this->csvFilename); $cardsByBranch = $cards->groupBy('branch');
$results = [];
// Add date-time to filename foreach ($cardsByBranch as $branch => $branchCards) {
$dateTime = now()->format('Ymd_Hi'); $dateTime = now()->format('Ymd_Hi');
$filenameWithDate = pathinfo($this->csvFilename, PATHINFO_FILENAME) . $branchFilename = pathinfo($this->csvFilename, PATHINFO_FILENAME)
'_' . $dateTime . '.' . . '_' . $branch
pathinfo($this->csvFilename, PATHINFO_EXTENSION); . '_' . $dateTime . '.'
. pathinfo($this->csvFilename, PATHINFO_EXTENSION);
$filename = storage_path('app/' . $filenameWithDate); $filename = storage_path('app/' . $branchFilename);
$handle = fopen($filename, 'w+'); $handle = fopen($filename, 'w+');
if (!$handle) { if (!$handle) {
@@ -130,7 +131,7 @@
} }
try { try {
foreach ($cards as $card) { foreach ($branchCards as $card) {
$fee = $this->determineCardFee($card); $fee = $this->determineCardFee($card);
$csvRow = $this->createCsvRow($card, $fee); $csvRow = $this->createCsvRow($card, $fee);
fputcsv($handle, $csvRow, '|'); fputcsv($handle, $csvRow, '|');
@@ -142,16 +143,20 @@
$this->cleanupCsvFile($filename); $this->cleanupCsvFile($filename);
// Upload file ke SFTP // Upload file ke SFTP
$uploadSuccess = $this->uploadToSftpKartu($filename); $uploadSuccess = $this->uploadToSftpKartu($filename, $card->branch);
return [ $results[] = [
'branch' => $branch,
'localFilePath' => $filename, 'localFilePath' => $filename,
'recordCount' => count($cards), 'recordCount' => count($branchCards),
'uploadToSftp' => $uploadSuccess, 'uploadToSftp' => $uploadSuccess,
'timestamp' => now()->format('Y-m-d H:i:s') 'timestamp' => now()->format('Y-m-d H:i:s')
]; ];
} }
return $results;
}
/** /**
* Get eligible ATM cards from database * Get eligible ATM cards from database
* *