Commit Graph

19 Commits

Author SHA1 Message Date
Daeng Deni Mardaeni
ea23401473 feat(statement): perbaikan fitur statement dan penambahan akses sentra operasi
- 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.
2025-09-09 11:16:48 +07:00
Daeng Deni Mardaeni
1564ce2efa fix(jobs): perbaikan masalah file tidak ditemukan pada proses export statement
Perubahan yang dilakukan:

- Penambahan Debugging dan Verifikasi Storage:
  - Menambahkan log detail untuk tracking proses export CSV, termasuk informasi disk, client, account number, period, dan path penyimpanan.
  - Mengimplementasikan pembuatan file dummy untuk memverifikasi fungsi storage disk sebelum proses export dijalankan.
  - Menambahkan verifikasi keberadaan file setelah proses export selesai untuk memastikan file benar-benar tersimpan di storage.

- Perbaikan Manajemen Path:
  - Memastikan seluruh proses pembuatan direktori menggunakan Laravel Storage facade secara konsisten.
  - Menghapus dependency pada proses sistem chmod, chown, dan chgrp yang berpotensi menimbulkan masalah portabilitas.
  - Menggunakan path absolut dan konsisten untuk menghindari konflik direktori atau kesalahan path relatif.

- Peningkatan Error Handling:
  - Menambahkan log error khusus jika storage disk tidak berfungsi dengan baik atau tidak dapat diakses.
  - Mengimplementasikan cleanup file dummy setelah proses verifikasi storage selesai.
  - Menambahkan informasi log tambahan untuk kebutuhan debugging dan troubleshooting di lingkungan production.

- Optimasi Performa:
  - Menggunakan Laravel Storage facade sebagai standar pembuatan direktori dan file untuk efisiensi dan konsistensi.
  - Mengurangi overhead dari pemanggilan fungsi sistem operasi yang tidak diperlukan.
  - Memastikan fungsionalitas utama tetap berjalan dengan lebih andal tanpa perubahan pada logika bisnis utama.

Tujuan perubahan:

- Memastikan file export statement benar-benar tersimpan dan dapat diakses, tidak hanya tercatat sukses di log.
- Mengatasi masalah di mana proses log mencatat keberhasilan export tetapi file tidak ditemukan di sistem file.
- Meningkatkan reliabilitas sistem export dengan verifikasi berlapis pada proses penyimpanan.
- Menyederhanakan proses penulisan file agar lebih portable, aman, dan mudah di-maintain di berbagai environment.
2025-07-15 17:02:23 +07:00
Daeng Deni Mardaeni
e6c46701ce refactor(jobs): hapus manajemen izin file (chmod, chown, chgrp)
Perubahan yang dilakukan:
- ExportStatementJob.php:
  - Menghapus kode chmod(0777), chown, dan chgrp pada direktori basePath dan accountPath.
  - Menyederhanakan fungsi exportToCsv() dengan hanya menggunakan Storage::makeDirectory() tanpa pengaturan izin manual.

- ExportStatementPeriodJob.php:
  - Menghapus proses chmod(0777), chown, dan chgrp dari generatePdf() dan exportToCsv().
  - Mempertahankan mkdir() dengan parameter 0777 untuk kompatibilitas permission default, tanpa manipulasi ownership.
  - Menghapus pengecekan posix_getuid() dan function_exists() yang sebelumnya digunakan untuk memvalidasi chown.

- GenerateMultiAccountPdfJob.php:
  - Menghapus semua proses chmod(0777), chown, dan chgrp pada direktori penyimpanan.
  - Menyederhanakan fungsi generateAccountPdf() dengan menghilangkan pengaturan ownership manual.

Tujuan perubahan:
- Menyederhanakan kode dan menghilangkan proses manajemen izin file yang tidak perlu.
- Menghilangkan ketergantungan pada fungsi sistem operasi terkait chmod, chown, dan chgrp.
- Mengurangi kompleksitas dan meminimalkan potensi error saat runtime.
- Meningkatkan portabilitas aplikasi agar dapat berjalan di berbagai environment seperti Linux, Windows, dan Docker tanpa kendala perizinan file.
- Menghilangkan risiko keamanan akibat perubahan ownership file secara manual.
- Mempermudah deployment dan maintenance dengan kode yang lebih clean dan aman.

