summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-09-03 11:07:40 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-09-03 11:07:40 +0700
commit1c71710dbf42106a82c0a8e30ec9cee7f452a387 (patch)
tree598d41f5b141b65a8a9e624455f4f0f5252677d0
parentd43eb7ff8ffd4b11120a7354295e86736135344a (diff)
(andri) add refresh invoices agar data selalu update & fix layout form
-rw-r--r--indoteknik_custom/models/letter_receivable.py61
-rw-r--r--indoteknik_custom/views/letter_receivable.xml44
2 files changed, 98 insertions, 7 deletions
diff --git a/indoteknik_custom/models/letter_receivable.py b/indoteknik_custom/models/letter_receivable.py
index 541f64ff..10198fbf 100644
--- a/indoteknik_custom/models/letter_receivable.py
+++ b/indoteknik_custom/models/letter_receivable.py
@@ -4,19 +4,22 @@ class SuratPiutang(models.Model):
_name = "surat.piutang"
_description = "Surat Piutang"
_inherit = ['mail.thread', 'mail.activity.mixin']
+ _order = 'name desc'
name = fields.Char(string="Nomor Surat", readonly=True, copy=False)
partner_id = fields.Many2one("res.partner", string="Customer", required=True)
tujuan_nama = fields.Char(string="Nama Tujuan")
tujuan_email = fields.Char(string="Email Tujuan")
perihal = fields.Selection([
- ('sp1', 'Surat Peringatan Piutang'),
+ ('penagihan', 'Surat Resmi Penagihan'),
+ ('sp1', 'Surat Peringatan Piutang ke-1'),
('sp2', 'Surat Peringatan Piutang ke-2'),
('sp3', 'Surat Peringatan Piutang ke-3')
], string="Perihal", required=True, tracking=True)
line_ids = fields.One2many("surat.piutang.line", "surat_id", string="Invoice Lines")
state = fields.Selection([
("draft", "Draft"),
+ ("approval_pimpinan", "Menunggu Approval Pimpinan"),
("sent", "Sent")
], default="draft", tracking=True)
send_date = fields.Datetime(string="Tanggal Kirim", tracking=True)
@@ -59,6 +62,62 @@ class SuratPiutang(models.Model):
}) for inv in invoice_lines]
self.line_ids = lines
+ def action_refresh_lines(self):
+ for rec in self:
+ if not rec.partner_id:
+ continue
+
+ # Ambil semua unpaid terbaru
+ invoice_views = self.env['unpaid.invoice.view'].search(
+ [('partner_id', '=', rec.partner_id.id)],
+ order='new_invoice_day_to_due asc'
+ )
+
+ existing_lines = {line.invoice_id.id: line for line in rec.line_ids}
+
+ # Cache selected status per invoice id
+ selected_map = {line.invoice_id.id: line.selected for line in rec.line_ids}
+
+ # Invoice id yang masih ada di unpaid
+ new_invoice_ids = invoice_views.mapped('invoice_id.id')
+
+ for inv in invoice_views:
+ if inv.invoice_id.id in existing_lines:
+ # update line lama
+ line = existing_lines[inv.invoice_id.id]
+ line.write({
+ 'invoice_view_id': inv.id,
+ 'invoice_number': inv.invoice_number,
+ 'invoice_date': inv.invoice_date,
+ 'invoice_date_due': inv.invoice_date_due,
+ 'invoice_day_to_due': inv.invoice_day_to_due,
+ 'ref': inv.ref,
+ 'amount_residual': inv.amount_residual,
+ 'currency_id': inv.currency_id.id,
+ 'payment_term_id': inv.payment_term_id.id,
+ 'selected': selected_map.get(inv.invoice_id.id, line.selected),
+ })
+ else:
+ # preserve selected kalau pernah ada di cache
+ self.env['surat.piutang.line'].create({
+ 'surat_id': rec.id,
+ 'invoice_view_id': inv.id,
+ 'invoice_id': inv.invoice_id.id,
+ 'invoice_number': inv.invoice_number,
+ 'invoice_date': inv.invoice_date,
+ 'invoice_date_due': inv.invoice_date_due,
+ 'invoice_day_to_due': inv.invoice_day_to_due,
+ 'ref': inv.ref,
+ 'amount_residual': inv.amount_residual,
+ 'currency_id': inv.currency_id.id,
+ 'payment_term_id': inv.payment_term_id.id,
+ 'selected': selected_map.get(inv.invoice_id.id, False),
+ })
+
+ # Hapus line yang tidak ada lagi di unpaid view
+ rec.line_ids.filtered(lambda l: l.invoice_id.id not in new_invoice_ids).unlink()
+
+
@api.model
def create(self, vals):
# Generate nomor surat otomatis
diff --git a/indoteknik_custom/views/letter_receivable.xml b/indoteknik_custom/views/letter_receivable.xml
index 72eae640..fe60eb39 100644
--- a/indoteknik_custom/views/letter_receivable.xml
+++ b/indoteknik_custom/views/letter_receivable.xml
@@ -8,9 +8,12 @@
<field name="name"/>
<field name="partner_id"/>
<field name="perihal"/>
- <field name="state"/>
+ <field name="state" widget="badge"
+ decoration-danger="state == 'draft'"
+ decoration-warning="state == 'approval_pimpinan'"
+ decoration-success="state == 'sent'"/>
<field name="send_date"/>
- <field name="line_ids" widget="one2many_list"/>
+ <!-- <field name="line_ids" widget="one2many_list"/> -->
</tree>
</field>
</record>
@@ -22,19 +25,48 @@
<field name="arch" type="xml">
<form string="Surat Piutang">
<header>
- <field name="state" widget="statusbar" statusbar_visible="draft,sent"/>
+ <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"/> -->
</header>
+ <div class="alert alert-info"
+ role="alert"
+ style="height: 40px; margin-bottom:0px;"
+ attrs="{'invisible':[('state', '!=', 'draft')]}">
+ Selamat Datang di form Pengajuan Surat Piutang, Pastikan data sudah benar sebelum mengajukan approval ke Pimpinan.
+ </div>
+ <div class="alert alert-info"
+ 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.
+ </div>
+ <div class="alert alert-success"
+ role="alert"
+ style="height: 40px; margin-bottom:0px;"
+ attrs="{'invisible':[('state', '!=', 'sent')]}">
+ Surat Piutang berhasil terkirim.
+ </div>
<sheet>
+ <div class="oe_title">
+ <h1>
+ <field name="name" readonly="1"/>
+ </h1>
+ </div>
<group>
- <field name="name" readonly="1"/>
- <field name="partner_id" options="{'no_create': True}"/>
- <field name="perihal"/>
<field name="tujuan_nama"/>
<field name="tujuan_email"/>
+ <field name="partner_id" options="{'no_create': True}"/>
+ <field name="perihal"/>
<field name="send_date" readonly="1"/>
</group>
+ <group>
+ <button name="action_refresh_lines"
+ string="Refresh Invoices"
+ type="object"
+ class="btn-primary"
+ help="Refresh Invoices agar data tetap update"/>
+ </group>
<notebook>
<page string="Invoice Lines">
<field name="line_ids">