diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-06-01 20:29:57 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-06-01 20:29:57 +0700 |
| commit | 1c0bec8dadc593348df9ca585dae13b8ff65c316 (patch) | |
| tree | a77b9a4e34a175ea25484c4127e7a82fd580e399 | |
| parent | e5a3d37ca40127a6bd2a31f08d94704103a1ac11 (diff) | |
(andri) fix bug price estimate biteship
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 57 |
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 |