Catatan:
- Pembuatan direktori tetap menggunakan Laravel Storage facade atau mkdir() untuk kebutuhan tertentu.
- Tidak ada perubahan pada logika bisnis utama dari proses export PDF dan CSV.
- Semua fitur export tetap berjalan seperti sebelumnya tanpa pengaturan file permission manual.
2025-07-15 16:40:04 +07:00
Daeng Deni Mardaeni
7818d1677b feat(webstatement): tambah field no_receipt pada processed_statements
Perubahan yang dilakukan:
- Menambahkan field no_receipt pada tabel processed_statements melalui migrasi baru.
- Menambahkan no_receipt ke dalam fillable array di model ProcessedStatement.
- Mengintegrasikan field recipt_no dari relasi ft ke dalam data yang disimpan di processed_statements.
- Menambahkan kolom NO.RECEIPT pada header CSV export statement.
- Menyertakan data recipt_no ke dalam output CSV export statement.
- Mengomentari kode yang sebelumnya menambahkan receipt number ke narrative description untuk menghindari duplikasi.
- Menggunakan nilai default '-' jika recipt_no tidak tersedia.

File yang dimodifikasi:
- app/Jobs/ExportStatementJob.php: Menambahkan mapping recipt_no ke no_receipt, update header CSV, dan menyertakan data dalam export.
- app/Models/ProcessedStatement.php: Menambahkan no_receipt ke fillable fields.
- Modules/Webstatement/database/migrations/2025_07_14_022029_add_no_receipt_to_processed_statements_table.php: Menambahkan kolom no_receipt di database.

Tujuan perubahan:
- Memisahkan nomor receipt transaksi dari narrative description untuk kemudahan pelaporan dan audit.
- Memberikan fleksibilitas lebih dalam pengolahan data statement, khususnya untuk kebutuhan export dan compliance.
2025-07-14 09:24:38 +07:00
Daeng Deni Mardaeni
92afe58e66 feat(webstatement): tambah konfigurasi permission direktori dan perbaikan error chown
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.
2025-07-12 13:41:46 +07:00
daengdeni
cbba58cc50 fix(webstatement): perbaiki logika penentuan nilai datetime pada ExportStatementJob
Perubahan dilakukan untuk mengatasi masalah terkait nilai default `datetime` yang tidak sesuai.

- Mengganti nilai default `datetime` dari `'0000000000'` menjadi `$item->date_time`.
- Memperbaiki logika pengisian nilai `datetime` agar mempertimbangkan nilai dari `$item->$relation?->date_time` terlebih dahulu sebelum menggunakan nilai default `$datetime`.
- Perubahan diterapkan pada dua blok kode dalam berkas `ExportStatementJob.php`.

