diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-08-26 17:05:58 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-08-26 17:05:58 +0700 |
| commit | 43049cea86883ffcfb6ae988dc46b74ad38def85 (patch) | |
| tree | 4216b3bdc73e9c8099066d383e0efb367d267d1e | |
| parent | bb75985009a318cbbe9c4410806e06ed07aae6d1 (diff) | |
(andri) fix layout mail reminder & add limit, sisa limit, limit terpakai, & jatuh tempo seperti pada tempo di webite
| -rw-r--r-- | indoteknik_custom/models/account_move.py | 66 | ||||
| -rw-r--r-- | indoteknik_custom/views/mail_template_invoice_reminder.xml | 54 |
2 files changed, 85 insertions, 35 deletions
diff --git a/indoteknik_custom/models/account_move.py b/indoteknik_custom/models/account_move.py index 49bfe762..f5dd5a39 100644 --- a/indoteknik_custom/models/account_move.py +++ b/indoteknik_custom/models/account_move.py @@ -179,8 +179,9 @@ class AccountMove(models.Model): ('state', '=', 'posted'), ('payment_state', 'not in', ['paid', 'in_payment', 'reversed']), ('invoice_date_due', 'in', target_dates), - ('date_terima_tukar_faktur', '!=', False) - ], limit=5) + ('date_terima_tukar_faktur', '!=', False), + ('partner_id', 'in', [88813, 80163]) + ]) _logger.info(f"Invoices: {invoices}") invoices = invoices.filtered( @@ -275,23 +276,68 @@ class AccountMove(models.Model): blocking_limit = partner.blocking_stage or 0.0 + # semua invoice tempo yang masih open outstanding_invoices = self.env['account.move'].search([ ('move_type', '=', 'out_invoice'), ('state', '=', 'posted'), ('payment_state', 'not in', ['paid', 'in_payment', 'reversed']), ('partner_id', '=', partner.id), ('invoice_payment_term_id.name', 'ilike', 'tempo') - ]) - _logger.info(f"Outstanding invoices for {partner.name}: {outstanding_invoices}") + outstanding_amount = sum(outstanding_invoices.mapped('amount_total')) + + # invoice tempo yang sudah jatuh tempo + overdue_invoices = outstanding_invoices.filtered( + lambda inv: inv.invoice_date_due and inv.invoice_date_due < fields.Date.today() + ) + + overdue_amount = sum(overdue_invoices.mapped('amount_total')) + currency = invs[0].currency_id if invs else partner.company_id.currency_id limit_info_html = f""" - <p><b>Informasi Tambahan:</b></p> - <ul> - <li>Total Limit: {formatLang(self.env, blocking_limit, currency_obj=currency)}</li> - <li>Total Limit Terpakai: {formatLang(self.env, outstanding_amount, currency_obj=currency)}</li> - </ul> + <table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width:600px; border:1px solid #ddd; border-radius:8px; font-family:Arial, sans-serif; margin:20px 0;"> + <tr> + <td colspan="3" style="background-color:#f5f5f5; padding:10px; font-size:12px; font-weight:bold; text-align:center; color:#333; border-bottom:1px solid #ddd;"> + Pembayaran Tempo + </td> + </tr> + <tr> + <td colspan="3" style="padding:15px; font-size:10px; color:#333;"> + <p style="margin:4px 0;"><b>Kredit Limit Anda</b><br/> + {formatLang(self.env, blocking_limit, currency_obj=currency)} + </p> + <p style="margin:4px 0;"><b>Status Detail Tempo Pembayaran Anda</b><br/> + {partner.property_payment_term_id.name or 'Review'} + </p> + </td> + </tr> + <tr> + <!-- Sisa Kredit Limit --> + <td style="width:33%; border-top:1px solid #ddd; padding:12px; text-align:center; font-size:10px; color:#333;"> + <div style="font-weight:bold; color:{'red' if (blocking_limit - outstanding_amount) < 0 else 'green'};"> + {formatLang(self.env, blocking_limit - outstanding_amount, currency_obj=currency)} + </div> + <div style="font-size:10px; opacity:0.8;">Sisa Kredit Limit</div> + </td> + <!-- Kredit Limit Terpakai --> + <td style="width:33%; border-left:1px solid #ddd; border-top:1px solid #ddd; padding:12px; text-align:center; font-size:10px; color:#333;"> + <div style="font-weight:bold; color:red;"> + {formatLang(self.env, outstanding_amount, currency_obj=currency)} + </div> + <div style="font-size:10px; opacity:0.8;">Kredit Limit Terpakai</div> + <div style="font-size:9px; color:#666;">{len(outstanding_invoices)} Transaksi</div> + </td> + <!-- Jatuh Tempo --> + <td style="width:33%; border-left:1px solid #ddd; border-top:1px solid #ddd; padding:12px; text-align:center; font-size:10px; color:#333;"> + <div style="font-weight:bold; color:red;"> + {formatLang(self.env, overdue_amount, currency_obj=currency)} + </div> + <div style="font-size:10px; opacity:0.8;">Jatuh Tempo</div> + <div style="font-size:9px; color:#666;">{len(overdue_invoices)} Invoice</div> + </td> + </tr> + </table> """ days_to_due_message = "" @@ -340,7 +386,7 @@ class AccountMove(models.Model): ).replace('${object.name}', partner.name) \ .replace('${object.partner_id.name}', partner.name) \ .replace('${days_to_due_message}', days_to_due_message) \ - .replace('${closing_message}', closing_message + limit_info_html) + .replace('${closing_message}', limit_info_html + closing_message) cc_list = [ 'finance@indoteknik.co.id', diff --git a/indoteknik_custom/views/mail_template_invoice_reminder.xml b/indoteknik_custom/views/mail_template_invoice_reminder.xml index 8450be28..3a02fa2e 100644 --- a/indoteknik_custom/views/mail_template_invoice_reminder.xml +++ b/indoteknik_custom/views/mail_template_invoice_reminder.xml @@ -8,45 +8,49 @@ <field name="email_from">finance@indoteknik.co.id</field> <field name="email_to"></field> <field name="body_html" type="html"> - <div> + <div style="font-family:Arial, sans-serif; font-size:13px; color:#333;"> <p><b>Dear ${object.name},</b></p> <p>${days_to_due_message}</p> - <table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; font-size: 12px"> + <table cellpadding="6" cellspacing="0" width="100%" + style="border-collapse:collapse; font-size:12px; border:1px solid #ddd;"> <thead> - <tr style="background-color: #f2f2f2;" align="left"> - <th>Customer</th> - <th>No. PO</th> - <th>Invoice Number</th> - <th>Invoice Date</th> - <th>Due Date</th> - <th>Amount</th> - <th>Term</th> - <th>Days To Due</th> + <tr style="background-color:#f2f2f2; text-align:left;"> + <th style="border:1px solid #ddd;">Customer</th> + <th style="border:1px solid #ddd;">No. PO</th> + <th style="border:1px solid #ddd;">Invoice Number</th> + <th style="border:1px solid #ddd;">Invoice Date</th> + <th style="border:1px solid #ddd;">Due Date</th> + <th style="border:1px solid #ddd;">Amount</th> + <th style="border:1px solid #ddd;">Term</th> + <th style="border:1px solid #ddd;">Days To Due</th> </tr> </thead> <tbody> + <!-- baris invoice akan diinject dari Python --> </tbody> </table> <p>${closing_message}</p> <br/> <p>Terima Kasih.</p> - <br/> - <br/> - <p><b>Best Regards, - <br/> - <br/> - Widya R.<br/> - Dept. Finance<br/> - PT. INDOTEKNIK DOTCOM GEMILANG<br/> - <img src="https://erp.indoteknik.com/api/image/ir.attachment/datas/2135765" alt="Indoteknik" style="max-width: 18%; height: auto;"></img><br/> - <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> - + <br/><br/> + <p> + <b> + Best Regards,<br/><br/> + Widya R.<br/> + Dept. Finance<br/> + PT. INDOTEKNIK DOTCOM GEMILANG<br/> + <img src="https://erp.indoteknik.com/api/image/ir.attachment/datas/2135765" + alt="Indoteknik" style="max-width:18%; height:auto;"/><br/> + <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 style="font-size:11px; color:#777;"> + <i>Email ini dikirim secara otomatis. Abaikan jika pembayaran telah dilakukan.</i> + </p> </div> </field> <field name="auto_delete" eval="True"/> |
