diff options
| author | FIN-IT_AndriFP <it@fixcomart.co.id> | 2025-10-28 17:32:46 +0700 |
|---|---|---|
| committer | FIN-IT_AndriFP <it@fixcomart.co.id> | 2025-10-28 17:32:46 +0700 |
| commit | b95b268f66a82c0d1703f9d7644d3575b63f345d (patch) | |
| tree | 27d2a557930db303098be3a850327f2203ff0126 | |
| parent | 5d9d801c1aba7f047a16ae6e0ac84655480fadae (diff) | |
(andri) fix days remaining compute + add autoset nominal reimburse based grandtotal
| -rw-r--r-- | indoteknik_custom/models/advance_payment_request.py | 66 | ||||
| -rw-r--r-- | indoteknik_custom/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 @@ <field name="is_represented" attrs="{'readonly': [('status', '=', 'approved')], 'invisible': [('type_request', '=', 'reimburse')]}"/> <field name="applicant_name" colspan="2" attrs="{'readonly': [('status', '=', 'approved')]}"/> <field name="position_type" force_save="1" readonly="1"/> - <field name="nominal" colspan="2" attrs="{'readonly': [('status', '=', 'approved')]}"/> + <field name="nominal" colspan="2" attrs="{'readonly': ['|', ('status', '=', 'approved'), ('type_request', '=', 'reimburse')]}" force_save="1"/> + <p style="font-size: 10px; color: grey; font-style: italic" attrs="{'invisible': [('type_request', '!=', 'reimburse')]}">*Nominal terisi otomatis sesuai grand total rincian reimburse</p> <field name="bank_name" colspan="2" attrs="{'readonly': [('status', '=', 'approved')]}"/> <field name="account_name" colspan="2" attrs="{'readonly': [('status', '=', 'approved')]}"/> <field name="bank_account" colspan="2" attrs="{'readonly': [('status', '=', 'approved')]}"/> |
