diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-08-04 11:56:48 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-08-04 11:56:48 +0700 |
| commit | 1d58c7888d95793a4f393c9520b9d89a04f69c08 (patch) | |
| tree | 5838bb2d7826c0d4b2ef6a5ded02b3938b7cc146 | |
| parent | 09057a3d5074492dfd4de0a48644afb06391102d (diff) | |
(andri) fix template & logic send due
| -rw-r--r-- | indoteknik_custom/models/account_move.py | 58 | ||||
| -rw-r--r-- | indoteknik_custom/views/mail_template_invoice_reminder.xml | 10 |
2 files changed, 52 insertions, 16 deletions
diff --git a/indoteknik_custom/models/account_move.py b/indoteknik_custom/models/account_move.py index 14927bec..684f875d 100644 --- a/indoteknik_custom/models/account_move.py +++ b/indoteknik_custom/models/account_move.py @@ -119,8 +119,7 @@ class AccountMove(models.Model): today + timedelta(days=7), ] - # Contoh khusus partner tertentu - partner = self.env['res.partner'].search([('name', 'ilike', 'BANGUNAN TEKNIK GRUP')], limit=1) + partner = self.env['res.partner'].search([('name', 'ilike', 'SINAR SUKSES MANDIRI')], limit=1) if not partner: _logger.info("Partner tidak ditemukan.") return @@ -132,7 +131,6 @@ class AccountMove(models.Model): ('invoice_date_due', 'in', target_dates), ('partner_id', '=', partner.id), ]) - _logger.info(f"Invoices tahap 1: {invoices}") invoices = invoices.filtered( @@ -144,13 +142,15 @@ class AccountMove(models.Model): _logger.info(f"Tidak ada invoice yang due untuk partner: {partner.name}") return - grouped = {} + # Kelompokkan invoice berdasarkan partner & days_to_due + invoice_group = {} for inv in invoices: - grouped.setdefault(inv.partner_id, []).append(inv) + dtd = (inv.invoice_date_due - today).days if inv.invoice_date_due else 0 + invoice_group.setdefault((inv.partner_id, dtd), []).append(inv) template = self.env.ref('indoteknik_custom.mail_template_invoice_due_reminder') - for partner, invs in grouped.items(): + for (partner, dtd), invs in invoice_group.items(): # Cari semua kontak anak yang reminder_invoices = True dan punya email reminder_contacts = self.env['res.partner'].search([ ('parent_id', '=', partner.id), @@ -158,9 +158,7 @@ class AccountMove(models.Model): ('email', '!=', False), ]) - # Gabungkan partner.email utama + semua email dari child contact reminder emails = list(filter(None, [partner.email])) + reminder_contacts.mapped('email') - if not emails: _logger.info(f"Partner {partner.name} tidak memiliki email yang bisa dikirimi") continue @@ -168,7 +166,7 @@ class AccountMove(models.Model): email_to = ",".join(emails) _logger.info(f"Email tujuan: {email_to}") - # Buat isi tabel invoice + # Generate tabel invoice invoice_table_rows = "" for inv in invs: days_to_due = (inv.invoice_date_due - today).days if inv.invoice_date_due else 0 @@ -179,10 +177,42 @@ class AccountMove(models.Model): <td>{fields.Date.to_string(inv.invoice_date_due) or '-'}</td> <td>{days_to_due}</td> <td>{formatLang(self.env, inv.amount_total, currency_obj=inv.currency_id)}</td> + <td>{inv.invoice_payment_term_id.name or '-'}</td> + <td>{inv.purchase_order_id.name or '-'}</td> <td>{inv.ref or '-'}</td> </tr> """ + # Tentukan pesan berdasarkan sisa hari + days_to_due_message = "" + closing_message = "" + if dtd < 0: + days_to_due_message = f"Kami ingin mengingatkan bahwa tagihan anda akan jatuh tempo dalam {abs(dtd)} hari ke depan, dengan rincian sebagai berikut:" + closing_message = ( + "Kami mengharapkan pembayaran dapat dilakukan tepat waktu untuk mendukung kelancaran " + "hubungan kerja sama yang baik antara kedua belah pihak.<br/>" + "Mohon konfirmasi apabila pembayaran telah dijadwalkan. " + "Terima kasih atas perhatian dan kerja samanya." + ) + + if dtd == 0: + days_to_due_message = "Kami ingin mengingatkan bahwa tagihan anda telah memasuki tanggal jatuh tempo pada hari ini, dengan rincian sebagai berikut:" + closing_message = ( + "Mohon kesediaannya untuk segera melakukan pembayaran tepat waktu guna menghindari status " + "keterlambatan dan menjaga kelancaran hubungan kerja sama yang telah terjalin dengan baik.<br/>" + "Apabila pembayaran telah dijadwalkan atau diproses, mohon dapat dikonfirmasi kepada kami. " + "Terima kasih atas perhatian dan kerja samanya." + ) + + if dtd > 0: + days_to_due_message = f"Kami ingin mengingatkan bahwa tagihan anda telah jatuh tempo selama {dtd}, dengan rincian sebagai berikut:" + closing_message = ( + "Mohon kesediaan Bapak/Ibu untuk segera melakukan pembayaran guna menghindari keterlambatan " + "dan menjaga kelancaran kerja sama yang telah terjalin dengan baik.<br/>" + "Apabila pembayaran sudah dilakukan, mohon konfirmasi dan lampirkan bukti transfer agar dapat kami proses lebih lanjut. " + "Terima kasih atas perhatian dan kerja samanya." + ) + subject = f"Reminder Invoice Due - {partner.name}" body_html = re.sub( r"<tbody[^>]*>.*?</tbody>", @@ -190,14 +220,16 @@ class AccountMove(models.Model): template.body_html, flags=re.DOTALL ).replace('${object.name}', partner.name) \ - .replace('${object.partner_id.name}', partner.name) + .replace('${object.partner_id.name}', partner.name) \ + .replace('${days_to_due_message}', days_to_due_message) \ + .replace('${closing_message}', closing_message) values = { 'subject': subject, - 'email_to': email_to, + 'email_to': 'andrifebriyadiputra@gmail.com', 'email_from': 'finance@indoteknik.co.id', 'body_html': body_html, - 'reply_to': f'invoice+account.move_{invs[0].id}@indoteknik.co.id', + 'reply_to': 'finance@indoteknik.co.id', } _logger.info(f"Mengirim email ke: {email_to}") @@ -215,7 +247,7 @@ class AccountMove(models.Model): author_id=system_id, ) - _logger.info(f"Reminder terkirim ke {partner.name} ({email_to}) → {len(invs)} invoice") + _logger.info(f"Reminder terkirim ke {partner.name} ({email_to}) → {len(invs)} invoice (dtd = {dtd})") @api.onchange('invoice_date') diff --git a/indoteknik_custom/views/mail_template_invoice_reminder.xml b/indoteknik_custom/views/mail_template_invoice_reminder.xml index 21055eb0..6dfbe898 100644 --- a/indoteknik_custom/views/mail_template_invoice_reminder.xml +++ b/indoteknik_custom/views/mail_template_invoice_reminder.xml @@ -11,9 +11,9 @@ <div> <p><b>Dear ${object.name},</b></p> - <p>Berikut adalah daftar invoice Anda yang mendekati atau telah jatuh tempo:</p> + <p>${days_to_due_message}</p> - <table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; width: 100%; font-size: 12px"> + <table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; font-size: 12px"> <thead> <tr style="background-color: #f2f2f2;" align="left"> <th>Invoice Number</th> @@ -21,6 +21,8 @@ <th>Jatuh Tempo</th> <th>Sisa Hari</th> <th>Total</th> + <th>Payment Term</th> + <th>No. PO</th> <th>Referensi</th> </tr> </thead> @@ -28,7 +30,8 @@ </tbody> </table> - <p>Mohon bantuan dan kerjasamanya agar tetap bisa bekerjasama dengan baik</p> + <p>${closing_message}</p> + <br/> <p>Terima Kasih.</p> <br/> <br/> @@ -42,6 +45,7 @@ <a href="https://wa.me/6285716970374" target="_blank">+62-857-1697-0374</a> | <a href="mailto:finance@indoteknik.co.id">finance@indoteknik.co.id</a> </b></p> + <p><i>Email ini dikirim secara otomatis. Abaikan jika pembayaran telah dilakukan.</i></p> </div> </field> |
