- Memperbarui fungsi `combinePdfs` di `CombinePdfController`:
- Menghapus penggunaan parameter dari request dan mengganti dengan parameter langsung `$period`.
- Menambahkan filter `branch_code` `ID0010001` pada pemanggilan data akun untuk memastikan hanya akun tertentu yang diproses.
- Mengubah jalur pencarian file PDF ke direktori baru: `app/STMT/r14` dan `app/STMT/r23` untuk menyelaraskan struktur penyimpanan file.
- Memperbarui command `webstatement:combine-pdf`:
- Menambahkan opsi baru `--period` untuk menyederhanakan pengaturan periode penggabungan PDF melalui format `Ym` (contoh: 202506).
- Menghapus penggunaan `request()` pada command untuk memaksimalkan pengelolaan periode langsung dari opsi command-line.
- Tujuan pembaruan ini:
- Memastikan proses combine PDF hanya memproses data relevan berdasarkan filter branch dan struktur direktori baru.
- Menyempurnakan fleksibilitas parameter periode pada command-line untuk mengurangi dependensi terhadap input request.
- Meningkatkan konsistensi dan efisiensi dalam pengelolaan file PDF sesuai periode dan filter branch tertentu.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui fungsi dalam `WebstatementController`:
- Mengganti format respons sebelumnya dengan `array` menjadi `response()->json()` untuk semua respon sukses maupun error.
- Menyesuaikan return pada kasus keberhasilan pengantrean job ekspor pernyataan.
- Menambahkan handling kesalahan menggunakan `response()->json()` untuk memberikan informasi error yang lebih terstruktur dan konsisten.
- Perubahan ini bertujuan untuk:
- Mengkonsolidasikan format respons API menjadi JSON agar lebih sesuai dengan praktik terbaik pengembangan API.
- Mempermudah pengguna dalam memproses respons API, terutama yang bekerja dengan data JSON.
- Meningkatkan konsistensi logika penanganan respons dalam aplikasi.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan kelas command `ExportPeriodStatements` ke dalam register provider `WebstatementServiceProvider`.
- Memungkinkan penggunaan command ini untuk mengolah dan mengekspor data pernyataan rekening dengan periode tertentu.
- Menyempurnakan fungsionalitas ekspor data untuk mendukung kebutuhan laporan sesuai interval waktu yang ditentukan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan command baru `webstatement:export-period-statements`:
- Mendukung opsi parameter `--account_number` dan `--period` untuk menentukan rekening dan periode ekspor.
- Memproses data pernyataan rekening dengan memanggil fungsi `printStatementRekening` pada `WebstatementController`.
- Menampilkan log proses, termasuk jumlah job ekspor yang berhasil diajukan dan pesan error jika terjadi.
- Memperbarui fungsi `printStatementRekening` di `WebstatementController`:
- Menambahkan parameter input `$accountNumber` dan `$period` untuk mendukung multi-periode secara dinamis.
- Menyesuaikan periode default ke bulan dan tahun saat ini jika parameter tidak disediakan.
- Memvalidasi dan mengambil data saldo berdasarkan `account_number` dan `period`.
- Tujuan pembaruan ini:
- Mendukung efisiensi proses ekspor data rekening dalam periode tertentu.
- Memberikan fleksibilitas lebih dalam command-line operasi pengolahan data pernyataan.
- Menyediakan feedback proses yang jelas kepada pengguna, baik sukses maupun error.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui pemrosesan parameter pada `ProcessDailyMigration`:
- Mengubah logika pengiriman parameter `process_parameter` ke `MigrasiController`:
- Sebelumnya mengirimkan parameter dalam bentuk array.
- Sekarang parameter dikirimkan langsung tanpa pembungkusan array.
- Memastikan parameter diterima dan diproses sesuai dengan perubahan pada controller.
- Memodifikasi fungsi `index` pada `MigrasiController`:
- Menambahkan parameter opsional `$processParameter` pada fungsi.
- Mengganti penggunaan `request('process_parameter')` dengan langsung memeriksa `$processParameter`.
- Menghilangkan dependensi langsung terhadap input request untuk meningkatkan fleksibilitas pemrosesan.
- Tujuan pembaruan ini:
- Menyederhanakan struktur parameter yang digunakan dalam pemrosesan migrasi harian.
- Mengurangi gangguan yang mungkin terjadi akibat ketergantungan terhadap input langsung dari request.
- Memastikan konsistensi dan kompatibilitas pengiriman parameter dari command ke controller.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui rute pada file `web.php`:
- Mengubah fungsi controller untuk endpoint `/debug/test-statement` dari `index` menjadi `printStatementRekening` pada `WebstatementController`.
- Tujuan pembaruan:
- Mengarahkan fungsi endpoint ke proses yang sesuai (cetak statement rekening).
- Memastikan konsistensi dan keakuratan logika pada pengelolaan rute.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan fungsi `printStatementRekening` pada `WebstatementController` untuk mendukung ekspor statement rekening:
- Mengambil saldo rekening berdasarkan `account_number` dan `period`.
- Melakukan validasi input seperti `accountNumber`, `period`, dan `clientName`.
- Menambah log proses ekspor, termasuk saat fungsi dijalankan, keberhasilan pengiriman job, dan error jika terjadi.
- Mengantrekan job `ExportStatementPeriodJob` dengan parameter seperti `account_number`, `period`, `balance`, dan `client_name`.
- Menangani error dengan logging detail kegagalan ekspor dan memberikan respon yang sesuai.
- Memperbarui rute pada file `web.php`:
- Menambahkan endpoint baru `/debug/test-statement` untuk debugging ekspor statement menggunakan controller `WebstatementController`.
- Tujuan perubahan ini:
- Mendukung proses ekspor data statement rekening secara terstruktur.
- Memberikan kemudahan debugging dan pelacakan proses ekspor.
- Memastikan fleksibilitas dalam pengelolaan saldo dan data rekening.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menghapus opsi `--date` dan `--type` dari command `webstatement:process-daily-migration` dan menggantinya dengan opsi baru `--process_parameter`.
- Memperbarui pesan log pada eksekusi command untuk mencatat nilai `process_parameter` sebagai pengganti parameter `date` dan `type`.
- Memperbarui logika pengiriman parameter ke controller:
- Sebelumnya mengirimkan `date` dan `type`, kini diganti menjadi `process_parameter`.
- Tujuan perubahan ini:
- Menyederhanakan pengaturan parameter untuk command migrasi harian.
- Memberikan fleksibilitas lebih dalam penanganan parameter proses migrasi.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan **`ExportStatementPeriodJob`** untuk mendukung ekspor data pernyataan periode ke file CSV:
- Inisialisasi job dengan parameter `account_number`, `period`, `saldo`, `client`, dan `disk`.
- Menghitung tanggal mulai (`startDate`) dan tanggal akhir (`endDate`) berdasarkan periode yang diberikan.
- Log informasi eksekusi termasuk waktu mulai, rentang tanggal, dan hasil akhir.
- Menangani error saat proses berjalan dengan logging terperinci.
- Memproses data pernyataan sebelum ekspor, termasuk:
- Melakukan validasi jumlah data yang telah diproses sebelumnya.
- Jika data belum sepenuhnya diproses, menghapus data lama pada tabel `processed_statements`.
- Memproses data baru dengan mengolah entri dari tabel `StmtEntry`.
- Membuat narrative dari data transaksi menggunakan model terkait `TempFundsTransfer`, `TempStmtNarrParam`, dan `TempStmtNarrFormat`.
- Menambahkan logika untuk format tanggal transaksi dan narrasi:
- Format tanggal transaksi melalui fungsi `formatTransactionDate` dan `formatActualDate`.
- Narasi dihasilkan dari berbagai sumber, termasuk data transaksi dan parameter lainnya.
- Ekspor data ke file CSV:
- Mengatur struktur folder berdasarkan `client` dan `account_number`.
- Menghapus file lama sebelum membuat file baru untuk menghindari duplikasi.
- Membagi data menjadi chunks untuk mengurangi penggunaan memori.
- Menambahkan header CSV dengan format kolom: `NO|TRANSACTION.DATE|REFERENCE.NUMBER|TRANSACTION.AMOUNT|TRANSACTION.TYPE|DESCRIPTION|END.BALANCE|ACTUAL.DATE`.
- Optimasi proses:
- Proses data dalam batch menggunakan pagination (`chunk`) untuk efisiensi memori.
- Simpan hasil processed statement ke database sementara (`processed_statements`).
- Tambahkan log setiap entri data untuk memonitor keberhasilan proses.
- Tujuan penambahan ini:
- Mendukung proses pengolahan dan pelaporan data rekening secara terstruktur.
- Meningkatkan efisiensi penyimpanan dan akses data besar.
- Menghasilkan file CSV yang dapat digunakan sebagai dokumen untuk laporan eksternal.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan **`DebugStatementController`** untuk mendukung fitur debugging entri pernyataan:
- Fungsi `debugStatement` untuk menganalisis satu entri pernyataan berdasarkan `account_number`, `trans_reference`, dan `period` (opsional).
- Melakukan validasi masukan dari permintaan.
- Mengambil detail entri berdasarkan kriteria yang diberikan.
- Menghasilkan `narrative`, informasi tanggal terformat, dan detail debug.
- Memberikan detail data terkait seperti `ft` dan `transaction`.
- Melakukan penanganan dan log error jika terjadi kegagalan proses.
- Fungsi `listStatements` untuk mendapatkan daftar entri pernyataan berdasarkan kriteria tertentu.
- Validasi dan dukungan parameter `account_number`, `period`, dan `limit`.
- Pengurutan hasil berdasarkan `date_time` secara menurun.
- Menampilkan hasil dalam format JSON termasuk jumlah total data.
- Menambahkan logika tambahan untuk:
- Format tanggal transaksi dan tanggal aktual secara konsisten menggunakan `Carbon`.
- Mendukung pembuatan `narrative` dengan data dari entri pernyataan.
- Mengambil parameter narasi dan formatting berdasarkan tipe narasi melalui model `TempStmtNarrParam` dan `TempStmtNarrFormat`.
- Memperbarui routing dalam file `web.php` dengan menambahkan prefix `debug`:
- **`POST /debug/statement`** -> debug satu entri pernyataan.
- **`GET /debug/statements`** -> daftar semua entri untuk debugging.
- Tujuan pembaruan ini:
- Mempermudah proses analisis dan troubleshooting pada entri pernyataan.
- Memberikan informasi detail terkait kesalahan atau ketidaksesuaian data.
- Membantu pengembang dan pengguna menganalisis informasi transaksi secara mendalam.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui model `Customer` dengan menambahkan properti baru pada `$fillable`:
- `sector`
- `customer_type`
- `birth_incorp_date`
- Menambahkan migrasi baru `add_sector_customer_type_birth_incorp_date_to_customers_table`:
- Menambahkan kolom `sector`, `customer_type`, dan `birth_incorp_date` pada tabel `customers`.
- Semua kolom bersifat nullable untuk menjaga kompatibilitas data lama.
- Menyediakan fungsi rollback dengan menghapus kolom yang ditambahkan.
- Tujuan perubahan ini:
- Mendukung penyimpanan data sektor, tipe pelanggan, dan tanggal lahir/pendirian pada entitas pelanggan.
- Memfasilitasi validasi data tambahan dalam proses bisnis dan laporan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan opsi baru `--process_parameter` pada command `webstatement:process-daily-migration`.
- Memungkinkan pengguna untuk menentukan parameter proses migrasi seperti tanggal (`date`) dan tipe (`type`).
- Menambahkan logging tambahan untuk mencatat nilai parameter yang diproviding pengguna.
- Memperbarui logika command dan controller:
- Mengirimkan parameter `date` dan `type` ke controller untuk mendukung proses migrasi dengan parameter yang lebih spesifik.
- Menambahkan proses migrasi baru untuk data sektor:
- Membuat job `ProcessSectorDataJob` yang bertugas membaca file CSV terkait sektor dari SFTP.
- Melakukan validasi keberadaan file, memproses tiap baris data, dan menyimpannya ke database jika valid.
- Logging untuk setiap aktivitas proses sektor, termasuk error dan kesuksesan per baris.
- Membuat model `Sector` untuk mendukung operasi database data sektor:
- Menambah atribut dapat diolah (`fillable`) seperti `sector_code`, `co_code`, `description`, dll.
- Menambahkan cast `date_time` ke tipe datetime.
- Menambahkan migrasi baru untuk tabel `sectors`:
- Tabel memiliki kolom seperti `id`, `date_time`, `description`, `curr_no`, `co_code`, dan `sector_code`.
- Meningkatkan pendukung penyimpanan data sektor untuk migrasi masa depan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan variabel `$finalPdfPath` untuk menyimpan lintasan file PDF akhir tanpa ekstensi `.dec`.
- Mengimplementasikan logika baru untuk:
1. Menghapus file PDF terenkripsi setelah file berhasil didekripsi.
2. Mengganti nama file dekripsi dengan menghilangkan ekstensi `.dec`.
- Menambahkan logging baru untuk mencatat aktivitas berikut:
1. Penghapusan file PDF terenkripsi setelah berhasil didekripsi.
2. Perubahan nama file dekripsi ke format final.
- Tujuan perubahan ini adalah untuk:
1. Mengoptimalkan ruang penyimpanan dengan menghilangkan file terenkripsi setelah digunakan.
2. Memastikan hasil dekripsi langsung dapat digunakan tanpa perlu pengolahan manual tambahan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan command baru `webstatement:unlock-pdf` untuk membuka file PDF yang dilindungi password:
- Dapat menerima parameter `directory` untuk menetapkan direktori file sumber.
- Opsi `--password` untuk menentukan password yang digunakan dalam proses unlock, dengan default `123456`.
- Menampilkan log proses unlock PDF dengan pesan sukses atau error.
- Membuat job baru `UnlockPdfJob` untuk menangani proses unlock PDF secara asinkron:
- Memindai direktori utama berdasarkan struktur folder (tahun dan ID).
- Membuka proteksi file PDF dengan menggunakan library `qpdf`.
- Menghasilkan file PDF yang telah didekripsi di direktori yang sama dengan nama file ekstensi `.dec.pdf`.
- Melakukan logging untuk setiap file yang berhasil diproses atau ketika terjadi error.
- Menghindari duplikasi dengan memeriksa keberadaan file decrypted sebelumnya.
- Memperbarui `WebstatementServiceProvider`:
- Mendaftarkan command `UnlockPdf` untuk digunakan dalam aplikasi.
- Menambah jadwal otomatisasi harian pada pukul 09:30 untuk menjalankan command `webstatement:unlock-pdf`.
- Logging hasil proses executables ke file `logs/unlock-pdf.log`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan pengaturan ukuran kertas A4 pada proses konversi HTML ke PDF di `ConvertHtmlToPdfJob`:
- Menggunakan metode `setPaper('A4', 'portrait')` untuk menetapkan standar ukuran dan orientasi kertas.
- Memperbarui log proses konversi agar mencantumkan informasi ukuran kertas yang digunakan.
- Tujuan perubahan ini adalah memastikan tampilan PDF lebih terstandarisasi sesuai kebutuhan dokumen.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan command baru `ConvertHtmlToPdf` ke dalam `WebstatementServiceProvider`.
- Mendaftarkan command ke dalam array commands untuk dapat digunakan di aplikasi.
- Memperbarui `schedule` di `WebstatementServiceProvider` untuk menjalankan command `webstatement:convert-html-to-pdf` secara otomatis.
- Ditambahkan penjadwalan harian pada pukul 09:30.
- Logging hasil eksekusi command ke dalam file log `logs/convert-html-to-pdf.log`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan command baru `webstatement:convert-html-to-pdf` untuk melakukan konversi file HTML menjadi PDF secara otomatis:
- Dapat menerima parameter `directory` untuk menentukan direktori sumber file HTML.
- Menampilkan pesan sukses atau error selama proses berjalan.
- Menggunakan konsep asinkron melalui job untuk meningkatkan efisiensi.
- Membuat job baru `ConvertHtmlToPdfJob` untuk menangani proses konversi file:
- Memproses folder yang berisi file HTML berdasarkan struktur direktori tertentu.
- Mengambil semua file HTML dalam suatu folder, kemudian mengonversinya menjadi file PDF.
- Menggunakan library `Barryvdh\DomPDF\Facade\Pdf` untuk konversi format HTML ke PDF.
- Melakukan logging untuk setiap proses berhasil atau ketika terjadi error.
- Memastikan suksesnya konversi ke direktori yang sama dengan file HTML.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan command baru `webstatement:combine-pdf` melalui `CombinePdf` untuk menjalankan proses penggabungan file PDF.
- Proses ini mencakup penggabungan file PDF dari folder r14 dan r23 berdasarkan periode tertentu.
- File PDF yang dihasilkan juga dilindungi dengan password berbasis nomor rekening.
- Membuat controller `CombinePdfController` dengan fungsi utama `combinePdfs` untuk mengontrol alur penggabungan file PDF:
- Mendapatkan daftar akun yang relevan.
- Mengecek file dari folder r14 dan r23 untuk setiap akun.
- Melakukan logging saat file tidak ditemukan atau jika terdapat error dalam proses.
- Mendaftarkan job `CombinePdfJob` untuk memproses file secara async.
- Menambahkan job baru `CombinePdfJob`:
- Menggunakan library `PDFMerger` untuk menggabungkan file.
- Terapkan proteksi password menggunakan library `PDFPasswordProtect`.
- Memastikan direktori output dibuat jika belum ada.
- Melakukan logging saat proses berhasil maupun saat terjadi error.
- Memperbarui `WebstatementServiceProvider`:
- Mendaftarkan command baru ke dalam provider.
- Menambahkan penjadwalan otomatis untuk menjalankan perintah `webstatement:combine-pdf` setiap hari pada pukul 09:30.
- Logging hasil eksekusi ke file log `logs/combine-pdf.log`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Mengubah mekanisme pemrosesan batch `billDetailBatch` menjadi pemrosesan per chunk untuk manajemen memori yang lebih baik.
- Menambahkan langkah penghapusan data eksisting berdasarkan `stmt_entry_ids` sebelum melakukan insert untuk menghindari konflik data.
- Mengganti metode `upsert` dengan kombinasi `delete` dan `insert` untuk tiap chunk data.
- Menyisipkan komentar untuk memberikan penjelasan yang lebih rinci terkait proses chunking.
- Memastikan batch `billDetailBatch` di-reset setelah selesai diproses.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Ubah mekanisme pengolahan batch transaksi ATM agar lebih efisien dan hemat memori.
- Hapus proses `upsert` secara langsung dan ganti dengan pendekatan berikut:
1. Iterasi data batch dalam chunk kecil untuk menghindari konsumsi memori berlebih.
2. Hapus data yang sudah ada berdasarkan `transaction_id` untuk menghindari konflik saat insert ulang.
3. Gunakan metode `insert` untuk memasukkan data sekaligus per chunk.
- Tambahkan logika reset batch setelah selesai pengolahan.
- Tingkatkan skalabilitas dan stabilitas alur pengolahan data dengan mengurangi beban memori saat pemrosesan data besar.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
Ubah alur proses batch pada job untuk meningkatkan efisiensi dan manajemen memori.
- Mengganti metode `upsert` dengan pendekatan manual yang memecah data batch menjadi potongan lebih kecil.
- Menambahkan proses penghapusan record lama berdasarkan `id_teller` sebelum melakukan insert baru untuk menghindari konflik data.
- Menggunakan loop untuk memproses batch dalam potongan-potongan kecil, sehingga mengurangi beban memori.
- Memastikan batch direset setelah selesai diproses untuk menghindari kebocoran data atau konflik.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Mengubah mekanisme pemrosesan `transferBatch` menjadi berbasis chunk untuk mengoptimalkan penggunaan memori.
- Menambahkan logika penghapusan data lama dengan `_id` terkait sebelum menyisipkan data baru untuk menghindari konflik.
- Mengganti metode `upsert` dengan kombinasi `delete` dan `insert` untuk lebih fleksibel dalam penanganan data.
- Memastikan batch transfer diatur ulang setelah selesai diproses.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menghapus logika `updateOrCreate` dan menggantinya dengan penghapusan (`delete`) berdasarkan `stmt_entry_id` sebelum melakukan operasi `insert`.
- Menambahkan pembagian proses ke dalam chunk yang lebih kecil untuk manajemen memori yang lebih baik.
- Memastikan semua `stmt_entry_ids` dalam chunk diekstrak dan digunakan untuk meminimalisir konflik data.
- Menambah logging yang lebih detail dengan `e.getTraceAsString()` untuk mempermudah debugging ketika terdapat error.
- Membersihkan `entryBatch` baik setelah proses sukses maupun ketika terjadi kesalahan untuk mencegah reprocessing pada data yang sama.
Perubahan ini bertujuan untuk meningkatkan efisiensi dan memastikan integritas data selama proses penyimpanan batch.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Refactor proses penyimpanan data pada `ProcessStmtEntryDataJob`:
- Mengganti metode `StmtEntry::upsert` dengan `StmtEntry::updateOrCreate` untuk setiap entri dalam batch.
- Metode `updateOrCreate` memungkinkan pembaruan data atau penyisipan data baru berdasarkan `stmt_entry_id` sebagai kunci unik.
- Meningkatkan fleksibilitas pembaruan data dengan menggunakan loop per entry dibandingkan bulk operation, sehingga lebih kompatibel untuk kasus tertentu.
- Tambahkan file migrasi baru untuk penyesuaian tabel `stmt_entry`:
- File migrasi telah dibuat sebagai dasar, namun implementasi detail dalam tabel masih kosong.
- File ini akan digunakan untuk perubahan skema di masa mendatang sesuai kebutuhan pengembangan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
Penambahan kolom baru pada mapping untuk memperluas informasi yang tersedia dalam pemrosesan data teller.
Detail perubahan:
- Menambahkan key baru bernama `dealer_desk` pada property `$mapping` di file `ProcessTellerDataJob.php`.
- Memastikan data dari kolom `dealer_desk` menjadi bagian dari proses map data.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan atribut baru `dealer_desk` pada properti `$fillable` di model `Teller` untuk memungkinkan atribut ini diisi secara massal.
- Membuat migration baru `2025_05_29_024729_add_dealer_desk_to_tellers_table` untuk penambahan kolom `dealer_desk` ke dalam tabel `tellers`.
- Kolom `dealer_desk` bertipe string dan dapat bernilai null.
- Penempatan kolom dilakukan setelah kolom `last_version`.
- Menambahkan method untuk rollback migration yang menghapus kolom `dealer_desk` dari tabel `tellers`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan daftar field baru pada model `TempFundsTransfer` untuk mendukung pengelolaan data transfer dana sementara.
- Field tambahan meliputi:
- `at_unique_id`
- `bif_ref_no`
- `atm_order_id`
- `api_iss_acct`
- `api_benff_acct`
- `remarks`
- `api_mrchn_id`
- `bif_rcv_acct`
- `bif_snd_acct`
- `bif_rcv_name`
- `bif_va_no`
- Membuat file migrasi bernama `2025_05_29_015537_add_fields_to_temp_funds_transfer_table.php` untuk:
- Menambahkan field baru pada tabel `temp_funds_transfer`.
- Menyediakan mekanisme rollback dengan menghapus field yang ditambahkan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
Perubahan dilakukan untuk mengatasi masalah terkait nilai default `datetime` yang tidak sesuai.
- Mengganti nilai default `datetime` dari `'0000000000'` menjadi `$item->date_time`.
- Memperbaiki logika pengisian nilai `datetime` agar mempertimbangkan nilai dari `$item->$relation?->date_time` terlebih dahulu sebelum menggunakan nilai default `$datetime`.
- Perubahan diterapkan pada dua blok kode dalam berkas `ExportStatementJob.php`.
Langkah ini memastikan nilai `datetime` lebih akurat dan konsisten sesuai data terkait.
Menghapus logika format tanggal yang tidak dipakai untuk menyederhanakan kode dan meningkatkan keterbacaan.
- Menghapus konstanta `DATE_FIELDS` yang tidak lagi digunakan.
- Menghapus fungsi `formatDates` beserta implementasinya yang berisi logika untuk format tanggal dan waktu.
- Menghilangkan pemanggilan fungsi `formatDates` pada loop proses data CSV.
- Optimasi kode untuk mengurangi kompleksitas dan potensi error terkait parsing tanggal/tanggal dan waktu.
- Memastikan data diproses tanpa perlu manipulasi format tanggal yang redundant.
- Tambahkan logika untuk memetakan prefix `trans_reference` ke hubungan objek terkait menggunakan `relationMap`.
- Update method untuk mengambil nilai `date_time` dari properti terkait berdasarkan mapping prefix (`FT`, `TT`, `DC`, `AA`) dan fallback ke default `0000000000` jika mapping tidak ditemukan.
- Modifikasi format tanggal menggunakan kombinasi `booking_date` dan parsing substring yang dinamis dari properti `date_time`.
- Perbaiki pengolahan format tanggal pada dua method yang terpengaruh untuk memastikan data yang lebih dinamis dan akurat.
- Tambahkan fallback error handling tetap menggunakan logging untuk mendeteksi potensi kesalahan format.
- Tambahkan pemrosesan data secara bertahap (chunking) dengan konstanta `CHUNK_SIZE` untuk mengurangi penggunaan memori dan menangani data dalam jumlah besar.
- Perbarui `ProcessArrangementDataJob`:
- Tambahkan properti `arrangementBatch` untuk menyimpan batch data sementara.
- Implementasikan metode `addToBatch` untuk menambahkan data ke batch.
- Implementasikan metode `saveBatch` untuk menyimpan data batch ke database menggunakan metode bulk `TempArrangement::upsert`.
- Tambahkan logging untuk melacak progress pemrosesan data per chunk.
- Reset batch setelah penyimpanan atau ketika terjadi error untuk menghindari pemrosesan ulang data yang gagal.
- Perbarui `ProcessBillDetailDataJob`:
- Tambahkan properti `billDetailBatch` untuk menyimpan batch data sementara.
- Implementasikan metode `addToBatch` untuk menambahkan data ke batch.
- Implementasikan metode `saveBatch` untuk menyimpan data batch ke database menggunakan metode bulk `TempBillDetail::upsert`.
- Tambahkan logging untuk melacak progress pemrosesan data per chunk.
- Reset batch setelah penyimpanan atau ketika terjadi error untuk menghindari pemrosesan ulang data yang gagal.
- Perbaiki penghitungan error count dengan menambahkannya saat terjadi error pada pemrosesan batch.
- Tambahkan timestamp (`created_at` dan `updated_at`) pada setiap record dalam batch sebelum disimpan ke database.
- Lakukan cleanup batch secara otomatis setelah pemrosesan selesai.
- Menambahkan konstanta `CHUNK_SIZE` dengan nilai 1000 untuk memungkinkan pemrosesan data dalam bentuk batch guna mengurangi penggunaan memori.
- Memperkenalkan atribut batch baru (`atmTransactionBatch`, `captureBatch`, `transferBatch`, dan `tellerBatch`) untuk menyimpan data sementara sebelum disimpan ke database.
- Mengganti metode penyimpanan langsung dengan menambahkan data ke batch melalui fungsi baru `addToBatch()`.
- Menambahkan fungsi `saveBatch()` untuk melakukan operasi penyimpanan data dalam jumlah besar (bulk) menggunakan metode `upsert`.
- Memastikan batch akan di-reset setelah penyimpanan, termasuk dalam kasus kegagalan, untuk mencegah reprocessing catatan yang gagal.
- Menambahkan logging tambahan untuk mencatat jumlah batch (chunk) yang telah selesai diproses, memberikan wawasan lebih dalam proses.
- Menambahkan validasi jumlah kolom pada setiap baris data, logging peringatan jika data tidak sesuai, dan mencatat jumlah kesalahan (`errorCount`).
- Secara otomatis menambahkan atribut timestamp (`created_at` dan `updated_at`) pada setiap data sebelum dimasukkan ke dalam batch untuk pelacakan waktu.
- Memodifikasi log error untuk menangani kesalahan pada level yang lebih spesifik, seperti pada baris tertentu dalam file yang diproses.
- Mengoptimalkan pemrosesan data pada job:
- `ProcessAtmTransactionJob` untuk data transaksi ATM.
- `ProcessDataCaptureDataJob` untuk data capture.
- `ProcessFundsTransferDataJob` untuk data transfer dana.
- `ProcessTellerDataJob` untuk data teller.
- Meningkatkan efisiensi dan skalabilitas dengan menyisipkan data secara bulk, mengurangi overhead database, dan menghindari pengolahan data secara satu per satu.
- Menambahkan konstanta `CHUNK_SIZE` untuk membatasi ukuran batch selama proses data.
- Memperkenalkan properti `$entryBatch` untuk menyimpan batch data sementara sebelum disimpan ke database.
- Mengubah metode `saveRecord` menjadi `addToBatch` untuk menambahkan record ke batch alih-alih langsung menyimpannya.
- Menambahkan metode `saveBatch` untuk menyimpan batch data ke database secara efisien menggunakan `upsert`.
- Menangani chunking dalam proses CSV untuk menghindari masalah memori dengan memproses data dalam batch.
- Menambahkan logging pada setiap batch yang selesai diproses untuk melacak kemajuan pemrosesan.
- Memastikan batch yang tersisa diproses setelah selesai membaca file CSV.
- Menambahkan penanganan error saat menyimpan batch untuk mencegah reprocessing pada batch yang gagal memproses.
- Otomatis menambahkan timestamp (`created_at` dan `updated_at`) pada setiap record sebelum dimasukkan ke batch.
- Tambahkan konstanta `CHUNK_SIZE` untuk memproses data dalam ukuran batch guna mengurangi penggunaan memori.
- Perkenalkan properti baru `customerBatch` untuk menyimpan data sementara sebelum disimpan ke database.
- Ubah metode `processRow` agar menambahkan data ke batch menggunakan metode baru `addToBatch` daripada langsung menyimpannya.
- Tambahkan metode `saveBatch` untuk melakukan penyimpanan batch secara bulk menggunakan `Customer::upsert` dengan pengelolaan kolom unik dan kolom yang perlu diperbarui.
- Tambahkan log untuk setiap chunk yang telah berhasil diproses, membantu memonitor progres saat pemrosesan file CSV dengan ukuran besar.
- Pastikan sisa data yang belum diproses di akhir loop juga disimpan dengan memanggil `saveBatch`.
- Tangani kegagalan penyimpanan batch dengan log error dan reset batch untuk menghindari re-pemrosesan data yang gagal.
- Optimalkan performa dengan menambahkan timestamp (`created_at` dan `updated_at`) secara langsung saat menambahkan data ke batch.
- Menambahkan properti baru `CHUNK_SIZE` untuk mengelola proses data dalam batch sehingga mengurangi penggunaan memori.
- Memperkenalkan batching untuk penyimpanan akun (`accountBatch`) dan balance (`balanceBatch`) untuk mengurangi beban query database.
- Mengganti penyimpanan langsung di database dengan metode bulk insert menggunakan `upsert` pada tabel Account dan AccountBalance.
- Menambahkan logging untuk mencatat setiap pemrosesan batch dan memberikan deskripsi jumlah chunk yang telah diproses.
- Memindahkan proses normalization dan balance data ke sistem batching alih-alih penyimpanan langsung.
- Menambahkan validasi tambahan untuk pengolahan data row dan mencegah error data yang memiliki kolom tidak sesuai.
- Memperbarui log pesan untuk menampilkan jumlah record yang diproses dan error secara lebih rinci.
- Memodularisasi fungsi agar lebih readable dan maintainable dengan beberapa fungsi baru seperti `addToBatch` dan `saveBatch`.
- Mengubah pengecekan atribut `$item->narrativ` menjadi `$item->narrative` pada beberapa kondisi.
- Memastikan data yang diakses menggunakan properti yang benar (`narrative`) agar sesuai dengan struktur yang diharapkan.
- Menghindari potensi bug atau error akibat typo pada nama properti.
- Memperbaiki kondisi pengecekan pada blok `if` dan `else if` untuk konsistensi penggunaan atribut.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Mengubah tipe variable `$narr` dari string menjadi array untuk mempermudah pengelolaan elemen-elemen narasi.
- Menambahkan elemen narasi ke dalam array menggunakan metode `array_push` alih-alih concatenation dengan string.
- Menggunakan `array_filter` untuk memastikan semua elemen yang bernilai kosong tidak ikut ke dalam hasil akhir.
- Mengganti `trim` dengan `implode` untuk menggabungkan elemen narasi menjadi string dengan separator spasi.
- Memperbaiki fallback logic saat properti transaksional tidak ada, lebih rapi dan terstruktur pada skenario `else if ($item->narrativ)`.
- Penggunaan logika baru memastikan bahwa narasi lebih fleksibel dan tidak menghasilkan karakter-karakter string kosong yang tidak diperlukan di output akhir.
- Mengatur nilai default properti `$period` menjadi string kosong (`''`) di semua file Job terkait dalam modul `Webstatement`.
- File-file yang terpengaruh:
1. `ProcessAccountDataJob.php`
2. `ProcessArrangementDataJob.php`
3. `ProcessAtmTransactionJob.php`
4. `ProcessBillDetailDataJob.php`
5. `ProcessCategoryDataJob.php`
6. `ProcessCompanyDataJob.php`
7. `ProcessCustomerDataJob.php`
8. `ProcessDataCaptureDataJob.php`
9. `ProcessFtTxnTypeConditionJob.php`
10. `ProcessFundsTransferDataJob.php`
11. `ProcessStmtEntryDataJob.php`
12. `ProcessStmtNarrFormatDataJob.php`
13. `ProcessStmtNarrParamDataJob.php`
14. `ProcessTellerDataJob.php`
15. `ProcessTransactionDataJob.php`
- Perubahan ini bertujuan untuk meningkatkan stabilitas dengan memastikan nilai awal dari properti telah terdefinisi untuk menghindari potensi `undefined property error`.
- Tidak ada perubahan logika lain di luar inisialisasi default nilai properti.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan properti baru `$balanceData` untuk memisahkan data saldo dari data akun.
- Menyimpan nilai `open_actual_bal` dan `open_cleared_bal` dalam `$balanceData` sebelum menghapusnya dari data akun.
- Mengubah parameter `saveAccountBalance` dari array data akun menjadi hanya `accountNumber`.
- Memanfaatkan `$balanceData` untuk mengatur nilai `actual_balance` dan `cleared_balance` dalam proses penyimpanan ke model `AccountBalance`.
- Mengurangi potensi error dan membuat kode lebih modular dengan memisahkan pengolahan data saldo dari data akun.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan validasi untuk memeriksa apakah `transaction` ada sebelum mengakses propertinya sehingga mencegah error pada situasi `null`.
- Menambahkan fallback description jika `transaction` bernilai null pada metode `generateNarrative`.
- Menambahkan dukungan untuk ID narasi tambahan seperti `APITRX`, `ONUSCR`, dan `ONUSDR` pada `getFormatNarrative`.
- Memodifikasi output `cleanPart` dengan menambahkan spasi untuk memastikan format narasi lebih konsisten.
- Mengubah penggantian `<NL>` dalam hasil akhir menjadi spasi kosong untuk meningkatkan keterbacaan hasil narasi.
- Refactor import `Jobs` menggunakan sintaks kurung kurawal untuk mengurangi redundansi dan meningkatkan keterbacaan kode.
- Pindahkan metode `__call` di atas `processData` untuk memperbaiki struktur kode sehingga lebih terorganisir.
- Atur ulang logika dalam `__call` tanpa mengubah fungsionalitas utama tetapi memperbaiki posisi metode dalam kelas.
- Hilangkan duplikasi metode `__call` dengan memindahkannya ke lokasi baru.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan konstanta baru pada setiap job untuk meningkatkan keterbacaan:
- `CSV_DELIMITER` untuk delimiter CSV.
- `MAX_EXECUTION_TIME` untuk batas waktu eksekusi (86400 detik).
- `FILENAME` untuk nama file masing-masing job.
- `DISK_NAME` untuk disk yang digunakan.
- Mengubah `protected` menjadi `private` untuk properti seperti:
- `$period`, `$processedCount`, dan `$errorCount` di semua job.
- Memindahkan logika proses menjadi metode modular untuk meningkatkan modularitas:
- Metode `initializeJob` untuk inisialisasi counter.
- Metode `processPeriod` untuk menangani file dan memulai proses.
- Metode `validateFile` untuk validasi keberadaan file.
- Metode `createTemporaryFile` untuk menyalin file sementara.
- Metode `processFile` untuk membaca isi file CSV dan memproses.
- Metode `processRow`/`mapAndSaveRecord`/`saveRecord` untuk pemrosesan dan penyimpanan data.
- Metode `cleanup` untuk menghapus file sementara.
- Metode `logJobCompletion` untuk logging hasil akhir.
- Menerapkan pengolahan file dengan sistem logging terperinci:
- Logging row dengan kolom tidak sesuai akan menghasilkan peringatan.
- Mencatat jumlah record berhasil diproses serta error.
Refaktor ini bertujuan untuk meningkatkan kualitas kode melalui modularisasi, keterbacaan, dan kemudahan pengujian ulang di seluruh kelas job.
- Mengubah tipe properti `periods` dari `protected $periods` menjadi `protected array $periods` untuk memastikan konsistensi tipe data.
- Memodifikasi konstruktor pada beberapa job class (`ProcessFtTxnTypeConditionJob`, `ProcessStmtNarrFormatDataJob`, `ProcessStmtNarrParamDataJob`, dan `ProcessTransactionDataJob`) agar mendukung parameter `periods` dalam bentuk array atau string.
- Menambahkan validasi dalam konstruktor untuk mengonversi string `periods` menjadi array jika diperlukan, memastikan fleksibilitas dan kompatibilitas yang lebih baik saat inisialisasi object.
- Refaktor ini meningkatkan kejelasan dalam codebase dan mengurangi potensi error akibat perbedaan format input.
- Menghapus metode proses data individual untuk setiap tipe data dengan menggantinya menjadi metode `processData`.
- Mengintegrasikan semua tipe proses data ke dalam konstanta `PROCESS_TYPES` untuk mempermudah pengelolaan dan memperluas tipe proses.
- Menambahkan konstanta `PARAMETER_PROCESSES` dan `DATA_PROCESSES` untuk memisahkan proses data parameter dan data utama.
- Mengimplementasikan metode `__call` untuk mendukung pemanggilan metode dinamis berdasarkan tipe proses data.
- Memperbaiki metode `index` untuk mendukung pemrosesan otomatis data parameter dan data utama dalam urutan yang ditentukan.
- Menambahkan logging untuk setiap proses data agar memudahkan debugging dan monitoring.
- Memastikan pengembalian respons JSON seragam untuk keberhasilan dan kegagalan setiap proses data.
- Memperbaiki mapping `listAccount` di `WebstatementController`:
- Mengubah urutan key 'OY' dan 'PLUANG' sehingga data ditukar posisinya.
- Menambahkan logika untuk mendukung format baru di `ExportStatementJob`:
- Menambahkan dukungan format untuk `TTTRFOUT` dengan value 'TT.O.TRF'.
- Menambahkan dukungan format untuk `TTTRFIN` dengan value 'TT.I.TRF'.
- Menambahkan pengecekan prefix pada `trans_reference` untuk mapping field secara dinamis:
- Menambahkan mapping prefix baru dengan `relationMap` seperti `FT`, `TT`, `DC`, dan `AA` yang mengarahkan ke relasi data spesifik.
- Menyesuaikan logika fallback agar memprioritaskan field berdasarkan prefix sebelum default ke data aslinya.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbaiki kondisi pengecekan `$this->period` yang salah (ekstra tanda kurung) pada beberapa job processing, seperti:
1. `ProcessAtmTransactionJob`
2. `ProcessBillDetailDataJob`
3. `ProcessCategoryDataJob`
4. `ProcessCompanyDataJob`
5. `ProcessCustomerDataJob`
6. `ProcessDataCaptureDataJob`
7. `ProcessFundsTransferDataJob`
8. `ProcessStmtEntryDataJob`
9. `ProcessTellerDataJob`
- Menambahkan kejelasan logging untuk kasus ketika periode tidak disediakan (`period === ''`).
- Menghapus kode komentar tidak terpakai di `ProcessFtTxnTypeConditionJob`.
Perubahan ini memastikan bahwa logika untuk kondisi periode kosong berjalan dengan benar dan menghindari potensi error di runtime.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
Memperbaiki pengecekan variabel `$this->period` dari `empty()` menjadi `=== ''` pada berbagai job dalam modul Webstatement untuk memastikan logika validasi berfungsi dengan baik dan lebih eksplisit.
- Job yang diperbaiki:
- `ProcessAccountDataJob`
- `ProcessArrangementDataJob`
- `ProcessAtmTransactionJob`
- `ProcessBillDetailDataJob`
- `ProcessCategoryDataJob`
- `ProcessCompanyDataJob`
- `ProcessCustomerDataJob`
- `ProcessDataCaptureDataJob`
- `ProcessFundsTransferDataJob`
- `ProcessStmtEntryDataJob`
- `ProcessTellerDataJob`
- Memastikan validasi terhadap variabel `$this->period` hanya memfokuskan pada apakah nilainya adalah string kosong (`''`).
- Menambahkan kejelasan pada logging apabila periode tidak tersedia pada setiap job.
- Perubahan ini bertujuan untuk menghindari potensi false negative pada pengecekan kondisi `empty()` yang dapat menyebabkan logika tidak berjalan sebagaimana mestinya.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Refactor `ProcessArrangementDataJob`:
- Mengubah parameter dari array periods menjadi string period untuk simplifikasi proses.
- Mengadaptasi logika proses file CSV dari multiple periods menjadi single period.
- Menghapus logika iterasi folder `_parameter` dan menyederhanakan nama file dengan menggunakan single period.
- Menambahkan validasi dan penanganan error jika file tidak ditemukan atau tidak dapat dibuka.
- Menyederhanakan proses membaca dan memproses row dari file CSV dengan pendekatan baru.
- Memperbaiki logging untuk mencatat catatan processing dan error yang lebih tepat.
- Update Model `StmtEntry`:
- Menambahkan relasi baru:
- `tt`: Relasi dengan model `Teller` berdasarkan `trans_reference`.
- `dc`: Relasi dengan model `DataCapture` berdasarkan `trans_reference`.
- `aa`: Relasi dengan model `TempArrangement` berdasarkan `trans_reference`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
Melakukan perbaikan serta optimisasi pada proses pembersihan data dan pengolahan saldo akun.
Perubahan utama:
- **ProcessStmtEntryDataJob**:
- Mengganti `str_replace` dengan `preg_replace` untuk pembersihan `trans_reference`, sehingga lebih fleksibel dalam menghapus karakter setelah `\` (termasuk keseluruhan pattern yang lebih kompleks).
- Mengevaluasi penghapusan potensi substring logic yang tidak digunakan, memperkuat pembersihan menjadi lebih konsisten.
- **ProcessAccountDataJob**:
- Mengganti penggunaan `firstOrNew` dan `save` dengan `updateOrInsert` untuk mengurangi jumlah query ke database.
- Menambahkan pembuatan data `created_at` dan `updated_at` untuk memastikan data yang di-update memiliki timestamp konsisten.
- Menjamin default value pada `actual_balance` dan `cleared_balance` apabila data masukan kosong agar sistem tetap dapat berjalan tanpa error.
Perubahan ini dilakukan untuk meningkatkan efisiensi proses pengolahan data, mengurangi overhead query, serta memastikan data yang diproses tetap konsisten dan lebih aman.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>