fix: make the address appear when added
This commit is contained in:
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Shop;
|
|||||||
use App\Repositories\Shop\CustomerAddresses;
|
use App\Repositories\Shop\CustomerAddresses;
|
||||||
use App\Repositories\Shop\Customers;
|
use App\Repositories\Shop\Customers;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
class CustomerController extends Controller
|
class CustomerController extends Controller
|
||||||
{
|
{
|
||||||
@@ -56,6 +57,65 @@ class CustomerController extends Controller
|
|||||||
return redirect()->route('Shop.Customers.edit');
|
return redirect()->route('Shop.Customers.edit');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function storeAddress(Request $request)
|
||||||
|
{
|
||||||
|
if (Customers::isNotConnected()) {
|
||||||
|
return response()->json(['message' => __('Authentification requise.')], 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
$prefix = $request->input('prefix');
|
||||||
|
$types = ['deliveries' => 1, 'invoices' => 2];
|
||||||
|
|
||||||
|
if (! array_key_exists($prefix, $types)) {
|
||||||
|
return response()->json(['message' => __('Type d\'adresse inconnu.')], 422);
|
||||||
|
}
|
||||||
|
|
||||||
|
$addressData = $request->input($prefix, []);
|
||||||
|
|
||||||
|
$validator = Validator::make($addressData, [
|
||||||
|
'name' => ['nullable', 'string', 'max:150'],
|
||||||
|
'address' => ['required', 'string', 'max:255'],
|
||||||
|
'address2' => ['nullable', 'string', 'max:255'],
|
||||||
|
'zipcode' => ['required', 'string', 'max:30'],
|
||||||
|
'city' => ['required', 'string', 'max:255'],
|
||||||
|
], [
|
||||||
|
'address.required' => __('Merci de renseigner l\'adresse.'),
|
||||||
|
'zipcode.required' => __('Merci de renseigner le code postal.'),
|
||||||
|
'city.required' => __('Merci de renseigner la ville.'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => __('Merci de vérifier les informations saisies.'),
|
||||||
|
'errors' => $validator->errors(),
|
||||||
|
], 422);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $validator->validated();
|
||||||
|
$customerId = Customers::getId();
|
||||||
|
$data['customer_id'] = $customerId;
|
||||||
|
$data['type'] = $types[$prefix];
|
||||||
|
|
||||||
|
if (empty($data['name'])) {
|
||||||
|
$data['name'] = Customers::getName($customerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
$address = CustomerAddresses::store($data);
|
||||||
|
|
||||||
|
$html = view('Shop.Customers.partials.address_item', [
|
||||||
|
'address' => $address->toArray(),
|
||||||
|
'prefix' => $prefix,
|
||||||
|
'with_name' => true,
|
||||||
|
])->render();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'html' => $html,
|
||||||
|
'message' => __('Adresse enregistrée.'),
|
||||||
|
'id' => $address->id,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
public function delete_address($id)
|
public function delete_address($id)
|
||||||
{
|
{
|
||||||
$address = CustomerAddresses::get($id);
|
$address = CustomerAddresses::get($id);
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<div class="row mt-3 address-row" data-address-id="{{ $address['id'] }}">
|
||||||
|
<div class="col-1">
|
||||||
|
@php
|
||||||
|
$inputName = isset($prefix) && $prefix ? $prefix.'[address_id]' : 'address_id';
|
||||||
|
@endphp
|
||||||
|
<x-form.radios.icheck name="{{ $inputName }}" val="{{ $address['id'] }}" id="address_{{ $address['id'] }}" />
|
||||||
|
</div>
|
||||||
|
<div class="col-10">
|
||||||
|
@if ($with_name ?? false)
|
||||||
|
{{ $address['name'] ?? '' }}<br />
|
||||||
|
@endif
|
||||||
|
{{ $address['address'] }}<br />
|
||||||
|
@if (! empty($address['address2']))
|
||||||
|
{{ $address['address2'] }}<br />
|
||||||
|
@endif
|
||||||
|
{{ $address['zipcode'] }} {{ $address['city'] }}
|
||||||
|
</div>
|
||||||
|
<div class="col-1 text-right">
|
||||||
|
<a class="text-danger" href="{{ route('Shop.Customers.delete_address', ['id' => $address['id']]) }}">
|
||||||
|
<i class="fa fa-trash" data-id="{{ $address['id'] }}"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -1,26 +1,12 @@
|
|||||||
|
<div id="addresses_list_{{ $prefix }}" class="addresses-list">
|
||||||
@foreach ($addresses ?? [] as $address)
|
@foreach ($addresses ?? [] as $address)
|
||||||
<div class="row mt-3">
|
@include('Shop.Customers.partials.address_item', [
|
||||||
<div class="col-1">
|
'address' => $address,
|
||||||
<x-form.radios.icheck name="@if ($prefix ?? false) {{ $prefix }} . '[]' @endif address_id"
|
'prefix' => $prefix ?? null,
|
||||||
val="{{ $address['id'] }}" id="address_{{ $address['id'] }}" />
|
'with_name' => $with_name ?? false,
|
||||||
</div>
|
])
|
||||||
<div class="col-10">
|
|
||||||
@if ($with_name ?? false)
|
|
||||||
{{ $address['name'] }}<br />
|
|
||||||
@endif
|
|
||||||
{{ $address['address'] }}<br />
|
|
||||||
@if ($address['address2'])
|
|
||||||
{{ $address['address2'] }}<br />
|
|
||||||
@endif
|
|
||||||
{{ $address['zipcode'] }} {{ $address['city'] }}
|
|
||||||
</div>
|
|
||||||
<div class="col-1">
|
|
||||||
<a href="{{ route('Shop.Customers.delete_address', ['id' => $address['id']]) }}">
|
|
||||||
<i class="fa fa-trash" class="delete" data-id="{{ $address['id'] }}"></i>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@endforeach
|
@endforeach
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="add_address_container_{{ $prefix }}" class="green-dark d-none mb-3 mt-3">
|
<div id="add_address_container_{{ $prefix }}" class="green-dark d-none mb-3 mt-3">
|
||||||
<x-card classBody="bg-green-dark yellow" title="Nouvelle adresse" classTitle="h4">
|
<x-card classBody="bg-green-dark yellow" title="Nouvelle adresse" classTitle="h4">
|
||||||
@@ -31,6 +17,18 @@
|
|||||||
'label' => 'Adresse',
|
'label' => 'Adresse',
|
||||||
'customer' => [],
|
'customer' => [],
|
||||||
])
|
])
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-md-6 mb-2">
|
||||||
|
<x-form.button id="save_address_{{ $prefix }}" class="btn-success btn-sm btn-block"
|
||||||
|
icon="fa-save" txt="Enregistrer cette adresse"
|
||||||
|
:metadata="'data-prefix='.$prefix" />
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-2">
|
||||||
|
<x-form.button id="cancel_address_{{ $prefix }}" class="btn-outline-light btn-sm btn-block"
|
||||||
|
icon="fa-times" txt="Annuler"
|
||||||
|
:metadata="'data-prefix='.$prefix" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</x-card>
|
</x-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -43,8 +41,55 @@
|
|||||||
|
|
||||||
@push('js')
|
@push('js')
|
||||||
<script>
|
<script>
|
||||||
$('#add_address_{{ $prefix }}').click(function() {
|
(function() {
|
||||||
$('#add_address_container_{{ $prefix }}').toggleClass('d-none');
|
var prefix = '{{ $prefix }}';
|
||||||
})
|
var $formContainer = $('#add_address_container_{{ $prefix }}');
|
||||||
|
var $list = $('#addresses_list_{{ $prefix }}');
|
||||||
|
var storeUrl = '{{ route('Shop.Customers.address.store') }}';
|
||||||
|
|
||||||
|
$('#add_address_{{ $prefix }}').on('click', function() {
|
||||||
|
$formContainer.toggleClass('d-none');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#cancel_address_{{ $prefix }}').on('click', function() {
|
||||||
|
$formContainer.addClass('d-none');
|
||||||
|
$formContainer.find('input[type="text"]').val('');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#save_address_{{ $prefix }}').on('click', function() {
|
||||||
|
const data = $formContainer.find(':input').serialize();
|
||||||
|
$.ajax({
|
||||||
|
url: storeUrl,
|
||||||
|
method: 'POST',
|
||||||
|
data: data + '&prefix=' + prefix,
|
||||||
|
success: function(response) {
|
||||||
|
if (response.html) {
|
||||||
|
$list.append(response.html);
|
||||||
|
}
|
||||||
|
$formContainer.addClass('d-none');
|
||||||
|
$formContainer.find('input[type="text"]').val('');
|
||||||
|
if (response.id) {
|
||||||
|
$list.find('#address_' + response.id).prop('checked', true);
|
||||||
|
}
|
||||||
|
if (typeof initIcheck === 'function') {
|
||||||
|
initIcheck('#addresses_list_{{ $prefix }} input[type="radio"]');
|
||||||
|
}
|
||||||
|
const message = response.message || '{{ __('Adresse enregistrée.') }}';
|
||||||
|
if (typeof growl === 'function') {
|
||||||
|
growl(message, 'success');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(xhr) {
|
||||||
|
let message = '{{ __('Une erreur est survenue lors de l\'enregistrement de l\'adresse.') }}';
|
||||||
|
if (xhr.responseJSON && xhr.responseJSON.message) {
|
||||||
|
message = xhr.responseJSON.message;
|
||||||
|
}
|
||||||
|
if (typeof growl === 'function') {
|
||||||
|
growl(message, 'error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -7,5 +7,6 @@ Route::prefix('Clients')->name('Customers.')->group(function () {
|
|||||||
Route::get('edit', 'CustomerController@edit')->name('edit');
|
Route::get('edit', 'CustomerController@edit')->name('edit');
|
||||||
Route::post('storeProfileAjax', 'CustomerController@storeProfileAjax')->name('storeProfileAjax');
|
Route::post('storeProfileAjax', 'CustomerController@storeProfileAjax')->name('storeProfileAjax');
|
||||||
Route::post('store', 'CustomerController@store')->name('store');
|
Route::post('store', 'CustomerController@store')->name('store');
|
||||||
|
Route::post('address', 'CustomerController@storeAddress')->name('address.store');
|
||||||
Route::get('delete_address/{id}', 'CustomerController@delete_address')->name('delete_address');
|
Route::get('delete_address/{id}', 'CustomerController@delete_address')->name('delete_address');
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user