fix: make delivery option on checkout stick to the current sale channel
This commit is contained in:
@@ -49,12 +49,22 @@ class OrderController extends Controller
|
|||||||
{
|
{
|
||||||
if (ShopCart::count()) {
|
if (ShopCart::count()) {
|
||||||
$customer = Customers::getWithAddresses();
|
$customer = Customers::getWithAddresses();
|
||||||
$deliveries = Deliveries::getByCustomer();
|
$customerId = $customer ? $customer->id : false;
|
||||||
|
$defaultSaleChannelId = SaleChannels::getDefaultID($customerId);
|
||||||
|
$deliveries = $defaultSaleChannelId
|
||||||
|
? Deliveries::getBySaleChannels([$defaultSaleChannelId])
|
||||||
|
: Deliveries::getByCustomer($customerId);
|
||||||
|
$deliveries = $deliveries ? $deliveries->values() : collect();
|
||||||
|
|
||||||
|
$customerData = $customer ? $customer->toArray() : false;
|
||||||
|
if ($customerData && $defaultSaleChannelId) {
|
||||||
|
$customerData['default_sale_channel_id'] = $defaultSaleChannelId;
|
||||||
|
}
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'customer' => $customer ? $customer->toArray() : false,
|
'customer' => $customerData,
|
||||||
'basket' => Baskets::getBasketTotal(),
|
'basket' => Baskets::getBasketTotal(),
|
||||||
'deliveries' => $deliveries ? $deliveries->toArray() : [],
|
'deliveries' => $deliveries->toArray(),
|
||||||
'delivery_types' => DeliveryTypes::getWithPrice(Baskets::getWeight()),
|
'delivery_types' => DeliveryTypes::getWithPrice(Baskets::getWeight()),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,51 @@
|
|||||||
|
@php
|
||||||
|
$addresses = collect($addresses ?? []);
|
||||||
|
$preselectedAddressId = old($name);
|
||||||
|
|
||||||
|
if ($preselectedAddressId === null && is_string($name) && str_contains($name, '[')) {
|
||||||
|
$dotName = preg_replace('/\[(.*?)\]/', '.$1', $name);
|
||||||
|
$dotName = trim($dotName, '.');
|
||||||
|
$preselectedAddressId = $dotName ? old($dotName) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($preselectedAddressId === null || $preselectedAddressId === '') && $addresses->isNotEmpty()) {
|
||||||
|
$defaultAddress = $addresses->firstWhere('priority', 1);
|
||||||
|
|
||||||
|
if (! $defaultAddress) {
|
||||||
|
$defaultAddress = $addresses
|
||||||
|
->filter(function ($address) {
|
||||||
|
return (int) ($address['priority'] ?? 0) > 0;
|
||||||
|
})
|
||||||
|
->sortByDesc(function ($address) {
|
||||||
|
return (int) ($address['priority'] ?? 0);
|
||||||
|
})
|
||||||
|
->first();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $defaultAddress) {
|
||||||
|
$defaultAddress = $addresses->firstWhere('is_default', true)
|
||||||
|
?? $addresses->firstWhere('default', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $defaultAddress) {
|
||||||
|
$defaultAddress = $addresses->first();
|
||||||
|
}
|
||||||
|
|
||||||
|
$preselectedAddressId = $defaultAddress['id'] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$addresses = $addresses->all();
|
||||||
|
@endphp
|
||||||
|
|
||||||
@if ($addresses)
|
@if ($addresses)
|
||||||
@foreach ($addresses ?? [] as $address)
|
@foreach ($addresses as $address)
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
@include('components.form.radios.icheck', [
|
@include('components.form.radios.icheck', [
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
'val' => $address['id'],
|
'val' => $address['id'],
|
||||||
'id' => $prefix . '_address_' . $address['id'],
|
'id' => $prefix . '_address_' . $address['id'],
|
||||||
'value' =>
|
'value' => $preselectedAddressId,
|
||||||
old($name) ?? $address['priority'] || count($addresses) === 1 ? $address['id'] : false,
|
|
||||||
])
|
])
|
||||||
</div>
|
</div>
|
||||||
<div class="col-11">
|
<div class="col-11">
|
||||||
|
|||||||
@@ -39,16 +39,29 @@ ci-contre
|
|||||||
@push('js')
|
@push('js')
|
||||||
<script>
|
<script>
|
||||||
function handleDeliveries() {
|
function handleDeliveries() {
|
||||||
$('#delivery_mode input.delivery_mode').change(function() {
|
var $deliveryInputs = $('#delivery_mode input.delivery_mode');
|
||||||
if ($(this).hasClass('at_house')) {
|
|
||||||
|
$deliveryInputs.change(function() {
|
||||||
|
var $currentDelivery = $(this);
|
||||||
|
var deliveryTypeId = $('input[name=delivery_type_id]:checked').val();
|
||||||
|
|
||||||
|
if ($currentDelivery.hasClass('at_house')) {
|
||||||
$('#delivery_addresses').closest('.card').removeClass('d-none');
|
$('#delivery_addresses').closest('.card').removeClass('d-none');
|
||||||
var deliveryTypeId = $('input[name=delivery_type_id]:checked').val()
|
|
||||||
} else {
|
} else {
|
||||||
$('#delivery_addresses').closest('.card').addClass('d-none');
|
$('#delivery_addresses').closest('.card').addClass('d-none');
|
||||||
}
|
}
|
||||||
var deliveryId = $(this).val();
|
|
||||||
|
var deliveryId = $currentDelivery.val();
|
||||||
refreshBasketTotal(deliveryId, deliveryTypeId);
|
refreshBasketTotal(deliveryId, deliveryTypeId);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var $preselected = $deliveryInputs.filter(':checked').first();
|
||||||
|
|
||||||
|
if ($preselected.length) {
|
||||||
|
$preselected.trigger('change');
|
||||||
|
} else {
|
||||||
|
$('#delivery_addresses').closest('.card').addClass('d-none');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleDeliveries();
|
handleDeliveries();
|
||||||
|
|||||||
Reference in New Issue
Block a user