summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indoteknik_custom/models/letter_receivable.py39
-rw-r--r--indoteknik_custom/views/letter_receivable.xml29
2 files changed, 63 insertions, 5 deletions
diff --git a/indoteknik_custom/models/letter_receivable.py b/indoteknik_custom/models/letter_receivable.py
index 10198fbf..550aa9e3 100644
--- a/indoteknik_custom/models/letter_receivable.py
+++ b/indoteknik_custom/models/letter_receivable.py
@@ -1,4 +1,8 @@
-from odoo import models, fields, api
+from odoo import models, fields, api, _
+from odoo.exceptions import UserError
+from odoo.exceptions import ValidationError
+from odoo.tools import mail
+from terbilang import Terbilang
class SuratPiutang(models.Model):
_name = "surat.piutang"
@@ -33,6 +37,23 @@ class SuratPiutang(models.Model):
compute='_compute_grand_total',
)
+ grand_total_text = fields.Char(
+ string="Total Terbilang",
+ compute="_compute_grand_total_text",
+ )
+
+ def _compute_grand_total_text(self):
+ tb = Terbilang()
+ for record in self:
+ res = ""
+ if record.grand_total and record.grand_total > 0:
+ try:
+ tb.parse(int(record.grand_total))
+ res = tb.getresult().title() + " Rupiah"
+ except Exception:
+ res = ""
+ record.grand_total_text = res
+
@api.depends('line_ids.amount_residual', 'line_ids.selected')
def _compute_grand_total(self):
for rec in self:
@@ -40,6 +61,21 @@ class SuratPiutang(models.Model):
line.amount_residual or 0.0 for line in rec.line_ids if line.selected
)
+ @api.constrains("tujuan_email")
+ def _check_email_format(self):
+ for rec in self:
+ if rec.tujuan_email and not mail.single_email_re.match(rec.tujuan_email):
+ raise ValidationError(_("Format email tidak valid: %s") % rec.tujuan_email)
+
+ def action_approve(self):
+ pimpinan_user_ids = [7] # Pak Akbar
+ if self.env.user.id not in pimpinan_user_ids:
+ raise UserError("Hanya Pimpinan yang berhak menyetujui tahap ini.")
+ for rec in self:
+ if rec.state == "approval_pimpinan":
+ rec.state = "sent"
+ rec.send_date = fields.Datetime.now()
+
@api.onchange('partner_id')
def _onchange_partner_id(self):
if self.partner_id:
@@ -128,6 +164,7 @@ class SuratPiutang(models.Model):
tahun = today.strftime("%y")
vals["name"] = f"{seq}/LO/FAT/IDG/{bulan_romawi}/{tahun}"
+ vals["state"] = "approval_pimpinan"
return super().create(vals)
class SuratPiutangLine(models.Model):
diff --git a/indoteknik_custom/views/letter_receivable.xml b/indoteknik_custom/views/letter_receivable.xml
index fe60eb39..15875da9 100644
--- a/indoteknik_custom/views/letter_receivable.xml
+++ b/indoteknik_custom/views/letter_receivable.xml
@@ -26,8 +26,7 @@
<form string="Surat Piutang">
<header>
<field name="state" widget="statusbar" statusbar_visible="draft,approval_pimpinan,sent"/>
- <!-- <button name="action_send_surat" type="object" string="Kirim Surat"
- states="draft" class="btn-primary"/> -->
+ <button name="action_approve" type="object" string="Approval &amp; Send" class="btn-primary"/>
</header>
<div class="alert alert-info"
role="alert"
@@ -39,7 +38,7 @@
role="alert"
style="height: 40px; margin-bottom:0px;"
attrs="{'invisible':[('state', '!=', 'approval_pimpinan')]}">
- Surat piutang telah diajukan &amp; surat otomatis terkirim bila telah di Approved Pimpinan.
+ <strong>Info!</strong> Surat piutang telah diajukan &amp; surat otomatis terkirim bila telah di Approved Pimpinan.
</div>
<div class="alert alert-success"
role="alert"
@@ -69,8 +68,20 @@
</group>
<notebook>
<page string="Invoice Lines">
+ <div class="alert alert-info"
+ role="alert"
+ style="height: 40px; margin-bottom:0px;">
+ <strong>Info!</strong> Hanya invoice yang dipilih (tercentang) akan disertakan dalam dokumen surat piutang.
+ </div>
+ <div>
+ <strong>Grand Total Invoice Terpilih: Rp.
+ <field name="grand_total"/> (
+ <field name="grand_total_text"/>
+ )
+ </strong>
+ </div>
<field name="line_ids">
- <tree editable="bottom">
+ <tree editable="bottom" create="false" delete="false">
<field name="selected"/>
<field name="invoice_number" readonly="1" force_save="1"/>
<field name="ref" readonly="1" force_save="1"/>
@@ -84,6 +95,16 @@
</field>
</page>
</notebook>
+ <div style="margin-top:4px; font-size:13px; color:#444; line-height:1.5;">
+ Surat piutang akan diterbitkan berdasarkan lama keterlambatan pembayaran.<br/>
+ Pilih invoice yang sesuai dengan kriteria berikut:
+ <ul style="margin:4px 0 0 18px;">
+ <li>Keterlambatan ≥ 45 hari → <em>Surat Resmi Penagihan</em></li>
+ <li>Keterlambatan ≥ 60 hari → <em>Surat Peringatan Piutang ke-1</em></li>
+ <li>Keterlambatan ≥ 70 hari → <em>Surat Peringatan Piutang ke-2</em></li>
+ <li>Keterlambatan ≥ 80 hari → <em>Surat Peringatan Piutang ke-3</em></li>
+ </ul>
+ </div>
</sheet>
</form>
</field>