- Ubah konstruksi path SFTP dan storage lokal agar konsisten dengan format folder baru `YYYYMMDD.YYYYMMDD`
- Tambahkan dukungan periode akhir (`endPeriod`) pada alur cetak dan ekspor statement, lengkap dengan propagasi ke view dan log
- Perkuat logging di controller dan job untuk audit proses, serta sesuaikan penamaan file pada jalur PRINT
Rincian Perubahan
- PrintStatementController.php
- Ganti path SFTP awal dari `{$period_from}/{$branch_code}/{$account_number}_{$period_from}.pdf` menjadi:
- `{$periodPath}/PRINT/{$branch_code}/{$account_number}.1.pdf` pada cek file awal
- Gunakan `$periodPath = formatPeriodForFolder($statement->period_from)` untuk semua referensi path
- Iterasi ketersediaan periode:
- Gunakan `formatPeriodForFolder($periodFormatted)` saat membentuk `periodPath` dalam loop bulan
- Generate atau fetch statement:
- Ubah path menjadi `{$periodPath}/{$branch_code}/{$account_number}_{$period}.pdf` untuk konsistensi
- ZIP multi-periode:
- Cari file ZIP pada `statements/{$periodPath}/multi_account/{$statementId}` sesuai format folder baru
- Variabel periode:
- Tambahkan `$endPeriod = $statement->period_to ?? $period` dan propagasikan ke:
- Pemanggilan `generateStatementPdf($norek, $period, $endPeriod, ...)`
- View `statements.stmt` melalui `compact(..., 'endPeriod')`
- Perbarui logging untuk menampilkan `endPeriod`
- Generate PDF:
- Tandai storage path menjadi `statements/{$periodPath}/{$norek}`
- Ubah signature: `generateStatementPdf($norek, $period, $endPeriod, ...)`
- Akses file lokal/SFTP:
- Ubah path storage menjadi `statements/{$periodPath}/{$account->branch_code}/{$filename}`
- Penyesuaian delete path: `statements/{$periodPath}/{$norek}/{$filename}`
- ExportStatementPeriodJob.php
- Tambah properti dan parameter konstruktor: `$endPeriod`
- Ubah inisialisasi periode:
- Ganti `calculatePeriodDates()` menjadi `formatPeriodForFolder()` (metode internal yang menetapkan `startDate` dan `endDate`)
- Jika `$endPeriod` diisi, jadikan akhir bulan dari `endPeriod` sebagai `endDate` pemrosesan
- Render view:
- Tambahkan `endPeriod` ke `compact(...)` agar view mengetahui batas periode akhir
- Storage path:
- Gunakan `formatPeriodForFolder($this->period)` untuk path `statements/{$periodPath}/{$account->branch_code}`
- Controller dispatch:
- Ubah pemanggilan job menjadi `ExportStatementPeriodJob::dispatch($statementId, $accountNumber, $period, $endPeriod, $balance, $clientName)`
- resources/views/statements/stmt.blade.php
- Periode:
- Hitung `periodDates` via `calculatePeriodDates($period)`
- Jika `endPeriod` ada, gunakan `calculatePeriodDates($endPeriod)` sebagai referensi `endDate`
- Data customer:
- Gunakan `$customer` langsung, bukan `$account->customer`
- Kondisional alamat berdasarkan `stmt_sent_type == 'BY.MAIL.TO.DOM.ADDR'`:
- Utamakan `l_dom_street` jika tersedia, fallback ke `address`
- Susun RT/RW/kelurahan/kota/provinsi/kode pos sesuai preferensi pengiriman
- Format angka:
- Penyesuaian spasi dan casting `(float)` untuk konsistensi number_format
- Logging:
- Tambahkan informasi hasil perhitungan period dates untuk audit
- Memberikan akses penuh fitur multi-branch untuk role `administrator` dan `sentra_operasi`.
- Menambahkan akun untuk client **SILOT** dalam daftar monitoring.
- Menonaktifkan validasi duplikasi statement di `PrintStatementRequest`.
- Memindahkan struktur penyimpanan file dari `statements/{client}` menjadi `partners/{client}`.
- Menambahkan pengurutan hasil berdasarkan `branch_code` dan `account_number` untuk laporan.
- Memperbaiki tampilan dropdown branch dan menyembunyikan field `end_date` yang tidak relevan.
- Menghapus opsi `NO.PRINT` dari dropdown `stmt_sent_type` untuk penyederhanaan UI.
- Peningkatan UI dan struktur direktori untuk mempermudah pembacaan dan pengelolaan statement.
- **WebstatementController.php**:
- Menyederhanakan fungsi `index()` dengan mengubah parameter menjadi langsung `string $queueName='default'`.
- Menghapus pengambilan parameter `$queueName` dari objek `Request`.
- **ExportStatementPeriodJob.php**:
- Memperbaiki perhitungan saldo berjalan (`running balance`) dengan mempertimbangkan mata uang.
- Menambahkan logika penggunaan `amount_fcy` jika mata uang bukan IDR.
- Menyesuaikan tipe transaksi (D/C) menggunakan nilai `amount` yang telah disesuaikan.
- **GenerateBiayaKartuCsvJob.php**:
- Mengubah daftar produk yang dikecualikan menjadi `['6031','6021','6042']`.
- Memperbaiki filter khusus dengan mengecualikan `product_code` 6004 jika `ctdesc` = CLASSIC.
- Menambahkan kolom hash unik 16 digit pada data CSV untuk identifikasi setiap record.
- **ProcessCustomerDataJob.php**:
- Menambahkan mapping baru `name_1` → `name` pada `getHeaderMapping`.
- Menambahkan logging untuk field `fillable` agar debugging lebih mudah.
- Tambah validasi HMAC (X-Signature, X-Timestamp, X-Api-Key) pada setiap request.
- Standarkan format respons sesuai ResponseCode; hapus `response_description` (gabung ke `response_message`).
- `BalanceSummaryRequest`: validasi header + `validateHmac512`, pakai secret dari config, logging detail, bedakan invalid API key vs invalid signature.
- `AccountBalanceController`: sederhanakan pesan error “Rekening tidak ditemukan”.
- Konfigurasi baru: `webstatement.api_key`, `webstatement.secret_key`; pastikan helper `validateHmac512` tersedia.
- Breaking: Bearer token tidak didukung; gunakan HMAC headers.
- Validasi nomor rekening di database sebelum proses bisnis.
- Logging terstruktur untuk setiap percobaan validasi HMAC (header & hasil verifikasi).
- Konsistensi kode error via ResponseCode enum untuk semua kasus gagal.
- Menambahkan ResponseCode enum untuk standarisasi semua response API.
- Integrasi meta data: nomor rekening, periode, request_id, dan reference_code.
- Memperbarui validasi input dengan response code standar (INVALID_FIELD).
- Struktur response dibuat konsisten untuk success dan error.
- Logging diperkuat untuk debugging dan monitoring.
- Menambahkan `AccountBalanceController` dengan endpoint `GET /api/balance`.
- Integrasi dengan `AccountBalanceService` untuk pengelolaan logika bisnis.
- Validasi request menggunakan `BalanceSummaryRequest`.
- Formatting response dengan `BalanceSummaryResource`.
- Menyediakan ringkasan saldo, transaksi, dan metadata dengan response JSON konsisten.
Menambahkan parameter queue_name untuk mengatur queue spesifik pada job processing:
- Menambahkan parameter queueName pada StagingController.processData() dan index()
- Menggunakan onQueue() method saat dispatch job di StagingController
- Memperbarui ProcessDailyStaging untuk mengirim queue_name ke controller
- Menambahkan parameter Request pada WebstatementController untuk menerima queue_name
- Menggunakan onQueue() method saat dispatch job di WebstatementController
- Menambahkan logging untuk queue_name di semua proses
- Memperbarui response JSON untuk menyertakan informasi queue_name
- Menambahkan komentar fungsi yang menjelaskan parameter queue_name
- Mempertahankan backward compatibility dengan default queue 'default'
- Meningkatkan fleksibilitas dalam manajemen queue untuk berbagai environment
- Memungkinkan pemisahan job berdasarkan prioritas atau resource yang tersedia
Perubahan yang dilakukan:
- Hapus file `MigrasiController.php` yang tidak lagi digunakan
- Ganti referensi controller dari `MigrasiController` menjadi `StagingController` di `ProcessDailyMigration.php`
- Update semua Job class untuk menggunakan disk `staging` menggantikan `sftpStatement`
- Ganti konstanta `DISK_NAME` di class berikut:
* `ProcessAccountDataJob`
* `ProcessArrangementDataJob`
* `ProcessAtmTransactionJob`
* `ProcessBillDetailDataJob`
* `ProcessCategoryDataJob`
* `ProcessCompanyDataJob`
* `ProcessCustomerDataJob`
* `ProcessDataCaptureDataJob`
* `ProcessFtTxnTypeConditionJob`
* `ProcessFundsTransferDataJob`
* `ProcessProvinceDataJob`
- Komentari sementara `array_pop()` di `ProcessDataCaptureDataJob` untuk debugging
- Rapikan whitespace dan formatting di `GenerateClosingBalanceReportCommand`
- Sesuaikan konfigurasi storage agar menggunakan local filesystem (`disk: staging`)
- Konsolidasikan penamaan dan penggunaan disk untuk environment `staging`
- Hilangkan ketergantungan terhadap koneksi SFTP dalam proses development/staging
Manfaat:
- Mempercepat proses development dan debugging dengan akses file lokal
- Menyederhanakan konfigurasi untuk staging environment
- Meningkatkan konsistensi dan maintainability kode
- Mengurangi potensi error akibat koneksi eksternal (SFTP)
Menambahkan dukungan fallback untuk nilai `stmt_entry_id` yang kosong/null dengan menggunakan field `id` dari CSV (jika tersedia di akhir file).
Perubahan yang dilakukan:
- Menambahkan 'id' sebagai bagian dari expected CSV headers
- Mengimplementasikan handleStmtEntryIdFallback() untuk logika pengganti
- Menggunakan field 'id' sebagai stmt_entry_id jika nilainya kosong atau null
- Menyesuaikan validasi jumlah kolom terhadap struktur CSV terbaru
- Melakukan pembersihan field 'id' sebelum data disimpan ke database
- Memperkuat validasi di addToBatch() agar stmt_entry_id selalu valid
- Menambahkan logging untuk proses fallback dan debugging
- Meningkatkan error handling untuk kasus data tidak valid
- Menjamin kompatibilitas dengan struktur model StmtEntryDetail
- Optimasi batch insert melalui pengecekan dan pembersihan data lebih ketat
Menambahkan parameter --period pada command ProcessDailyMigration untuk fleksibilitas pemrosesan data harian.
Perubahan yang dilakukan:
- Menambahkan parameter --period dengan default '-1 day' pada command ProcessDailyMigration
- Memungkinkan input period dalam berbagai format:
- Format Ymd (contoh: 20250120)
- Format relative date (contoh: '-2 days', '-1 week')
- Default fallback ke '-1 day' jika parameter kosong atau format tidak valid
- Update method index di MigrasiController untuk menerima dan memproses parameter period
- Menambahkan method determinePeriod untuk konversi dan validasi parameter period
- Menggunakan Carbon untuk parsing dan konversi tanggal
- Menambahkan logging detail untuk tracking parameter input dan hasil konversi period
- Menambahkan validasi dan error handling jika format periode tidak sesuai
- Mempertahankan backward compatibility agar command lama tetap berjalan seperti sebelumnya
- Update deskripsi command dan signature agar dokumentasi CLI lebih jelas
Tujuan perubahan:
- Memberikan fleksibilitas bagi tim operasional untuk menjalankan migrasi data dengan periode yang spesifik
- Memudahkan eksekusi ulang data harian atau data backdate tanpa modifikasi kode
- Memastikan proses migrasi lebih aman, transparan, dan dapat dipantau melalui logging
Menambahkan fitur pengelolaan data stmt_entry_detail untuk integrasi transaksi dengan detail yang lebih lengkap.
Perubahan yang dilakukan:
- Membuat migrasi create_stmt_entry_detail_table dengan struktur field sesuai kebutuhan bisnis
- Menambahkan index pada kolom penting untuk meningkatkan performa query
- Membuat model StmtEntryDetail dengan relasi ke:
- Account
- TempFundsTransfer
- TempTransaction
- Teller
- DataCapture
- TempArrangement
- Mengimplementasikan $fillable dan $casts sesuai struktur tabel
- Menambahkan relasi untuk memudahkan integrasi antar modul
- Membuat job ProcessStmtEntryDetailDataJob untuk memproses file CSV dengan batch processing
- Mengimplementasikan chunking untuk menangani file besar secara efisien
- Membersihkan trans_reference dari karakter tidak valid sebelum penyimpanan
- Menggunakan updateOrCreate untuk mencegah duplikasi primary key
- Menggunakan database transaction untuk menjaga konsistensi data
- Menambahkan logging komprehensif untuk monitoring dan debugging
- Mengimplementasikan error handling yang robust untuk menghindari job failure tanpa informasi
- Memastikan penggunaan resource memory tetap optimal saat memproses data besar
- Menambahkan case baru di MigrasiController untuk memproses stmt_entry_detail
- Konsisten dengan pattern migrasi data yang sudah ada di sistem
Tujuan perubahan:
- Menyediakan sistem import dan pengolahan data stmt_entry_detail dengan proses yang aman dan efisien
- Memudahkan integrasi transaksi dengan detail tambahan di modul Webstatement
- Menjamin integritas data dengan penggunaan transaction, logging, dan error handling yang komprehensif
Menambahkan fitur command line untuk generate laporan closing balance sekaligus memperbaiki pengisian field yang required di database.
Perubahan yang dilakukan:
- Membuat command `webstatement:generate-closing-balance-report` dengan parameter:
- `account_number`: nomor rekening (required)
- `period`: format tanggal YYYYMMDD (required)
- `--user_id=`: ID user (optional, default 1)
- Menambahkan field `report_date` dengan konversi dari parameter `period` menggunakan Carbon
- Menambahkan field `created_by` dan `updated_by` untuk kebutuhan audit trail
- Menambahkan field `ip_address` dan `user_agent` dengan default 'console' untuk identifikasi proses non-web
- Memperbaiki validasi parameter dengan regex dan proper escaping
- Menghindari error SQLSTATE[23502] terkait field not null di database schema
- Menggunakan database transaction untuk menjaga konsistensi data
- Mengupdate fungsi `closing_balance_report_logs` untuk menyimpan semua field yang dibutuhkan
- Integrasi dengan `GenerateClosingBalanceReportJob` untuk pemrosesan laporan secara background
- Menambahkan logging komprehensif untuk monitoring `report_date` dan proses lainnya
- Mendukung eksekusi manual dan penjadwalan via Laravel scheduler
- Kompatibel dengan proses laporan closing balance via web dan CLI
Tujuan perubahan:
- Mempermudah proses generate laporan closing balance melalui CLI secara manual atau terjadwal
- Memastikan seluruh field wajib di `closing_balance_report_logs` terisi dengan benar
- Menyediakan audit trail lengkap dan logging yang detail untuk proses via console
- Meningkatkan keandalan sistem dengan validasi dan error handling yang lebih baik
Menambahkan fitur job processing untuk memproses laporan closing balance secara asynchronous dengan dukungan data besar.
Perubahan yang dilakukan:
- Membuat model `ClosingBalanceReportLog` untuk mencatat permintaan laporan dan status proses
- Membuat job `GenerateClosingBalanceReportJob` untuk memproses laporan closing balance di background queue
- Memodifikasi `LaporanClosingBalanceController` untuk mengintegrasikan job processing saat generate laporan
- Menambahkan migration `closing_balance_report_logs` untuk menyimpan log permintaan, path file, dan status
- Menggunakan query custom dari input user untuk pengambilan data transaksi
- Menambahkan field `closing_balance` yang dihitung otomatis (saldo awal + amount_lcy)
- Mengimplementasikan chunking data untuk memproses transaksi dalam jumlah besar secara efisien
- Menambahkan logging detail untuk memudahkan monitoring, debugging, dan audit trail
- Menggunakan database transaction untuk menjaga konsistensi data selama proses job
- Menambahkan fitur retry otomatis pada job jika terjadi kegagalan atau timeout
- Mengekspor hasil laporan ke file CSV dengan delimiter pipe `|` untuk kebutuhan integrasi sistem lain
- Menambahkan workflow approval untuk validasi laporan sebelum download
- Implementasi download tracking dan manajemen file untuk memudahkan kontrol akses
Tujuan perubahan:
- Memungkinkan pemrosesan laporan closing balance dengan jumlah data besar secara efisien dan aman
- Mengurangi beban proses synchronous pada server dengan pemanfaatan queue
- Menyediakan audit trail lengkap untuk setiap proses generate laporan
- Meningkatkan pengalaman pengguna dengan proses generate yang lebih responsif dan terkontrol
Perubahan yang dilakukan:
**Controller LaporanClosingBalanceController:**
- Membuat controller baru untuk laporan closing balance dengan method index(), dataForDatatables(), export(), dan show().
- Menggunakan model AccountBalance dengan field actual_balance dan cleared_balance.
- Implementasi filter nomor rekening dan rentang tanggal.
- Menambahkan DB transaction dan rollback untuk keamanan data.
- Logging dan error handling komprehensif untuk proses data dan export.
**View laporan-closing-balance/index.blade.php:**
- Form filter dengan input nomor rekening dan rentang tanggal (default 30 hari terakhir).
- Implementasi DataTables dengan kolom: Nomor Rekening, Periode, Saldo Cleared, Saldo Aktual, Tanggal Update, dan Action.
- Tombol Filter, Reset, dan Export CSV.
- JavaScript untuk format currency IDR, format tanggal, dan dynamic export URL.
- Menggunakan TailwindCSS dan KTDataTable untuk desain yang responsive.
**View laporan-closing-balance/show.blade.php:**
- Halaman detail per record dengan visual saldo yang menarik (color-coded cards).
- Menampilkan Saldo Cleared, Saldo Aktual, dan Selisih Saldo secara otomatis.
- Informasi rekening dan periode disertai fitur copy ke clipboard.
- Tombol aksi: Kembali, Export, dan Print (dengan print style khusus).
- Responsive untuk berbagai ukuran layar.
**Routing dan Navigasi:**
- Menambahkan routing resource dengan prefix 'laporan-closing-balance' di web.php.
- Tambahan route untuk datatables, export, dan show dengan middleware auth.
- Breadcrumb dinamis untuk index dan show, menampilkan nomor rekening dan periode.
**Penyesuaian Model:**
- Menggunakan relasi Account di model AccountBalance melalui account_number.
- Menyesuaikan field dari opening_balance ke cleared_balance sesuai skema.
- Tetap mempertahankan actual_balance untuk saldo akhir.
**Fitur Keamanan dan Performance:**
- Input validation dan sanitization untuk semua request.
- Pagination dan filter query untuk efisiensi dan mencegah memory overflow.
- Error logging dengan context untuk debugging lebih mudah.
**User Experience:**
- Interface user-friendly dengan feedback visual dan loading state.
- Export CSV untuk kebutuhan analisis lebih lanjut.
- Print-friendly layout untuk kebutuhan cetak data.
- Clipboard integration untuk kemudahan salin data.
Tujuan perubahan:
- Menyediakan fitur monitoring dan analisis closing balance secara komprehensif di modul Webstatement.
- Mempermudah user dalam melihat detail saldo akhir dengan filtering, export, dan cetak yang optimal.
Perubahan yang dilakukan:
- Menambahkan set permission 0777, chown, dan chgrp pada direktori temp dan storage di berbagai job dan controller.
- Diterapkan di PrintStatementController, ExportStatementJob, ExportStatementPeriodJob, dan GenerateMultiAccountPdfJob.
- Semua direktori yang dibuat memiliki permission 777 untuk akses penuh dan ownership user www-data.
- Menambahkan pengecekan function_exists('chown') dan posix_getuid() === 0 sebelum menjalankan chown/chgrp.
- Menggunakan @ operator untuk suppress error jika operasi chown gagal.
- Menambahkan fallback mechanism agar aplikasi tetap berjalan meskipun tidak memiliki privilege root.
- Mengubah target ownership dari root ke www-data untuk menghindari error "Operation not permitted".
- Menambahkan pengecekan keberadaan direktori sebelum mengatur permission dan ownership.
- Menambahkan error handling yang konsisten dan robust untuk semua operasi file system terkait direktori.
- Memastikan perubahan bekerja untuk local disk maupun storage disk lainnya.
Tujuan perubahan:
- Menjamin direktori yang digunakan oleh sistem memiliki akses dan kepemilikan yang tepat di environment production.
- Mencegah error `chown(): Operation not permitted` saat aplikasi berjalan tanpa akses root.
- Meningkatkan stabilitas proses PDF generation dan file storage, serta kompatibilitas dengan environment server yang terbatas.
Perubahan yang dilakukan:
- Mengubah logika penyimpanan file ke dalam struktur direktori berdasarkan branch_code.
- Memperbarui metode downloadFromStorage untuk menyesuaikan perubahan struktur direktori.
- Menyederhanakan nama file PDF dengan menghapus prefix "statement".
- Menambahkan relasi branch dalam proses account_number untuk mengambil branch_code.
- Menghilangkan potensi inkonsistensi struktur penyimpanan yang sebelumnya bergantung pada account_number.
Tujuan perubahan:
- Meningkatkan keteraturan struktur direktori file untuk mempermudah pengelolaan storage.
- Memastikan file statement tersimpan secara konsisten berdasarkan cabang dan periode.
- Menyederhanakan penamaan file agar lebih bersih tanpa mengorbankan informasi penting.
Perubahan yang dilakukan:
- Menambahkan setOption('headless', true) untuk menjalankan Chrome dalam mode headless.
- Menambahkan opsi noSandbox() untuk menghindari masalah permission di environment server.
- Menggunakan waitUntilNetworkIdle() agar memastikan seluruh resource dimuat sebelum proses render.
- Menerapkan konfigurasi ini pada ExportStatementPeriodJob, GenerateMultiAccountPdfJob, dan PrintStatementController.
- Meningkatkan stabilitas dan performa proses PDF generation di environment production.
- Mengurangi potensi error dan timeout saat melakukan rendering PDF.
- Memastikan semua asset dan resource termuat sempurna sebelum PDF dihasilkan.
Tujuan perubahan:
- Menjamin proses PDF generation berjalan lebih andal di berbagai environment server.
- Mengurangi risiko kegagalan akibat resource belum termuat saat rendering.
- Menyelaraskan konfigurasi Browsershot dengan best practice untuk environment production.
Perubahan yang dilakukan:
- Menambahkan command AutoSendStatementEmailCommand untuk otomatisasi pengiriman email statement.
- Menambahkan job AutoSendStatementEmailJob untuk menangani proses pengiriman email secara asynchronous.
- Menambahkan opsi --force dan --dry-run pada command untuk fleksibilitas eksekusi dan pengujian.
- Mengintegrasikan command baru ke dalam WebstatementServiceProvider dan Console Kernel.
- Mengimplementasikan scheduler untuk menjalankan job setiap menit secara otomatis.
- Menambahkan kondisi auto send: is_available dan is_generated = true, email_sent_at = null.
- Mendukung pengiriman statement multi-period dalam bentuk ZIP attachment.
- Mengoptimalkan proses download dan integrasi file PDF dengan logging yang lebih detail.
- Menambahkan logika prioritas local disk dibandingkan SFTP untuk pengambilan file secara efisien.
- Menambahkan validasi tambahan untuk flow pengiriman email single dan multi period.
- Mengimplementasikan error handling dan logging yang komprehensif.
- Menggunakan database transaction untuk menjamin konsistensi data selama proses kirim email.
- Menambahkan mekanisme prevent overlap dan timeout protection saat job berjalan.
- Menghapus file sementara secara otomatis setelah email berhasil dikirim.
- Membatasi proses pengiriman maksimal 50 statement per run untuk menjaga performa.
Tujuan perubahan:
- Mengotomatiskan pengiriman email statement pelanggan secara periodik dan aman.
- Menyediakan fleksibilitas eksekusi manual dan simulasi pengujian sebelum produksi.
- Menjamin efisiensi, stabilitas, dan monitoring penuh selama proses pengiriman.
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:
- 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:
- 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:
- 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>
- **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>
- 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>
- **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.
- **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>
- 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 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>
- Memperbarui `CombinePdfController`:
- Menambahkan logika untuk mendukung multiple file r23, baik dari `local` maupun `sftp`.
- Mengimplementasikan pencarian file secara dinamis menggunakan pola glob untuk file lokal (`local`).
- Menambahkan proses pengunduhan file r23 secara bertahap berdasarkan urutan dari SFTP.
- Menyortir file r23 berdasarkan urutan numerik untuk memastikan urutan yang benar dalam penggabungan PDF.
- Memindahkan semua file r23 ke direktori sementara sebelum proses gabungan.
- Memungkinkan konfigurasi sumber file r23:
- Jika `local`, sistem akan mencari semua file dengan nama akun dan variasi urutan di folder penyimpanan lokal.
- Jika `sftp`, sistem akan mengunduh semua file r23 dengan pola tertentu dari SFTP dan menyimpannya secara temporer.
- Memperbarui log:
- Menambahkan informasi jumlah file r23 yang ditemukan untuk setiap akun.
- Menambahkan log error detail saat terjadi kegagalan pengunduhan file dari SFTP.
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 fungsi `combinePdfs` di `CombinePdfController`:
- Menambahkan konfigurasi sumber file `r23` dengan opsi `local` atau `sftp`.
- Memindahkan logika pencarian file `r23` ke dalam pengaturan berbasis konfigurasi:
- Jika menggunakan `local`, sistem mencari file `r23` dalam penyimpanan lokal.
- Jika menggunakan `sftp`, sistem mengunduh file `r23` dari SFTP dan menyimpannya ke direktori sementara.
- Menambahkan log informasi untuk menentukan sumber file `r23` yang digunakan (`local` atau `sftp`).
- Merubah pencatatan log yang sebelumnya statis menjadi dinamis berdasarkan konfigurasi.
- Menyesuaikan pengelolaan jalur file `r23`:
- Menambahkan jalur sementara untuk penyimpanan file hasil unduhan SFTP.
- Memisahkan logika jalur file lokal dan file unduhan berdasarkan konfigurasi.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui fungsi `combinePdfs` di `CombinePdfController`:
- Menambahkan dukungan pengunduhan file `r23` dari SFTP dan penyimpanan sementara ke direktori lokal.
- Mengubah filter `branch_code` dari `ID0010001` menjadi `ID0010052` untuk pemrosesan akun.
- Menambahkan log peringatan dan error untuk mengelola skenario file yang tidak ditemukan atau error saat unduhan dari SFTP.
- Memperkenalkan logika baru untuk pengaturan password dinamis pada file PDF:
- Menambahkan metode `generatePassword` untuk menghasilkan password berdasarkan data customers.
- Format password: kombinasi `ddMmmyyyyXX` (contoh: 05Oct202585), menggunakan tanggal yang relevan dan 2 digit terakhir nomor rekening.
- Handling fallback ke nomor rekening jika tidak ada data tanggal yang tersedia.
- Menambahkan validasi parsing tanggal untuk menghindari error format.
- Tujuan pembaruan ini:
- Memastikan proses combine PDF lebih fleksibel dengan pengunduhan file dari SFTP.
- Meningkatkan keamanan PDF dengan pengaturan password dinamis berdasarkan data customers.
- Mempermudah troubleshooting dengan penambahan log yang lebih informatif terkait proses file dan password.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui fungsi `combinePdfs` di `CombinePdfController`:
- Menghapus penggunaan parameter dari request dan mengganti dengan parameter langsung `$period`.
- Menambahkan filter `branch_code` `ID0010001` pada pemanggilan data akun untuk memastikan hanya akun tertentu yang diproses.
- Mengubah jalur pencarian file PDF ke direktori baru: `app/STMT/r14` dan `app/STMT/r23` untuk menyelaraskan struktur penyimpanan file.
- Memperbarui command `webstatement:combine-pdf`:
- Menambahkan opsi baru `--period` untuk menyederhanakan pengaturan periode penggabungan PDF melalui format `Ym` (contoh: 202506).
- Menghapus penggunaan `request()` pada command untuk memaksimalkan pengelolaan periode langsung dari opsi command-line.
- Tujuan pembaruan ini:
- Memastikan proses combine PDF hanya memproses data relevan berdasarkan filter branch dan struktur direktori baru.
- Menyempurnakan fleksibilitas parameter periode pada command-line untuk mengurangi dependensi terhadap input request.
- Meningkatkan konsistensi dan efisiensi dalam pengelolaan file PDF sesuai periode dan filter branch tertentu.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui fungsi dalam `WebstatementController`:
- Mengganti format respons sebelumnya dengan `array` menjadi `response()->json()` untuk semua respon sukses maupun error.
- Menyesuaikan return pada kasus keberhasilan pengantrean job ekspor pernyataan.
- Menambahkan handling kesalahan menggunakan `response()->json()` untuk memberikan informasi error yang lebih terstruktur dan konsisten.
- Perubahan ini bertujuan untuk:
- Mengkonsolidasikan format respons API menjadi JSON agar lebih sesuai dengan praktik terbaik pengembangan API.
- Mempermudah pengguna dalam memproses respons API, terutama yang bekerja dengan data JSON.
- Meningkatkan konsistensi logika penanganan respons dalam aplikasi.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan command baru `webstatement:export-period-statements`:
- Mendukung opsi parameter `--account_number` dan `--period` untuk menentukan rekening dan periode ekspor.
- Memproses data pernyataan rekening dengan memanggil fungsi `printStatementRekening` pada `WebstatementController`.
- Menampilkan log proses, termasuk jumlah job ekspor yang berhasil diajukan dan pesan error jika terjadi.
- Memperbarui fungsi `printStatementRekening` di `WebstatementController`:
- Menambahkan parameter input `$accountNumber` dan `$period` untuk mendukung multi-periode secara dinamis.
- Menyesuaikan periode default ke bulan dan tahun saat ini jika parameter tidak disediakan.
- Memvalidasi dan mengambil data saldo berdasarkan `account_number` dan `period`.
- Tujuan pembaruan ini:
- Mendukung efisiensi proses ekspor data rekening dalam periode tertentu.
- Memberikan fleksibilitas lebih dalam command-line operasi pengolahan data pernyataan.
- Menyediakan feedback proses yang jelas kepada pengguna, baik sukses maupun error.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Memperbarui pemrosesan parameter pada `ProcessDailyMigration`:
- Mengubah logika pengiriman parameter `process_parameter` ke `MigrasiController`:
- Sebelumnya mengirimkan parameter dalam bentuk array.
- Sekarang parameter dikirimkan langsung tanpa pembungkusan array.
- Memastikan parameter diterima dan diproses sesuai dengan perubahan pada controller.
- Memodifikasi fungsi `index` pada `MigrasiController`:
- Menambahkan parameter opsional `$processParameter` pada fungsi.
- Mengganti penggunaan `request('process_parameter')` dengan langsung memeriksa `$processParameter`.
- Menghilangkan dependensi langsung terhadap input request untuk meningkatkan fleksibilitas pemrosesan.
- Tujuan pembaruan ini:
- Menyederhanakan struktur parameter yang digunakan dalam pemrosesan migrasi harian.
- Mengurangi gangguan yang mungkin terjadi akibat ketergantungan terhadap input langsung dari request.
- Memastikan konsistensi dan kompatibilitas pengiriman parameter dari command ke controller.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan fungsi `printStatementRekening` pada `WebstatementController` untuk mendukung ekspor statement rekening:
- Mengambil saldo rekening berdasarkan `account_number` dan `period`.
- Melakukan validasi input seperti `accountNumber`, `period`, dan `clientName`.
- Menambah log proses ekspor, termasuk saat fungsi dijalankan, keberhasilan pengiriman job, dan error jika terjadi.
- Mengantrekan job `ExportStatementPeriodJob` dengan parameter seperti `account_number`, `period`, `balance`, dan `client_name`.
- Menangani error dengan logging detail kegagalan ekspor dan memberikan respon yang sesuai.
- Memperbarui rute pada file `web.php`:
- Menambahkan endpoint baru `/debug/test-statement` untuk debugging ekspor statement menggunakan controller `WebstatementController`.
- Tujuan perubahan ini:
- Mendukung proses ekspor data statement rekening secara terstruktur.
- Memberikan kemudahan debugging dan pelacakan proses ekspor.
- Memastikan fleksibilitas dalam pengelolaan saldo dan data rekening.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
- Menambahkan **`DebugStatementController`** untuk mendukung fitur debugging entri pernyataan:
- Fungsi `debugStatement` untuk menganalisis satu entri pernyataan berdasarkan `account_number`, `trans_reference`, dan `period` (opsional).
- Melakukan validasi masukan dari permintaan.
- Mengambil detail entri berdasarkan kriteria yang diberikan.
- Menghasilkan `narrative`, informasi tanggal terformat, dan detail debug.
- Memberikan detail data terkait seperti `ft` dan `transaction`.
- Melakukan penanganan dan log error jika terjadi kegagalan proses.
- Fungsi `listStatements` untuk mendapatkan daftar entri pernyataan berdasarkan kriteria tertentu.
- Validasi dan dukungan parameter `account_number`, `period`, dan `limit`.
- Pengurutan hasil berdasarkan `date_time` secara menurun.
- Menampilkan hasil dalam format JSON termasuk jumlah total data.
- Menambahkan logika tambahan untuk:
- Format tanggal transaksi dan tanggal aktual secara konsisten menggunakan `Carbon`.
- Mendukung pembuatan `narrative` dengan data dari entri pernyataan.
- Mengambil parameter narasi dan formatting berdasarkan tipe narasi melalui model `TempStmtNarrParam` dan `TempStmtNarrFormat`.
- Memperbarui routing dalam file `web.php` dengan menambahkan prefix `debug`:
- **`POST /debug/statement`** -> debug satu entri pernyataan.
- **`GET /debug/statements`** -> daftar semua entri untuk debugging.
- Tujuan pembaruan ini:
- Mempermudah proses analisis dan troubleshooting pada entri pernyataan.
- Memberikan informasi detail terkait kesalahan atau ketidaksesuaian data.
- Membantu pengembang dan pengguna menganalisis informasi transaksi secara mendalam.
Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>