summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-08-09 16:08:18 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-08-09 16:08:18 +0700
commit2f31e36104c0b92bf022dc78b3952f08815dd1cc (patch)
treecf7e3b7a438fdb5426e778697f88cae3c665c8f9
parent979ffc90fffe2f09788016376d71a940a28f8fed (diff)
(andri) fix validasi sisa PUM & nominal
-rw-r--r--indoteknik_custom/models/down_payment.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/indoteknik_custom/models/down_payment.py b/indoteknik_custom/models/down_payment.py
index 5c7c3f49..e0828968 100644
--- a/indoteknik_custom/models/down_payment.py
+++ b/indoteknik_custom/models/down_payment.py
@@ -116,6 +116,19 @@ class DownPayment(models.Model):
default=lambda self: self.env.company.currency_id
)
+ @api.onchange('nominal')
+ def _onchange_nominal_no_minus(self):
+ if self.nominal and self.nominal < 0:
+ self.nominal = 0
+ return {
+ 'warning': {
+ 'title': _('Nominal Tidak Valid'),
+ 'message': _(
+ "Nominal tidak boleh diisi minus.\n"
+ "Nilai di set menjadi nol."
+ )
+ }
+ }
def _get_jasper_attachment(self):
self.ensure_one()
@@ -636,6 +649,20 @@ class RealizationDownPaymentUseLine(models.Model):
'message': _('Hanya user AP yang bisa mencentang Done Attachment.')
}
}
+
+ @api.onchange('nominal')
+ def _onchange_nominal_no_minus(self):
+ if self.nominal and self.nominal < 0:
+ self.nominal = 0
+ return {
+ 'warning': {
+ 'title': _('Nominal Tidak Valid'),
+ 'message': _(
+ "Nominal penggunaan PUM tidak boleh diisi minus.\n"
+ "Nilai di Set menjadi nol."
+ )
+ }
+ }
class RealizationDownPayment(models.Model):
_name = 'realization.down.payment'
@@ -965,6 +992,26 @@ class RealizationDownPayment(models.Model):
# rec.message_post(body=f"Approval oleh {self.env.user.name} pada tahap <b>{rec.status}</b>.")
+ def _check_remaining_value(self):
+ for rec in self:
+ # Cek sisa PUM
+ if rec.remaining_value < 0:
+ raise ValidationError(
+ "Sisa uang PUM tidak boleh kurang dari 0.\n"
+ "Jika ada penggunaan uang pribadi, maka ajukan dengan sistem reimburse."
+ )
+
+ @api.model
+ def create(self, vals):
+ rec = super().create(vals)
+ rec._check_remaining_value()
+ return rec
+
+ def write(self, vals):
+ res = super().write(vals)
+ self._check_remaining_value()
+ return res
+
class RejectReasonDownPayment(models.TransientModel):
_name = 'reject.reason.downpayment'
_description = 'Wizard for Reject Reason Down Payment'