summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-05-20 13:47:18 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-05-20 13:47:18 +0700
commitd38635f75fe52cbc958d96e577a83d8b3e1e1272 (patch)
tree330da8aa20835a6d93da9f5f92815bff2a222e81
parent2acd9dadd20499ab93c8ece237518f2a9cc7e296 (diff)
(andri) fix set shipping option sesuai dengan method yang dipilih
-rwxr-xr-xindoteknik_custom/models/sale_order.py60
-rwxr-xr-xindoteknik_custom/views/sale_order.xml2
2 files changed, 50 insertions, 12 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index f21f35b4..2b2e518a 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -248,7 +248,7 @@ class SaleOrder(models.Model):
string="Attachment Bukti Cancel", readonly=False,
)
nomor_so_pengganti = fields.Char(string='Nomor SO Pengganti', copy=False, tracking=3)
- shipping_option_id = fields.Many2one("shipping.option", string="Selected Shipping Option", domain="['|', ('sale_order_id', '=', False), ('sale_order_id', '=', id)]")
+ shipping_option_id = fields.Many2one("shipping.option", string="Selected Shipping Option", domain="['|', ('sale_order_id', '=', False), ('sale_order_id', '=', id)]")
select_shipping_option = fields.Selection([
('biteship', 'Biteship'),
@@ -295,7 +295,7 @@ class SaleOrder(models.Model):
@api.onchange('shipping_option_id')
def _onchange_shipping_option_id(self):
if self.shipping_option_id:
- self.delivery_amt = self.shipping_option_id.price
+ self.delivery_amt = self.shipping_option_id.price
def _get_biteship_courier_codes(self):
return [
@@ -340,12 +340,6 @@ class SaleOrder(models.Model):
""", (rec.total_percent_margin, rec.id))
self.invalidate_cache()
- @api.constrains('shipping_option_id')
- def _check_shipping_option(self):
- for rec in self:
- if rec.shipping_option_id:
- rec.delivery_amt = rec.shipping_option_id.price
-
def _compute_shipping_method_picking(self):
for order in self:
if order.picking_ids:
@@ -662,9 +656,53 @@ 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.")
- # Set opsi pertama sebagai default
- # self.shipping_option_id = shipping_options[0].id
- # self.delivery_amt = shipping_options[0].price
+ # Set opsi sesuai dengan carrier yang sudah dipilih, atau set opsi pertama sebagai default
+ selected_option = None
+
+ if self.carrier_id:
+ # Dapatkan kode kurir dari carrier
+ rajaongkir_kurir = self.env['rajaongkir.kurir'].search([
+ ('delivery_carrier_id', '=', self.carrier_id.id)
+ ], limit=1)
+
+ # Jika ditemukan rajaongkir_kurir, cari shipping option yang sesuai
+ if rajaongkir_kurir:
+ courier_code = rajaongkir_kurir.name.lower()
+ carrier_name = self.carrier_id.name.lower()
+
+ # Mencoba beberapa kemungkinan format untuk pencocokan
+ possible_codes = [
+ 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}")
+
+ # Coba temukan shipping option yang sesuai dengan carrier
+ for option in shipping_options:
+ option_provider = option.provider.lower() if option.provider else ''
+ option_name = option.name.lower() if option.name else ''
+
+ # Cek pencocokan untuk provider atau nama
+ 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
+
+ if selected_option:
+ break
+
+ # Jika tidak ada opsi yang cocok dengan carrier, gunakan opsi pertama
+ if not selected_option and shipping_options:
+ selected_option = shipping_options[0]
+ _logger.info(f"Menggunakan opsi pertama: {selected_option.name}")
+
+ # Set shipping option yang terpilih
+ if selected_option:
+ self.shipping_option_id = selected_option.id
+ self.delivery_amt = selected_option.price
# Format untuk pesan log
if use_coordinate:
diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml
index eabd5aba..1a0895dc 100755
--- a/indoteknik_custom/views/sale_order.xml
+++ b/indoteknik_custom/views/sale_order.xml
@@ -121,7 +121,7 @@
<field name="select_shipping_option" required="1"/>
<field name="carrier_id" required="1" domain="[]" />
<field name="delivery_service_type" readonly="1" />
- <field name="shipping_option_id" />
+ <field name="shipping_option_id"/>
</field>
<field name="medium_id" position="after">
<field name="date_doc_kirim" readonly="1" />