diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-06-17 17:55:12 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-06-17 17:55:12 +0700 |
| commit | 4fb838700e7d971abb2b1a46d051bc460e532d9e (patch) | |
| tree | 456b34de12561a62ce93df584bc3ab8e0f3ee713 | |
| parent | b0241e8449224c67cccee154fb25d784d3d36c1c (diff) | |
(andri) fix onchange shipping option
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 99 |
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): |
