- **Migrasi ke PHPMailer:**
- Mengganti penggunaan `Illuminate\Support\Facades\Mail` ke PHPMailer untuk pengiriman email.
- Menambahkan service baru `PHPMailerService` dengan dukungan autentikasi NTLM/GSSAPI.
- Mengintegrasikan logika pengiriman email ke dalam `StatementEmail` menggunakan PHPMailer.
- Memindahkan logika attachment dan body email ke helper method pada kelas `StatementEmail`.
- **Perbaikan Logging dan Penanganan Error:**
- Menambah logging lebih mendetail pada proses pengiriman email, termasuk informasi seperti penerima, subjek, dan status pengiriman.
- Menambahkan fallback untuk pembuatan konten HTML jika terjadi kegagalan rendering pada template Blade.
- Menambahkan pengecekan dan logging untuk kegagalan pengiriman email dengan mekanisme exception handling.
- **Peningkatan Template Email:**
- Memperbaiki elemen ulasan pada template email untuk mendukung tampilan yang lebih bersih menggunakan `list-style-type: none`.
- Memodifikasi markup footer untuk memberikan batas terformat lebih baik.
- **Optimasi Proses Backend:**
- Menambahkan delay antar pengiriman email untuk menghindari rate limiting pada koneksi NTLM/GSSAPI.
- Menyediakan format nama attachment dinamis berdasarkan rekening dan periode laporan.
- Memanfaatkan konfigurasi enkripsi dinamis, dengan fallback untuk pengujian/development.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Perbaikan dan Penambahan Komando:**
- Memberikan komando baru `webstatement:check-progress` untuk memantau progres pengiriman email statement.
- Menampilkan informasi seperti `Log ID`, `Batch ID`, `Request Type`, status, hingga persentase progress.
- Menangani secara detail jumlah akun yang diproses, sukses, gagal, dan kalkulasi tingkat keberhasilan.
- Menyediakan penanganan error jika log tidak ditemukan atau terjadi kegagalan lainnya.
- Memperluas komando `webstatement:send-email`:
- Mendukung pengiriman berdasarkan `single account`, `branch`, atau `all branches`.
- Menambahkan validasi parameter `type` (`single`, `branch`, `all`) dan input spesifik seperti `--account` atau `--branch` untuk mode tertentu.
- Melakukan pencatatan log awal dengan metadata lengkap seperti `request_type`, `batch_id`, dan status.
- **Peningkatan Logika Proses Backend:**
- Menambahkan fungsi `createLogEntry` untuk mencatat log pengiriman email statement secara dinamis berdasarkan tipe request.
- Menyediakan reusable method seperti `validateParameters` dan `determineRequestTypeAndTarget` untuk mempermudah pengelolaan parameter pengiriman.
- Memberikan feedback dan panduan kepada pengguna mengenai ID log dan komando monitoring (`webstatement:check-progress`).
- **Penambahan Controller dan Fitur UI:**
- Menambahkan controller baru `EmailStatementLogController`:
- Mendukung pengelolaan log seperti list, detail, dan retry untuk pengiriman ulang email statement.
- Menyediakan fitur pencarian, filter, dan halaman data log yang responsif menggunakan datatable.
- Menambahkan kemampuan resend email untuk log dengan status `completed` atau `failed`.
- Mengimplementasikan UI untuk log pengiriman:
- Halaman daftar monitoring dengan filter berdasarkan branch, account number, request type, status, dan tanggal.
- Menampilkan kemajuan, tingkat keberhasilan, serta tombol aksi seperti detail dan pengiriman ulang.
- **Peningkatan Model dan Validasi:**
- Menyesuaikan model `PrintStatementLog` untuk mendukung lebih banyak atribut seperti `processed_accounts`, `success_count`, `failed_count`, `request_type`, serta metode utilitas seperti `getProgressPercentage()` dan `getSuccessRate()`.
- Memvalidasi parameter input lebih mendalam agar kesalahan dapat diminimalisasi di awal proses.
- **Peningkatan pada View dan Feedback Pengguna:**
- Menambah daftar command berguna untuk user di interface log:
- Status antrian dengan `php artisan queue:work`.
- Monitoring menggunakan komando custom yang baru ditambahkan.
- **Perbaikan Logging dan Error Handling:**
- Menambahkan logging komprehensif pada semua proses, termasuk batch pengiriman ulang.
- Memastikan rollback pada database jika terjadi error melalui transaksi pada critical path.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan Command `SendStatementEmailCommand` untuk mengirim email statement PDF:
- Mendukung parameter input seperti periode laporan (`YYYY-MM`), nomor rekening, ID batch, queue, dan delay waktu.
- Menjalankan validasi parameter input, mencatat log eksekusi, dan mendispatch job pengiriman email.
- Menyediakan feedback status eksekusi serta informasi job kepada user.
- Menambahkan Job `SendStatementEmailJob` untuk pengiriman statement dalam latar belakang:
- Memfilter account yang memiliki email terkait, baik dari `stmt_email` atau email dari data customer.
- Melakukan pengiriman email dengan attachment file PDF statement.
- Mencatat log sukses atau kegagalan pengiriman untuk setiap account.
- Memperbarui Model dan Template Email:
- Mengubah template email untuk mendukung pengisian nama rekening secara dinamis berdasarkan customer account.
- Menambahkan pengisian dinamis untuk tahun copyright di footer.
- Memperbarui Provider `WebstatementServiceProvider`:
- Mendaftarkan Command baru `SendStatementEmailCommand` ke dalam aplikasi.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan class baru `GenerateAtmTransactionReportJob` untuk menghasilkan laporan transaksi ATM dalam format CSV.
- Memproses transaksi ATM berdasarkan periode tertentu dengan pagination menggunakan `chunk`.
- Mendukung inisialisasi log laporan menggunakan model `AtmTransactionReportLog`.
- Menyertakan fitur untuk menulis header CSV dan data transaksi, termasuk handling escape karakter pada nilai CSV.
- Memperkenalkan direktori penyimpanan baru:
- Path: `reports/atm_transactions/<period>.csv`.
- Membuat direktori jika belum ada sebelum menyimpan laporan.
- Menambahkan logging:
- Menyertakan informasi waktu mulai, lokasi file laporan CSV, dan jumlah transaksi yang diproses.
- Menangani error dengan logging error message dan memperbarui status log laporan.
- Menambahkan logika pembaruan log laporan:
- Field `status`, `file_path`, `file_size`, dan `record_count` akan diperbarui setelah proses selesai.
- Handling error pada log laporan jika proses gagal.
- Fitur tambahan:
- Handling escape untuk nilai CSV guna memastikan format tetap valid.
- Menangani error dengan throwing exception jika terjadi masalah selama proses.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menghapus penggunaan batching data (`transferBatch`) untuk penyederhanaan logika:
- Menghapus konstanta `CHUNK_SIZE`.
- Menghapus variabel dan metode terkait batching, seperti `transferBatch`, `addToBatch`, dan `saveBatch`.
- Memproses dan menyimpan setiap baris data langsung melalui metode `saveRecord`.
- Memperbarui metode `processRow`:
- Menggantikan logika penambahan batch dengan langsung memanggil `saveRecord`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui `CombinePdfJob`:
- Menambahkan parameter baru `outputDestination`, `branchCode`, dan `period` pada constructor untuk pengaturan tujuan output.
- Menambahkan opsi tujuan output ke `local` atau `sftp` pada proses combine PDF.
- Menambahkan metode baru `uploadToSftp` untuk mengunggah file PDF hasil gabungan ke SFTP.
- Mengatur jalur unggahan SFTP ke `combine/{period}/{branchCode}/{filename}`.
- Menambahkan log informasi terkait jalur dan status unggahan file PDF ke SFTP.
- Memperbarui `CombinePdfController`:
- Menambahkan konfigurasi `output_destination` untuk menentukan tujuan output (`local` atau `sftp`).
- Memperbarui pemanggilan `CombinePdfJob::dispatch` dengan parameter baru untuk konfigurasi output dan SFTP.
- Menyesuaikan log dan respons untuk mencerminkan tujuan output yang disetel.
- Tujuan pembaruan ini:
- Memungkinkan pengaturan flexibel tujuan penyimpanan file PDF ke lokal atau SFTP.
- Menyediakan log yang lebih informatif terkait proses combine PDF dan unggahan SFTP.
- Mempermudah integrasi dan pengelolaan file PDF dengan pengaturan jalur dan periodisasi yang jelas.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui logika untuk memfilter atribut array `fillable` pada model `Sector`:
- Menambahkan filter untuk mengabaikan atribut `id` agar tidak terikut dalam proses.
- Mengoptimalkan proses pengambilan header CSV dengan hanya menggunakan atribut yang relevan.
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 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 `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>
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.
- 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.
- 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>
- Menghapus logika pengecekan dan pengabaian folder `_parameter` di seluruh job pemrosesan data berikut:
- `ProcessAccountDataJob`
- `ProcessAtmTransactionJob`
- `ProcessBillDetailDataJob`
- `ProcessCategoryDataJob`
- `ProcessCompanyDataJob`
- `ProcessCustomerDataJob`
- `ProcessDataCaptureDataJob`
- `ProcessFundsTransferDataJob`
- `ProcessStmtEntryDataJob`
- `ProcessTellerDataJob`
- Menghapus konstanta `PARAMETER_FOLDER` yang terkait dengan folder `_parameter` pada beberapa job.
- Membersihkan code redundancy yang tidak relevan untuk meningkatkan keterbacaan dan efisiensi.
- Logika ini dianggap tidak diperlukan lagi dalam proses pemrosesan data.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Mengganti parameter `$periods` (array) menjadi `$period` (string) pada semua Job terkait: `ProcessCustomerDataJob`, `ProcessFundsTransferDataJob, etc`.
- Menyederhanakan operasi loop dalam proses data dengan hanya memproses satu periode per eksekusi Job.
- Memodifikasi fungsi controller di `MigrasiController` agar sesuai dengan perubahan parameter dari array ke string.
- Menambahkan pengamanan jika `$period` kosong atau bernilai '_parameter' untuk mencegah proses yang tidak diperlukan.
- Mengurangi duplikasi kode dengan mengeliminasi metode yang mengelola array periode dan menggantinya dengan pendekatan tunggal.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Mengubah parameter pada pemanggilan `$this->ProcessCompanyData()` dari array menjadi string untuk konsistensi data.
- Mengubah properti `protected` pada `ProcessCompanyDataJob` dari `$periods` menjadi `$period` untuk menggunakan string daripada array.
- Menyesuaikan constructor `__construct` untuk menerima parameter string `$period` alih-alih array `$periods`.
- Memperbaiki mekanisme validasi pada `handle()`, mengganti pengecekan array kosong `$this->periods` menjadi validasi string `$this->period` dengan nilai kosong.
- Menghapus iterasi `foreach` untuk mengakomodasi perubahan dari array ke string sederhana.
- Memastikan mapping data CSV tetap konsisten dan menambahkan identasi untuk peningkatan keterbacaan.
- Memperbaiki nama variabel dan properti agar lebih eksplisit (`$periods` menjadi `$period`, `$fileName` menjadi `$fileName`, dsb.).
- Menambahkan logging yang lebih jelas mengenai proses data dan kondisi error pada job `ProcessCompanyDataJob`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Mengubah parameter pada metode `ProcessCategoryData` di `MigrasiController` dari array menjadi string untuk keseragaman dengan metode lainnya.
- Memperbarui konstruksi parameter pada instansi `ProcessCategoryDataJob` untuk menerima tipe data string sebagai pengganti array.
- Menghilangkan iterasi array `periods` pada `ProcessCategoryDataJob` dan menerapkan logika langsung pada single `period`.
- Menyesuaikan validasi periode untuk mengabaikan folder `_parameter` dalam proses.
- Memperlihatkan log lebih spesifik jika file tidak ditemukan, atau format kolom tidak sesuai ekspektasi.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- 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>
refactor(jobs): update file extension and sanitize transaction reference
- Mengubah konstanta `FILE_EXTENSION` pada `ProcessAtmTransactionJob` dari `.ST.ATM.csv` menjadi `.ST.ATM.TRANSACTION.csv`.
- Menambahkan logika pembersihan pada `trans_reference` dalam `ProcessStmtEntryDataJob`:
- Menghapus string `\BNK` jika ada dalam field `trans_reference`.
- Mempertahankan fungsionalitas utama untuk memastikan kompatibilitas data dan pengolahan job tetap berjalan sesuai dengan kebutuhan.
```
- Mengubah logika assignment nilai balance untuk memanfaatkan operator null coalescing (??).
- Menghapus pengecekan eksplisit untuk `isset` pada `open_actual_bal` dan `open_cleared_bal`.
- Menambahkan default value `0` jika data balance tidak tersedia.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan tipe return untuk beberapa method agar lebih eksplisit dan konsisten.
- Memperbaiki indentasi dan alignment parameter untuk meningkatkan keterbacaan.
- Menghapus method `getTransaction` dan memindahkannya ke bagian akhir kode dengan dokumentasi ulang.
- Menambahkan logika untuk menghapus file CSV yang sudah ada sebelum membuat file baru di method `exportToCsv`.
- Mengoreksi format data dan whitespace pada beberapa bagian kode untuk menjaga standar penulisan.
- Memindahkan komentar terkait dokumentasi method ke posisi yang lebih relevan dan terstruktur.
- Memastikan konsistensi penggunaan tanda kurung kurawal dan spasi pada query database agar lebih seragam.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>