summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-05-19 22:21:31 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-05-19 22:21:31 +0700
commite987dc891e999ebd1d04fb4f8cdeb44134c67aed (patch)
treeb31f1d6a31579d2c823863d68de7bc94270d4bb6
parent63243a7b70292e9c48a21e2badbb07c398bc4166 (diff)
(andri) fix bug shipping method
-rwxr-xr-xindoteknik_custom/models/sale_order.py40
-rwxr-xr-xindoteknik_custom/views/sale_order.xml2
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>