summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-06-17 17:55:12 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-06-17 17:55:12 +0700
commit4fb838700e7d971abb2b1a46d051bc460e532d9e (patch)
tree456b34de12561a62ce93df584bc3ab8e0f3ee713
parentb0241e8449224c67cccee154fb25d784d3d36c1c (diff)
(andri) fix onchange shipping option
-rwxr-xr-xindoteknik_custom/models/sale_order.py99
1 files changed, 47 insertions, 52 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index 1771f210..03e40145 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -377,37 +377,37 @@ class SaleOrder(models.Model):
carrier_ids = [row[0] for row in result if row[0]]
return carrier_ids
- @api.model
- def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
- res = super(SaleOrder, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
-
- if view_type == 'form':
- doc = etree.XML(res['arch'])
-
- # Ambil semua delivery_carrier_id dari mapping rajaongkir_kurir
- biteship_ids = self.env['rajaongkir.kurir'].search([]).mapped('delivery_carrier_id.id')
- biteship_ids = list(set(filter(None, biteship_ids))) # pastikan unik dan bukan None
-
- all_ids = self.env['delivery.carrier'].search([]).ids
- custom_ids = list(set(all_ids) - set(biteship_ids))
-
- # Format sebagai string Python list
- biteship_ids_str = ','.join(str(i) for i in biteship_ids) or '-1'
- custom_ids_str = ','.join(str(i) for i in custom_ids) or '-1'
-
- # Terapkan domain ke field carrier_id
- for node in doc.xpath("//field[@name='carrier_id']"):
- # Domain tergantung select_shipping_option
- node.set(
- 'domain',
- "[('id', 'in', [%s]) if select_shipping_option == 'biteship' else ('id', 'in', [%s])]" %
- (biteship_ids_str, custom_ids_str)
- )
+ # @api.model
+ # def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
+ # res = super(SaleOrder, self).fields_view_get(view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu)
+
+ # if view_type == 'form':
+ # doc = etree.XML(res['arch'])
+
+ # # Ambil semua delivery_carrier_id dari mapping rajaongkir_kurir
+ # biteship_ids = self.env['rajaongkir.kurir'].search([]).mapped('delivery_carrier_id.id')
+ # biteship_ids = list(set(filter(None, biteship_ids))) # pastikan unik dan bukan None
+
+ # all_ids = self.env['delivery.carrier'].search([]).ids
+ # custom_ids = list(set(all_ids) - set(biteship_ids))
+
+ # # Format sebagai string Python list
+ # biteship_ids_str = ','.join(str(i) for i in biteship_ids) or '-1'
+ # custom_ids_str = ','.join(str(i) for i in custom_ids) or '-1'
+
+ # # Terapkan domain ke field carrier_id
+ # for node in doc.xpath("//field[@name='carrier_id']"):
+ # # Domain tergantung select_shipping_option
+ # node.set(
+ # 'domain',
+ # "[('id', 'in', [%s]) if select_shipping_option == 'biteship' else ('id', 'in', [%s])]" %
+ # (biteship_ids_str, custom_ids_str)
+ # )
- # Simpan kembali hasil XML ke arsitektur form
- res['arch'] = etree.tostring(doc, encoding='unicode')
+ # # Simpan kembali hasil XML ke arsitektur form
+ # res['arch'] = etree.tostring(doc, encoding='unicode')
- return res
+ # return res
# @api.onchange('shipping_option_id')
# def _onchange_shipping_option_id(self):
@@ -599,40 +599,35 @@ class SaleOrder(models.Model):
@api.onchange('select_shipping_option')
def _onchange_select_shipping_option(self):
- if self.select_shipping_option == 'biteship' and self.shipping_cost_covered == 'indoteknik':
- self.select_shipping_option = self._origin.select_shipping_option if self._origin else 'custom'
- return {
- 'warning': {
- 'title': "Biteship Tidak Diizinkan",
- 'message': (
- "Biaya pengiriman ditanggung Indoteknik. Tidak diizinkan memilih metode Biteship. "
- "Opsi pengiriman dikembalikan ke sebelumnya."
- )
- }
- }
-
self.shipping_option_id = False
self.carrier_id = False
self.delivery_amt = 0
-
- # Dapatkan semua ID carrier untuk Biteship
+
biteship_carrier_ids = []
-
- # Gunakan SQL langsung untuk menghindari masalah ORM
self.env.cr.execute("""
SELECT delivery_carrier_id
FROM rajaongkir_kurir
WHERE name IN %s
""", (tuple(self._get_biteship_courier_codes()),))
-
- # Ambil ID numerik hasil query
biteship_carrier_ids = [row[0] for row in self.env.cr.fetchall() if row[0]]
-
+
if self.select_shipping_option == 'biteship':
- domain = [('id', 'in', biteship_carrier_ids)] if biteship_carrier_ids else []
- else: # 'custom'
- domain = [('id', 'not in', biteship_carrier_ids)] if biteship_carrier_ids else []
-
+ if self.shipping_cost_covered == 'indoteknik':
+ self.select_shipping_option = self._origin.select_shipping_option if self._origin else 'custom'
+ return {
+ 'warning': {
+ 'title': "Biteship Tidak Diizinkan",
+ 'message': (
+ "Biaya pengiriman ditanggung Indoteknik. Tidak diizinkan memilih metode Biteship. "
+ "Opsi pengiriman dikembalikan ke sebelumnya."
+ )
+ }
+ }
+
+ domain = [('id', 'in', biteship_carrier_ids)] if biteship_carrier_ids else [('id', '=', -1)]
+ else:
+ domain = [] # tampilkan semua
+
return {'domain': {'carrier_id': domain}}
# def _compute_total_margin_excl_third_party(self):