add delivery/pickup toggle to checkout, rename address fields, and configure Docker container names

This commit is contained in:
Alaguraj0361 2026-04-06 20:23:41 +05:30
parent 2a98fac10d
commit 00ecad960f
2 changed files with 59 additions and 10 deletions

View File

@ -380,13 +380,43 @@
<!-- 4. UBER QUOTE RELOAD SCRIPT (Ensures fee is applied on page load) --> <!-- 4. UBER QUOTE RELOAD SCRIPT (Ensures fee is applied on page load) -->
<xpath expr="//h4" position="after"> <xpath expr="//h4" position="after">
<div id="uber_error" class="alert alert-danger d-none my-3" role="alert">
<!-- Error message will be injected here -->
</div>
<script type="text/javascript"> <script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() { document.addEventListener("DOMContentLoaded", function() {
const btn = document.querySelector('a[name="website_sale_main_button"]');
const errorDiv = document.getElementById('uber_error');
// Helper to disable button
const disableButton = () => {
if (btn) {
btn.classList.add('disabled', 'btn-secondary');
btn.classList.remove('btn-primary');
btn.style.pointerEvents = 'none';
}
};
// Helper to enable button
const enableButton = () => {
if (btn) {
btn.classList.remove('disabled', 'btn-secondary');
btn.classList.add('btn-primary');
btn.style.pointerEvents = 'auto';
}
};
// Only run if the order is for delivery // Only run if the order is for delivery
const isDelivery = "<t t-esc='order.fulfilment_type'/>" === "delivery"; const isDelivery = "<t t-esc='order.fulfilment_type'/>" === "delivery";
if (!isDelivery) return; if (!isDelivery) {
enableButton();
return;
}
// Address data for re-calculating quote if needed // For delivery, disable by default until quoted
disableButton();
// Address data for re-calculating quote
const addressData = { const addressData = {
street: "<t t-esc='order.partner_shipping_id.street'/>", street: "<t t-esc='order.partner_shipping_id.street'/>",
city: "<t t-esc='order.partner_shipping_id.city'/>", city: "<t t-esc='order.partner_shipping_id.city'/>",
@ -403,16 +433,32 @@
}) })
}).then(r => r.json()).then(data => { }).then(r => r.json()).then(data => {
if (data.result &amp;&amp; data.result.success) { if (data.result &amp;&amp; data.result.success) {
// Refresh the summary if it changed (or just refresh the page once) enableButton();
if (data.result.fee > 0) { if (errorDiv) errorDiv.classList.add('d-none');
// Normally we would just update the UI, but Odoo summary is server-side
// reload once to show the fee in the sidebar if (data.result.fee >= 0) {
if (window.location.search.indexOf('quoted=1') === -1) { // Refresh page once to show the fee in the sidebar if not already present
const hasFee = <t t-esc="any(l.product_id.name == 'Uber Delivery Fee' for l in website_sale_order.order_line) and 'true' or 'false'"/>;
if (!hasFee &amp;&amp; window.location.search.indexOf('quoted=1') === -1) {
window.location.href = window.location.pathname + '?quoted=1'; window.location.href = window.location.pathname + '?quoted=1';
} }
} }
} else {
disableButton();
if (errorDiv) {
errorDiv.innerText = (data.result &amp;&amp; data.result.error) ? data.result.error : "Uber delivery is not available for this location.";
errorDiv.classList.remove('d-none');
}
} }
}).catch(err => {
console.error("Uber Quote Fetch Error:", err);
disableButton();
}); });
} else {
if (errorDiv) {
errorDiv.innerText = "Please provide a valid street address and ZIP code for delivery.";
errorDiv.classList.remove('d-none');
}
} }
}); });
</script> </script>
@ -440,7 +486,7 @@
<xpath expr="//tr[@id='order_total_untaxed']" position="after"> <xpath expr="//tr[@id='order_total_untaxed']" position="after">
<t t-set="uber_line" t-value="website_sale_order.order_line.filtered(lambda l: l.product_id.name == 'Uber Delivery Fee')"/> <t t-set="uber_line" t-value="website_sale_order.order_line.filtered(lambda l: l.product_id.name == 'Uber Delivery Fee')"/>
<tr t-if="uber_line"> <tr t-if="uber_line">
<td class="border-0 pb-2 ps-0 pt-0 text-start text-muted" colspan="2">Delivery</td> <td class="border-0 pb-2 ps-0 pt-0 text-start text-muted" colspan="2">Uber Delivery Fee</td>
<td class="text-end border-0 pb-2 pe-0 pt-0"> <td class="text-end border-0 pb-2 pe-0 pt-0">
<span t-field="uber_line[0].price_subtotal" t-options='{"widget": "monetary", "display_currency": website_sale_order.currency_id}' class="monetary_field"/> <span t-field="uber_line[0].price_subtotal" t-options='{"widget": "monetary", "display_currency": website_sale_order.currency_id}' class="monetary_field"/>
</td> </td>

View File

@ -18,11 +18,14 @@ class SaleOrder(models.Model):
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:
fee_line.write({'price_unit': amount}) fee_line.write({
'price_unit': amount,
'name': 'Uber Delivery Fee'
})
else: else:
self.write({'order_line': [(0, 0, { self.write({'order_line': [(0, 0, {
'product_id': fee_product.id, 'product_id': fee_product.id,
'name': fee_product.name, 'name': 'Uber Delivery Fee',
'price_unit': amount, 'price_unit': amount,
'product_uom_qty': 1, 'product_uom_qty': 1,
})]}) })]})