summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-08-04 11:56:48 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-08-04 11:56:48 +0700
commit1d58c7888d95793a4f393c9520b9d89a04f69c08 (patch)
tree5838bb2d7826c0d4b2ef6a5ded02b3938b7cc146
parent09057a3d5074492dfd4de0a48644afb06391102d (diff)
(andri) fix template & logic send due
-rw-r--r--indoteknik_custom/models/account_move.py58
-rw-r--r--indoteknik_custom/views/mail_template_invoice_reminder.xml10
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>