From b95b268f66a82c0d1703f9d7644d3575b63f345d Mon Sep 17 00:00:00 2001 From: FIN-IT_AndriFP Date: Tue, 28 Oct 2025 17:32:46 +0700 Subject: (andri) fix days remaining compute + add autoset nominal reimburse based grandtotal --- .../models/advance_payment_request.py | 66 ++++++++++++++-------- .../views/advance_payment_request.xml | 3 +- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/indoteknik_custom/models/advance_payment_request.py b/indoteknik_custom/models/advance_payment_request.py index 140e48bb..7be9b00d 100644 --- a/indoteknik_custom/models/advance_payment_request.py +++ b/indoteknik_custom/models/advance_payment_request.py @@ -39,8 +39,7 @@ class AdvancePaymentRequest(models.Model): estimated_return_date = fields.Date( string='Batas Pengajuan', - help='Tanggal batas maksimal pengajuan realisasi setelah kembali ke kantor. ' - '7 hari setelah tanggal kembali.' + help='Tanggal batas maksimal durasi pengajuan realisasi' ) days_remaining = fields.Integer( @@ -154,6 +153,11 @@ class AdvancePaymentRequest(models.Model): compute='_compute_is_current_user_ap' ) + @api.onchange('grand_total_reimburse', 'type_request') + def _onchange_reimburse_line_update_nominal(self): + if self.type_request == 'reimburse': + self.nominal = self.grand_total_reimburse + def _compute_is_current_user_ap(self): ap_user_ids = [23, 9468] is_ap = self.env.user.id in ap_user_ids @@ -630,31 +634,47 @@ class AdvancePaymentRequest(models.Model): } - @api.depends('date_back_to_office', 'status', 'apr_perjalanan', 'create_date', 'settlement_ids.status') + @api.depends('date_back_to_office', 'status', 'apr_perjalanan', 'create_date', 'settlement_ids.status', 'type_request') def _compute_days_remaining(self): today = date.today() for rec in self: - # if rec.status in ['approved'] and rec.days_remaining: - is_settlement_approved = any(s.status == 'approved' for s in rec.settlement_ids) - if is_settlement_approved: - continue - if rec.apr_perjalanan: - if rec.date_back_to_office: - due_date = rec.date_back_to_office + timedelta(days=7) - rec.estimated_return_date = due_date + current_days = rec.days_remaining or 0 + current_due_date = rec.estimated_return_date or False + if rec.type_request == 'pum': + is_settlement_approved = any(s.status == 'approved' for s in rec.settlement_ids) + if not is_settlement_approved: + due_date = False + + if rec.apr_perjalanan: + # Alur PUM Perjalanan + if rec.date_back_to_office: + due_date = rec.date_back_to_office + timedelta(days=7) + effective_today = max(today, rec.date_back_to_office) + + current_due_date = due_date + current_days = (due_date - effective_today).days + else: + + current_due_date = False + current_days = 0 + else: + # Alur PUM Non-Perjalanan + if rec.create_date: + base_date = rec.create_date.date() + due_date = base_date + timedelta(days=7) + + current_due_date = due_date + current_days = (due_date - today).days + else: + current_due_date = False + current_days = 0 + else: + current_due_date = False + current_days = 0 - # Jika hari ini sebelum tanggal kembali, maka anggap belum mulai dihitung - effective_today = max(today, rec.date_back_to_office) - rec.days_remaining = (due_date - effective_today).days - else: - rec.estimated_return_date = False - rec.days_remaining = 0 - else: - base_date = rec.create_date.date() if rec.create_date else today - due_date = base_date + timedelta(days=7) - rec.estimated_return_date = due_date - rec.days_remaining = (due_date - today).days + rec.days_remaining = current_days + rec.estimated_return_date = current_due_date @api.onchange('date_back_to_office') def _onchange_date_back_to_office(self): @@ -889,7 +909,7 @@ class ReimburseLine(models.Model): description = fields.Text(string='Description', required=True, tracking=3) distance_departure = fields.Float(string='Pergi (Km)', tracking=3) distance_return = fields.Float(string='Pulang (Km)', tracking=3) - quantity = fields.Float(string='Quantity', tracking=3) + quantity = fields.Float(string='Quantity', tracking=3, default=1) price_unit = fields.Float(string='Price', tracking=3) total = fields.Float(string='Total', tracking=3, compute='_compute_total') # total = fields.Float(string='Total', tracking=3) diff --git a/indoteknik_custom/views/advance_payment_request.xml b/indoteknik_custom/views/advance_payment_request.xml index c33a2843..2a8e1318 100644 --- a/indoteknik_custom/views/advance_payment_request.xml +++ b/indoteknik_custom/views/advance_payment_request.xml @@ -88,7 +88,8 @@ - + +

*Nominal terisi otomatis sesuai grand total rincian reimburse

-- cgit v1.2.3