diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-05-30 09:19:22 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-05-30 09:19:22 +0700 |
| commit | 2f89da69c9ec8d78f187be5afd254cdd594ee24a (patch) | |
| tree | d95ab052ec70df1e78cd115cc8ab17f80f609608 | |
| parent | d6c59069035919e270d4940a39242fe5d5291982 (diff) | |
(andri) fix bug shipping method custom
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 946761ce..f1280b37 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -311,6 +311,15 @@ class SaleOrder(models.Model): self.delivery_amt = 0 return {'domain': {'shipping_option_id': [('id', '=', -1)]}} + # ✅ Lewati validasi jika carrier bukan Biteship + if self.carrier_id.delivery_type != 'biteship': + _logger.info(f"Carrier {self.carrier_id.name} bertipe custom ({self.carrier_id.delivery_type}), tidak divalidasi.") + self.shipping_option_id = False + self.delivery_amt = 0 + return { + 'domain': {'shipping_option_id': [('id', '=', -1)]} + } + # Ambil provider dari rajaongkir_kurir self.env.cr.execute(""" SELECT name FROM rajaongkir_kurir @@ -320,21 +329,27 @@ class SaleOrder(models.Model): result = self.env.cr.fetchone() provider = result[0].lower() if result and result[0] else False - # Fallback: pakai nama carrier + # Fallback ke nama carrier jika tidak ada di rajaongkir_kurir if not provider: provider = self.carrier_id.name.lower().split()[0] if self.carrier_id.name else False _logger.info(f"Carrier changed to {self.carrier_id.name}, provider: {provider}") - sale_order_id = self._origin.id if self._origin else False + sale_order_id = self._origin.id if self._origin and self._origin.id else None - # Cek jumlah shipping option dengan provider tersebut - self.env.cr.execute(""" - SELECT COUNT(*) FROM shipping_option - WHERE LOWER(provider) LIKE %s AND sale_order_id = %s - """, (f'%{provider}%', sale_order_id)) - count = self.env.cr.fetchone()[0] + # Cek shipping option untuk provider ini + if sale_order_id: + self.env.cr.execute(""" + SELECT COUNT(*) FROM shipping_option + WHERE LOWER(provider) LIKE %s AND sale_order_id = %s + """, (f'%{provider}%', sale_order_id)) + else: + self.env.cr.execute(""" + SELECT COUNT(*) FROM shipping_option + WHERE LOWER(provider) LIKE %s AND sale_order_id IS NULL + """, (f'%{provider}%',)) + count = self.env.cr.fetchone()[0] _logger.info(f"Found {count} shipping options for provider {provider}") # VALIDASI GAGAL @@ -346,7 +361,7 @@ class SaleOrder(models.Model): 'warning': { 'title': "Shipping Method Tidak Tersedia", 'message': ( - f"Shipping method '{provider}' tidak tersedia pada pengiriman ini.\n" + f"Shipping method '{self.carrier_id.name}' tidak tersedia pada pengiriman ini.\n" f"Pilihan dikembalikan ke sebelumnya." ) }, @@ -366,6 +381,7 @@ class SaleOrder(models.Model): _logger.info(f"Final domain for shipping_option_id: {domain}") return {'domain': {'shipping_option_id': domain}} + @api.onchange('shipping_option_id') def _onchange_shipping_option_id(self): if not self.shipping_option_id: |