Langkah ini memastikan nilai `datetime` lebih akurat dan konsisten sesuai data terkait.
2025-05-28 13:09:40 +07:00
daengdeni
762b1457ba feat(webstatement): update date formatting logic with dynamic relation mapping
- Tambahkan logika untuk memetakan prefix `trans_reference` ke hubungan objek terkait menggunakan `relationMap`.
- Update method untuk mengambil nilai `date_time` dari properti terkait berdasarkan mapping prefix (`FT`, `TT`, `DC`, `AA`) dan fallback ke default `0000000000` jika mapping tidak ditemukan.
- Modifikasi format tanggal menggunakan kombinasi `booking_date` dan parsing substring yang dinamis dari properti `date_time`.
- Perbaiki pengolahan format tanggal pada dua method yang terpengaruh untuk memastikan data yang lebih dinamis dan akurat.
- Tambahkan fallback error handling tetap menggunakan logging untuk mendeteksi potensi kesalahan format.
2025-05-28 10:38:27 +07:00
Daeng Deni Mardaeni
60e60b4fef fix(webstatement): perbaiki typo atribut 'narrativ' menjadi 'narrative'
- Mengubah pengecekan atribut `$item->narrativ` menjadi `$item->narrative` pada beberapa kondisi.
- Memastikan data yang diakses menggunakan properti yang benar (`narrative`) agar sesuai dengan struktur yang diharapkan.
- Menghindari potensi bug atau error akibat typo pada nama properti.
- Memperbaiki kondisi pengecekan pada blok `if` dan `else if` untuk konsistensi penggunaan atribut.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-27 21:57:39 +07:00
daengdeni
4c1163fa05 refactor(export-statement): improve narrative generation logic
- Mengubah tipe variable `$narr` dari string menjadi array untuk mempermudah pengelolaan elemen-elemen narasi.
- Menambahkan elemen narasi ke dalam array menggunakan metode `array_push` alih-alih concatenation dengan string.
- Menggunakan `array_filter` untuk memastikan semua elemen yang bernilai kosong tidak ikut ke dalam hasil akhir.
- Mengganti `trim` dengan `implode` untuk menggabungkan elemen narasi menjadi string dengan separator spasi.
- Memperbaiki fallback logic saat properti transaksional tidak ada, lebih rapi dan terstruktur pada skenario `else if ($item->narrativ)`.
- Penggunaan logika baru memastikan bahwa narasi lebih fleksibel dan tidak menghasilkan karakter-karakter string kosong yang tidak diperlukan di output akhir.
2025-05-27 15:52:24 +07:00
daengdeni
299ed0b018 fix(export): improve narrative generation logic and add additional ID formats
- Menambahkan validasi untuk memeriksa apakah `transaction` ada sebelum mengakses propertinya sehingga mencegah error pada situasi `null`.
- Menambahkan fallback description jika `transaction` bernilai null pada metode `generateNarrative`.
- Menambahkan dukungan untuk ID narasi tambahan seperti `APITRX`, `ONUSCR`, dan `ONUSDR` pada `getFormatNarrative`.
- Memodifikasi output `cleanPart` dengan menambahkan spasi untuk memastikan format narasi lebih konsisten.
- Mengubah penggantian `<NL>` dalam hasil akhir menjadi spasi kosong untuk meningkatkan keterbacaan hasil narasi.
2025-05-26 16:47:02 +07:00
Daeng Deni Mardaeni
3cb3eb449b feat(webstatement): perbaikan mapping data dan penambahan format trans referensi
- Memperbaiki mapping `listAccount` di `WebstatementController`:
  - Mengubah urutan key 'OY' dan 'PLUANG' sehingga data ditukar posisinya.
- Menambahkan logika untuk mendukung format baru di `ExportStatementJob`:
  - Menambahkan dukungan format untuk `TTTRFOUT` dengan value 'TT.O.TRF'.
  - Menambahkan dukungan format untuk `TTTRFIN` dengan value 'TT.I.TRF'.
- Menambahkan pengecekan prefix pada `trans_reference` untuk mapping field secara dinamis:
  - Menambahkan mapping prefix baru dengan `relationMap` seperti `FT`, `TT`, `DC`, dan `AA` yang mengarahkan ke relasi data spesifik.
  - Menyesuaikan logika fallback agar memprioritaskan field berdasarkan prefix sebelum default ke data aslinya.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-26 09:47:21 +07:00
Daeng Deni Mardaeni
29ed72ad8b feat(webstatement): tambahkan atribut client untuk pemisahan data per klien
- Mengubah struktur listAccount menjadi array multidimensional untuk mendukung penamaan klien.
- Menambahkan parameter `client_name` pada data yang dikirimkan ke job ExportStatementJob.
- Memperbaiki penulisan nama file export dengan menambahkan informasi nama klien.
- Mengimplementasikan pembuatan direktori berdasarkan nama klien dan nomor akun untuk pengelompokan file secara terstruktur.
- Menambahkan atribut baru `client` pada ExportStatementJob untuk mengelola data terkait klien secara lebih spesifik.
- Melakukan perubahan pada proses export CSV:
  - Menentukan struktur direktori berdasarkan klien dan akun.
  - Menambahkan langkah untuk membuat direktori klien dan akun jika belum ada.
  - Menyesuaikan log informasi dan path untuk setiap file yang di-export.
