summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xindoteknik_custom/models/sale_order.py40
1 files changed, 34 insertions, 6 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index d61e3641..8cf38040 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -293,11 +293,11 @@ class SaleOrder(models.Model):
res['arch'] = etree.tostring(doc, encoding='unicode')
return res
- @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_service_type = self.shipping_option_id.courier_service_code
+ # @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_service_type = self.shipping_option_id.courier_service_code
def _get_biteship_courier_codes(self):
return [
@@ -369,7 +369,13 @@ class SaleOrder(models.Model):
@api.onchange('shipping_option_id')
def _onchange_shipping_option_id(self):
- if not self.shipping_option_id or not self.carrier_id:
+ if not self.shipping_option_id:
+ return
+
+ if not self.carrier_id:
+ # Jika belum pilih carrier, tetap update harga dan service type
+ self.delivery_amt = self.shipping_option_id.price
+ self.delivery_service_type = self.shipping_option_id.courier_service_code
return
# Ambil provider dari carrier
@@ -396,6 +402,19 @@ class SaleOrder(models.Model):
self.delivery_amt = self.shipping_option_id.price
self.delivery_service_type = self.shipping_option_id.courier_service_code
+ def _update_delivery_service_type_from_shipping_option(self, vals):
+ shipping_option_id = vals.get('shipping_option_id') or self.shipping_option_id.id
+ if shipping_option_id:
+ shipping_option = self.env['shipping.option'].browse(shipping_option_id)
+ if shipping_option.exists():
+ courier_service = shipping_option.courier_service_code
+ vals['delivery_service_type'] = courier_service
+ _logger.info("🛰️ Set delivery_service_type: %s from shipping_option_id: %s", courier_service, shipping_option_id)
+ else:
+ _logger.warning("⚠️ shipping_option_id %s not found or invalid.", shipping_option_id)
+ else:
+ _logger.info("ℹ️ shipping_option_id not found in vals or record.")
+
# @api.model
# def fields_get(self, allfields=None, attributes=None):
# res = super().fields_get(allfields=allfields, attributes=attributes)
@@ -2391,6 +2410,13 @@ class SaleOrder(models.Model):
})
def write(self, vals):
+ if 'shipping_option_id' in vals and vals['shipping_option_id']:
+ shipping_option = self.env['shipping.option'].browse(vals['shipping_option_id'])
+ if shipping_option:
+ vals['delivery_service_type'] = shipping_option.courier_service_code
+ return super(SaleOrder, self).write(vals)
+
+ def write(self, vals):
for order in self:
if order.state in ['sale', 'cancel']:
if 'order_line' in vals:
@@ -2399,6 +2425,8 @@ class SaleOrder(models.Model):
if command[0] == 0: # A new line is being added
raise UserError(
"SO tidak dapat ditambahkan produk baru karena SO sudah menjadi sale order.")
+
+ order._update_delivery_service_type_from_shipping_option(vals)
res = super(SaleOrder, self).write(vals)
# self._check_total_margin_excl_third_party()