From 7092cf23fc3d9095f22a3cda3d3118430921a52a Mon Sep 17 00:00:00 2001 From: Ludovic CANDELLIER Date: Wed, 24 Nov 2021 20:57:12 +0100 Subject: [PATCH] Manage address and deliveries --- .../Admin/Shop/CustomerController.php | 2 +- app/Models/Shop/Customer.php | 9 +++- app/Repositories/Shop/CustomerAddresses.php | 53 +++++++++++++++++++ app/Repositories/Shop/Customers.php | 46 ++++++++++++++-- .../views/Admin/Shop/Customers/edit.blade.php | 2 +- .../views/Admin/Shop/Customers/form.blade.php | 4 +- resources/views/components/address.blade.php | 19 ++++--- 7 files changed, 118 insertions(+), 17 deletions(-) create mode 100644 app/Repositories/Shop/CustomerAddresses.php diff --git a/app/Http/Controllers/Admin/Shop/CustomerController.php b/app/Http/Controllers/Admin/Shop/CustomerController.php index f42fcb4d..d0c077a6 100644 --- a/app/Http/Controllers/Admin/Shop/CustomerController.php +++ b/app/Http/Controllers/Admin/Shop/CustomerController.php @@ -24,7 +24,7 @@ class CustomerController extends Controller public function store(Request $request) { - $ret = Customers::store($request->all()); + $ret = Customers::storeFull($request->all()); return redirect()->route('Admin.Shop.Customers.index'); } diff --git a/app/Models/Shop/Customer.php b/app/Models/Shop/Customer.php index b8096fa4..715fa700 100644 --- a/app/Models/Shop/Customer.php +++ b/app/Models/Shop/Customer.php @@ -14,7 +14,7 @@ class Customer extends Model return $this->hasMany(CustomerAddress::class); } - public function Invoices() + public function invoices() { return $this->hasMany(Invoice::class); } @@ -25,11 +25,16 @@ class Customer extends Model } public function deliveries() + { + return $this->belongsToMany(Delivery::class); + } + + public function deliveries2() { return $this->hasManyThrough(Delivery::class, CustomerDelivery::class); } - public function Orders() + public function orders() { return $this->hasMany(Order::class); } diff --git a/app/Repositories/Shop/CustomerAddresses.php b/app/Repositories/Shop/CustomerAddresses.php new file mode 100644 index 00000000..8e32f501 --- /dev/null +++ b/app/Repositories/Shop/CustomerAddresses.php @@ -0,0 +1,53 @@ +get()->pluck('name', 'id')->toArray(); + } + + public static function getAll() + { + return CustomerAddress::orderBy('name', 'asc')->get(); + } + + public static function get($id) + { + return CustomerAddress::find($id); + } + + public static function store($data) + { + $id = $data['id'] ?? false; + $item = $id ? self::update($data, $id) : self::create($data); + return $item->id; + } + + public static function create($data) + { + return CustomerAddress::create($data); + } + + public static function update($data, $id = false) + { + $id = $id ? $id : $data['id']; + $delivery = self::get($id); + $delivery->update($data); + return $delivery; + } + + public static function destroy($id) + { + return CustomerAddress::destroy($id); + } + + public static function toggle_active($id, $active) + { + return self::update(['active' => $active], $id); + } +} diff --git a/app/Repositories/Shop/Customers.php b/app/Repositories/Shop/Customers.php index 8ed22164..686b2480 100644 --- a/app/Repositories/Shop/Customers.php +++ b/app/Repositories/Shop/Customers.php @@ -26,13 +26,51 @@ class Customers return Customer::find($id); } + public static function storeFull($data) + { + dump($data); + exit; + + $deliveries = $data['deliveries']; + $addresses = $data['addresses']; + unset($data['deliveries']); + unset($data['addresses']); + dump($data); + exit; + $customer = self::store($data); + self::storeDeliveries($customer, $deliveries); + self::storeAddresses($customer, $addresses); + return $customer->id; + } + public static function store($data) { - $id = isset($data['id']) ? $data['id'] : false; + $id = $data['id'] ?? false; $item = $id ? self::update($data, $id) : self::create($data); return $item->id; } + public static function storeDeliveries($customer, $deliveries) + { + if ($deliveries) { + $deliveries = collect($deliveries)->transform( + function ($item, $key) { + return (int) $item; + } + )->toArray(); + return $customer->deliveries()->sync($deliveries); + } else { + return false; + } + } + + public static function storeAddresses($customer, $addresses) + { + foreach ($addresses as $address) { + CustomerAddresses::store($address); + } + } + public static function create($data) { return Customer::create($data); @@ -40,8 +78,10 @@ class Customers public static function update($data, $id = false) { - $id = isset($data['id']) ? $data['id'] : false; - return Customer::find($id)->update($data); + $id = $id ? $id : $data['id']; + $customer = self::get($id); + $customer->update($data); + return $customer; } public static function destroy($id) diff --git a/resources/views/Admin/Shop/Customers/edit.blade.php b/resources/views/Admin/Shop/Customers/edit.blade.php index 7d446c41..98cbf194 100644 --- a/resources/views/Admin/Shop/Customers/edit.blade.php +++ b/resources/views/Admin/Shop/Customers/edit.blade.php @@ -6,7 +6,7 @@ @section('content') - {{ Form::open(['route' => 'Admin.Shop.Customers.update', 'id' => 'customer-form', 'autocomplete' => 'off']) }} + {{ Form::open(['route' => 'Admin.Shop.Customers.store', 'id' => 'customer-form', 'autocomplete' => 'off']) }} @include('Admin.Shop.Customers.form') diff --git a/resources/views/Admin/Shop/Customers/form.blade.php b/resources/views/Admin/Shop/Customers/form.blade.php index 73456fb0..d4562d76 100644 --- a/resources/views/Admin/Shop/Customers/form.blade.php +++ b/resources/views/Admin/Shop/Customers/form.blade.php @@ -17,10 +17,10 @@
{{ Form::label('sale_delivery_id', __('shop.deliveries.name')) }} - @include('components.form.select', ['name' => 'sale_delivery_id', 'list' => $deliveries ?? [], 'values' => $customer['deliveries'] ?? null, 'with_empty' => '', 'class' => 'select2', 'multiple' => true]) + @include('components.form.select', ['name' => 'deliveries[]', 'list' => $deliveries ?? [], 'values' => $customer['deliveries'] ?? null, 'with_empty' => '', 'class' => 'select2', 'multiple' => true])
- @include('components.address', ['with_country' => false]) + @include('components.address', ['with_country' => false, 'prefix' => 'addresses[0]', 'with_tab' => true]) diff --git a/resources/views/components/address.blade.php b/resources/views/components/address.blade.php index 606f25ab..fa218894 100644 --- a/resources/views/components/address.blade.php +++ b/resources/views/components/address.blade.php @@ -16,38 +16,41 @@ {{ $item[($prefix ?? null) . 'state'] ?? null }} @endif @if ($item[($prefix ?? null) . 'country_id']) - {{ $countries[$third_party['country_id']] ?? null }}
+ {{ $countries[$item[($prefix ?? null) . 'country_id']] ?? null }}
@endif @else + @if ($with_id ?? false) + + @endif

- @include('components.form.input', ['name' => ($prefix ?? null) . 'address', 'value' => $item[($prefix ?? null) . 'address'] ?? null, 'disabled' => $disabled ?? false ]) + @include('components.form.input', ['name' => ($prefix ?? null) . (($with_tab ?? false) ? '[address]' : 'address'), 'value' => $item[($prefix ?? null) . 'address'] ?? null, 'disabled' => $disabled ?? false ])
-
- @include('components.form.input', ['name' => ($prefix ?? null) . 'address2', 'value' => $item[($prefix ?? null) . 'address2'] ?? null, 'disabled' => $disabled ?? false ]) +
+ @include('components.form.input', ['name' => ($prefix ?? null) . (($with_tab ?? false) ? '[address2]' : 'address2'), 'value' => $item[($prefix ?? null) . 'address2'] ?? null, 'disabled' => $disabled ?? false ])

- @include('components.form.input', ['name' => ($prefix ?? null) . 'zipcode', 'value' => $item[($prefix ?? null) . 'zipcode'] ?? null, 'disabled' => $disabled ?? false ]) + @include('components.form.input', ['name' => ($prefix ?? null) . (($with_tab ?? false) ? '[zipcode]' : 'zipcode'), 'value' => $item[($prefix ?? null) . 'zipcode'] ?? null, 'disabled' => $disabled ?? false ])

- @include('components.form.input', ['name' => ($prefix ?? null) . 'city', 'value' => $item[($prefix ?? null) . 'city'] ?? null, 'disabled' => $disabled ?? false ]) + @include('components.form.input', ['name' => ($prefix ?? null) . (($with_tab ?? false) ? '[city]' : 'city'), 'value' => $item[($prefix ?? null) . 'city'] ?? null, 'disabled' => $disabled ?? false ])
@if ($with_country ?? true)

- @include('components.form.select', ['name' => ($prefix ?? null) . 'country_id', 'list' => $countries ?? null, 'value' => $item[($prefix ?? null) . 'country_id'] ?? null, 'with_empty' => '', 'required' => true, 'disabled' => $disabled ?? false ]) + @include('components.form.select', ['name' => ($prefix ?? null) . (($with_tab ?? false) ? '[country_id]' : 'country_id'), 'list' => $countries ?? null, 'value' => $item[($prefix ?? null) . 'country_id'] ?? null, 'with_empty' => '', 'required' => true, 'disabled' => $disabled ?? false ])

- @include('components.form.input', ['name' => ($prefix ?? null) . 'state', 'value' => $item[($prefix ?? null) . 'state'] ?? null, 'disabled' => $disabled ?? false ]) + @include('components.form.input', ['name' => ($prefix ?? null) . (($with_tab ?? false) ? '[state]' : 'state'), 'value' => $item[($prefix ?? null) . 'state'] ?? null, 'disabled' => $disabled ?? false ])
@endif