summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-05-30 09:19:22 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-05-30 09:19:22 +0700
commit2f89da69c9ec8d78f187be5afd254cdd594ee24a (patch)
treed95ab052ec70df1e78cd115cc8ab17f80f609608
parentd6c59069035919e270d4940a39242fe5d5291982 (diff)
(andri) fix bug shipping method custom
-rwxr-xr-xindoteknik_custom/models/sale_order.py34
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: