diff options
| author | Miqdad <ahmadmiqdad27@gmail.com> | 2025-09-24 09:41:18 +0700 |
|---|---|---|
| committer | Miqdad <ahmadmiqdad27@gmail.com> | 2025-09-24 09:41:18 +0700 |
| commit | 80f811a7ccca771990fcbf59df6e92dc8e0acc14 (patch) | |
| tree | dc6897cb371e7079bfbfdcaa5872cbf41a353465 | |
| parent | 22c5def88445676675e1978e77471ef939f46daa (diff) | |
<Miqdad> balikin validate erts
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 132 |
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): |
