Perubahan yang dilakukan:
- Menambahkan pengecekan tipe request multi_account pada PrintStatementController.
- Menambahkan logika unduhan file zip melalui metode downloadMultiAccountZip().
- Memastikan alur unduhan file zip tidak mengganggu proses unduhan statement untuk tipe lainnya.
Tujuan perubahan:
- Mendukung fitur baru untuk mengunduh file zip pada permintaan multi_account.
- Menjaga kompatibilitas dengan alur unduhan statement yang sudah ada.
Perubahan yang dilakukan:
- Menambahkan relasi branch di model Account berdasarkan kolom branch_code.
- Menambahkan relasi account di model PrintStatementLog untuk akses data account dari log.
- Memperbaiki referensi branch_name di PrintStatementController agar menggunakan relasi dari model Account.
- Menonaktifkan eager loading pada query di PrintStatementController untuk optimasi performa.
Tujuan perubahan:
- Memastikan data branch dan account dapat diakses langsung melalui relasi antar model.
- Menghindari potensi masalah N+1 query saat mengambil data terkait branch.
- Meningkatkan efisiensi kode dan menjaga konsistensi data dalam proses statement.
Perubahan yang dilakukan:
- Menambahkan kolom password (nullable) pada tabel print_statement_logs melalui migrasi baru.
- Menambahkan field password di model PrintStatementLog dengan atribut hidden untuk keamanan serialisasi.
- Menambahkan input password pada form request print statement.
- Menambahkan validasi sisi klien agar password minimal 6 karakter.
- Menambahkan konfirmasi melalui SweetAlert untuk pengisian password dan email tujuan.
- Menambahkan index pada kolom password untuk optimasi pencarian jika dibutuhkan.
- Menggunakan field password untuk proteksi file PDF melalui PDFPasswordProtect.
- Menambahkan helper text dan placeholder pada form untuk meningkatkan pengalaman pengguna.
- Menambahkan atribut autocomplete="new-password" untuk menghindari autofill browser yang tidak aman.
- Menjaga kompatibilitas ke belakang dengan membuat field bersifat opsional (nullable).
Tujuan perubahan:
- Memberikan opsi proteksi file PDF dengan password yang diatur oleh pengguna.
- Meningkatkan keamanan distribusi file statement melalui email.
- Memastikan pengalaman pengguna tetap aman dan nyaman saat mengatur proteksi.
Perubahan yang dilakukan:
- Menambahkan PDFPasswordProtect::encrypt di dalam ExportStatementPeriodJob.
- Mengikuti pola implementasi yang telah digunakan pada CombinePdfJob.
- PDF statement kini otomatis diproteksi menggunakan password.
- Password diambil dari konfigurasi: webstatement.pdf_password.
- Menambahkan logging untuk memantau proses proteksi PDF.
- Menjamin pengelolaan file sementara berjalan aman dan rapi.
- Menjaga kompatibilitas ke belakang (backward compatible) dengan sistem PDF yang sudah ada.
Tujuan perubahan:
- Meningkatkan keamanan file PDF dengan proteksi password standar perusahaan.
- Memastikan proses enkripsi berjalan otomatis tanpa mengubah alur penggunaan yang ada.
- Memberikan visibilitas terhadap proses proteksi melalui log sistem.
Perubahan yang dilakukan:
- Memindahkan fungsi `generatePassword` dari `CombinePdfController` ke `helpers.php` untuk peningkatan reusabilitas.
- Menambahkan dependency `use Carbon\Carbon` dan `use Modules\Webstatement\Models\Account` di `helpers.php`.
- Menyesuaikan pemanggilan fungsi `generatePassword` di `CombinePdfController` dengan versi helper.
Tujuan perubahan:
- Mengurangi duplikasi kode dengan menjadikan fungsi `generatePassword` dapat diakses secara global.
- Mempermudah perawatan kode melalui pemisahan tanggung jawab fungsi.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
Perubahan yang dilakukan:
- Menambahkan fungsi generatePdf() untuk proses generate PDF dalam job ExportStatementPeriodJob.
- Mengintegrasikan logika PDF generation dari PrintStatementController ke dalam job.
- Menggunakan data ProcessedStatement yang telah diproses sebagai sumber untuk pembuatan PDF.
- Menambahkan import statement untuk Browsershot, Account, Customer, dan Branch.
- Mengimplementasikan fungsi prepareHeaderTableBackground() untuk mengonversi gambar header menjadi base64.
- Menggunakan database transaction untuk menjaga konsistensi saat generate dan menyimpan PDF.
- Menyimpan PDF ke storage dengan struktur direktori yang terorganisir berdasarkan parameter tertentu.
- Memperbarui PrintStatementLog dengan status akhir dan path file PDF yang dihasilkan.
- Menambahkan error handling dan logging secara menyeluruh untuk memantau proses.
- Menghapus file sementara (temporary) setelah PDF berhasil disimpan ke storage.
- Menambahkan dukungan timeout dan konfigurasi Browsershot yang optimal.
- Melakukan validasi terhadap data account, customer, dan branch sebelum proses generate PDF dilakukan.
Tujuan perubahan:
- Memindahkan logika generate PDF ke dalam background job agar lebih efisien dan terstruktur.
- Menjamin integritas data dan hasil PDF yang valid melalui proses terstandarisasi.
- Mengurangi beban proses di controller serta mendukung proses batch secara asynchronous.
Perubahan yang dilakukan:
- Menambahkan fungsi getProvinceCoreName di helpers.php untuk mengambil nama provinsi berdasarkan kode, menggunakan model ProvinceCore.
- Menyesuaikan tampilan alamat customer di template stmt.blade.php:
- Menambahkan RT/RW dari alamat rumah atau KTP jika tersedia.
- Menggunakan nama provinsi dari fungsi baru agar data lebih konsisten.
- Merapikan format alamat dengan menggunakan fungsi trim.
- Memperbaiki struktur HTML pada bagian alamat untuk meningkatkan keterbacaan dan perawatan kode.
Tujuan perubahan:
- Menjamin data provinsi yang ditampilkan berasal dari referensi yang valid dan terpusat.
- Meningkatkan kelengkapan dan kejelasan informasi alamat pada tampilan statement pelanggan.
- Menstandarkan format alamat agar seragam dengan kebijakan internal perusahaan.
Perubahan yang dilakukan:
- Membuat job baru ProcessProvinceDataJob dengan referensi dari ProcessSectorDataJob.
- Menggunakan model ProvinceCore untuk menyimpan data provinsi.
- Mendukung format file ST.PROVINCE.csv dengan delimiter khusus tilde (~).
- Menambahkan validasi untuk kolom: id, date_time, province, dan province_name.
- Mengabaikan baris header pada file saat proses import.
- Menggunakan database transaction untuk menjaga konsistensi data.
- Menambahkan counter untuk memantau jumlah record yang dilewati (skipped).
- Mengimplementasikan error handling dan logging yang detail.
- Menggunakan updateOrCreate untuk mencegah duplikasi data.
- Menambahkan method failed() untuk menangani kasus job failure.
- Melakukan mapping field province ke code dan province_name ke name.
- Melakukan validasi data wajib sebelum menyimpan ke database.
Tujuan perubahan:
- Memfasilitasi proses import data provinsi dari file eksternal secara otomatis dan aman.
- Menjamin data yang masuk telah tervalidasi dan bebas duplikasi.
- Menyediakan log dan feedback yang cukup saat terjadi kegagalan.
Perubahan yang dilakukan:
- Membuat migration untuk tabel province_core dengan field code dan name.
- Menambahkan model ProvinceCore dengan beberapa scope dan method helper.
- Mengimplementasikan logging untuk semua operasi database yang berkaitan.
- Menambahkan dukungan transaction rollback untuk menjaga integritas data.
- Membuat seeder untuk data provinsi seluruh Indonesia.
- Menambahkan validasi dan method utility untuk keperluan dropdown.
- Menggunakan PostgreSQL ILIKE untuk pencarian yang bersifat case-insensitive.
- Menambahkan index pada kolom tertentu untuk optimasi performa query.
- Mengimplementasikan event model untuk memantau operasi CRUD.
- Menyesuaikan struktur file agar sesuai dengan arsitektur Laravel modules.
Tujuan perubahan:
- Menyediakan data master provinsi yang dapat digunakan secara global.
- Memastikan efisiensi dan keamanan data pada proses insert/update.
- Mendukung pengembangan fitur yang membutuhkan referensi data provinsi.
Perubahan yang dilakukan:
- Memperbaiki typo nama tabel dari print_stetement_logs menjadi print_statement_logs.
- Menggunakan raw SQL untuk menambahkan nilai enum baru ke tipe data request_type.
- Menambahkan constraint check sebagai alternatif validasi agar kompatibel dengan PostgreSQL.
- Menambahkan rollback transaction untuk menjaga integritas data saat migrasi gagal.
- Menambahkan logging untuk memantau proses migrasi enum.
- Memperbaiki syntax error pada perintah ALTER TYPE di PostgreSQL.
- Menambahkan kondisi IF NOT EXISTS untuk menghindari error duplikat nilai enum.
- Mengimplementasikan strategi rollback yang aman untuk migrasi enum PostgreSQL.
Tujuan perubahan:
- Memastikan proses migrasi enum berjalan lancar di PostgreSQL tanpa error duplikasi atau syntax.
- Menjamin keamanan data selama proses migrasi berjalan.
- Menyediakan log yang jelas untuk debugging bila terjadi kesalahan.
Perubahan yang dilakukan:
- Memodifikasi PrintStatementController untuk mendukung request_type baru: multi_account.
- Menambahkan validasi stmt_sent_type dan branch_code khusus pada request multi_account.
- Menambahkan pengecekan branch_id: ID0019999 dengan penanganan error yang lebih spesifik.
- Menambahkan metode processMultiAccountStatement untuk pemrosesan berdasarkan branch_code dan stmt_sent_type.
Optimasi PDF:
- Melakukan refaktor pada GenerateMultiAccountPdfJob agar mendukung kalkulasi tanggal dinamis (startDate dan endDate).
- Mengimplementasikan Browsershot untuk opsi tambahan background dan optimasi waktu proses.
- Menambahkan validasi status dan update log pada PrintStatementLog setelah PDF berhasil dibuat.
- Menambahkan penanganan penggunaan memori secara granular untuk proses batch PDF dan pembersihan resource otomatis.
Logging dan Validasi:
- Menambahkan logging pada proses kalkulasi tanggal multi_account.
- Logging tambahan dan rollback untuk error yang terjadi saat proses statement atau PDF.
- Mengubah penggunaan Auth:: untuk konsistensi role checking.
- Mengubah validasi stmt_sent_type dari JSON menjadi array dengan implode().
UI dan Output:
- Memodifikasi blade template agar mendukung tampilan stmt_sent_type untuk kasus multi_account.
- Menambahkan logika kolom dinamis berdasarkan account_number atau stmt_sent_type.
Refaktor umum:
- Memisahkan logika antara single dan multi account di PrintStatementController.
- Perbaikan minor pada query SQL untuk entri ProcessedStatement.
Tujuan perubahan:
- Mendukung pemrosesan batch statement multi account secara lebih efisien dan terstruktur.
- Menjamin validasi dan logging yang lebih kuat.
- Meningkatkan performa pembuatan PDF dan kontrol terhadap penggunaan resource.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
Perubahan yang dilakukan:
- Menambahkan fungsi `calculatePeriodDates` di `helpers.php` untuk menghitung tanggal awal dan akhir berdasarkan periode.
- Mendukung periode khusus seperti `202505`, dengan aturan tanggal mulai dari tanggal 9 hingga akhir bulan.
- Menambahkan logging di `calculatePeriodDates` untuk memudahkan debugging saat proses penentuan tanggal.
- Memperbaiki validasi di `PrintStatementRequest` dengan menyesuaikan tipe data dan aturan logika.
- Merapikan aturan validasi pada `account_number` agar lebih konsisten dan mudah dibaca.
- Menambahkan `helpers.php` ke properti `files` di `module.json` agar dapat diakses secara global.
Tujuan perubahan:
- Mendukung logika tanggal periode khusus dengan aturan tertentu.
- Menyelaraskan validasi permintaan dengan standar internal yang lebih baik dan lebih stabil.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan nilai 'multi_account' ke enum request_type pada tabel print_statement_logs
- Mendukung pemrosesan statement untuk multiple account sekaligus
- Enum request_type sekarang mencakup: single_account, branch, all_branches, multi_account
- Memungkinkan sistem untuk menangani berbagai jenis request statement
- Meningkatkan fleksibilitas dalam pemrosesan batch statement
Menambahkan migration untuk field tambahan pada tabel customers:
- Menambahkan field home_rt dan home_rw untuk RT/RW alamat rumah
- Menambahkan field ktp_rt dan ktp_rw untuk RT/RW alamat KTP
- Menambahkan field local_ref dengan tipe TEXT untuk referensi lokal panjang
- Semua field dibuat nullable untuk fleksibilitas data
- Menambahkan index untuk kombinasi RT/RW untuk performa query
- Menambahkan comment pada setiap field untuk dokumentasi
- Menyediakan method down() lengkap untuk rollback migration
- Menggunakan tipe data yang sesuai untuk setiap field
- **Optimalisasi Pembuatan dan Pengunduhan PDF:**
- Tambahkan validasi untuk mengecek keberadaan file sebelum pembuatan ulang PDF.
- Tambahkan mekanisme pengunduhan langsung file PDF jika sudah tersedia di storage.
- Mengelompokkan path penyimpanan dan nama file PDF secara dinamis berdasarkan periode dan nomor rekening.
- Integrasi update status `is_available` pada tabel `PrintStatementLog` setelah file berhasil dibuat.
- **Refaktor dan Perbaikan Logika Pembuatan PDF:**
- Perbarui fungsi `generateStatementPdf` untuk mendukung parameter tambahan terkait penyimpanan file.
- Hapus duplikasi logika terkait pembuatan path storage dan file PDF.
- Tambahkan handling error untuk memastikan file PDF berhasil dibuat.
- **Hapus Fitur Preview PDF:**
- Menghapus fungsi `previewPdf()` dan rute terkait karena sudah tidak digunakan.
- Membersihkan bagian UI yang merujuk pada fitur ini.
- **Peningkatan UI dan Tampilan:**
- Menghapus kolom `authorization_status` pada tabel karena tidak relevan.
- Penyesuaian styling pada kolom `is_available` untuk menampilkan status ketersediaan file.
- **Perubahan pada Rute:**
- Membersihkan rute tidak terpakai terkait preview dan generate PDF langsung.
- **Refaktor Umum:**
- Menghapus kode redundan yang berhubungan dengan penyimpanan file sementara.
- Penyesuaian struktur fungsi untuk meningkatkan keterbacaan dan efisiensi.
Perubahan ini memastikan proses PDF statement lebih efisien dengan validasi ketat, pengelolaan file yang lebih baik, serta penyederhanaan sistem dengan menghapus fitur yang tidak relevan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Penyesuaian Tampilan pada Blade Template:**
- Menambahkan pengaturan padding khusus pada baris tambahan `narrative-line` untuk meningkatkan keterbacaan.
- Memperbaiki properti kolom, termasuk `min-width` dan `max-width` pada kolom keterangan untuk mencegah overflow.
- Mengubah alignment kolom referensi agar lebih konsisten dengan tampilan keseluruhan.
- **Optimasi Pagination:**
- Menambahkan variabel `$linePerPage` untuk menentukan jumlah baris per halaman yang lebih fleksibel.
- Mengganti hardcoded nilai 18 menjadi referensi ke `$linePerPage` di seluruh proses logika pagination.
- Mengurangi maksimal panjang karakter baris narasi dari 35 menjadi 30 untuk meningkatkan tata letak.
- **Peningkatan Kode Pemrosesan Narasi:**
- Memastikan bahwa teks narasi tambahan dirapikan dengan penghapusan karakter bracket `[ ]` menggunakan fungsi `str_replace`.
- Menambahkan class CSS `narrative-line` pada baris tambahan narasi untuk format spesifik.
- **Refaktor Logika Pemrosesan:**
- Optimasi perhitungan total halaman dengan menangani baris per halaman ($linePerPage).
- Memperbaiki mekanisme pengecekan dan iterasi baris kosong pada akhir tabel untuk menyesuaikan jumlah baris tetap.
- **Perbaikan Minor:**
- Menggunakan substring 10 karakter alih-alih `date()` untuk menampilkan tanggal untuk optimalisasi kinerja.
- Menambahkan margin dan padding default pada semua baris untuk konsistensi format antar data.
Perubahan ini memperbaiki tata letak dan fleksibilitas tabel statement, baik untuk narasi panjang maupun pagination, memastikan tampilannya tetap user-friendly tanpa memengaruhi struktur data backend.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Modifikasi method printStatementRekening untuk mendukung request_type multi_account
- Tambah method processMultiAccountStatement untuk mengambil data account berdasarkan branch_code dan stmt_sent_type
- Tambah method processSingleAccountStatement untuk memisahkan logika single account
- Implementasi GenerateMultiAccountPdfJob untuk generate PDF multiple account secara parallel
- Tambah fungsi generateAccountPdf untuk generate PDF per account dengan Browsershot
- Tambah fungsi createZipFile untuk mengompres multiple PDF menjadi satu ZIP file
- Tambah method downloadMultiAccountZip untuk download ZIP file hasil pemrosesan
- Implementasi validasi stmt_sent_type dengan support JSON array format
- Tambah logging komprehensif untuk monitoring proses multi account
- Tambah error handling dengan database transaction rollback
- Update PrintStatementLog dengan informasi target_accounts dan status pemrosesan
- Tambah rute baru untuk download ZIP file multi account
- Support untuk pemrosesan chunk account untuk optimasi memory usage
- Implementasi status tracking untuk success_count dan failed_count
- Tambah validasi keberadaan account berdasarkan kriteria yang ditentukan
- **Fitur Baru:**
- Menambahkan kemampuan untuk membuat PDF statement secara dinamis menggunakan Browsershot.
- Fitur penyimpanan otomatis PDF ke dalam local storage dengan struktur direktori berdasarkan periode dan account number.
- Menyediakan fitur unduhan langsung dari storage atau melalui preview di browser.
- Mendukung penghapusan PDF dari storage dengan log terintegrasi.
- **Perubahan pada Controller:**
- Ditambah method baru `generated` untuk membangun PDF atau tampilan HTML statement.
- Integrasi penghitungan periode saldo (`calculateSaldoPeriod`) untuk menghasilkan data laporan yang lebih akurat.
- Perubahan pada `printStatementRekening` untuk mendukung pengiriman objek statement secara penuh.
- Menambahkan method tambahan untuk preview, download, dan delete PDF langsung dari storage.
- **Validasi Permintaan:**
- Menambah validasi wajib pada `branch_code` untuk memastikan data cabang sesuai.
- Menyesuaikan logika validasi di `PrintStatementRequest` untuk mendukung input cabang dan parameter lain.
- **Cakupan Logging:**
- Meningkatkan logging pada setiap proses penting:
- Mulai dari validasi data, proses pembuatan PDF, hingga penyimpanan.
- Deteksi error secara spesifik pada setiap tahapan proses.
- Menambah log debugging untuk nama file, ukuran file, dan path penyimpanan.
- **Peningkatan pada UI:**
- Penyesuaian field `branch_code` pada form UI untuk menggantikan `branch_id` dengan validasi error yang lebih eksplisit.
- Membuat halaman baru untuk tampilan preview PDF di interface.
- **Optimisasi dan Refaktor:**
- Grouping import library untuk meningkatkan keterbacaan.
- Manajemen direktori penyimpanan PDF dipastikan berjalan dinamis dan fleksibel.
- Penghilangan redundansi logika pada proses pencarian saldo awal bulan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Peningkatan Validasi:**
- Menambahkan validasi kompleks pada field `account_number` untuk memastikan input wajib jika `stmt_sent_type` tidak diisi.
- Validasi baru untuk `stmt_sent_type` mendukung array nilai dengan parameter `in` yang diperbolehkan.
- Menambahkan pengecekan duplikasi pada `PrintStatementRequest` dengan filter tambahan `user_id` untuk scope yang lebih jelas.
- **Peningkatan Logging:**
- Mengganti penggunaan `\Log` dengan `Log` untuk konsistensi namespace.
- Menambahkan logging user pada query statement log di controller.
- Logging lebih terperinci pada proses ekspor dan error handling.
- **Perubahan UI pada Form `statements/index`:**
- Menambahkan highlight warna merah pada field input yang memiliki error validasi (`border-danger`, `bg-danger-light`).
- Memperbaiki tampilan dropdown untuk `branch_id` dan `stmt_sent_type`, termasuk pesan error yang lebih spesifik.
- Menghapus validasi wajib pada field `stmt_sent_type` dan menambah fleksibilitas form pengisian.
- **Optimalisasi Query Backend:**
- Menambah filter `whereNotNull('user_id')` pada query `PrintStatementLog` untuk meminimalisir data invalid.
- **Updated Blade Template:**
- Tombol dan validasi form lebih ramah pengguna dengan feedback langsung.
- Menambahkan badge status styling untuk kolom status otorisasi di datatable.
- Dinamika field seperti dropdown bebas error dalam kondisi tertentu.
Perubahan ini meningkatkan keakuratan validasi, logging proses lebih rinci untuk debugging, dan memberikan pengalaman pengguna yang lebih baik pada interface request statement.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Pembaruan pada `ExportStatementPeriodJob`:**
- Menambahkan atribut baru `toCsv` untuk mendukung validasi sebelum proses ekspor CSV.
- Menyesuaikan method `__construct` untuk menerima parameter tambahan `toCsv`.
- Menambahkan validasi ekspor CSV dengan conditional check pada `toCsv` sebelum menjalankan `exportToCsv`.
- Memperbaiki logika di `getTotalEntryCount` menggunakan `booking_date` untuk query lebih akurat.
- Menambahkan logging terperinci pada proses penghitungan jumlah entri untuk meningkatkan debugging.
- **Integrasi Log Print Statement:**
- Mengupdate status kolom `is_generated` pada model `PrintStatementLog` setelah entri diproses.
- Menambahkan mekanisme pembaruan data log print statement melalui validasi entry statement.
- **Peningkatan pada Controller `PrintStatementController`:**
- Memampukan proses ekspor otomatis jika statement tidak tersedia dengan metode baru `printStatementRekening`.
- Menambahkan parameter `stmt_sent_type` untuk log print pada proses pencatatan data.
- Mengimplementasikan pemrosesan period statement melalui job `ExportStatementPeriodJob`.
- **Perubahan pada UI/Blade `statements/index`:**
- Menambahkan opsi pemilihan multiple untuk tipe laporan `stmt_sent_type`.
- Mengupdate dan merapikan komponen form untuk input branch, akun, email, dan periode laporan.
- Menambahkan kolom baru `is_generated` pada tabel untuk menampilkan status log hasil pembuatan laporan.
- **Pembaruan pada Datatable dan Skrip Frontend:**
- Menambahkan render visual dengan badge untuk status `is_generated`.
- Memperbaiki dan mengoptimalkan element HTML untuk datatable termasuk pagination dan search.
- Menambahkan konfirmasi aksi dengan Ajax untuk retry pembuatan laporan jika diperlukan.
- **Optimisasi dan Refactor:**
- Menggunakan group import pada controller untuk meningkatkan keterbacaan.
- Memperbaiki alignment dan indentasi pada beberapa file blade.
- Menghapus kode yang tidak digunakan atau redundan seperti conditional unprocessed data.
Dengan perubahan ini, sistem print statement lebih fleksibel, mencatat log lebih baik, dan mendukung fitur tracking pengeluaran laporan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Perubahan Model:**
- Menambahkan atribut `stmt_sent_type` dan `is_generated` pada model `PrintStatementLog`.
- Menyesuaikan properti `$fillable` untuk mendukung atribut baru tersebut.
- Menambahkan properti `is_generated` ke dalam `$casts` untuk tipe data boolean.
- **Migrasi Database:**
- Membuat file migrasi baru `2025_07_08_090357_add_stmt_sent_type_to_print_statement_logs_table`.
- Menambahkan kolom `stmt_sent_type` (string, nullable) setelah kolom `status`.
- Menambahkan kolom `is_generated` (boolean, nullable, default false) setelah kolom `is_available`.
- Menambahkan rollback pada fungsi `down()` untuk menghapus kolom `stmt_sent_type` dan `is_generated`.
- **Tujuan Perubahan:**
- Mendukung pencatatan tipe pengiriman statement melalui kolom `stmt_sent_type`.
- Menambah fleksibilitas dalam pelacakan status pembuatan laporan dengan atribut `is_generated`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
Mengubah logika filter untuk product_code 6021 agar hanya mengecualikan yang memiliki ctdesc 'gold',
sementara product_code 6021 dengan ctdesc lainnya tetap diproses.
Perubahan yang dilakukan:
- Menghapus '6021' dari array whereNotIn product_code yang mengecualikan semua
- Menambahkan filter kondisional kompleks menggunakan nested where clause
- Implementasi logika: (product_code != '6021') OR (product_code = '6021' AND ctdesc != 'gold')
- Menambahkan logging detail untuk tracking filter khusus yang diterapkan
- Memperbarui dokumentasi function untuk menjelaskan logika bisnis baru
- Menambahkan informasi filter khusus dalam log hasil pengambilan data
Dengan perubahan ini:
- Product_code 6021 dengan ctdesc 'gold' akan dikecualikan dari biaya admin
- Product_code 6021 dengan ctdesc selain 'gold' tetap dikenakan biaya admin
- Product_code lainnya (6002, 6004, 6042, 6031) tetap dikecualikan sepenuhnya
- Meningkatkan fleksibilitas dalam pengelolaan biaya berdasarkan jenis kartu
- **Penambahan Fitur Konfirmasi Email:**
- Menambahkan event listener untuk form submit:
- Menampilkan SweetAlert jika field email telah diisi.
- Mengonfirmasi pengiriman statement ke alamat email yang diisi pengguna.
- Submit form hanya setelah user mengonfirmasi.
- **Optimalisasi Proses Download Statement:**
- Menangani logic download statement dalam rentang periode (period range):
- Mencatat log keberadaan file untuk setiap periode.
- Membuat file ZIP yang berisi semua file statement yang tersedia dalam rentang tersebut.
- Mengelola file sementara untuk proses kompresi dengan pembersihan otomatis.
- Menambahkan log error dan warning untuk file yang hilang dalam rentang periode.
- Mendukung mekanisme download file tunggal untuk periode tertentu.
- Menyesuaikan log dengan detail proses, seperti:
- Informasi periode yang tersedia dan tidak.
- Notifikasi penyelesaian atau kegagalan proses download ZIP.
- Menambahkan logging trace pada exception untuk debugging lebih rinci.
- **Perubahan Validasi Logic:**
- Validasi baru pada `PrintStatementRequest`:
- Menentukan `is_period_range` hanya jika `period_to` berbeda dengan `period_from`.
- **Perbaikan dan Penyesuaian Pengiriman Email:**
- Menambahkan pengecekan field email sebelum menjalankan fungsi kirim email di `PrintStatementController`.
- Mengintegrasikan fungsi `sendEmail` jika terdapat email pada statement.
- **Penambahan Dokumentasi Kode:**
- Menambahkan komentar inline di beberapa bagian:
- Logika konfirmasi email.
- Proses pembuatan ZIP dan penanganan download.
- Menjelaskan tiap langkah operasional untuk mempermudah pemahaman dan debugging.
Perubahan ini mengintegrasikan fitur konfirmasi email yang lebih interaktif, meningkatkan proses download statement berjenjang, serta memperbaiki validasi dan logging pada tiap langkah proses.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Penambahan Fitur Multi-Branch:**
- Tambahkan dropdown pilihan cabang (branch) saat fitur multi-branch diaktifkan.
- Secara otomatis mengisi informasi branch jika hanya tersedia satu branch yang terkait dengan user.
- **Perbaikan Validasi Form:**
- Memastikan field `account_number` dan `branch_id` memiliki validasi yang lebih ketat.
- Tambahkan validasi untuk `period_from` agar hanya menerima data periode yang tersedia (`is_available`).
- **Perubahan Tampilan:**
- Menyesuaikan desain form:
- Tambahkan kondisi dynamic display pada field branch berdasarkan status multi-branch.
- Reformat struktur HTML untuk meningkatkan keterbacaan dengan indentasi lebih konsisten.
- Perbaikan tampilan elemen tabel pada daftar request statement:
- Mengoptimalkan style menggunakan properti CSS baru pada grid dan typography.
- **Optimasi Query dan Akses Data:**
- Tambahkan filter berdasarkan `branch_code` agar data hanya terlihat untuk cabang yang relevan dengan user.
- Optimalkan pengambilan data branch dengan hanya memuat cabang yang aktif.
- **Peningkatan Logging:**
- Tambahkan log pada pengolahan query untuk mendeteksi masalah akses branch saat user tidak memiliki akses multi-branch.
- **Refaktor Backend:**
- Tambahkan variable `multiBranch` pada controller untuk mengatur logika UI secara dinamis.
- Refaktor pencarian branch di server-side untuk mengantisipasi session `MULTI_BRANCH`.
Perubahan ini mendukung fleksibilitas akses cabang untuk user dengan mode multi-branch serta meningkatkan validasi dan pengalaman UI form.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Perubahan Penamaan File PDF:**
- Mengubah format nama file dari `{account_number}.pdf` menjadi `{account_number}_{period_from}.pdf`.
- Penyesuaian pada semua lokasi logika penentuan path file di SFTP:
- Path file period single.
- Path file pada mode period range.
- Path file saat kompresi ke dalam ZIP.
- **Penambahan Logging untuk Debugging:**
- Menambahkan **Log::info** untuk mencatat informasi terkait path file, termasuk:
- Path relatif file berdasarkan periode dan kode cabang.
- Root path konfigurasi SFTP.
- Path final lengkap pada SFTP.
- **Penyesuaian Logika Path:**
- Memastikan format nama file konsisten di semua fungsi handling periode tunggal dan periode range.
- Menambahkan logging sebelum proses pengecekan eksistensi file pada SFTP.
- **Peningkatan Monitoring:**
- Memastikan struktur file dan path dapat dipantau dengan logging untuk mendukung debugging lebih baik.
- Memberikan konteks tambahan pada setiap log yang relevan untuk memudahkan tracking.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
### Perubahan Utama
- Menambahkan filter data pada `PrintStatementLog` untuk pengguna non-administrator.
- Membatasi query hanya untuk data yang sesuai dengan `user_id` pengguna yang sedang login jika bukan administrator.
### Detail Perubahan
1. **Update Logika Query**:
- Menambahkan kondisi pengecekan untuk peran pengguna menggunakan `auth()->user()->hasRole('administrator')`.
- Jika pengguna bukan administrator, query akan otomatis difilter berdasarkan `user_id` dari pengguna yang sedang login dengan fungsi `Auth::id()`.
2. **Peningkatan Keamanan Data**:
- Membatasi akses data supaya hanya pengguna yang berhak dapat melihat data milik mereka.
- Memastikan administrator tetap memiliki akses penuh ke semua data tanpa pembatasan.
### Perubahan Utama
- Tambah validasi untuk memverifikasi bahwa nomor rekening sesuai dengan cabang pengguna.
- Cegah transaksi untuk rekening yang terdaftar di cabang khusus (`ID0019999`).
- Perbaikan sistem untuk menangani kasus rekening yang tidak ditemukan di database.
### Detail Perubahan
1. **Validasi Cabang Rekening**:
- Tambah pengecekan untuk memastikan rekening yang dimasukkan adalah milik cabang pengguna (non-multi-branch).
- Blokir transaksi jika rekening terdaftar pada cabang khusus (`ID0019999`) dengan menampilkan pesan error yang relevan.
- Tambahkan pesan error jika nomor rekening tidak ditemukan dalam sistem.
2. **Update Logika Penyimpanan**:
- Tambahkan validasi untuk mengisi kolom `branch_code` secara otomatis berdasarkan informasi rekening terkait.
- Otomatis atur nilai awal `authorization_status` menjadi `approved`.
3. **Penghapusan Atribut Tidak Digunakan**:
- Hapus form `branch_code` dari view terkait (`index.blade.php`) karena sekarang diisi secara otomatis berdasarkan data rekening.
4. **Perbaikan View dan Logika Terkait Status Otorisasi**:
- Hapus logic dan elemen UI terkait `authorization_status` di halaman statement (`index.blade.php` dan `show.blade.php`).
- Simplifikasi tampilan untuk hanya menampilkan informasi yang tersedia dan relevan.
5. **Optimasi Query Data Cabang**:
- Update query untuk memfilter cabang berdasarkan kondisi `customer_company` dan mengecualikan kode cabang khusus.
6. **Penyesuaian Struktur Request**:
- Hapus validasi terkait `branch_code` di `PrintStatementRequest` karena tidak lagi relevan.
7. **Log Aktivitas dan Kesalahan**:
- Tambahkan log untuk mencatat aktivitas seperti validasi rekening dan penyimpanan batch data.
- Penanganan lebih baik untuk logging jika terjadi error saat validasi nomor rekening atau penyimpanan statement.
### Manfaat Perubahan
- Meningkatkan akurasi data cabang dan validasi rekening sebelum penyimpanan.
- Menyederhanakan antarmuka pengguna dengan menghapus field input redundant.
- Memastikan proses menjadi lebih transparan dengan penanganan error yang lebih baik.
Langkah ini diterapkan untuk meningkatkan keamanan dan keandalan sistem dalam memverifikasi dan memproses pemintaan statement.
- **Validasi Data:**
- Menambahkan validasi untuk memastikan bahwa setiap `entryData` adalah array dan memiliki properti `stmt_entry_id`.
- Log peringatan ditambahkan untuk mendeteksi struktur data yang tidak valid.
- **Perbaikan Logging:**
- Logging ditingkatkan untuk mencatat data invalid yang ditemukan selama proses.
- Menambahkan log peringatan dengan struktur data detail saat validasi gagal.
- **Penghapusan Nested Loop:**
- Memperbaiki logika iterasi dengan menghapus nested loop dan langsung memproses tiap elemen `entryBatch`.
- **Penghitungan Kesalahan:**
- Menambahkan penghitungan `errorCount` untuk melacak jumlah data yang mengalami validasi gagal.
Perubahan ini meningkatkan keandalan proses dengan validasi tambahan, mencegah error akibat struktur data tidak valid, serta memberikan informasi log yang lebih rinci.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Perubahan Mekanisme Simpan Data:**
- Mengganti pendekatan `delete` dan `insert` dengan `updateOrCreate` untuk mencegah duplicate key error.
- Menambahkan transaksi database (`DB::beginTransaction()` dan `DB::commit()`) untuk memastikan konsistensi data.
- Menambahkan logging pada awal dan akhir proses untuk memantau jumlah record yang berhasil diproses.
- **Penanganan Error:**
- Menambahkan rollback transaksi (`DB::rollback()`) pada exception untuk menghindari data korup.
- Logging eror ditingkatkan dengan menampilkan pesan dan trace exception secara rinci.
- **Optimasi Loop:**
- Refinement looping pada `entryBatch` dengan menerapkan chunking untuk efisiensi memori.
- Proses setiap record menggunakan `updateOrCreate` guna mengurangi overhead penghapusan data secara manual.
- **Peningkatan Logging:**
- Menambahkan informasi log yang mencakup:
- Proses awal dan akhir dari `saveBatch`.
- Jumlah record yang diproses secara sukses.
- Error yang terjadi selama proses berlangsung.
- **Dokumentasi dan Komentar:**
- Menambahkan penjelasan detil pada method `saveBatch` untuk memperjelas logika baru.
- Penyempurnaan komentar agar mencerminkan proses terkini dengan jelas.
Perubahan ini meningkatkan efisiensi dan keandalan proses penyimpanan data batch dengan mengurangi risiko konflik pada database serta memastikan rollback pada situasi error.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Penambahan Fitur**:
- Menambahkan metode baru `generateSingleAtmCardCsv` untuk membuat file CSV tunggal tanpa pemisahan cabang:
- Mencakup seluruh data kartu ATM yang memenuhi syarat.
- File diunggah ke SFTP tanpa direktori spesifik cabang.
- Implementasi command `UpdateAllAtmCardsCommand` untuk batch update:
- Dukungan konfigurasi parameter seperti batch size, ID log sinkronisasi, queue, filter, dan dry-run.
- **Optimasi Logging**:
- Logging rinci ditambahkan pada semua proses, termasuk:
- Generasi CSV tunggal.
- Proses upload CSV ke SFTP.
- Pembaruan atau pembuatan `KartuSyncLog` dalam batch processing.
- Progress dan status tiap batch.
- Error handling dengan detail informasi pada setiap exception.
- **Perbaikan dan Penyesuaian Job**:
- Penambahan `UpdateAllAtmCardsBatchJob` yang mengatur proses batch update:
- Mendukung operasi batch dengan pengaturan ukuran dan parameter filtering kartu.
- Pencatatan log progres secara dinamis dengan kalkulasi batch dan persentase.
- Menyusun delay antar job untuk performa yang lebih baik.
- Menyertakan validasi untuk sinkronisasi dan pembaruan data kartu ATM.
- **Refaktor Provider**:
- Pendaftaran command baru:
- `UpdateAllAtmCardsCommand` untuk batch update seluruh kartu ATM.
- Command disertakan dalam provider `WebstatementServiceProvider`.
- **Error Handling**:
- Peningkatan mekanisme rollback pada database saat error.
- Menambahkan notifikasi log `failure` apabila job gagal dijalankan.
- **Dokumentasi dan Komentar**:
- Menambahkan komentar mendetail pada setiap fungsi baru untuk penjelasan lebih baik.
- Mendokumentasikan seluruh proses dan perubahan pada job serta command baru terkait kartu ATM.
Perubahan ini meningkatkan efisiensi pengelolaan data kartu ATM, termasuk generasi CSV, proses batch, dan pengunggahan data ke SFTP.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan filter baru:
- Memastikan `product_code` tidak termasuk dalam daftar `6002`, `6004`, `6042`, dan `6031`.
- Menyaring data dengan kondisi branch tidak sama dengan `ID0019999`.
- Optimasi query:
- Filter tambahan bertujuan untuk mempersempit data hasil pengambilan sehingga lebih relevan dan efisien dalam pembuatan file CSV.
- Peningkatan validasi:
- Memastikan data yang diekspor sesuai dengan ketentuan baru guna meningkatkan akurasi laporan biaya kartu.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Penambahan Field Baru:**
- Menambahkan field baru `product_code` pada tabel `atmcards` melalui migrasi database.
- Field bersifat nullable dan memiliki komentar deskriptif untuk dokumentasi skema database.
- **Refaktor Logika pada UpdateAtmCardBranchCurrencyJob:**
- Menambahkan assignment data `product_code` untuk update kartu ATM berdasarkan informasi account.
- Mengoptimalkan proses query dengan memperbaiki penggunaan namespace model `Account`.
- **Peningkatan Model Atmcard:**
- Menambahkan relasi baru `biaya` untuk mendapatkan informasi terkait jenis kartu (`JenisKartu`).
- Menambah **scope** baru:
- `active` untuk memfilter kartu ATM yang aktif.
- `byProductCode` untuk memfilter berdasarkan kode produk (`product_code`).
- Memperkenalkan accessor dan mutator untuk memastikan format `product_code` konsisten (uppercase, trimmed).
- Menambahkan logging pada setiap akses relasi atau perubahan terkait field `product_code`.
- **Penyesuaian Logging:**
- Memperbanyak log untuk monitoring aktivitas, termasuk:
- Akses dan perubahan data `product_code`.
- Scope query pada model `Atmcard`.
- **Migrasi Database:**
- Menambahkan proses safe migration dengan transaksi pada operasi `up` dan `down`.
- Mencatat log saat migrasi berhasil atau rollback diperlukan jika terjadi kesalahan.
- **Optimisasi dan Perbaikan Format:**
- Mengorganisasi ulang import pada file `UpdateAtmCardBranchCurrencyJob` sesuai standar PSR-12.
- Membenahi key output response dari `openCategory` menjadi `acctType` untuk dukungan data baru `product_code`.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Penambahan Logika Pengambilan Data:**
- Menambahkan proses pengambilan data account dari model `Account` sebelum memanggil API Fiorano.
- Melakukan pencarian data berdasarkan nomor rekening (`account_number`) melalui query pada model.
- Jika data ditemukan, mengembalikan informasi account berupa response format yang menyerupai hasil dari API.
- **Optimisasi Response:**
- Menyusun data response lengkap dari model `Account`, seperti kode cabang (`branch_code`), mata uang (`currency`), kategori pembukaan (`open_category`), dan properti lain yang relevan.
- Field response menyertakan nilai default atau diisi dengan data lain yang ada dalam model.
- **Fallback API Fiorano:**
- Jika data dari database tidak ditemukan, tetap menggunakan mekanisme existing untuk melakukan request ke API Fiorano.
- Tidak ada perubahan lain pada struktur permintaan atau penanganan response Fiorano.
- **Komentar dan Dokumentasi:**
- Memperbarui komentar pada fungsi `getAccountInfo` untuk mencerminkan logika terbaru.
- Menjelaskan fallback ke API jika data model tidak tersedia melalui komentar inline agar lebih mudah dipahami.
- **Peningkatan Efisiensi:**
- Mengurangi frekuensi panggilan API Fiorano dengan memanfaatkan data lokal terlebih dahulu, sehingga mempercepat proses eksekusi job.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Perubahan Format List:**
- Mengganti properti `class="dashed-list"` dengan `style="list-style-type: none;"` untuk meningkatkan estetika dan konsistensi tampilan.
- Menambahkan simbol `-` pada setiap item list untuk memperjelas poin dalam deskripsi password.
- **Peningkatan Konsistensi:**
- Perbaikan dilakukan pada bagian deskripsi password dalam bahasa Indonesia dan Inggris untuk menjaga keseragaman format.
- Memastikan semua elemen list menggunakan format yang seragam.
- **Penyesuaian Detail:**
- Menonjolkan elemen list dengan properti HTML agar lebih mudah dipahami oleh penerima email.
- Perbaikan minor pada struktur dan whitespace untuk meningkatkan keterbacaan kode.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Penyesuaian Layout dan Tampilan:**
- Mengubah properti CSS pada `.container`:
- `max-width` diubah dari `90%` menjadi `100%`.
- `margin` diubah dari `20px auto` menjadi `0px auto`.
- Mengurangi padding pada elemen `.content` dari `30px` menjadi `5px` untuk meningkatkan efisiensi ruang tampilan.
- **Perbaikan Format Signature:**
- Menggabungkan pemisah signature menjadi satu baris panjang untuk meningkatkan estetika dan keterbacaan.
- Menghapus elemen `<wbr>` yang berlebihan.
- **Penghapusan Footer:**
- Menghilangkan bagian footer yang terdapat elemen copyright dan informasi customer service.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Implementasi Custom Email Sender:**
- Menambahkan metode `send()` dengan EsmtpTransport untuk mendukung pengiriman email menggunakan fallback konfigurasi yang lebih fleksibel.
- Penanganan port `STARTTLS` dengan koneksi manual serta pengaturan SSL.
- **Refaktor Method Build:**
- Memperbaiki tampilan struktur email:
- Menyertakan template email, attachment, dan penempatan properti email secara lebih dinamis.
- Mendukung file PDF atau ZIP sebagai lampiran.
- **Implementasi Konversi Laravel to Symfony Mailer:**
- Metode `toSymfonyEmail()` diimplementasikan untuk mengonversi email Laravel ke Symfony Mailer.
- Penanganan dari email `from`, `to`, `subject`, hingga body HTML secara langsung.
- Penambahan mekanisme attachment dengan validasi eksistensi file.
- **Peningkatan Logging:**
- Menambahkan logging detail untuk setiap tahap proses pengiriman, termasuk metode fallback yang berhasil atau gagal.
- Log peringatan dan error ditambahkan saat terjadi kegagalan di setiap metode yang dicoba.
- **Penanganan Error:**
- Menangani pengecualian dan pencatatan error terakhir dari koneksi email manual serta fallback ke Laravel mailer jika cara custom gagal.
- **Konsistensi Format:**
- Melakukan perapihan atribut class serta alignment pada kode untuk meningkatkan keterbacaan dan konsistensi.
- **Optimalisasi Email Statement:**
- Memastikan format periode (bulanan/range) tampil dinamis pada subjek email.
- Menambahkan validasi serta pengelolaan untuk lampiran file sebelum pengiriman.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Perbaikan Struktural:**
- Melakukan perapihan kode dengan konsistensi indentasi dan penyusunan namespace seluruh file.
- Menambahkan dan mengimpor namespace baru seperti `Throwable`, `InvalidArgumentException`, dan `Exception`.
- **Peningkatan Readability:**
- Menambahkan format dan penyesuaian pada komentar, khususnya penjelasan method dan atribut.
- Menggunakan alignment untuk parameter pada log dan constructor untuk meningkatkan keterbacaan.
- **Pengelolaan Job:**
- Menambahkan logging detail saat memulai, menjalankan, hingga menyelesaikan job.
- Menambahkan penanganan proses tiap akun dalam batch, termasuk logging sukses/gagal dan pembaruan status log.
- **Penanganan Error:**
- Menambahkan rollback database jika terjadi exception pada saat proses pengiriman email.
- Melakukan logging error dengan detail tambahan termasuk pesan dan trace.
- **Penambahan Utility:**
- Menambahkan metode reusable seperti `updateLogStatus` untuk update status log dengan parameter dinamis.
- Menambahkan validasi seperti pengecekan eksistensi file PDF dan email terkait sebelum pengiriman.
- **Peningkatan Proses Batch:**
- Menambahkan pengelolaan batch berbasis properti `batchId` untuk tracking.
- Memperbaiki handle retries dan status akhir batch secara komprehensif (completed, failed).
- Menambahkan logging agregat untuk jumlah akun yang diproses dan tingkat keberhasilan.
- **Peningkatan Validasi Email:**
- Menambahkan skenario untuk pengambilan email dari `stmt_email` atau fallback ke data customer jika tersedia.
- Menambahkan peringatan saat akun tertentu tidak memiliki email yang valid.
- **Pemeliharaan File PDF:**
- Mengecek keberadaan file PDF terkait sebelum proses pengiriman.
- Menampilkan log error jika file tidak ditemukan.
- **Peningkatan Retry dan Logging Gagal:**
- Implementasi metode `failed()` untuk logging pada job yang gagal permanen.
- Menangani detail error dan rollback pada level tiap akun dan batch.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Perbaikan Struktur Kode:**
- Melakukan perapihan kode dengan konsistensi indentasi dan penyusunan namespace.
- Memisahkan logika kompleks dan mengorganisasi ulang kode untuk meningkatkan keterbacaan.
- Menambahkan namespace `InvalidArgumentException`.
- **Peningkatan Validasi:**
- Menambahkan validasi komprehensif untuk parameter `period`, `type`, `--account`, dan `--branch`.
- Validasi lebih spesifik untuk memastikan account atau branch terkait sesuai kebutuhan.
- Memberikan pesan error informatif ketika validasi gagal.
- **Peningkatan Metode Utility:**
- Menambahkan metode `validateParameters` untuk menangani berbagai skenario validasi input.
- Menambahkan metode `determineRequestTypeAndTarget` untuk memisahkan logika penentuan tipe request.
- Memperbarui metode `createLogEntry` untuk menyesuaikan atribut log dengan lebih baik berdasarkan request type.
- **Perbaikan Feedback Pengguna:**
- Menampilkan informasi yang lebih rinci terkait status pengiriman email, seperti parameter validasi, log ID, dan batch ID.
- Memberikan panduan untuk monitoring queue melalui command.
- **Penanganan Error dan Logging:**
- Menambahkan logging detail untuk error yang terjadi dalam proses pengiriman email.
- Memastikan rollback jika terjadi kegagalan selama proses dispatch job.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **Penyesuaian Konfigurasi PHPMailer**:
- Menambahkan logika baru untuk mengabaikan validasi sertifikat SSL agar mendukung lingkungan yang menggunakan sertifikat self-signed atau tidak valid.
- Menambahkan pengecekan properti konfigurasi `ignore_certificate_errors`.
- Konfigurasi tambahan meliputi:
- `verify_peer` diatur ke `false`.
- `verify_peer_name` diatur ke `false`.
- `allow_self_signed` diatur ke `true`.
- **Peningkatan Debugging**:
- Mengaktifkan mode debug jika aplikasi dalam mode debug (`config('app.debug')`).
- **Tujuan Perubahan**:
- Memfasilitasi pengelolaan email di lingkungan development atau pengujian.
- Mendukung sertifikat SSL non-standar tanpa mengganggu fungsionalitas pengiriman email lainnya.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- **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>
- Memperbarui logika retry pada `AtmTransactionReportController`:
- Memperbolehkan retry jika status laporan adalah `failed`, `pending`, atau laporan dengan status `processing` yang telah melebihi batas waktu (1 jam).
- Menambahkan atribut baru seperti `processing_hours` dan `is_processing_timeout` pada data untuk menampilkan informasi durasi proses dan flag timeout.
- Mengubah status laporan menjadi `failed` jika melebihi batas waktu sebelum dilakukan retry.
- Memperbarui error message untuk mencatat alasan timeout.
- Menambahkan metode baru `canRetry` pada controller:
- Mengembalikan boolean jika laporan dapat di-retry berdasarkan status dan kondisi laporan.
- Memperbarui tampilan untuk bagian daftar laporan (`atm-reports/index.blade.php`):
- Menambahkan tombol retry dengan warna yang disesuaikan (kuning/oranye untuk `failed`/`pending`, merah untuk timeout).
- Memperbarui tampilan status laporan menjadi lebih informatif, termasuk keterangan durasi proses jika timeout.
- Memperbarui tampilan detail laporan (`atm-reports/show.blade.php`):
- Menambahkan tombol retry dengan label tambahan "Retry (Timeout)" jika melebihi batas waktu proses.
- Menampilkan informasi tambahan seperti waktu proses jika laporan dalam status `processing`.
- Menyediakan fungsi JavaScript baru `retryReport` untuk handling retry via AJAX:
- Menyertakan konfirmasi sebelum retry.
- Memperbarui tombol retry agar lebih reaktif terhadap perubahan status laporan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan method baru `retry` pada `AtmTransactionReportController` untuk memproses ulang laporan transaksi ATM:
- Mengizinkan retry untuk laporan dengan status `failed` atau `pending`.
- Mereset status laporan menjadi `processing` dan membersihkan informasi error sebelumnya.
- Dispatch ulang job `GenerateAtmTransactionReportJob`.
- Menambahkan mekanisme error handling dengan memperbarui status laporan jika terjadi kegagalan.
- Memperbarui view `atm-reports/index.blade.php`:
- Menambahkan tombol `Retry Job` pada baris laporan dengan status `failed` atau `pending`.
- Menyediakan fungsi JavaScript untuk memproses retry dengan AJAX:
- Menampilkan konfirmasi sebelum retry.
- Reload halaman setelah retry selesai.
- Memperbarui view `atm-reports/show.blade.php`:
- Menambahkan tombol `Retry Job` untuk laporan dengan status `failed`, `pending`, atau `completed` yang kehilangan file.
- Menampilkan form retry dalam pesan error jika file laporan tidak tersedia.
- Memperbarui routing pada `web.php`:
- Menambahkan route baru `atm-reports.retry` untuk endpoint retry dengan HTTP POST.
- Mendaftarkan ulang command `GenerateAtmTransactionReport` pada provider:
- Memastikan job untuk retry sudah terdaftar pada sistem.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan view `atm-reports/show.blade.php` untuk menampilkan detail laporan transaksi ATM:
- Menampilkan informasi laporan seperti periode, tanggal laporan, status, dan status otorisasi.
- Menyediakan informasi file laporan jika status selesai, seperti path, ukuran file, dan jumlah data.
- Menampilkan pesan error jika status laporan gagal, termasuk pesan kesalahan detail.
- Menampilkan status unduhan laporan beserta waktu unduhan jika sudah diunduh.
- Menambahkan informasi pengguna terkait:
- Pihak yang membuat, memodifikasi, dan memberikan otorisasi laporan.
- Metadata tambahan seperti IP address dan user agent.
- Menambahkan form otorisasi untuk laporan dengan status `pending authorization`:
- Menyediakan opsi untuk `approve` atau `reject` laporan.
- Menyertakan field remarks sebagai catatan keputusan otorisasi.
- Memasukkan elemen navigasi:
- Tombol kembali ke daftar laporan.
- Tombol unduh file laporan (jika tersedia).
- Menyertakan scripting tambahan untuk inisialisasi dinamika halaman menggunakan JavaScript.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan controller `AtmTransactionReportController` untuk mengelola laporan transaksi ATM.
- Fungsi utama yang disediakan:
1. **index**: Menampilkan daftar laporan transaksi ATM.
2. **create**: Menampilkan form untuk permintaan laporan baru.
3. **store**: Menghandle penyimpanan permintaan laporan baru, termasuk validasi input, pembuatan log laporan, dan dispatching job.
4. **show**: Menampilkan detail laporan transaksi ATM berdasarkan log laporan.
5. **download**: Melakukan unduhan file laporan jika telah selesai diproses.
6. **authorize**: Menghandle otorisasi permintaan laporan, termasuk validasi status `approved` atau `rejected`.
7. **dataForDatatables**: Memberikan data laporan untuk tabular dengan filter, sorting, dan pagination.
8. **destroy**: Menghapus laporan transaksi ATM, termasuk file terkait jika ada.
9. **sendEmail**: Mengirim laporan ke email jika laporan dan alamat email tersedia.
- Fitur tambahan:
- Memastikan validasi input untuk keamanan data pengguna.
- Menambahkan updating log laporan seperti status, error, hingga metadata unduhan.
- Mendukung pencarian dan filtering data untuk pengelolaan laporan berjumlah besar.
- Dispatch job `GenerateAtmTransactionReportJob` untuk menghasilkan laporan transaksi secara background:
- Menambahkan log detail jika terjadi kegagalan saat dispatch.
- Tujuan pembaruan:
- Mempermudah pengelolaan dan pelacakan laporan transaksi ATM.
- Menyediakan antarmuka user-friendly untuk pengguna, termasuk validasi dan feedback status laporan.
- Meningkatkan fleksibilitas dan efisiensi pengelolaan laporan dengan mendukung filter, sorting, dan job asynchronous.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan file migrasi baru `create_atm_transaction_report_logs_table`:
- Membuat tabel `atm_transaction_report_logs` untuk menyimpan log laporan transaksi ATM.
- Struktur tabel meliputi:
- Field `period` (format Ymd) untuk menyimpan periode laporan.
- Status laporan `status` dengan opsi: `pending`, `processing`, `completed`, dan `failed`.
- Status otorisasi `authorization_status` dengan opsi: `pending`, `approved`, dan `rejected`.
- Informasi file laporan seperti `file_path`, `file_size`, dan `record_count`.
- Informasi kesalahan dengan `error_message`.
- Status unduhan laporan dengan `is_downloaded` dan `downloaded_at`.
- Informasi user terkait (`user_id`, `created_by`, `updated_by`, dan `authorized_by`).
- Metadata lain seperti `ip_address`, `user_agent`, serta timestamps.
- Menambahkan beberapa indeks untuk optimasi:
- Indeks untuk kolom `period`, `status`, `authorization_status`, dan `created_at`.
- Menambahkan fungsi rollback untuk menghapus tabel jika migrasi dibatalkan.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>