diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-05-19 22:21:31 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-05-19 22:21:31 +0700 |
| commit | e987dc891e999ebd1d04fb4f8cdeb44134c67aed (patch) | |
| tree | b31f1d6a31579d2c823863d68de7bc94270d4bb6 | |
| parent | 63243a7b70292e9c48a21e2badbb07c398bc4166 (diff) | |
(andri) fix bug shipping method
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 40 | ||||
| -rwxr-xr-x | indoteknik_custom/views/sale_order.xml | 2 |
2 files changed, 40 insertions, 2 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index f09869da..382272b9 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -7,6 +7,7 @@ import logging, random, string, requests, math, json, re, qrcode, base64 from io import BytesIO from collections import defaultdict import pytz +from lxml import etree _logger = logging.getLogger(__name__) @@ -252,7 +253,44 @@ class SaleOrder(models.Model): select_shipping_option = fields.Selection([ ('biteship', 'Biteship'), ('custom', 'Custom'), - ], string='Select Shipping Option', help="Select shipping option for delivery", Tracking=True) + ], string='Select Shipping Option', help="Select shipping option for delivery", tracking=True) + + def get_biteship_carrier_ids(self): + courier_codes = tuple(self._get_biteship_courier_codes() or []) + if not courier_codes: + return [] + + self.env.cr.execute(""" + SELECT delivery_carrier_id + FROM rajaongkir_kurir + WHERE name IN %s AND delivery_carrier_id IS NOT NULL + """, (courier_codes,)) + result = self.env.cr.fetchall() + 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']) + + carrier_ids = self.get_biteship_carrier_ids() + if carrier_ids: + carrier_ids_str = '(' + ','.join(str(x) for x in carrier_ids) + ')' + else: + carrier_ids_str = '(-1,)' # aman kalau kosong + + # ✅ Tambahkan log di sini + _logger.info("🛰️ Biteship Carrier IDs: %s", carrier_ids) + _logger.info("📦 Domain string to apply: [('id', 'in', %s)]", carrier_ids_str) + + for node in doc.xpath("//field[@name='carrier_id']"): + node.set('domain', "[('id', 'in', %s)]" % carrier_ids_str) + + res['arch'] = etree.tostring(doc, encoding='unicode') + return res @api.onchange('shipping_option_id') def _onchange_shipping_option_id(self): diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index 080549a4..eabd5aba 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -119,7 +119,7 @@ <field name="sales_tax_id" domain="[('type_tax_use','=','sale'), ('active', '=', True)]" required="1" /> <field name="select_shipping_option" required="1"/> - <field name="carrier_id" required="1" /> + <field name="carrier_id" required="1" domain="[]" /> <field name="delivery_service_type" readonly="1" /> <field name="shipping_option_id" /> </field> |
