summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFIN-IT_AndriFP <it@fixcomart.co.id>2025-10-28 17:32:46 +0700
committerFIN-IT_AndriFP <it@fixcomart.co.id>2025-10-28 17:32:46 +0700
commitb95b268f66a82c0d1703f9d7644d3575b63f345d (patch)
tree27d2a557930db303098be3a850327f2203ff0126
parent5d9d801c1aba7f047a16ae6e0ac84655480fadae (diff)
(andri) fix days remaining compute + add autoset nominal reimburse based grandtotal
-rw-r--r--indoteknik_custom/models/advance_payment_request.py66
-rw-r--r--indoteknik_custom/views/advance_payment_request.xml3
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')]}"/>