add container naming to docker-compose and implement custom checkout address UI with delivery/pickup selection

This commit is contained in:
Alaguraj0361 2026-04-08 10:04:26 +05:30
parent 81838e6bc1
commit 798a7839e5
2 changed files with 69 additions and 29 deletions

View File

@ -56,6 +56,11 @@
.active-mark { display: none; position: absolute; top: 10px; right: 10px; color: #00A67E; }
.order-type-card.active .active-mark { display: block; }
.section-header { font-weight: bold; margin: 30px 0 15px 0; padding-bottom: 8px; border-bottom: 2px solid #f8f9fa; font-size: 1.1rem; }
.animated { animation-duration: 0.5s; animation-fill-mode: both; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
.fadeIn { animation-name: fadeIn; }
#uber_message strong { display: block; margin-bottom: 4px; }
</style>
<div class="row mb-4 g-3 mt-1">
@ -102,6 +107,7 @@
const hiddenType = document.getElementById('hidden_fulfilment_type');
const msgDiv = document.getElementById('uber_message');
const submitBtn = document.querySelector('button[type="submit"]') || document.querySelector('.btn-primary');
let debounceTimer;
function getAddressContainers() {
const addressNames = ['street', 'street2', 'city', 'zip', 'country_id', 'state_id'];
@ -147,36 +153,65 @@
};
function checkUber() {
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => {
if (hiddenType.value !== 'delivery') return;
const street = document.querySelector('input[name="street"]')?.value;
const zip = document.querySelector('input[name="zip"]')?.value;
if (!street || !zip) return;
if (!street || !zip) {
if (msgDiv) msgDiv.style.display = 'none';
return;
}
if (msgDiv) {
msgDiv.className = 'alert alert-info my-3';
msgDiv.style.display = '';
msgDiv.innerText = "Checking Uber coverage...";
}
fetch('/shop/uber/quote', {
method: 'POST', headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ params: { address_data: {
street: street,
street2: document.querySelector('input[name="street2"]')?.value,
city: document.querySelector('input[name="city"]')?.value,
zip: zip,
country: document.querySelector('select[name="country_id"] option:checked')?.text || 'Canada'
country: document.querySelector('select[name="country_id"] option:checked')?.text || 'Canada',
state: document.querySelector('select[name="state_id"] option:checked')?.text
} } })
}).then(r => r.json()).then(data => {
msgDiv.classList.remove('fadeIn');
void msgDiv.offsetWidth; // Trigger reflow for animation
msgDiv.classList.add('fadeIn');
if (data.result &amp;&amp; data.result.success) {
msgDiv.className = 'alert alert-success my-3';
msgDiv.className = 'alert alert-success my-3 animated fadeIn';
msgDiv.style.display = '';
msgDiv.innerText = "✓ Covered! Delivery charge: " + data.result.fee + "$";
msgDiv.innerHTML = `<strong>✓ Delivery Available!</strong>Uber Delivery Fee: $${data.result.fee} (Distance Based)`;
if (submitBtn) submitBtn.disabled = false;
} else {
msgDiv.className = 'alert alert-danger my-3';
msgDiv.className = 'alert alert-danger my-3 animated fadeIn';
msgDiv.style.display = '';
msgDiv.innerText = "✕ Not covered: " + (data.result?.error || "Distance too far.");
msgDiv.innerHTML = `<strong>✕ Delivery Unavailable</strong>${data.result?.error || "Distance too far for Uber Direct."}`;
if (submitBtn) submitBtn.disabled = true;
}
}).catch(err => {
console.error("Uber API Error:", err);
msgDiv.className = 'alert alert-warning my-3';
msgDiv.innerText = "Error connecting to Uber service.";
});
}, 500); // 500ms debounce
}
const triggers = document.querySelectorAll('input[name="street"], input[name="zip"]');
triggers.forEach(t => t.addEventListener('blur', checkUber));
// Trigger on any address field change
const addressFields = 'input[name="street"], input[name="street2"], input[name="city"], input[name="zip"], select[name="country_id"], select[name="state_id"]';
const triggers = document.querySelectorAll(addressFields);
triggers.forEach(t => {
t.addEventListener('blur', checkUber);
t.addEventListener('change', checkUber);
});
setOrderType('delivery');
}
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', initUnifiedForm); else initUnifiedForm();

View File

@ -49,8 +49,13 @@ class UberDeliveryController(http.Controller):
company = request.website.company_id
pickup_address = f"{company.street}, {company.city}, {company.zip}, {company.country_id.name}"
# User entered address
dropoff_address = f"{address_data.get('street')}, {address_data.get('city')}, {address_data.get('zip')}, {address_data.get('country')}"
# User entered address - building comprehensive string for Uber Direct
street = address_data.get('street', '')
street2 = address_data.get('street2', '')
full_street = f"{street}, {street2}" if street2 else street
dropoff_address = f"{full_street}, {address_data.get('city', '')}, {address_data.get('state', '')}, {address_data.get('zip', '')}, {address_data.get('country', 'Canada')}"
result = config.get_uber_quote(pickup_address, dropoff_address)