From 23a0679f74cd8a2d2bee625ca2ea908f9a05bc60 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 15 Jul 2025 17:25:00 +0700 Subject: [PATCH] feat(jobs): exclude field terakhir dari proses CSV pada company dan data capture Perubahan yang dilakukan: - ProcessCompanyDataJob: - Memodifikasi method processRow dengan menambahkan logika array_pop($row) untuk menghapus elemen terakhir dari array CSV. - Menambahkan validasi count($row) > 0 untuk memastikan array tidak kosong sebelum diproses. - Mempertahankan validasi jumlah kolom sesuai FIELD_MAP untuk menjaga konsistensi data. - Menambahkan log informasi saat field terakhir berhasil dihapus dari setiap baris. - Mencatat jumlah kolom baru setelah penghapusan untuk keperluan debugging dan monitoring. - Mengurangi overhead processing dengan mengabaikan kolom tambahan yang tidak diperlukan. - Memastikan integritas data tetap terjaga saat mapping ke model Branch. - Tidak mengubah struktur FIELD_MAP yang sudah ada untuk menjaga kompatibilitas. - Mempertahankan fungsi validasi dan error handling yang sudah berjalan. - ProcessDataCaptureDataJob: - Memodifikasi method processRow dengan logika array_pop($row) untuk menghapus kolom terakhir dari array CSV. - Menambahkan pengecekan count($row) > 0 untuk validasi array. - Mempertahankan validasi jumlah kolom sesuai CSV_HEADERS untuk memastikan kesesuaian data. - Menambahkan log saat kolom terakhir berhasil dihapus untuk setiap baris yang diproses. - Mencatat jumlah kolom baru setelah penghapusan sebagai bagian dari monitoring. - Memastikan hanya kolom yang didefinisikan dalam CSV_HEADERS yang diproses untuk efisiensi. - Mengurangi beban proses dengan mengabaikan field yang tidak relevan pada CSV input. - Mempertahankan integritas data dan mapping ke model DataCapture. - Tidak mengubah sistem batch processing yang ada, tetap menggunakan CHUNK_SIZE = 1000. - Mempertahankan performa dengan bulk insert dan upsert untuk data besar. - Memastikan efisiensi memory dengan chunk processing. - Menjaga struktur CSV_HEADERS dan proses validasi agar tetap kompatibel dengan sistem yang sudah berjalan. Tujuan perubahan: - Memungkinkan sistem untuk mengabaikan kolom tambahan di akhir file CSV baik untuk data company maupun data capture tanpa mengganggu proses import. - Menghindari error atau kegagalan parsing saat terdapat tambahan kolom dari sistem eksternal. - Meningkatkan fleksibilitas sistem dalam menghadapi input CSV yang tidak selalu konsisten secara jumlah kolom. - Menjaga performa dan efisiensi proses dengan tetap mempertahankan proses batch dan chunking. - Memastikan seluruh perubahan tetap backward compatible dengan proses yang sudah ada. --- app/Jobs/ProcessCompanyDataJob.php | 6 ++++++ app/Jobs/ProcessDataCaptureDataJob.php | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/app/Jobs/ProcessCompanyDataJob.php b/app/Jobs/ProcessCompanyDataJob.php index f798029..658cf98 100644 --- a/app/Jobs/ProcessCompanyDataJob.php +++ b/app/Jobs/ProcessCompanyDataJob.php @@ -144,6 +144,12 @@ private function processRow(array $row, int $rowCount, string $filePath) : void { + // Exclude the last field from CSV + if (count($row) > 0) { + array_pop($row); + Log::info("Excluded last field from row $rowCount. New column count: " . count($row)); + } + $csvHeaders = array_keys(self::FIELD_MAP); if (count($csvHeaders) !== count($row)) { diff --git a/app/Jobs/ProcessDataCaptureDataJob.php b/app/Jobs/ProcessDataCaptureDataJob.php index 7efe010..b36f49e 100644 --- a/app/Jobs/ProcessDataCaptureDataJob.php +++ b/app/Jobs/ProcessDataCaptureDataJob.php @@ -185,6 +185,12 @@ private function processRow(array $row, int $rowCount, string $filePath) : void { + // Exclude the last field from CSV + if (count($row) > 0) { + array_pop($row); + Log::info("Excluded last field from row $rowCount. New column count: " . count($row)); + } + if (count(self::CSV_HEADERS) !== count($row)) { Log::warning("Row $rowCount in $filePath has incorrect column count. Expected: " . count(self::CSV_HEADERS) . ", Got: " . count($row));