- Perubahan ini bertujuan untuk mempermudah pengelolaan statement per klien dengan struktur file yang lebih terorganisir.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-24 14:55:36 +07:00
Daeng Deni Mardaeni
cb0a248ce5 refactor(webstatement): improve code readability and consistency in ExportStatementJob
- Menambahkan tipe return untuk beberapa method agar lebih eksplisit dan konsisten.
- Memperbaiki indentasi dan alignment parameter untuk meningkatkan keterbacaan.
- Menghapus method `getTransaction` dan memindahkannya ke bagian akhir kode dengan dokumentasi ulang.
- Menambahkan logika untuk menghapus file CSV yang sudah ada sebelum membuat file baru di method `exportToCsv`.
- Mengoreksi format data dan whitespace pada beberapa bagian kode untuk menjaga standar penulisan.
- Memindahkan komentar terkait dokumentasi method ke posisi yang lebih relevan dan terstruktur.
- Memastikan konsistensi penggunaan tanda kurung kurawal dan spasi pada query database agar lebih seragam.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-23 21:30:04 +07:00
Daeng Deni Mardaeni
57463f2429 fix(webstatement): optimasi proses pengelolaan statement dan perbaikan logika pemrosesan data
- Menghilangkan pengecekan data yang sebelumnya diproses dengan memindahkan logika perbandingan jumlah data ke dalam fungsi `processStatementData`.
- Menambahkan beberapa fungsi baru untuk memisahkan logika ke dalam unit yang lebih kecil:
  1. `getTotalEntryCount`: Menghitung total jumlah data berdasarkan kriteria akun dan periode.
  2. `getExistingProcessedCount`: Menghitung jumlah data yang sudah diproses.
  3. `deleteExistingProcessedData`: Menghapus data hasil proses sebelumnya jika ada ketidaksesuaian jumlah.
  4. `processAndSaveStatementEntries`: Memproses dan menyimpan data dalam batch untuk efisiensi memori.
  5. `prepareProcessedData`: Menyiapkan array data hasil pemrosesan sebelum disimpan ke database.
  6. `formatTransactionDate`: Memformat tanggal transaksi dengan logika fallback pada error parsing.
  7. `formatActualDate`: Memformat tanggal aktual dengan fallback dan logging untuk error parsing.
- Memperbaiki logika pemrosesan data statement:
  - Menambahkan validasi jumlah data yang diproses untuk menghindari duplikasi atau penghapusan data yang tidak semestinya.
  - Menghapus semua data hasil proses sebelumnya untuk satu kombinasi akun dan periode hanya jika terjadi ketidaksesuaian jumlah data.
- Menggunakan chunk batch untuk memproses data dengan lebih efisien, mengurangi penggunaan memori, dan meningkatkan kestabilan aplikasi.
- Menyempurnakan logging untuk memberikan informasi lebih rinci terkait proses pemrosesan data dan mengantisipasi error.
- Mengubah format data waktu pada proses narasi dengan fallback yang lebih aman guna mencegah kegagalan parsing.
- Menambahkan penghapusan data lama sebelum proses penyimpanan ulang guna memastikan konsistensi.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-23 21:28:39 +07:00
Daeng Deni Mardaeni
9f0ee812a9 fix(webstatement): perbaikan format narasi dan penghilangan karakter tidak diinginkan
- Menambahkan pemanggilan fungsi `trim()` untuk menghapus spasi berlebihan di akhir narasi pada return value di fungsi pertama.
- Memperbaiki kondisi pengecekan `!==` pada variable `$fieldName` untuk meningkatkan kejelasan dan konsistensi dalam penulisan.
- Mengubah logika pengisian hasil narasi dengan memanfaatkan shorthand `$item->ft?->$fieldName ?? ''` untuk menghindari error saat field tidak ada nilainya.
- Menambahkan fungsi `str_replace` untuk menghapus karakter `<NL>` yang tidak diinginkan dari hasil narasi pada return value di fungsi kedua.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-23 20:44:38 +07:00
daengdeni
b54fabd416 feat(database,performance): optimize indexing and processing for statement export
- Menambahkan indeks baru pada table `stmt_entry`:
  - Kombinasi indeks untuk kolom `account_number` dan `booking_date`.
  - Indeks untuk kolom `date_time`.
  - Indeks untuk kolom `trans_reference`.
