summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-06-01 20:29:57 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-06-01 20:29:57 +0700
commit1c0bec8dadc593348df9ca585dae13b8ff65c316 (patch)
treea77b9a4e34a175ea25484c4127e7a82fd580e399
parente5a3d37ca40127a6bd2a31f08d94704103a1ac11 (diff)
(andri) fix bug price estimate biteship
-rwxr-xr-xindoteknik_custom/models/sale_order.py57
1 files changed, 30 insertions, 27 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 453406c4..ec4b55e7 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -696,10 +696,12 @@ class SaleOrder(models.Model):
if weight_gram < 100:
weight_gram = 100
+ value = int(self.amount_untaxed or sum(line.price_subtotal for line in self.order_line))
+
items = [{
"name": "Paket Pesanan",
"description": f"Sale Order {self.name}",
- "value": int(self.amount_untaxed),
+ "value": value,
"weight": weight_gram,
"quantity": 1,
}]
@@ -811,6 +813,7 @@ class SaleOrder(models.Model):
if not shipping_options:
raise UserError(f"Tidak ada layanan pengiriman ditemukan untuk kode pos {destination_data.get('destination_postal_code', '')}. Mohon periksa kembali kode pos atau gunakan metode pengiriman lain.")
+ # Temukan shipping option yang cocok berdasarkan carrier_id
selected_option = None
if self.carrier_id:
@@ -822,44 +825,44 @@ class SaleOrder(models.Model):
courier_code = rajaongkir_kurir.name.lower()
carrier_name = self.carrier_id.name.lower()
- possible_codes = [
+ possible_codes = list({
courier_code,
carrier_name,
carrier_name.split()[0] if ' ' in carrier_name else carrier_name
- ]
+ })
- _logger.info(f"Mencari shipping option untuk kurir: {possible_codes}")
+ _logger.info(f"[MATCHING] Mencari shipping option untuk kurir: {possible_codes}")
for option in shipping_options:
- option_provider = option.provider.lower() if option.provider else ''
- option_name = option.name.lower() if option.name else ''
-
- for code in possible_codes:
- if code in option_provider or code in option_name:
- selected_option = option
- _logger.info(f"Menemukan shipping option yang cocok: {option.name}")
- break
+ option_provider = (option.provider or '').lower()
+ option_name = (option.name or '').lower()
- if selected_option:
+ if any(code in option_provider or code in option_name for code in possible_codes):
+ selected_option = option
+ _logger.info(f"[MATCHED] Shipping option cocok: {option.name}")
break
if not selected_option and shipping_options:
selected_option = shipping_options[0]
- _logger.info(f"Menggunakan opsi pertama: {selected_option.name}")
-
- # Ganti carrier_id otomatis sesuai provider dari shipping option
- provider = selected_option.provider.lower()
- self.env.cr.execute("""
- SELECT delivery_carrier_id FROM rajaongkir_kurir
- WHERE LOWER(name) = %s AND delivery_carrier_id IS NOT NULL
- LIMIT 1
- """, (provider,))
- row = self.env.cr.fetchone()
- matched_carrier_id = row[0] if row else False
- if matched_carrier_id:
- self.carrier_id = matched_carrier_id
- _logger.info(f"Carrier diganti otomatis ke ID {matched_carrier_id} berdasarkan provider {provider}")
+ _logger.info(f"[DEFAULT] Tidak ada yang cocok, pakai opsi pertama: {selected_option.name}")
+
+ # ❗ Ganti carrier_id hanya jika BELUM terisi sama sekali (contoh: user dari backend)
+ if not self.carrier_id:
+ provider = selected_option.provider.lower()
+ self.env.cr.execute("""
+ SELECT delivery_carrier_id FROM rajaongkir_kurir
+ WHERE LOWER(name) = %s AND delivery_carrier_id IS NOT NULL
+ LIMIT 1
+ """, (provider,))
+ row = self.env.cr.fetchone()
+ matched_carrier_id = row[0] if row else False
+ if matched_carrier_id:
+ self.carrier_id = matched_carrier_id
+ _logger.info(f"[AUTO-SET] Carrier diisi otomatis ke ID {matched_carrier_id} (provider: {provider})")
+ else:
+ _logger.warning(f"[WARNING] Provider {provider} tidak ditemukan di rajaongkir_kurir")
+ # Set shipping option dan nilai ongkir
if selected_option:
self.shipping_option_id = selected_option.id
self.delivery_amt = selected_option.price