summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriFP <andrifebriyadiputra@gmail.com>2025-04-16 10:25:39 +0700
committerAndriFP <andrifebriyadiputra@gmail.com>2025-04-16 10:25:39 +0700
commit2dc56ffaf7e2e6d703eac32fd1213cf84b684915 (patch)
tree25ab4d9d84e8bfe79d7d100f1605a1d96b355591
parente9f38f540f92d6ef98b0153cbf17ce064932ad60 (diff)
(andri)add log note after estimate shipping success
-rwxr-xr-xindoteknik_custom/models/sale_order.py129
-rwxr-xr-xindoteknik_custom/views/sale_order.xml1
2 files changed, 52 insertions, 78 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 36feb70b..cc7b9851 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -315,12 +315,22 @@ class SaleOrder(models.Model):
"sale_order_id": self.id,
})
self.shipping_option_id = shipping_option.id
+ self.message_post(
+ body=(
+ f"<b>Estimasi pengiriman Indoteknik berhasil:</b><br/>"
+ f"Layanan: {shipping_option.name}<br/>"
+ f"ETD: {shipping_option.etd}<br/>"
+ f"Biaya: Rp {shipping_option.price:,}<br/>"
+ f"Provider: {shipping_option.provider}"
+ ),
+ message_type="comment",
+ )
def action_estimate_shipping(self):
# Pengecekan Minimum Delivery Amount
if self.delivery_amt < 5000:
raise UserError("Estimasi ongkos kirim belum mencapai jumlah minimum untuk pengiriman")
-
+
if self.carrier_id.id in [1, 151]:
self.action_indoteknik_estimate_shipping()
return
@@ -347,87 +357,50 @@ class SaleOrder(models.Model):
raise UserError("Gagal mendapatkan ID kota tujuan.")
result = self._call_rajaongkir_api(total_weight, destination_subsdistrict_id)
- if result:
- shipping_options = []
- for courier in result['rajaongkir']['results']:
- for cost_detail in courier['costs']:
- service = cost_detail['service']
- description = cost_detail['description']
- etd = cost_detail['cost'][0]['etd']
- value = cost_detail['cost'][0]['value']
- shipping_options.append((service, description, etd, value, courier['code']))
-
- self.env["shipping.option"].search([('sale_order_id', '=', self.id)]).unlink()
-
- for service, description, etd, value, provider in shipping_options:
- self.env["shipping.option"].create({
- "name": service,
- "price": value,
- "provider": provider,
- "etd": etd,
- "sale_order_id": self.id,
- })
-
- self.shipping_option_id = self.env["shipping.option"].search([('sale_order_id', '=', self.id)], limit=1).id
- # Jika perlu, tambahkan log atau tindakan lebih lanjut setelah peringatan
+ if not result:
+ raise UserError("Estimasi Ongkir gagal sebab pilihan kurir tidak terdaftar di RajaOngkir")
+
+ shipping_options = []
+ for courier in result['rajaongkir']['results']:
+ for cost_detail in courier['costs']:
+ service = cost_detail['service']
+ description = cost_detail['description']
+ etd = cost_detail['cost'][0]['etd']
+ value = cost_detail['cost'][0]['value']
+ shipping_options.append((service, description, etd, value, courier['code']))
+
+ # Hapus opsi shipping lama
+ self.env["shipping.option"].search([('sale_order_id', '=', self.id)]).unlink()
+
+ # Simpan opsi shipping baru
+ for service, description, etd, value, provider in shipping_options:
+ self.env["shipping.option"].create({
+ "name": service,
+ "price": value,
+ "provider": provider,
+ "etd": etd,
+ "sale_order_id": self.id,
+ })
+
+ # Set opsi shipping default
+ first_option = self.env["shipping.option"].search([('sale_order_id', '=', self.id)], limit=1)
+ if first_option:
+ self.shipping_option_id = first_option.id
+ message = (
+ f"Estimasi pengiriman berhasil:<br/>"
+ f"<b>Layanan:</b> {first_option.name}<br/>"
+ f"<b>Deskripsi:</b> {dict(first_option._fields['name'].selection).get(first_option.name, first_option.name)}<br/>"
+ f"<b>ETD:</b> {first_option.etd} hari<br/>"
+ f"<b>Biaya:</b> Rp {first_option.price:,}"
+ )
+ self.message_post(
+ body=message,
+ message_type="comment",
+ )
else:
raise UserError("Gagal mendapatkan estimasi ongkir.")
-
- # def action_estimate_shipping(self):
- # if self.carrier_id.id in [1, 151]:
- # self.action_indoteknik_estimate_shipping()
- # return
-
- # total_weight = 0
- # missing_weight_products = []
-
- # for line in self.order_line:
- # if line.weight > 0:
- # total_weight += line.weight * line.product_uom_qty
- # line.product_id.weight = line.weight
- # else:
- # missing_weight_products.append(line.product_id.name)
-
- # if missing_weight_products:
- # product_names = '<br/>'.join(missing_weight_products)
- # self.message_post(body=f"Produk berikut tidak memiliki berat:<br/>{product_names}")
-
- # if total_weight == 0:
- # raise UserError("Tidak dapat mengestimasi ongkir tanpa berat yang valid.")
-
- # destination_subsdistrict_id = self.real_shipping_id.kecamatan_id.rajaongkir_id
- # if not destination_subsdistrict_id:
- # raise UserError("Gagal mendapatkan ID kota tujuan.")
-
- # result = self._call_rajaongkir_api(total_weight, destination_subsdistrict_id)
- # if result:
- # shipping_options = []
- # for courier in result['rajaongkir']['results']:
- # for cost_detail in courier['costs']:
- # service = cost_detail['service']
- # description = cost_detail['description']
- # etd = cost_detail['cost'][0]['etd']
- # value = cost_detail['cost'][0]['value']
- # shipping_options.append((service, description, etd, value, courier['code']))
-
- # self.env["shipping.option"].search([('sale_order_id', '=', self.id)]).unlink()
-
- # for service, description, etd, value, provider in shipping_options:
- # self.env["shipping.option"].create({
- # "name": service,
- # "price": value,
- # "provider": provider,
- # "etd": etd,
- # "sale_order_id": self.id,
- # })
-
- # self.shipping_option_id = self.env["shipping.option"].search([('sale_order_id', '=', self.id)], limit=1).id
-
- # self.message_post(body=f"Estimasi Ongkos Kirim: Rp{self.delivery_amt}<br/>Detail Lain:<br/>{'<br/>'.join([f'Service: {s[0]}, Description: {s[1]}, ETD: {s[2]} hari, Cost: Rp {s[3]}' for s in shipping_options])}")
- # else:
- # raise UserError("Gagal mendapatkan estimasi ongkir.")
def _call_rajaongkir_api(self, total_weight, destination_subsdistrict_id):
url = 'https://pro.rajaongkir.com/api/cost'
diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml
index 2c64181e..f1b72af3 100755
--- a/indoteknik_custom/views/sale_order.xml
+++ b/indoteknik_custom/views/sale_order.xml
@@ -94,6 +94,7 @@
type="object"
/>
<button string="Estimate Shipping" type="object" name="action_estimate_shipping"/>
+
</field>
<field name="partner_shipping_id" position="after">
<field name="real_shipping_id"/>