- Memperbesar ukuran chunk processing di `ExportStatementJob` dari 500 menjadi 1000 untuk mengoptimalkan performa proses ekspor data dan mengurangi overhead.

Perubahan ini bertujuan untuk meningkatkan efisiensi query pada table `stmt_entry` dan mengurangi waktu proses pada job ekspor pernyataan.
2025-05-23 10:17:42 +07:00
daengdeni
d66afb36c7 fix(export): update global sequence tracking and correct formatting issues
- Perbaiki penggunaan `sequence_no` dalam proses ekspor data dengan menambahkan pelacakan global sequence (`globalSequence`) di seluruh chunk, sehingga memastikan urutan yang konsisten dan tepat.
- Gantikan penggunaan indeks lokal chunk dengan `globalSequence` di setiap entri dalam data proses.
- Tambahkan komentar untuk menjelaskan fungsi tambahan terkait pelacakan sequence global.
- Koreksi format narasi pada nilai `'FT.OUT'` yang sebelumnya salah menggunakan `'FT.IN'`.
- Tambahkan pemeriksaan dan pembaruan pada logika penyimpanan data untuk meningkatkan kejelasan dan efisiensi.
2025-05-23 07:24:01 +07:00
Daeng Deni Mardaeni
b98408a8d2 feat(webstatement): optimalkan proses ekspor statement dengan chunking dan tabel terproses
- Menambahkan penggunaan chunking dalam pemrosesan data `StmtEntry` untuk mengurangi konsumsi memori
- Menghapus data yang telah diproses pada tabel `processed_statements` sebelum memproses ulang data baru
- Menambahkan metode `processStatementData` untuk memproses data transaksi dengan pengelolaan hemisan-memori
- Mengganti mekanisme ekspor CSV agar sesuai dengan data yang sudah diproses; menggunakan chunk pada pembacaan dan penulisan data agar lebih efisien
- Memperkenalkan tabel baru `processed_statements` untuk menyimpan hasil pemrosesan sebagai cache sementara
- Menambahkan log untuk setiap tahap pemrosesan untuk mempermudah debugging dan pelacakan proses
- Menambahkan file model `ProcessedStatement` untuk interaksi dengan tabel `processed_statements`
- Menambahkan file migrasi untuk membuat tabel `processed_statements` di database

Enhancement ini meningkatkan performa aplikasi, terutama saat menangani data besar, dengan mengurangi penggunaan memori dan meningkatkan efisiensi proses ekspor.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-22 17:36:55 +07:00
Daeng Deni Mardaeni
04f6f02702 feat(webstatement): tambahkan fitur eksport dan download statement
Penambahan fitur untuk mendukung proses eksport dan download statement secara dinamis. Fitur ini mencakup:
- Penambahan `ExportStatementJob` untuk menjadwalkan proses eksport statement dalam bentuk file CSV ke dalam queue.
- Penambahan endpoint untuk:
  1. `index`: Menjadwalkan pekerjaan eksport ke dalam queue.
  2. `generateAndDownload`: Proses pembuatan statement secara langsung dan mengunduh hasilnya.
  3. `downloadStatement`: Mendukung pengunduhan file statement yang telah dibuat sebelumnya.
  4. `queueExport`: Menambahkan job eksport ke queue dengan ID job yang dirilis.
  5. `checkExportStatus`: Memastikan status job apakah sedang berjalan, selesai, atau tidak ditemukan.
- Refactoring fitur narrative generator untuk mendukung format dinamis berdasarkan konfigurasi database dengan parsing format.
- Refactoring data transformation untuk memastikan urutan dan perhitungan running balance sebelum dieksport.
- Penggunaan storage lokal untuk menyimpan hasil file CSV, dan implementasi header respons yang benar untuk file unduhan.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-05-22 09:03:34 +07:00