summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriFP <andrifebriyadiputra@gmail.com>2025-09-08 11:13:21 +0700
committerAndriFP <andrifebriyadiputra@gmail.com>2025-09-08 11:13:21 +0700
commit2b14a2678e3e2782c362065032cfcaba5b091b88 (patch)
treebca41e9c7cccc5254544df0ffe122f0f83e2cb3e
parent15b5f549777065dac76eaaa23598f09ae6a22f8f (diff)
(andri) add compute char periode invoices
-rw-r--r--indoteknik_custom/models/letter_receivable.py64
-rw-r--r--indoteknik_custom/views/letter_receivable.xml12
2 files changed, 66 insertions, 10 deletions
diff --git a/indoteknik_custom/models/letter_receivable.py b/indoteknik_custom/models/letter_receivable.py
index d4921bc5..caf62a64 100644
--- a/indoteknik_custom/models/letter_receivable.py
+++ b/indoteknik_custom/models/letter_receivable.py
@@ -6,6 +6,7 @@ from terbilang import Terbilang
import re
import logging
from datetime import timedelta
+import babel
_logger = logging.getLogger(__name__)
@@ -33,6 +34,10 @@ class SuratPiutang(models.Model):
], default="draft", tracking=True)
send_date = fields.Datetime(string="Tanggal Kirim", tracking=True)
seven_days_after_sent_date = fields.Char(string="7 Hari Setelah Tanggal Kirim", tracking=True)
+ periode_invoices_terpilih = fields.Char(
+ string="Periode Invoices Terpilih",
+ compute="_compute_periode_invoices",
+ )
currency_id = fields.Many2one('res.currency')
@@ -48,6 +53,34 @@ class SuratPiutang(models.Model):
compute="_compute_grand_total_text",
)
+ @api.depends("line_ids.selected", "line_ids.invoice_date")
+ def _compute_periode_invoices(self):
+ for rec in self:
+ selected_lines = rec.line_ids.filtered(lambda l: l.selected and l.invoice_date)
+ if not selected_lines:
+ rec.periode_invoices_terpilih = "-"
+ continue
+
+ dates = selected_lines.mapped("invoice_date")
+ min_date, max_date = min(dates), max(dates)
+
+ # Ambil bagian bulan & tahun
+ min_month = babel.dates.format_date(min_date, "MMMM", locale="id_ID")
+ min_year = min_date.year
+ max_month = babel.dates.format_date(max_date, "MMMM", locale="id_ID")
+ max_year = max_date.year
+
+ if min_year == max_year:
+ if min_month == max_month:
+ # example: Januari 2025
+ rec.periode_invoices_terpilih = f"{min_month} {min_year}"
+ else:
+ # example: Mei s/d Juni 2025
+ rec.periode_invoices_terpilih = f"{min_month} s/d {max_month} {max_year}"
+ else:
+ # example: Desember 2024 s/d Januari 2025
+ rec.periode_invoices_terpilih = f"{min_month} {min_year} s/d {max_month} {max_year}"
+
def _compute_grand_total_text(self):
tb = Terbilang()
for record in self:
@@ -181,17 +214,21 @@ class SuratPiutang(models.Model):
order='new_invoice_day_to_due asc'
)
lines = [(0, 0, {
- 'invoice_view_id': inv.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,
- 'new_invoice_day_to_due': inv.invoice_day_to_due,
+ 'new_invoice_day_to_due': inv.new_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,
+ 'date_kirim_tukar_faktur': inv.date_kirim_tukar_faktur,
+ 'date_terima_tukar_faktur': inv.date_terima_tukar_faktur,
+ 'invoice_user_id': inv.invoice_user_id.id,
+ 'sale_id': inv.sale_id.id,
'selected': False
}) for inv in invoice_lines]
self.line_ids = lines
@@ -220,33 +257,41 @@ class SuratPiutang(models.Model):
# update line lama
line = existing_lines[inv.invoice_id.id]
line.write({
- 'invoice_view_id': inv.id,
+ # '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,
- 'new_invoice_day_to_due': inv.invoice_day_to_due,
+ 'new_invoice_day_to_due': inv.new_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,
+ 'date_kirim_tukar_faktur': inv.date_kirim_tukar_faktur,
+ 'date_terima_tukar_faktur': inv.date_terima_tukar_faktur,
+ 'invoice_user_id': inv.invoice_user_id.id,
+ 'sale_id': inv.sale_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_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,
- 'new_invoice_day_to_due': inv.invoice_day_to_due,
+ 'new_invoice_day_to_due': inv.new_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,
+ 'date_kirim_tukar_faktur': inv.date_kirim_tukar_faktur,
+ 'date_terima_tukar_faktur': inv.date_terima_tukar_faktur,
+ 'invoice_user_id': inv.invoice_user_id.id,
+ 'sale_id': inv.sale_id.id,
'selected': selected_map.get(inv.invoice_id.id, False),
})
@@ -272,7 +317,7 @@ class SuratPiutangLine(models.Model):
_description = 'Surat Piutang Line'
surat_id = fields.Many2one('surat.piutang', string='Surat Piutang', ondelete='cascade')
- invoice_view_id = fields.Many2one('unpaid.invoice.view', string='Unpaid Invoice')
+ # invoice_view_id = fields.Many2one('unpaid.invoice.view', string='Unpaid Invoice')
invoice_id = fields.Many2one('account.move', string='Invoice')
selected = fields.Boolean(string="Pilih", default=False)
@@ -285,3 +330,8 @@ class SuratPiutangLine(models.Model):
amount_residual = fields.Monetary(string='Amount Due Signed')
currency_id = fields.Many2one('res.currency')
payment_term_id = fields.Many2one('account.payment.term', string='Payment Terms')
+
+ date_kirim_tukar_faktur = fields.Date(string='Kirim Faktur')
+ date_terima_tukar_faktur = fields.Date(string='Terima Faktur')
+ invoice_user_id = fields.Many2one('res.users', string='Salesperson')
+ sale_id = fields.Many2one('sale.order', string='Sale Order')
diff --git a/indoteknik_custom/views/letter_receivable.xml b/indoteknik_custom/views/letter_receivable.xml
index 055ea125..24c0dae1 100644
--- a/indoteknik_custom/views/letter_receivable.xml
+++ b/indoteknik_custom/views/letter_receivable.xml
@@ -80,19 +80,25 @@
<field name="grand_total_text"/>
)
</strong>
+ <field name="periode_invoices_terpilih"/>
</div>
<field name="line_ids">
<tree editable="bottom" create="false" delete="false">
<field name="selected"/>
- <field name="invoice_id" invisible="1" force_save="1"/>
+ <field name="invoice_id" readonly="1" optional="hide" force_save="1"/>
<field name="invoice_number" readonly="1" force_save="1"/>
<field name="ref" readonly="1" force_save="1"/>
<field name="invoice_date" readonly="1" force_save="1"/>
<field name="invoice_date_due" readonly="1" force_save="1"/>
<field name="invoice_day_to_due" readonly="1" force_save="1"/>
+ <field name="new_invoice_day_to_due" readonly="1" force_save="1"/>
<field name="amount_residual" readonly="1" force_save="1" sum="Grand Total"/>
- <field name="currency_id" invisible="1" force_save="1"/>
- <field name="payment_term_id" readonly="1" force_save="1"/>
+ <field name="currency_id" readonly="1" optional="hide" force_save="1"/>
+ <field name="payment_term_id" readonly="1" force_save="1"/>
+ <field name="date_kirim_tukar_faktur" readonly="1" optional="hide" force_save="1"/>
+ <field name="date_terima_tukar_faktur" readonly="1" optional="hide" force_save="1"/>
+ <field name="invoice_user_id" readonly="1" optional="hide" force_save="1"/>
+ <field name="sale_id" readonly="1" optional="hide" force_save="1"/>
</tree>
</field>
</page>