diff --git a/addons/dine360_online_orders/models/sale_order.py b/addons/dine360_online_orders/models/sale_order.py index 65bed73..0534074 100644 --- a/addons/dine360_online_orders/models/sale_order.py +++ b/addons/dine360_online_orders/models/sale_order.py @@ -61,9 +61,9 @@ class SaleOrderOnline(models.Model): def _is_shippable_order(self): """ - Treat all online orders as non-shippable for Odoo's standard validation. - This enables 'Billing-only' checkout even for delivery orders, - as we handle shipping manually via Uber fee lines. + Treat pickup, delivery and other types as non-shippable for Odoo's standard validation. + This enables 'Billing-only' checkout which is more reliable for payment providers. + The Uber delivery line is protected by our _remove_delivery_line override. """ self.ensure_one() if self.fulfilment_type in ['pickup', 'delivery', 'dine_in', 'walk_in']: @@ -73,6 +73,7 @@ class SaleOrderOnline(models.Model): def _check_carrier_quotation(self, force_carrier_id=None, **kwargs): """Allow proceeding to payment if we already have a carrier (Uber) or don't need one""" self.ensure_one() + _logger.info("Checking carrier quotation for order %s (fulfilment: %s, carrier: %s)", self.name, self.fulfilment_type, self.carrier_id.name if self.carrier_id else 'None') if self.fulfilment_type in ['pickup', 'delivery', 'dine_in', 'walk_in']: return True # If we have a carrier set by our Uber integration, trust it and skip standard re-validation @@ -80,6 +81,18 @@ class SaleOrderOnline(models.Model): return True return super()._check_carrier_quotation(force_carrier_id=force_carrier_id, **kwargs) + def _remove_delivery_line(self): + """ + Prevent Odoo from removing the delivery line if its an Uber order. + Odoo often tries to clean up delivery lines on page transitions if it + thinks the shipping method is no longer valid. + """ + self.ensure_one() + if self.carrier_id and 'Uber' in (self.carrier_id.name or ''): + _logger.info("Protecting Uber delivery line from removal on order %s", self.name) + return True + return super()._remove_delivery_line() + def _create_pos_order_for_kds(self, sale_order): """ Override from dine360_kds to also mark the POS order as an online order. diff --git a/addons/dine360_theme_chennora/views/checkout_address.xml b/addons/dine360_theme_chennora/views/checkout_address.xml index 5e6c265..8fec19b 100644 --- a/addons/dine360_theme_chennora/views/checkout_address.xml +++ b/addons/dine360_theme_chennora/views/checkout_address.xml @@ -2,17 +2,53 @@ + + +