implement Uber delivery fee integration in sale orders and update docker-compose container naming conventions

This commit is contained in:
Alaguraj0361 2026-04-08 12:44:47 +05:30
parent ed6e69e191
commit 132727a5bf

View File

@ -7,52 +7,48 @@ class SaleOrder(models.Model):
_inherit = 'sale.order' _inherit = 'sale.order'
def _add_uber_delivery_fee(self, amount): def _add_uber_delivery_fee(self, amount):
"""Add the delivery fee as a line item if not already added or update it""" """Add the delivery fee using Odoo's standard delivery system to satisfy checkout validation"""
_logger.info("Uber: Adding delivery fee %s to order %s", amount, self.name) _logger.info("Uber: Syncing delivery fee %s to order %s", amount, self.name)
# 1. Ensure fulfillment type is set
if hasattr(self, 'fulfilment_type'):
self.write({'fulfilment_type': 'delivery'})
# 2. Find or Create the Uber Delivery carrier
Carrier = self.env['delivery.carrier'].sudo()
config = self.env['uber.config'].sudo().search([('active', '=', True)], limit=1) config = self.env['uber.config'].sudo().search([('active', '=', True)], limit=1)
if config and config.delivery_product_id:
fee_product = config.delivery_product_id
# Ensure product is published and sellable carrier = Carrier.search([('name', 'ilike', 'Uber')], limit=1)
if not fee_product.website_published or not fee_product.sale_ok: if not carrier:
_logger.info("Uber: Publishing and enabling sale for product %s", fee_product.name) # Fallback to any active carrier if no Uber one exists
fee_product.sudo().write({ carrier = Carrier.search([('active', '=', True)], limit=1)
'website_published': True,
'sale_ok': True if not carrier and config and config.delivery_product_id:
# Create a basic Uber carrier if strictly needed
carrier = Carrier.create({
'name': 'Uber Delivery',
'delivery_type': 'fixed',
'product_id': config.delivery_product_id.id,
'website_published': True,
})
if carrier:
# 3. Use Odoo's standard method to set delivery
# This satisfies the requirement for website_sale's 'No shipping method' check
_logger.info("Uber: Setting carrier %s with fee %s", carrier.name, amount)
self.sudo().set_delivery_line(carrier, amount)
# Force the price again in case set_delivery_line used its own price
delivery_line = self.order_line.filtered(lambda l: l.is_delivery)
if delivery_line:
delivery_line.write({
'price_unit': amount,
'name': 'Uber Delivery Fee (Distance Based)'
}) })
# Set fulfillment type on order if field exists self.write({'carrier_id': carrier.id})
if hasattr(self, 'fulfilment_type'):
self.write({'fulfilment_type': 'delivery'})
fee_line = self.order_line.filtered(lambda l: l.product_id.id == fee_product.id)
if fee_line:
_logger.info("Uber: Updating existing fee line %s", fee_line.id)
fee_line.write({
'price_unit': amount,
'name': 'Uber Delivery Fee'
})
else:
_logger.info("Uber: Creating new fee line for product %s", fee_product.id)
self.write({'order_line': [(0, 0, {
'product_id': fee_product.id,
'name': 'Uber Delivery Fee',
'price_unit': amount,
'product_uom_qty': 1,
})]})
# Satisfy Odoo's shipping requirement by setting a carrier if none is set
if not self.carrier_id:
Carrier = self.env['delivery.carrier'].sudo()
# Try to find an 'Uber' carrier first, then fall back to any active one
carrier = Carrier.search([('name', 'ilike', 'uber')], limit=1) or Carrier.search([], limit=1)
if carrier:
_logger.info("Uber: Linking order to carrier %s", carrier.name)
self.write({'carrier_id': carrier.id})
# Recalculate taxes and totals
self._amount_all() self._amount_all()
else: else:
_logger.warning("Uber: Config or delivery product not found") _logger.warning("Uber: No delivery carrier found to apply fee")
return True return True