diff options
| -rwxr-xr-x | indoteknik_custom/models/sale_order.py | 60 | ||||
| -rwxr-xr-x | indoteknik_custom/views/sale_order.xml | 2 |
2 files changed, 50 insertions, 12 deletions
diff --git a/indoteknik_custom/models/sale_order.py b/indoteknik_custom/models/sale_order.py index f21f35b4..2b2e518a 100755 --- a/indoteknik_custom/models/sale_order.py +++ b/indoteknik_custom/models/sale_order.py @@ -248,7 +248,7 @@ class SaleOrder(models.Model): string="Attachment Bukti Cancel", readonly=False, ) nomor_so_pengganti = fields.Char(string='Nomor SO Pengganti', copy=False, tracking=3) - shipping_option_id = fields.Many2one("shipping.option", string="Selected Shipping Option", domain="['|', ('sale_order_id', '=', False), ('sale_order_id', '=', id)]") + shipping_option_id = fields.Many2one("shipping.option", string="Selected Shipping Option", domain="['|', ('sale_order_id', '=', False), ('sale_order_id', '=', id)]") select_shipping_option = fields.Selection([ ('biteship', 'Biteship'), @@ -295,7 +295,7 @@ class SaleOrder(models.Model): @api.onchange('shipping_option_id') def _onchange_shipping_option_id(self): if self.shipping_option_id: - self.delivery_amt = self.shipping_option_id.price + self.delivery_amt = self.shipping_option_id.price def _get_biteship_courier_codes(self): return [ @@ -340,12 +340,6 @@ class SaleOrder(models.Model): """, (rec.total_percent_margin, rec.id)) self.invalidate_cache() - @api.constrains('shipping_option_id') - def _check_shipping_option(self): - for rec in self: - if rec.shipping_option_id: - rec.delivery_amt = rec.shipping_option_id.price - def _compute_shipping_method_picking(self): for order in self: if order.picking_ids: @@ -662,9 +656,53 @@ class SaleOrder(models.Model): if not shipping_options: raise UserError(f"Tidak ada layanan pengiriman ditemukan untuk kode pos {destination_data.get('destination_postal_code', '')}. Mohon periksa kembali kode pos atau gunakan metode pengiriman lain.") - # Set opsi pertama sebagai default - # self.shipping_option_id = shipping_options[0].id - # self.delivery_amt = shipping_options[0].price + # Set opsi sesuai dengan carrier yang sudah dipilih, atau set opsi pertama sebagai default + selected_option = None + + if self.carrier_id: + # Dapatkan kode kurir dari carrier + rajaongkir_kurir = self.env['rajaongkir.kurir'].search([ + ('delivery_carrier_id', '=', self.carrier_id.id) + ], limit=1) + + # Jika ditemukan rajaongkir_kurir, cari shipping option yang sesuai + if rajaongkir_kurir: + courier_code = rajaongkir_kurir.name.lower() + carrier_name = self.carrier_id.name.lower() + + # Mencoba beberapa kemungkinan format untuk pencocokan + possible_codes = [ + courier_code, + carrier_name, + carrier_name.split()[0] if ' ' in carrier_name else carrier_name + ] + + _logger.info(f"Mencari shipping option untuk kurir: {possible_codes}") + + # Coba temukan shipping option yang sesuai dengan carrier + for option in shipping_options: + option_provider = option.provider.lower() if option.provider else '' + option_name = option.name.lower() if option.name else '' + + # Cek pencocokan untuk provider atau nama + for code in possible_codes: + if code in option_provider or code in option_name: + selected_option = option + _logger.info(f"Menemukan shipping option yang cocok: {option.name}") + break + + if selected_option: + break + + # Jika tidak ada opsi yang cocok dengan carrier, gunakan opsi pertama + if not selected_option and shipping_options: + selected_option = shipping_options[0] + _logger.info(f"Menggunakan opsi pertama: {selected_option.name}") + + # Set shipping option yang terpilih + if selected_option: + self.shipping_option_id = selected_option.id + self.delivery_amt = selected_option.price # Format untuk pesan log if use_coordinate: diff --git a/indoteknik_custom/views/sale_order.xml b/indoteknik_custom/views/sale_order.xml index eabd5aba..1a0895dc 100755 --- a/indoteknik_custom/views/sale_order.xml +++ b/indoteknik_custom/views/sale_order.xml @@ -121,7 +121,7 @@ <field name="select_shipping_option" required="1"/> <field name="carrier_id" required="1" domain="[]" /> <field name="delivery_service_type" readonly="1" /> - <field name="shipping_option_id" /> + <field name="shipping_option_id"/> </field> <field name="medium_id" position="after"> <field name="date_doc_kirim" readonly="1" /> |
