summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-05-19 23:02:46 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-05-19 23:02:46 +0700
commit2acd9dadd20499ab93c8ece237518f2a9cc7e296 (patch)
treebb606ad07f66efe38b2ab008397cc3638b0ffd5d
parente987dc891e999ebd1d04fb4f8cdeb44134c67aed (diff)
(andri) merapihkan log note estimate shipping
-rwxr-xr-xindoteknik_custom/models/sale_order.py59
1 files changed, 34 insertions, 25 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 382272b9..f21f35b4 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -523,7 +523,6 @@ class SaleOrder(models.Model):
return total_weight
def action_estimate_shipping_biteship(self):
-
total_weight = self._validate_for_shipping_estimate()
# Konversi berat ke gram untuk Biteship
@@ -602,6 +601,7 @@ class SaleOrder(models.Model):
# Proses hasil API
shipping_options = []
+ courier_options = {} # Dictionary untuk mengelompokkan opsi per kurir
shipping_services = result.get('pricing', [])
_logger.info(f"Ditemukan {len(shipping_services)} layanan pengiriman")
@@ -643,19 +643,30 @@ class SaleOrder(models.Model):
})
shipping_options.append(shipping_option)
+
+ # Kelompokkan opsi berdasarkan kurir
+ courier_upper = courier_code.upper()
+ if courier_upper not in courier_options:
+ courier_options[courier_upper] = []
+ courier_options[courier_upper].append({
+ "name": service_name,
+ "etd": etd,
+ "price": price
+ })
+
_logger.info(f"Berhasil membuat opsi pengiriman: {courier_name} - {service_name}")
except Exception as e:
_logger.error(f"Gagal membuat opsi pengiriman: {str(e)}")
# Jika tidak ada opsi pengiriman
if not shipping_options:
- raise UserError(f"Tidak ada layanan pengiriman ditemukan untuk kode pos {destination_data}. Mohon periksa kembali kode pos atau gunakan metode pengiriman lain.")
+ 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.")
# Set opsi pertama sebagai default
- self.shipping_option_id = shipping_options[0].id
- self.delivery_amt = shipping_options[0].price
+ # self.shipping_option_id = shipping_options[0].id
+ # self.delivery_amt = shipping_options[0].price
- # Format pesan untuk log yang lebih informatif
+ # Format untuk pesan log
if use_coordinate:
origin_info = f"Koordinat ({origin_data.get('origin_latitude')}, {origin_data.get('origin_longitude')})"
destination_info = f"Koordinat ({destination_data.get('destination_latitude')}, {destination_data.get('destination_longitude')})"
@@ -663,32 +674,30 @@ class SaleOrder(models.Model):
origin_info = f"Kode Pos {origin_data.get('origin_postal_code')}"
destination_info = f"Kode Pos {destination_data.get('destination_postal_code')}"
- # Format daftar opsi pengiriman
- option_list = '<br/>'.join([
- f"{opt.name}: Rp {opt.price:,.0f} ({opt.etd})"
- for opt in shipping_options
- ])
+ # PENTING: Gunakan HTML untuk teks preformatted agar jarak baris terjaga
+ message_lines = [f"<b>Estimasi Ongkos Kirim Biteship ({origin_info} → {destination_info}):</b><br/>"]
+
+ # Format setiap kurir dan layanannya
+ for courier, options in courier_options.items():
+ message_lines.append(f"<b>{courier}:</b><br/>")
+ for opt in options:
+ message_lines.append(f"Service: {opt['name']}, ETD: {opt['etd']}, Cost: Rp {int(opt['price']):,}<br/>")
+ # Tambahkan baris kosong setelah setiap kurir (kecuali yang terakhir)
+ if courier != list(courier_options.keys())[-1]:
+ message_lines.append("<br/>")
+
+ # Gabungkan baris pesan dengan HTML line breaks
+ message_body = "".join(message_lines)
- # Log hasil estimasi dengan format yang lebih baik
+ # Log hasil estimasi dengan format yang diinginkan
self.message_post(
- body=f"<b>Estimasi Ongkir Biteship ({origin_info} → {destination_info}):</b><br/>{option_list}",
+ body=message_body,
message_type="comment"
)
# Simpan informasi untuk note ekspedisi
- selected_option = shipping_options[0] # Opsi pertama dipilih sebagai default
- self.note_ekspedisi = f"Pengiriman: {selected_option.name} - Rp {selected_option.price:,.0f} ({selected_option.etd}) [via {api_mode}]"
-
- return {
- 'type': 'ir.actions.client',
- 'tag': 'display_notification',
- 'params': {
- 'title': 'Estimasi Ongkir Berhasil',
- 'message': f'Mendapatkan {len(shipping_options)} opsi pengiriman menggunakan {api_mode}',
- 'type': 'success',
- 'sticky': False,
- }
- }
+ # selected_option = shipping_options[0] # Opsi pertama dipilih sebagai default
+ # self.note_ekspedisi = f"Pengiriman: {selected_option.name} - Rp {selected_option.price:,.0f} ({selected_option.etd}) [via {api_mode}]"
def _call_biteship_api(self, origin_data, destination_data, items, couriers=None):