summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiqdad <ahmadmiqdad27@gmail.com>2025-09-24 09:41:18 +0700
committerMiqdad <ahmadmiqdad27@gmail.com>2025-09-24 09:41:18 +0700
commit80f811a7ccca771990fcbf59df6e92dc8e0acc14 (patch)
treedc6897cb371e7079bfbfdcaa5872cbf41a353465
parent22c5def88445676675e1978e77471ef939f46daa (diff)
<Miqdad> balikin validate erts
-rwxr-xr-xindoteknik_custom/models/sale_order.py132
1 files changed, 66 insertions, 66 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index fd872b53..85f0d274 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -1717,101 +1717,101 @@ class SaleOrder(models.Model):
# .format(eta_minimum.strftime('%d-%m-%Y'), eta_minimum.strftime('%d-%m-%Y'))
# )
- # def _validate_expected_ready_ship_date(self):
- # """
- # Pastikan expected_ready_to_ship tidak lebih awal dari SLA minimum.
- # Dipanggil setiap onchange / simpan SO.
- # """
- # for rec in self:
- # # ─────────────────────────────────────────────────────
- # # 1. Hanya validasi kalau field sudah terisi
- # # (quotation baru / belum ada tanggal → abaikan)
- # # ─────────────────────────────────────────────────────
- # if not rec.expected_ready_to_ship:
- # continue
- #
- # current_date = datetime.now()
- #
- # # ─────────────────────────────────────────────────────
- # # 2. Hitung SLA berdasarkan product lines (jika ada)
- # # ─────────────────────────────────────────────────────
- # products = rec.order_line
- # if products:
- # sla_data = rec.calculate_sla_by_vendor(products)
- # max_sla_time = sla_data.get('slatime', 1)
- # else:
- # # belum ada item → gunakan default 1 hari
- # max_sla_time = 1
- #
- # # offset hari libur / weekend
- # offset, is3pm = rec.get_days_until_next_business_day(current_date)
- # min_days = max_sla_time + offset - 1
- # eta_minimum = current_date + timedelta(days=min_days)
- #
- # # ─────────────────────────────────────────────────────
- # # 3. Validasi - raise error bila terlalu cepat
- # # ─────────────────────────────────────────────────────
- # if rec.expected_ready_to_ship.date() < eta_minimum.date():
- # # set otomatis ke tanggal minimum supaya user tidak perlu
- # # menekan Save dua kali
- # rec.expected_ready_to_ship = eta_minimum
- #
- # raise ValidationError(
- # _("Tanggal 'Expected Ready to Ship' tidak boleh "
- # "lebih kecil dari %(tgl)s. Mohon pilih minimal %(tgl)s.")
- # % {'tgl': eta_minimum.strftime('%d-%m-%Y')}
- # )
- # else:
- # # sinkronkan ke field commitment_date
- # rec.commitment_date = rec.expected_ready_to_ship
-
def _validate_expected_ready_ship_date(self):
"""
Pastikan expected_ready_to_ship tidak lebih awal dari SLA minimum.
Dipanggil setiap onchange / simpan SO.
"""
for rec in self:
+ # ─────────────────────────────────────────────────────
+ # 1. Hanya validasi kalau field sudah terisi
+ # (quotation baru / belum ada tanggal → abaikan)
+ # ─────────────────────────────────────────────────────
if not rec.expected_ready_to_ship:
continue
- # ADDED: gunakan "sekarang" lokal user, bukan datetime.now() server
- current_date = fields.Datetime.context_timestamp(rec, fields.Datetime.now())
+ current_date = datetime.now()
- # Hitung SLA
+ # ─────────────────────────────────────────────────────
+ # 2. Hitung SLA berdasarkan product lines (jika ada)
+ # ─────────────────────────────────────────────────────
products = rec.order_line
if products:
sla_data = rec.calculate_sla_by_vendor(products)
max_sla_time = sla_data.get('slatime', 1)
else:
+ # belum ada item → gunakan default 1 hari
max_sla_time = 1
- # offset hari libur/weekend
+ # offset hari libur / weekend
offset, is3pm = rec.get_days_until_next_business_day(current_date)
min_days = max_sla_time + offset - 1
eta_minimum = current_date + timedelta(days=min_days)
- if rec._fields['expected_ready_to_ship'].type == 'date':
- exp_date_local = rec.expected_ready_to_ship
- else:
- exp_date_local = fields.Datetime.context_timestamp(
- rec, rec.expected_ready_to_ship
- ).date()
-
- if exp_date_local < eta_minimum.date():
- # (opsional) auto-set ke minimum → konversi balik ke UTC naive bila field Datetime
- if rec._fields['expected_ready_to_ship'].type == 'date':
- rec.expected_ready_to_ship = eta_minimum.date()
- else:
- rec.expected_ready_to_ship = eta_minimum.astimezone(pytz.UTC).replace(tzinfo=None)
+ # ─────────────────────────────────────────────────────
+ # 3. Validasi - raise error bila terlalu cepat
+ # ─────────────────────────────────────────────────────
+ if rec.expected_ready_to_ship.date() < eta_minimum.date():
+ # set otomatis ke tanggal minimum supaya user tidak perlu
+ # menekan Save dua kali
+ rec.expected_ready_to_ship = eta_minimum
raise ValidationError(
_("Tanggal 'Expected Ready to Ship' tidak boleh "
- "lebih kecil dari %(tgl)s. Mohon pilih minimal %(tgl)s.")
+ "lebih kecil dari %(tgl)s. Mohon pilih minimal %(tgl)s.")
% {'tgl': eta_minimum.strftime('%d-%m-%Y')}
)
else:
+ # sinkronkan ke field commitment_date
rec.commitment_date = rec.expected_ready_to_ship
+ # def _validate_expected_ready_ship_date(self):
+ # """
+ # Pastikan expected_ready_to_ship tidak lebih awal dari SLA minimum.
+ # Dipanggil setiap onchange / simpan SO.
+ # """
+ # for rec in self:
+ # if not rec.expected_ready_to_ship:
+ # continue
+ #
+ # # ADDED: gunakan "sekarang" lokal user, bukan datetime.now() server
+ # current_date = fields.Datetime.context_timestamp(rec, fields.Datetime.now())
+ #
+ # # Hitung SLA
+ # products = rec.order_line
+ # if products:
+ # sla_data = rec.calculate_sla_by_vendor(products)
+ # max_sla_time = sla_data.get('slatime', 1)
+ # else:
+ # max_sla_time = 1
+ #
+ # # offset hari libur/weekend
+ # offset, is3pm = rec.get_days_until_next_business_day(current_date)
+ # min_days = max_sla_time + offset - 1
+ # eta_minimum = current_date + timedelta(days=min_days)
+ #
+ # if rec._fields['expected_ready_to_ship'].type == 'date':
+ # exp_date_local = rec.expected_ready_to_ship
+ # else:
+ # exp_date_local = fields.Datetime.context_timestamp(
+ # rec, rec.expected_ready_to_ship
+ # ).date()
+ #
+ # if exp_date_local < eta_minimum.date():
+ # # (opsional) auto-set ke minimum → konversi balik ke UTC naive bila field Datetime
+ # if rec._fields['expected_ready_to_ship'].type == 'date':
+ # rec.expected_ready_to_ship = eta_minimum.date()
+ # else:
+ # rec.expected_ready_to_ship = eta_minimum.astimezone(pytz.UTC).replace(tzinfo=None)
+ #
+ # raise ValidationError(
+ # _("Tanggal 'Expected Ready to Ship' tidak boleh "
+ # "lebih kecil dari %(tgl)s. Mohon pilih minimal %(tgl)s.")
+ # % {'tgl': eta_minimum.strftime('%d-%m-%Y')}
+ # )
+ # else:
+ # rec.commitment_date = rec.expected_ready_to_ship
+
@api.onchange('expected_ready_to_ship') #Hangle Onchange form Expected Ready to Ship
def _onchange_expected_ready_ship_date(self):