diff options
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 40 |
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() |
