diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-05-19 23:02:46 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-05-19 23:02:46 +0700 |
| commit | 2acd9dadd20499ab93c8ece237518f2a9cc7e296 (patch) | |
| tree | bb606ad07f66efe38b2ab008397cc3638b0ffd5d | |
| parent | e987dc891e999ebd1d04fb4f8cdeb44134c67aed (diff) | |
(andri) merapihkan log note estimate shipping
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 59 |
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): |
