chg: use rich address partial in checkout with add/delete support
Replaces the simple address radio list in the checkout page with the richer ``Shop.Customers.partials.addresses`` partial already used on the profile edit page. Customers can now choose among existing addresses, add a new one on-the-fly, or delete an address directly from the checkout flow.
This commit is contained in:
@@ -245,6 +245,7 @@ class CustomerController extends Controller
|
|||||||
$html = view('Shop.Customers.partials.address_item', [
|
$html = view('Shop.Customers.partials.address_item', [
|
||||||
'address' => $address->toArray(),
|
'address' => $address->toArray(),
|
||||||
'prefix' => $prefix,
|
'prefix' => $prefix,
|
||||||
|
'inputName' => $request->input('input_name'),
|
||||||
'with_name' => true,
|
'with_name' => true,
|
||||||
'selected' => $address->id,
|
'selected' => $address->id,
|
||||||
])->render();
|
])->render();
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use App\Repositories\Core\User\ShopCart;
|
|||||||
use App\Repositories\Shop\Baskets;
|
use App\Repositories\Shop\Baskets;
|
||||||
use App\Repositories\Shop\Contents;
|
use App\Repositories\Shop\Contents;
|
||||||
use App\Repositories\Shop\Customers;
|
use App\Repositories\Shop\Customers;
|
||||||
|
use App\Repositories\Shop\CustomerAddresses;
|
||||||
use App\Repositories\Shop\Deliveries;
|
use App\Repositories\Shop\Deliveries;
|
||||||
use App\Repositories\Shop\DeliveryTypes;
|
use App\Repositories\Shop\DeliveryTypes;
|
||||||
use App\Repositories\Shop\OrderMails;
|
use App\Repositories\Shop\OrderMails;
|
||||||
@@ -57,8 +58,21 @@ class OrderController extends Controller
|
|||||||
$deliveries = $deliveries ? $deliveries->values() : collect();
|
$deliveries = $deliveries ? $deliveries->values() : collect();
|
||||||
|
|
||||||
$customerData = $customer ? $customer->toArray() : false;
|
$customerData = $customer ? $customer->toArray() : false;
|
||||||
if ($customerData && $defaultSaleChannelId) {
|
if ($customerData) {
|
||||||
$customerData['default_sale_channel_id'] = $defaultSaleChannelId;
|
$customerData['delivery_address_id'] = optional(CustomerAddresses::getDeliveryAddress($customerId))->id;
|
||||||
|
$customerData['invoice_address_id'] = optional(CustomerAddresses::getInvoiceAddress($customerId))->id;
|
||||||
|
|
||||||
|
if (! $customerData['delivery_address_id'] && ! empty($customerData['delivery_addresses'])) {
|
||||||
|
$customerData['delivery_address_id'] = $customerData['delivery_addresses'][0]['id'] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $customerData['invoice_address_id'] && ! empty($customerData['invoice_addresses'])) {
|
||||||
|
$customerData['invoice_address_id'] = $customerData['invoice_addresses'][0]['id'] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($defaultSaleChannelId) {
|
||||||
|
$customerData['default_sale_channel_id'] = $defaultSaleChannelId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<div class="row mt-3 address-row" data-address-id="{{ $address['id'] }}">
|
<div class="row mt-3 address-row" data-address-id="{{ $address['id'] }}">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
@php
|
@php
|
||||||
$inputName = isset($prefix) && $prefix ? $prefix.'[address_id]' : 'address_id';
|
$inputName = $inputName ?? (isset($prefix) && $prefix ? $prefix.'[address_id]' : 'address_id');
|
||||||
$currentValue = $selected ?? null;
|
$currentValue = $selected ?? null;
|
||||||
@endphp
|
@endphp
|
||||||
<x-form.radios.icheck name="{{ $inputName }}" val="{{ $address['id'] }}"
|
<x-form.radios.icheck name="{{ $inputName }}" val="{{ $address['id'] }}"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
@include('Shop.Customers.partials.address_item', [
|
@include('Shop.Customers.partials.address_item', [
|
||||||
'address' => $address,
|
'address' => $address,
|
||||||
'prefix' => $prefix ?? null,
|
'prefix' => $prefix ?? null,
|
||||||
|
'inputName' => $inputName ?? null,
|
||||||
'with_name' => $with_name ?? false,
|
'with_name' => $with_name ?? false,
|
||||||
'selected' => $selected ?? null,
|
'selected' => $selected ?? null,
|
||||||
])
|
])
|
||||||
@@ -44,6 +45,7 @@
|
|||||||
<script>
|
<script>
|
||||||
(function() {
|
(function() {
|
||||||
var prefix = '{{ $prefix }}';
|
var prefix = '{{ $prefix }}';
|
||||||
|
var inputName = '{{ $inputName ?? '' }}';
|
||||||
var $formContainer = $('#add_address_container_{{ $prefix }}');
|
var $formContainer = $('#add_address_container_{{ $prefix }}');
|
||||||
var $list = $('#addresses_list_{{ $prefix }}');
|
var $list = $('#addresses_list_{{ $prefix }}');
|
||||||
var storeUrl = '{{ route('Shop.Customers.address.store') }}';
|
var storeUrl = '{{ route('Shop.Customers.address.store') }}';
|
||||||
@@ -69,7 +71,7 @@
|
|||||||
$.ajax({
|
$.ajax({
|
||||||
url: storeUrl,
|
url: storeUrl,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: data + '&prefix=' + prefix,
|
data: data + '&prefix=' + prefix + (inputName ? '&input_name=' + inputName : ''),
|
||||||
success: function(response) {
|
success: function(response) {
|
||||||
if (response.html) {
|
if (response.html) {
|
||||||
$list.append(response.html);
|
$list.append(response.html);
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
<div id="registred">
|
<div id="registred">
|
||||||
<x-layout.collapse id="invoice_addresses" title="Adresse de facturation" class="rounded-lg mb-3" uncollapsed=true>
|
<x-layout.collapse id="invoice_addresses" title="Adresse de facturation" class="rounded-lg mb-3" uncollapsed=true>
|
||||||
@include('Shop.Orders.partials.addresses', [
|
@include('Shop.Customers.partials.addresses', [
|
||||||
'addresses' => $customer['invoice_addresses'] ?? false,
|
'addresses' => $customer['invoice_addresses'] ?? [],
|
||||||
'prefix' => 'invoice',
|
'prefix' => 'invoices',
|
||||||
'name' => 'invoice[invoice_address_id]',
|
'inputName' => 'invoice[invoice_address_id]',
|
||||||
|
'with_name' => true,
|
||||||
|
'selected' => $customer['invoice_address_id'] ?? null,
|
||||||
])
|
])
|
||||||
</x-layout.collapse>
|
</x-layout.collapse>
|
||||||
|
|
||||||
@@ -13,10 +15,12 @@
|
|||||||
|
|
||||||
<x-layout.collapse id="delivery_addresses" title="Adresse de livraison" class="rounded-lg mb-3 d-none"
|
<x-layout.collapse id="delivery_addresses" title="Adresse de livraison" class="rounded-lg mb-3 d-none"
|
||||||
uncollapsed=true>
|
uncollapsed=true>
|
||||||
@include('Shop.Orders.partials.addresses', [
|
@include('Shop.Customers.partials.addresses', [
|
||||||
'addresses' => $customer['delivery_addresses'] ?? false,
|
'addresses' => $customer['delivery_addresses'] ?? [],
|
||||||
'prefix' => 'delivery',
|
'prefix' => 'deliveries',
|
||||||
'name' => 'delivery_address_id',
|
'inputName' => 'delivery_address_id',
|
||||||
|
'with_name' => true,
|
||||||
|
'selected' => $customer['delivery_address_id'] ?? null,
|
||||||
])
|
])
|
||||||
@include('Shop.Orders.partials.shipping')
|
@include('Shop.Orders.partials.shipping')
|
||||||
</x-layout.collapse>
|
</x-layout.collapse>
|
||||||
|
|||||||
Reference in New Issue
Block a user