feat(webstatement): tambahkan fitur pengiriman email statement PDF

- 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>
This commit is contained in:
Daeng Deni Mardaeni
2025-06-10 13:50:00 +07:00
parent 55313fb0b0
commit f3c649572b
5 changed files with 609 additions and 65 deletions

View File

@@ -5,7 +5,8 @@
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Modules\Webstatement\Models\PrintStatementLog;
use Modules\Webstatement\Models\Account;
use Modules\Webstatement\Models\PrintStatementLog;
class StatementEmail extends Mailable
{
@@ -36,12 +37,12 @@
*/
public function build()
{
$subject = 'Your Account Statement';
$subject = 'Statement Rekening Bank Artha Graha Internasional';
if ($this->statement->is_period_range) {
$subject .= " - {$this->statement->period_from} to {$this->statement->period_to}";
} else {
$subject .= " - {$this->statement->period_from}";
$subject .= " - " . \Carbon\Carbon::createFromFormat('Ym', $this->statement->period_from)->locale('id')->isoFormat('MMMM Y');
}
$email = $this->subject($subject)
@@ -52,6 +53,7 @@
'periodFrom' => $this->statement->period_from,
'periodTo' => $this->statement->period_to,
'isRange' => $this->statement->is_period_range,
'accounts' => Account::where('account_number',$this->statement->account_number)->first()
]);
if ($this->isZip) {