diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-06-01 17:23:56 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-06-01 17:23:56 +0700 |
| commit | e5a3d37ca40127a6bd2a31f08d94704103a1ac11 (patch) | |
| tree | ec821a3e51cc20d0b1c136b68090a0e9e5889ca4 | |
| parent | 03d52ddceacea1939aef8ee4c571cacdb8b2c055 (diff) | |
(andri) fix bug shipping method
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 490e4581..453406c4 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -306,6 +306,10 @@ class SaleOrder(models.Model): @api.onchange('carrier_id') def _onchange_carrier_id(self): + # Jika record masih baru (belum disimpan), jangan jalankan onchange + if not self._origin or not self._origin.id: + return + self.shipping_option_id = False # self.delivery_amt = 0 # self.delivery_service_type = False @@ -313,7 +317,7 @@ class SaleOrder(models.Model): if not self.carrier_id: return {'domain': {'shipping_option_id': [('id', '=', -1)]}} - # Ambil provider dari rajaongkir_kurir + # Ambil provider dari mapping self.env.cr.execute(""" SELECT name FROM rajaongkir_kurir WHERE delivery_carrier_id = %s @@ -322,16 +326,14 @@ class SaleOrder(models.Model): result = self.env.cr.fetchone() provider = result[0].lower() if result and result[0] else False - # Fallback dari nama carrier if not provider: provider = self.carrier_id.name.lower().split()[0] if self.carrier_id.name else False _logger.info(f"[Carrier Changed] {self.carrier_id.name}, Detected Provider: {provider}") - # Ambil ID SO - sale_order_id = self._origin.id if self._origin else False + sale_order_id = self._origin.id - # Hitung jumlah shipping_option yang cocok + # Cek apakah ada shipping_option yang cocok self.env.cr.execute(""" SELECT COUNT(*) FROM shipping_option WHERE LOWER(provider) LIKE %s AND sale_order_id = %s @@ -340,7 +342,6 @@ class SaleOrder(models.Model): _logger.info(f"[Shipping Option Count] Provider: {provider} | SO ID: {sale_order_id} | Count: {count}") - # Jika tidak ditemukan shipping option if count == 0: previous_carrier = self._origin.carrier_id if self._origin else False previous_provider = False @@ -348,7 +349,7 @@ class SaleOrder(models.Model): self.carrier_id = previous_carrier self.shipping_option_id = self._origin.shipping_option_id if self._origin else False - # Rehitung provider untuk domain fallback + # Ambil kembali domain provider sebelumnya if previous_carrier: self.env.cr.execute(""" SELECT name FROM rajaongkir_kurir @@ -358,7 +359,7 @@ class SaleOrder(models.Model): previous_provider = prev_row[0].lower() if prev_row and prev_row[0] else previous_carrier.name.lower().split()[0] fallback_domain = [('id', '=', -1)] - if sale_order_id and previous_provider: + if previous_provider: fallback_domain = [ '|', '&', ('sale_order_id', '=', sale_order_id), ('provider', 'ilike', f'%{previous_provider}%'), @@ -376,7 +377,7 @@ class SaleOrder(models.Model): 'domain': {'shipping_option_id': fallback_domain} } - # Jika ditemukan, set domain normal + # Jika data ada, kembalikan domain biasa domain = [ '|', '&', ('sale_order_id', '=', sale_order_id), ('provider', 'ilike', f'%{provider}%'), @@ -385,7 +386,6 @@ class SaleOrder(models.Model): return {'domain': {'shipping_option_id': domain}} - @api.onchange('shipping_option_id') def _onchange_shipping_option_id(self): if not self.shipping_option_id: |
