From 4c6f9b3b618d2f323d1305d931b981dc4255e5ca Mon Sep 17 00:00:00 2001 From: ludo Date: Sun, 4 Feb 2024 02:51:38 +0100 Subject: [PATCH] add datatbles for invoices, add pdf icon, refactor icons components, add autocomplete on search, adapt searching to meilisearch --- app/Datatables/ParentDataTable.php | 24 ++++-- .../Shop/CustomerInvoicesDataTable.php | 80 +++++++++++++++++++ .../Shop/CustomerOrdersDataTable.php | 17 ++-- app/Http/Controllers/Shop/Controller.php | 4 + .../Controllers/Shop/CustomerController.php | 17 ++-- .../Controllers/Shop/InvoiceController.php | 15 ++-- app/Http/Controllers/Shop/OrderController.php | 6 +- .../Controllers/Shop/SearchController.php | 5 +- app/Http/Kernel.php | 1 + app/Http/Middleware/CheckAuth.php | 19 +++++ app/Models/Shop/Article.php | 9 ++- app/Models/Shop/Invoice.php | 5 ++ app/Repositories/Shop/Articles.php | 22 ++--- app/Repositories/Shop/Customers.php | 4 +- app/Repositories/Shop/Invoices.php | 43 ++++++---- app/Repositories/Shop/Orders.php | 30 +++---- app/Repositories/Shop/Searches.php | 6 +- config/scout.php | 4 +- .../Customers/partials/invoices.blade.php | 28 ------- .../Shop/Customers/partials/sale.blade.php | 26 ++++-- .../Shop/Invoices/partials/filters.blade.php | 2 + .../Shop/Invoices/partials/list.blade.php | 26 ++++++ resources/views/Shop/Invoices/view.blade.php | 60 ++++++++++++++ .../views/Shop/Orders/partials/list.blade.php | 33 ++++---- resources/views/Shop/layout/layout.blade.php | 60 +++++++------- .../Shop/layout/partials/header-nav.blade.php | 4 +- .../Shop/layout/partials/search.blade.php | 36 +++++---- .../components/form/autocomplete.blade.php | 4 +- .../views/components/form/button.blade.php | 21 +++-- .../components/form/buttons/add.blade.php | 5 ++ .../components/form/buttons/cancel.blade.php | 17 ++++ .../components/form/buttons/delete.blade.php | 6 ++ .../components/form/buttons/edit.blade.php | 5 ++ .../components/form/buttons/save.blade.php | 6 ++ .../components/form/buttons/show.blade.php | 5 ++ .../components/form/buttons/submit.blade.php | 8 ++ .../views/load/form/autocomplete.blade.php | 46 ++++++----- routes/Shop/Customers.php | 2 +- routes/Shop/Invoices.php | 3 +- 39 files changed, 503 insertions(+), 211 deletions(-) create mode 100644 app/Datatables/Shop/CustomerInvoicesDataTable.php create mode 100644 app/Http/Middleware/CheckAuth.php delete mode 100644 resources/views/Shop/Customers/partials/invoices.blade.php create mode 100644 resources/views/Shop/Invoices/partials/filters.blade.php create mode 100644 resources/views/Shop/Invoices/partials/list.blade.php create mode 100644 resources/views/Shop/Invoices/view.blade.php create mode 100644 resources/views/components/form/buttons/add.blade.php create mode 100644 resources/views/components/form/buttons/cancel.blade.php create mode 100644 resources/views/components/form/buttons/delete.blade.php create mode 100644 resources/views/components/form/buttons/edit.blade.php create mode 100644 resources/views/components/form/buttons/save.blade.php create mode 100644 resources/views/components/form/buttons/show.blade.php create mode 100644 resources/views/components/form/buttons/submit.blade.php diff --git a/app/Datatables/ParentDataTable.php b/app/Datatables/ParentDataTable.php index 02e52e66..87ff6c28 100644 --- a/app/Datatables/ParentDataTable.php +++ b/app/Datatables/ParentDataTable.php @@ -50,19 +50,31 @@ class ParentDataTable extends DataTable return self::getButtonEdit().self::getButtonDel(); } - public function getButtonEdit() + public function getButtonEdit($field = 'id', $title = 'Modifier') { - return ''; + return view('components.form.buttons.edit', [ + 'dataId' => '{{$'.$field.'}}', + 'class' => 'btn-sm mr-2', + 'title' => $title, + ]); } - public function getButtonShow() + public function getButtonShow($field = 'id', $title = 'Voir') { - return ''; + return view('components.form.buttons.show', [ + 'dataId' => '{{$'.$field.'}}', + 'class' => 'btn-sm mr-2', + 'title' => $title, + ]); } - public function getButtonDel() + public function getButtonDel($field ='id', $title = 'Effacer') { - return ''; + return view('components.form.buttons.delete', [ + 'dataId' => '{{$'.$field.'}}', + 'class' => 'btn-sm mr-2', + 'title' => $title, + ]); } public function makeColumnButtons() diff --git a/app/Datatables/Shop/CustomerInvoicesDataTable.php b/app/Datatables/Shop/CustomerInvoicesDataTable.php new file mode 100644 index 00000000..4b5768da --- /dev/null +++ b/app/Datatables/Shop/CustomerInvoicesDataTable.php @@ -0,0 +1,80 @@ +url = route('Shop.Invoices.index'); + } + + public function query(Invoice $model) + { + $customerId = Auth::id(); + $model = $model->byCustomer($customerId)->with(['address']); + + return $this->buildQuery($model); + } + + public function getHtmlButtons() + { + $buttons = view('components.form.button', [ + 'dataId' => '{{$uuid}}', + 'class' => 'btn-sm btn-secondary btn-invoice mr-2', + 'icon' => 'fa-file-pdf', + 'title' => 'Télécharger la facture', + 'url' => route('Shop.Invoices.pdf') . '/{{$uuid}}', + ]); + + $buttons .= self::getButtonShow('uuid', 'Voir la facture'); + + return $buttons; + } + + public function modifier($datatables) + { + $datatables + ->editColumn('status', function (Invoice $invoice) { + return Invoices::getStatus($invoice->status); + }) + ->editColumn('created_at', function (Invoice $invoice) { + return $invoice->created_at->isoFormat('DD/MM/YY HH:mm'); + }) + ->editColumn('payment_type', function (Invoice $invoice) { + return InvoicePayments::getPaymentType($invoice->payment_type); + }) + ->rawColumns(['action']); + + return parent::modifier($datatables); + } + + protected function getColumns() + { + return [ + Column::make('created_at')->title('Date'), + Column::make('ref')->title('Ref'), + Column::make('payment_type')->title('Règlement'), + Column::make('total_shipped')->title('Montant')->class('text-right'), + Column::make('status')->title('Statut'), + $this->makeColumnButtons(), + ]; + } +} diff --git a/app/Datatables/Shop/CustomerOrdersDataTable.php b/app/Datatables/Shop/CustomerOrdersDataTable.php index dc1eaa36..a0fe7f7c 100644 --- a/app/Datatables/Shop/CustomerOrdersDataTable.php +++ b/app/Datatables/Shop/CustomerOrdersDataTable.php @@ -4,8 +4,8 @@ namespace App\Datatables\Shop; use App\Datatables\ParentDataTable as DataTable; use App\Models\Shop\Order; -use App\Repositories\Shop\InvoicePayments; use App\Repositories\Shop\Orders; +use Illuminate\Support\Facades\Auth; use Yajra\DataTables\Html\Column; class CustomerOrdersDataTable extends DataTable @@ -18,6 +18,8 @@ class CustomerOrdersDataTable extends DataTable public $stateSave = true; + public $url = null; + public function __construct() { $this->url = route('Shop.Orders.index'); @@ -26,11 +28,16 @@ class CustomerOrdersDataTable extends DataTable public function query(Order $model) { $customerId = Auth::id(); - $model = $model->byCustomer($customerId)->with(['delivery']); + $model = $model->byCustomer($customerId); return $this->buildQuery($model); } + public function getHtmlButtons() + { + return self::getButtonShow('uuid', 'Voir la commande'); + } + public function modifier($datatables) { $datatables @@ -38,10 +45,7 @@ class CustomerOrdersDataTable extends DataTable return Orders::getStatus($order->status); }) ->editColumn('created_at', function (Order $order) { - return $order->created_at->toDateTimeString(); - }) - ->editColumn('payment_type', function (Order $order) { - return InvoicePayments::getPaymentType($order->payment_type); + return $order->created_at->isoFormat('DD/MM/YY HH:mm'); }) ->rawColumns(['action']); @@ -53,7 +57,6 @@ class CustomerOrdersDataTable extends DataTable return [ Column::make('created_at')->title('Date'), Column::make('ref')->title('Ref'), - Column::make('payment_type')->title('Règlement'), Column::make('total_shipped')->title('Montant')->class('text-right'), Column::make('status')->title('Statut'), $this->makeColumnButtons(), diff --git a/app/Http/Controllers/Shop/Controller.php b/app/Http/Controllers/Shop/Controller.php index d31997ee..32073d6a 100644 --- a/app/Http/Controllers/Shop/Controller.php +++ b/app/Http/Controllers/Shop/Controller.php @@ -6,4 +6,8 @@ use App\Http\Controllers\Controller as ParentController; class Controller extends ParentController { + public function __construct() + { + $this->middleware('auth.check'); + } } diff --git a/app/Http/Controllers/Shop/CustomerController.php b/app/Http/Controllers/Shop/CustomerController.php index ef568e63..77fad96c 100644 --- a/app/Http/Controllers/Shop/CustomerController.php +++ b/app/Http/Controllers/Shop/CustomerController.php @@ -2,20 +2,26 @@ namespace App\Http\Controllers\Shop; -use App\Http\Controllers\Controller; +use App\Http\Controllers\Shop\Controller; use App\Repositories\Shop\Customers; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; class CustomerController extends Controller { - public function profile($id = false) + public function profile() { - $data = Customers::editProfile($id); + $data = Customers::editProfile(Customers::getId()); return view('Shop.Customers.profile', $data); } + public static function checkAuth() + { + if (Customers::isNotConnected()) { + return redirect()->route('Shop.login'); + } + } + public function modalProfile($id = false) { $data = [ @@ -27,9 +33,8 @@ class CustomerController extends Controller public function edit() { - $id = Auth::id(); $data = [ - 'customer' => Customers::edit($id), + 'customer' => Customers::edit(Customers::getId()), ]; return view('Shop.Customers.edit', $data); diff --git a/app/Http/Controllers/Shop/InvoiceController.php b/app/Http/Controllers/Shop/InvoiceController.php index 58827921..c1b064b9 100644 --- a/app/Http/Controllers/Shop/InvoiceController.php +++ b/app/Http/Controllers/Shop/InvoiceController.php @@ -2,22 +2,25 @@ namespace App\Http\Controllers\Shop; -use App\Http\Controllers\Controller; +use App\Http\Controllers\Shop\Controller; +use App\Datatables\Shop\CustomerInvoicesDataTable; use App\Repositories\Shop\InvoicePDF; use App\Repositories\Shop\Invoices; class InvoiceController extends Controller { - public function index() + public function index(CustomerInvoicesDataTable $dataTable) { - // + return $dataTable->render('Shop.Invoices.partials.list'); } - public function show($uuid) + public function view($uuid) { - $data = Invoices::getByUUID($uuid); + $data = [ + 'invoice' => Invoices::view($uuid), + ]; - return view('Shop.Invoices.show', $data); + return view('Shop.Invoices.view', $data); } public function pdf($uuid) diff --git a/app/Http/Controllers/Shop/OrderController.php b/app/Http/Controllers/Shop/OrderController.php index bc9865e1..35ee6ca4 100644 --- a/app/Http/Controllers/Shop/OrderController.php +++ b/app/Http/Controllers/Shop/OrderController.php @@ -2,8 +2,8 @@ namespace App\Http\Controllers\Shop; -use App\Datatables\Shop\OrdersDataTable; -use App\Http\Controllers\Controller; +use App\Datatables\Shop\CustomerOrdersDataTable; +use App\Http\Controllers\Shop\Controller; use App\Repositories\Core\User\ShopCart; use App\Repositories\Shop\Baskets; use App\Repositories\Shop\Customers; @@ -17,7 +17,7 @@ use Illuminate\Http\Request; class OrderController extends Controller { - public function index(OrdersDataTable $dataTable) + public function index(CustomerOrdersDataTable $dataTable) { return $dataTable->render('Shop.Orders.partials.list'); } diff --git a/app/Http/Controllers/Shop/SearchController.php b/app/Http/Controllers/Shop/SearchController.php index bef8f4c5..46014c41 100644 --- a/app/Http/Controllers/Shop/SearchController.php +++ b/app/Http/Controllers/Shop/SearchController.php @@ -12,7 +12,8 @@ class SearchController extends Controller { $data = $request->input(); $data['product_type'] = 'botanic'; - $articles = Searches::getResults($request->input()); + // $articles = Searches::getResults($request->input()); + $articles = Searches::search($request->input()); $data = [ 'articles' => $articles, 'articles_count' => $articles ? count($articles) : 0, @@ -20,8 +21,6 @@ class SearchController extends Controller 'product_type' => $data['product_type'], ]; - // dump($data); - // exit; return view('Shop.Search.results', $data); } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index deb65e86..5ed09fb9 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -54,6 +54,7 @@ class Kernel extends HttpKernel 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, + 'auth.check' => \App\Http\Middleware\CheckAuth::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, diff --git a/app/Http/Middleware/CheckAuth.php b/app/Http/Middleware/CheckAuth.php new file mode 100644 index 00000000..54d19b1e --- /dev/null +++ b/app/Http/Middleware/CheckAuth.php @@ -0,0 +1,19 @@ +where($this->table.'.name', 'LIKE', '%'.$str.'%'); } - public function scopeSearch($query, $str) + public function scopeRawSearch($query, $str) { return $query->where($this->table.'.name', 'LIKE', '%'.$str.'%'); } @@ -148,6 +147,11 @@ class Article extends Model implements HasMedia return $query->whereIn($this->table.'.product_type', [Variety::class, Specie::class]); } + public function scopeByIDs($query, $ids) + { + return $query->whereIN($this->table.'.id', $ids); + } + public function scopeMerchandise($query) { return $query->byProduct(Merchandise::class); @@ -218,6 +222,7 @@ class Article extends Model implements HasMedia return [ 'id' => (int) $this->id, + 'article_nature_id' => $this->article_nature_id, 'name' => $this->name, 'description' => html_entity_decode(strip_tags($description)), ]; diff --git a/app/Models/Shop/Invoice.php b/app/Models/Shop/Invoice.php index 99aa9e45..94132b75 100644 --- a/app/Models/Shop/Invoice.php +++ b/app/Models/Shop/Invoice.php @@ -40,6 +40,11 @@ class Invoice extends Model return $this->belongsTo(CustomerAddress::class, 'invoice_address_id'); } + public function scopeByCustomer($query, $customerId) + { + return $query->where('customer_id', $customerId); + } + public function scopeByUUID($query, $uuid) { return $query->where('uuid', $uuid); diff --git a/app/Repositories/Shop/Articles.php b/app/Repositories/Shop/Articles.php index 3a1de02c..d282af91 100644 --- a/app/Repositories/Shop/Articles.php +++ b/app/Repositories/Shop/Articles.php @@ -18,7 +18,7 @@ class Articles public static function autocomplete($str) { - $data = Article::byAutocomplete($str)->orderBy('name')->limit(30)->pluck('name', 'id'); + $data = Article::byAutocomplete($str)->orderBy('name')->limit(20)->pluck('name', 'id'); $export = []; foreach ($data as $key => $name) { $export[] = ['value' => $key, 'text' => $name]; @@ -143,6 +143,7 @@ class Articles public static function getArticlesToSell($options) { $articles = self::getArticlesWithOffers($options); + $searchOrder = array_flip($options['ids']->toArray() ?? []); foreach ($articles as $article) { $price_lists = $article->offers[0]->tariff->price_lists->toArray(); if (! count($price_lists)) { @@ -150,6 +151,7 @@ class Articles } if (! is_array($data[$article->name] ?? false)) { $data[$article->name] = self::getDataForSale($article); + $data[$article->name]['searchOrder'] = $searchOrder[$article->id]; } $prices = $price_lists[0]['price_list_values'][0]; $article_nature_name = strtolower($article->article_nature->name); @@ -248,20 +250,17 @@ class Articles public static function getModelByOptions($options = false) { - $category_id = $options['category_id'] ?? false; - $search = $options['search'] ?? false; - $tags = $options['tags'] ?? false; $article_nature_id = $options['article_nature_id'] ?? false; $article_nature_ids = $options['article_nature_ids'] ?? false; - $product_type = $options['product_type'] ?? false; $model = $options['homepage'] ?? false ? Article::homepage()->visible() : Article::visible(); - $model = $category_id ? $model->byCategoryParent($category_id) : $model; - $model = $tags ? $model->byTags($tags) : $model; - $model = $search ? $model->search($search) : $model; + $model = $options['category_id'] ?? false ? $model->byCategoryParent($options['category_id']) : $model; + $model = $options['tags'] ?? false ? $model->byTags($options['tags']) : $model; + $model = $options['search'] ?? false ? $model->rawSearch($options['search']) : $model; + $model = $options['ids'] ?? false ? $model->byIDs($options['ids']) : $model; $model = $article_nature_id ? $model->byArticleNature($article_nature_id) : $model; $model = $article_nature_ids ? $model->byArticleNatures($article_nature_ids) : $model; - switch ($product_type) { + switch ($options['product_type'] ?? false) { case 'botanic': $model = $model->botanic(); break; @@ -324,11 +323,6 @@ class Articles return $data; } - public static function getPricesByArticle($article) - { - return Prices::getByArticle($article->id); - } - public static function storeFull($data) { $images = $data['images'] ?? false; diff --git a/app/Repositories/Shop/Customers.php b/app/Repositories/Shop/Customers.php index bd2208ae..c921a863 100644 --- a/app/Repositories/Shop/Customers.php +++ b/app/Repositories/Shop/Customers.php @@ -2,6 +2,7 @@ namespace App\Repositories\Shop; +use App\Datatables\Shop\CustomerInvoicesDataTable; use App\Datatables\Shop\CustomerOrdersDataTable; use App\Models\Shop\Customer; use App\Repositories\Core\File; @@ -54,13 +55,14 @@ class Customers public static function editProfile($id = false) { - $id = $id ? $id : self::getId(); $datatableOrders = new CustomerOrdersDataTable(); + $datatableInvoices = new CustomerInvoicesDataTable(); return [ 'customer' => self::get($id, ['addresses', 'deliveries'])->toArray(), 'deliveries' => Deliveries::getAllWithSaleChannel()->toArray(), 'orders' => $datatableOrders->html(), + 'invoices' => $datatableInvoices->html(), ]; } diff --git a/app/Repositories/Shop/Invoices.php b/app/Repositories/Shop/Invoices.php index 0d09c129..873b9b49 100644 --- a/app/Repositories/Shop/Invoices.php +++ b/app/Repositories/Shop/Invoices.php @@ -29,39 +29,54 @@ class Invoices public static function init() { return [ - 'statuses' => Invoices::statuses(), + 'statuses' => self::statuses(), 'payment_types' => InvoicePayments::paymentTypes(), ]; } - public static function getFull($id) + public static function view($uuid) { - return self::get($id, ['address', 'payments', 'order.customer', 'order.delivery_address', 'order.detail']); + $data = self::getFullByUUID($uuid)->toArray(); + $data['payment_type'] = InvoicePayments::getPaymentType($data['payment_type']); + $data['status'] = self::getStatus($data['status']); + + return $data; } - public static function getByUUID($uuid) + public static function getFullByUUID($id) { - return Invoice::byUUID($uuid)->first(); + return self::getByUUID($id, self::full()); + } + + public static function getFull($id) + { + return self::get($id, self::full()); + } + + public static function full() + { + return [ + 'address', + 'customer', + 'order.delivery_address', + 'order.detail', + 'order.sale_channel', + 'payments', + ]; } public static function saveInvoice($orderId, $data) { $data['order_id'] = $orderId; $data['date_invoice'] = date('Y-m-d'); + $data['date_due'] = Carbon::now()->addMonth()->format('Y-m-d'); return self::store($data); } - public static function countByMonth() - { - $start = Carbon::now()->beginOfMonth(); - - return Invoice::where('created_at', '>', $start); - } - public static function create($data) { - InvoiceStats::increase($data['total_taxed']); + InvoiceStats::increase($data['total']); $data['uuid'] = Str::uuid()->toString(); $data['ref'] = self::getNewRef(); @@ -71,7 +86,7 @@ class Invoices public static function delete($id) { $invoice = self::get($id); - InvoiceStats::decrease($invoice->total_priced); + InvoiceStats::decrease($invoice->total); return Invoice::destroy($id); } diff --git a/app/Repositories/Shop/Orders.php b/app/Repositories/Shop/Orders.php index 62517610..e3ac303f 100644 --- a/app/Repositories/Shop/Orders.php +++ b/app/Repositories/Shop/Orders.php @@ -14,6 +14,15 @@ class Orders { use Basic, DateStats; + public static function view($uuid) + { + $data = self::getFullByUUID($uuid)->toArray(); + $data['payment_type'] = InvoicePayments::getPaymentType($data['payment_type']); + $data['status'] = self::getStatus($data['status']); + + return $data; + } + public static function getLast($nb = 10) { return Order::with('customer')->orderBy('id', 'DESC')->take($nb)->get(); @@ -40,24 +49,12 @@ class Orders public static function getFullByUUID($uuid) { - return self::getFull(self::getIdByUUID($uuid)); + return self::getByUUID($uuid, self::full()); } public static function getFull($id) { - return Order::with(['customer', 'delivery', 'delivery_address', 'detail', 'invoice.address', 'sale_channel']) - ->byID($id)->first(); - } - - public static function view($uuid) - { - $data = []; - $order = self::getFullByUUID($uuid); - $data = $order->toArray(); - $data['payment_type'] = InvoicePayments::getPaymentType($order->payment_type); - $data['status'] = Orders::getStatus($order->status); - - return $data; + return self::get($id, self::full()); } public static function saveOrder($data) @@ -160,6 +157,11 @@ class Orders return $lastRef ? $lastRef->ref + 1 : $ref + 1; } + public static function full() + { + return ['customer', 'delivery', 'delivery_address', 'detail', 'invoice.address', 'sale_channel']; + } + public static function getModel() { return Order::query(); diff --git a/app/Repositories/Shop/Searches.php b/app/Repositories/Shop/Searches.php index 6dc2e7b1..d958c131 100644 --- a/app/Repositories/Shop/Searches.php +++ b/app/Repositories/Shop/Searches.php @@ -6,9 +6,11 @@ use App\Models\Shop\Article; class Searches { - public static function search($query) + public static function search($options) { - return Article::withAvailableOffers()->search($query)->get(); + return collect(Articles::getArticlesToSell([ + 'ids' => Article::search($options['search_name'])->get()->pluck('id'), + ]))->sortBy('searchOrder')->toArray(); } public static function getResults($options) { diff --git a/config/scout.php b/config/scout.php index dff17852..77d6c51b 100644 --- a/config/scout.php +++ b/config/scout.php @@ -136,8 +136,8 @@ return [ 'key' => env('MEILISEARCH_KEY', null), 'index-settings' => [ Article::class => [ - 'filterableAttributes'=> ['id', 'name', 'description'], - 'sortableAttributes' => ['created_at'], + 'filterableAttributes'=> ['article_nature_id'], + 'sortableAttributes' => ['name', 'created_at'], ], ], ], diff --git a/resources/views/Shop/Customers/partials/invoices.blade.php b/resources/views/Shop/Customers/partials/invoices.blade.php deleted file mode 100644 index 5ac52600..00000000 --- a/resources/views/Shop/Customers/partials/invoices.blade.php +++ /dev/null @@ -1,28 +0,0 @@ -@include('Shop.Orders.partials.list', ['dataTable' => $orders]) - -@if ($customer['orders'] ?? false) - - @foreach ($customer['orders'] as $order) - - - - - - - @endforeach -
- {{ Carbon\Carbon::parse($order['created_at'])->format('d-m-Y') }} - - Numero facture - - {{ $order['total_shipped'] }} € - - - - -
-@endif diff --git a/resources/views/Shop/Customers/partials/sale.blade.php b/resources/views/Shop/Customers/partials/sale.blade.php index 00e840d5..fc988f0b 100644 --- a/resources/views/Shop/Customers/partials/sale.blade.php +++ b/resources/views/Shop/Customers/partials/sale.blade.php @@ -1,25 +1,35 @@
-
+
@include('Shop.Customers.partials.deliveries')
-
+
- @include('Shop.Customers.partials.invoices') + @include('Shop.Orders.partials.list', [ + 'dataTable' => $orders, + ]) + +
+
+ + @include('Shop.Invoices.partials.list', [ + 'dataTable' => $invoices, + ])
diff --git a/resources/views/Shop/Invoices/partials/filters.blade.php b/resources/views/Shop/Invoices/partials/filters.blade.php new file mode 100644 index 00000000..b696f04d --- /dev/null +++ b/resources/views/Shop/Invoices/partials/filters.blade.php @@ -0,0 +1,2 @@ +
+
diff --git a/resources/views/Shop/Invoices/partials/list.blade.php b/resources/views/Shop/Invoices/partials/list.blade.php new file mode 100644 index 00000000..29352098 --- /dev/null +++ b/resources/views/Shop/Invoices/partials/list.blade.php @@ -0,0 +1,26 @@ +@include('components.datatable', [ + 'route' => route('Shop.Invoices.index'), + 'model' => 'invoices', + 'with_add' => false, + 'with_filters' => true, + 'with_exports' => false, + 'with_print' => false, + 'show_callback' => 'InvoiceView(id);', +]) + +@component('components.layout.modal-filters', ['title' => 'Filters', 'id' => 'modal-invoices-filters']) + @include('Shop.Invoices.partials.filters', ['model' => 'invoices']) +@endcomponent + +@push('js') + +@endpush diff --git a/resources/views/Shop/Invoices/view.blade.php b/resources/views/Shop/Invoices/view.blade.php new file mode 100644 index 00000000..fe424334 --- /dev/null +++ b/resources/views/Shop/Invoices/view.blade.php @@ -0,0 +1,60 @@ +
+
+

+ @if ($invoice['customer']['company']) + {{ $invoice['customer']['company'] }}
+ @endif + {{ $invoice['customer']['last_name'] }} {{ $invoice['customer']['first_name'] }} +

+
+
+ + @if ($invoice['address']) + {{ $invoice['address']['address'] }}
+ @isset($invoice['address']['address2']) + {{ $invoice['address']['address2'] }}
+ @endisset + {{ $invoice['address']['zipcode'] }} + {{ $invoice['address']['city'] }}
+ @endif +
+
+
+ + @if ($invoice['order']['delivery_address']) + {{ $invoice['order']['delivery_address']['address'] }}
+ @isset($invoice['order']['delivery_address']['address2']) + {{ $invoice['order']['delivery_address']['address2'] }}
+ @endisset + {{ $invoice['order']['delivery_address']['zipcode'] }} + {{ $invoice['order']['delivery_address']['city'] }}
+ @endif +
+
+
+
+
+
+
+ Facture N° {{ $invoice['ref'] }}
+ du {{ Carbon\Carbon::parse($invoice['created_at'])->isoFormat('LLLL') }} +
+
+ Statut : {{ $invoice['status'] }} +
+
+
+
+ Canal de vente : {{ $invoice['order']['sale_channel']['name'] }} +
+
+ Règlement : {{ $invoice['payment_type'] }} +
+
+
+
+ +@include('Admin.Shop.Orders.partials.detail', [ + 'detail_type' => 'facture', + 'order' => $invoice['order'], +]) diff --git a/resources/views/Shop/Orders/partials/list.blade.php b/resources/views/Shop/Orders/partials/list.blade.php index 41d0dbbe..a993a416 100644 --- a/resources/views/Shop/Orders/partials/list.blade.php +++ b/resources/views/Shop/Orders/partials/list.blade.php @@ -1,29 +1,26 @@ @include('components.datatable', [ - 'route' => route('Shop.Orders.index'), - 'model' => 'orders', + 'route' => route('Shop.Orders.index'), + 'model' => 'orders', 'with_add' => false, 'with_filters' => true, - 'with_exports' => false, - 'with_print' => false, + 'with_exports' => false, + 'with_print' => false, 'show_callback' => 'OrderView(id);', ]) -@component('components.layout.modal-filters', ['title' => 'Filters', 'id' => 'modal-aml_risks-filters']) - @include('Shop.Orders.partials.filters', ['model' => 'aml_risks']) +@component('components.layout.modal-filters', ['title' => 'Filters', 'id' => 'modal-orders-filters']) + @include('Shop.Orders.partials.filters', ['model' => 'orders']) @endcomponent @push('js') - + function OrderRefresh() { + reloadDatatable("orders"); + } + @endpush diff --git a/resources/views/Shop/layout/layout.blade.php b/resources/views/Shop/layout/layout.blade.php index 0da17cff..00043d0b 100644 --- a/resources/views/Shop/layout/layout.blade.php +++ b/resources/views/Shop/layout/layout.blade.php @@ -9,49 +9,53 @@ - Jardin'enVie - - + Jardin'enVie + + - - - + + + - @stack('css') + @stack('css') -
-
- @include("Shop.layout.partials.header") -
-
-
- @yield('content') -
-
-
- @include("Shop.layout.partials.footer") +
+
+ @include('Shop.layout.partials.header') +
+
+
+ @yield('content') +
+
+
+ @include('Shop.layout.partials.footer') @include('cookie-consent::index') -
-
+
+
+ + - - @stack('scripts') - + - @if(Session::has('growl')) + @if (Session::has('growl')) @@ -70,4 +74,4 @@ - \ No newline at end of file + diff --git a/resources/views/Shop/layout/partials/header-nav.blade.php b/resources/views/Shop/layout/partials/header-nav.blade.php index 1321638d..784bdaec 100644 --- a/resources/views/Shop/layout/partials/header-nav.blade.php +++ b/resources/views/Shop/layout/partials/header-nav.blade.php @@ -5,11 +5,11 @@ Variétés Paysannes de la Semence à l'Assiette
-
+
@include('Shop.layout.partials.search')
-
+
@include('Shop.layout.partials.header-catalog') @include('Shop.layout.partials.header-profile') @include('Shop.layout.partials.header-basket') diff --git a/resources/views/Shop/layout/partials/search.blade.php b/resources/views/Shop/layout/partials/search.blade.php index 195dc22d..c2572896 100644 --- a/resources/views/Shop/layout/partials/search.blade.php +++ b/resources/views/Shop/layout/partials/search.blade.php @@ -1,18 +1,26 @@
-
- -
- -
-
+
+ @include('components.form.autocomplete', [ + 'name' => 'search', + 'url' => route('Admin.Shop.Articles.autocomplete'), + 'data' => [ + 'name' => $search['search_name'] ?? '', + ], + ]) +
+ +
+
@push('js') - -@endpush \ No newline at end of file + +@endpush diff --git a/resources/views/components/form/autocomplete.blade.php b/resources/views/components/form/autocomplete.blade.php index cfa9ab44..c1db3210 100644 --- a/resources/views/components/form/autocomplete.blade.php +++ b/resources/views/components/form/autocomplete.blade.php @@ -1,4 +1,6 @@ @include('load.form.autocomplete') - + diff --git a/resources/views/components/form/button.blade.php b/resources/views/components/form/button.blade.php index 7b29c834..c9d07f6d 100644 --- a/resources/views/components/form/button.blade.php +++ b/resources/views/components/form/button.blade.php @@ -1,10 +1,13 @@ - +@if ($url ?? false) + +@endif diff --git a/resources/views/components/form/buttons/add.blade.php b/resources/views/components/form/buttons/add.blade.php new file mode 100644 index 00000000..7d7bbddf --- /dev/null +++ b/resources/views/components/form/buttons/add.blade.php @@ -0,0 +1,5 @@ +@include('components.form.button', [ + 'class' => 'btn-primary ' . ($class ?? ''), + 'icon' => 'fa-plus', + 'title' => $title ?? 'Ajouter', +]) diff --git a/resources/views/components/form/buttons/cancel.blade.php b/resources/views/components/form/buttons/cancel.blade.php new file mode 100644 index 00000000..aa61392f --- /dev/null +++ b/resources/views/components/form/buttons/cancel.blade.php @@ -0,0 +1,17 @@ +@include('components.form.button', [ + 'class' => 'btn-secondary cancel ' . ($class ?? ''), + 'icon' => 'fa-times', + 'txt' => $title ?? 'Annuler', +]) + +@push('js') + +@endpush diff --git a/resources/views/components/form/buttons/delete.blade.php b/resources/views/components/form/buttons/delete.blade.php new file mode 100644 index 00000000..99e8dae6 --- /dev/null +++ b/resources/views/components/form/buttons/delete.blade.php @@ -0,0 +1,6 @@ +@include('components.form.button', [ + 'class' => 'btn-danger btn-del ' . ($class ?? ''), + 'icon' => $icon ?? 'fa-trash-alt', + 'title' => $title ?? 'Effacer', + 'loading_text' => "", +]) diff --git a/resources/views/components/form/buttons/edit.blade.php b/resources/views/components/form/buttons/edit.blade.php new file mode 100644 index 00000000..6e94e645 --- /dev/null +++ b/resources/views/components/form/buttons/edit.blade.php @@ -0,0 +1,5 @@ +@include('components.form.button', [ + 'class' => 'btn-primary btn-edit ' . ($class ?? ''), + 'icon' => 'fa-pencil-alt', + 'title' => $title ?? 'Modifier', +]) diff --git a/resources/views/components/form/buttons/save.blade.php b/resources/views/components/form/buttons/save.blade.php new file mode 100644 index 00000000..eeedc33f --- /dev/null +++ b/resources/views/components/form/buttons/save.blade.php @@ -0,0 +1,6 @@ +@include('components.form.button', [ + 'class' => 'btn-success save ' . ($class ?? ''), + 'icon' => 'fa-save', + 'txt' => $title ?? 'Enregister', + 'loading_text' => " En cours", +]) diff --git a/resources/views/components/form/buttons/show.blade.php b/resources/views/components/form/buttons/show.blade.php new file mode 100644 index 00000000..d4c7c647 --- /dev/null +++ b/resources/views/components/form/buttons/show.blade.php @@ -0,0 +1,5 @@ +@include('components.form.button', [ + 'class' => 'btn-secondary btn-show ' . ($class ?? ''), + 'icon' => 'fa-eye', + 'title' => $title ?? 'Voir', +]) diff --git a/resources/views/components/form/buttons/submit.blade.php b/resources/views/components/form/buttons/submit.blade.php new file mode 100644 index 00000000..de99693b --- /dev/null +++ b/resources/views/components/form/buttons/submit.blade.php @@ -0,0 +1,8 @@ +@include('components.form.button', [ + 'id' => $id_name ?? false, + 'type' => $type ?? 'submit', + 'class' => 'btn-success submit ' . ($class ?? ''), + 'icon' => 'fa-save', + 'txt' => __('submit'), + 'loading_text' => " Processing", +]) diff --git a/resources/views/load/form/autocomplete.blade.php b/resources/views/load/form/autocomplete.blade.php index 0a1a2970..ef12cbee 100644 --- a/resources/views/load/form/autocomplete.blade.php +++ b/resources/views/load/form/autocomplete.blade.php @@ -1,23 +1,25 @@ -@if(!defined('LOAD_AUTOCOMPLETE')) - @push('js') - - + - @endpush - @php(define('LOAD_AUTOCOMPLETE', true)) -@endif \ No newline at end of file + $(selector).on('autocomplete.select', function(evt, item) { + var field = $(this).data('field'); + var id = item.value; + $('#' + field).val(id); + + if (typeof(callback) != 'undefined') { + var c = callback + '(' + id + ')'; + eval(c); + } + }); + } + + @endpush + @php(define('LOAD_AUTOCOMPLETE', true)) +@endif diff --git a/routes/Shop/Customers.php b/routes/Shop/Customers.php index 60562b39..f03b9007 100644 --- a/routes/Shop/Customers.php +++ b/routes/Shop/Customers.php @@ -2,7 +2,7 @@ Route::prefix('Clients')->name('Customers.')->group(function () { Route::get('show/{id}', 'CustomerController@show')->name('show'); - Route::get('profile/{id?}', 'CustomerController@profile')->name('profile'); + Route::get('profile', 'CustomerController@profile')->name('profile'); Route::get('modalProfile/{id?}', 'CustomerController@modalProfile')->name('modalProfile'); Route::get('edit', 'CustomerController@edit')->name('edit'); Route::post('storeProfileAjax', 'CustomerController@storeProfileAjax')->name('storeProfileAjax'); diff --git a/routes/Shop/Invoices.php b/routes/Shop/Invoices.php index 5730beae..ce28d9d2 100644 --- a/routes/Shop/Invoices.php +++ b/routes/Shop/Invoices.php @@ -1,6 +1,7 @@ name('Invoices.')->group(function () { - Route::get('show/{uuid?}', 'InvoiceController@show')->name('show'); + Route::any('', 'InvoiceController@index')->name('index'); + Route::get('view/{uuid?}', 'InvoiceController@view')->name('view'); Route::get('pdf/{uuid?}', 'InvoiceController@pdf')->name('pdf'); });