implement delivery vs pickup toggle on checkout page with address field customization and Uber integration support
This commit is contained in:
parent
8749ca6f87
commit
67b2501fca
@ -432,6 +432,7 @@
|
|||||||
params: { address_data: addressData }
|
params: { address_data: addressData }
|
||||||
})
|
})
|
||||||
}).then(r => r.json()).then(data => {
|
}).then(r => r.json()).then(data => {
|
||||||
|
console.log("Uber Quote Result:", data.result);
|
||||||
if (data.result && data.result.success) {
|
if (data.result && data.result.success) {
|
||||||
enableButton();
|
enableButton();
|
||||||
if (errorDiv) errorDiv.classList.add('d-none');
|
if (errorDiv) errorDiv.classList.add('d-none');
|
||||||
|
|||||||
@ -1,32 +1,49 @@
|
|||||||
from odoo import models, fields, api, _
|
from odoo import models, fields, api, _
|
||||||
|
import logging
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class SaleOrder(models.Model):
|
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 as a line item if not already added or update it"""
|
||||||
|
_logger.info("Uber: Adding delivery fee %s to order %s", amount, self.name)
|
||||||
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:
|
if config and config.delivery_product_id:
|
||||||
fee_product = config.delivery_product_id
|
fee_product = config.delivery_product_id
|
||||||
# Ensure product is published so website_sale doesn't remove it from cart
|
|
||||||
if not fee_product.website_published:
|
|
||||||
fee_product.sudo().write({'website_published': True})
|
|
||||||
|
|
||||||
# Set fulfillment type on order
|
# Ensure product is published and sellable
|
||||||
|
if not fee_product.website_published or not fee_product.sale_ok:
|
||||||
|
_logger.info("Uber: Publishing and enabling sale for product %s", fee_product.name)
|
||||||
|
fee_product.sudo().write({
|
||||||
|
'website_published': True,
|
||||||
|
'sale_ok': True
|
||||||
|
})
|
||||||
|
|
||||||
|
# Set fulfillment type on order if field exists
|
||||||
if hasattr(self, 'fulfilment_type'):
|
if hasattr(self, 'fulfilment_type'):
|
||||||
self.write({'fulfilment_type': 'delivery'})
|
self.write({'fulfilment_type': 'delivery'})
|
||||||
|
|
||||||
fee_line = self.order_line.filtered(lambda l: l.product_id.id == fee_product.id)
|
fee_line = self.order_line.filtered(lambda l: l.product_id.id == fee_product.id)
|
||||||
if fee_line:
|
if fee_line:
|
||||||
|
_logger.info("Uber: Updating existing fee line %s", fee_line.id)
|
||||||
fee_line.write({
|
fee_line.write({
|
||||||
'price_unit': amount,
|
'price_unit': amount,
|
||||||
'name': 'Uber Delivery Fee'
|
'name': 'Uber Delivery Fee'
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
|
_logger.info("Uber: Creating new fee line for product %s", fee_product.id)
|
||||||
self.write({'order_line': [(0, 0, {
|
self.write({'order_line': [(0, 0, {
|
||||||
'product_id': fee_product.id,
|
'product_id': fee_product.id,
|
||||||
'name': 'Uber Delivery Fee',
|
'name': 'Uber Delivery Fee',
|
||||||
'price_unit': amount,
|
'price_unit': amount,
|
||||||
'product_uom_qty': 1,
|
'product_uom_qty': 1,
|
||||||
})]})
|
})]})
|
||||||
|
|
||||||
|
# Recalculate taxes and totals
|
||||||
|
self._amount_all()
|
||||||
|
else:
|
||||||
|
_logger.warning("Uber: Config or delivery product not found")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user