summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xindoteknik_custom/models/sale_order.py53
1 files changed, 44 insertions, 9 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py
index a86d43cb..9faafb11 100755
--- a/indoteknik_custom/models/sale_order.py
+++ b/indoteknik_custom/models/sale_order.py
@@ -256,6 +256,20 @@ class SaleOrder(models.Model):
('custom', 'Custom'),
], string='Shipping Option', help="Select shipping option for delivery", tracking=True)
+ @api.onchange('shipping_cost_covered')
+ def _onchange_shipping_cost_covered(self):
+ if self.shipping_cost_covered == 'indoteknik' and self.select_shipping_option == 'biteship':
+ self.shipping_cost_covered = 'customer'
+ return {
+ 'warning': {
+ 'title': "Biteship Tidak Diizinkan",
+ 'message': (
+ "Biaya pengiriman ditanggung Indoteknik, sehingga tidak diizinkan menggunakan metode Biteship. "
+ "Pilihan penanggung biaya akan dikembalikan sebelumnya"
+ )
+ }
+ }
+
def get_biteship_carrier_ids(self):
courier_codes = tuple(self._get_biteship_courier_codes() or [])
if not courier_codes:
@@ -277,20 +291,29 @@ class SaleOrder(models.Model):
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
+ # 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))
- # ✅ Tambahkan log di sini
- _logger.info("🛰️ Biteship Carrier IDs: %s", carrier_ids)
- _logger.info("📦 Domain string to apply: [('id', 'in', %s)]", carrier_ids_str)
+ # 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']"):
- node.set('domain', "[('id', 'in', %s)]" % carrier_ids_str)
+ # 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')
+
return res
# @api.onchange('shipping_option_id')
@@ -477,6 +500,18 @@ 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