diff options
| author | AndriFP <andrifebriyadiputra@gmail.com> | 2025-09-08 11:13:21 +0700 |
|---|---|---|
| committer | AndriFP <andrifebriyadiputra@gmail.com> | 2025-09-08 11:13:21 +0700 |
| commit | 2b14a2678e3e2782c362065032cfcaba5b091b88 (patch) | |
| tree | bca41e9c7cccc5254544df0ffe122f0f83e2cb3e | |
| parent | 15b5f549777065dac76eaaa23598f09ae6a22f8f (diff) | |
(andri) add compute char periode invoices
| -rw-r--r-- | indoteknik_custom/models/letter_receivable.py | 64 | ||||
| -rw-r--r-- | indoteknik_custom/views/letter_receivable.xml | 12 |
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> |
