diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-05-23 09:44:34 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-05-23 09:44:34 +0700 |
| commit | 48a2eae94b66f7bb8916dcd984bce17fbb36d45e (patch) | |
| tree | d1f489cacdc2bff90cbca79f87f6edcad5665aea | |
| parent | fad209db285b0a6204dc1fcbf2e2e0cb13f872b0 (diff) | |
(andri) add flag di API untuk mengetahui quotation SO dibuat dari website atau bukan
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 2 | ||||
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 24 |
2 files changed, 18 insertions, 8 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 98b13cad..065dddbb 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -438,7 +438,7 @@ class SaleOrder(controller.Controller): if params['value']['type'] == 'sale_order': parameters['approval_status'] = 'pengajuan1' - sale_order = request.env['sale.order'].create([parameters]) + sale_order = request.env['sale.order'].with_context(from_website_checkout=True).create([parameters]) sale_order.onchange_partner_contact() user_id = params['value']['user_id'] diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index 38d2505d..a41e001b 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -2265,24 +2265,33 @@ class SaleOrder(models.Model): order_line.order_id.use_button = True def _auto_set_shipping_from_website(self): + # Jalankan hanya jika context menandakan ini proses checkout + if not self.env.context.get('from_website_checkout'): + _logger.info("[AutoSetShipping] Dilewati karena bukan dari website checkout (context tidak ada)") + return + for order in self: - # Jalankan hanya untuk SO dari website (ID 59) + _logger.info(f"[AutoSetShipping] Proses otomatis untuk SO: {order.name}") + + # Validasi: pastikan source_id = Website if not order.source_id or order.source_id.id != 59: + _logger.warning(f"[AutoSetShipping] SO {order.name} bukan dari Website (source_id.id != 59)") continue - # Jika shipping method adalah Self Pick Up (ID 32), atur ke custom + # Abaikan jika shipping method adalah Self Pick Up if order.carrier_id and order.carrier_id.id == 32: order.select_shipping_option = 'custom' + _logger.info(f"[AutoSetShipping] SO {order.name} menggunakan Self Pick Up. Set ke custom.") continue - # Set shipping option ke biteship dan jalankan estimasi order.select_shipping_option = 'biteship' order.action_estimate_shipping() if not (order.delivery_service_type and order.carrier_id): + _logger.warning(f"[AutoSetShipping] SO {order.name} tidak memiliki delivery_service_type atau carrier_id") continue - # Ambil provider dari rajaongkir_kurir + # Cari provider dari mapping rajaongkir_kurir self.env.cr.execute(""" SELECT name FROM rajaongkir_kurir WHERE delivery_carrier_id = %s LIMIT 1 @@ -2297,7 +2306,7 @@ class SaleOrder(models.Model): _logger.warning(f"[AutoSetShipping] Provider tidak ditemukan untuk carrier_id: {order.carrier_id.id}") continue - # Cari shipping option berdasarkan provider dan courier_service_code + # Cari shipping option berdasarkan courier_service_code + provider matched_option = self.env['shipping.option'].search([ ('sale_order_id', '=', order.id), ('courier_service_code', '=', order.delivery_service_type), @@ -2307,15 +2316,16 @@ class SaleOrder(models.Model): if matched_option: order.shipping_option_id = matched_option.id order.delivery_amt = matched_option.price - _logger.info(f"[AutoSetShipping] Matched via courier_service_code: {matched_option.name} | Provider: {provider}") + _logger.info(f"[AutoSetShipping] Match: {matched_option.name} | Provider: {provider} | Price: {matched_option.price}") else: - _logger.warning(f"[AutoSetShipping] No match for service code '{order.delivery_service_type}' and provider '{provider}' in SO {order.name}") + _logger.warning(f"[AutoSetShipping] Tidak ditemukan match untuk SO {order.name} dengan service_code '{order.delivery_service_type}' dan provider '{provider}'") @api.model def create(self, vals): # Ensure partner details are updated when a sale order is created order = super(SaleOrder, self).create(vals) + _logger.info(f"[CREATE CONTEXT] {self.env.context}") order._auto_set_shipping_from_website() order._compute_etrts_date() order._validate_expected_ready_ship_date() |
