diff --git a/app/Http/Controllers/BasketController.php b/app/Http/Controllers/BasketController.php index 261c1e8..fa5607a 100644 --- a/app/Http/Controllers/BasketController.php +++ b/app/Http/Controllers/BasketController.php @@ -9,11 +9,17 @@ use Gloudemans\Shoppingcart\Facades\Cart; class BasketController extends Controller { - public function index(Request $request) - { - return view('basket'); - } + /** + * @deprecated + */ + // public function index(Request $request) + // { + // return view('basket'); + // } + /** + * ajout de produit au panier + */ public function addToCart(Request $request) { $product = Product::find($request->id); @@ -22,6 +28,9 @@ class BasketController extends Controller return $this->getCart(); } + /** + * suppression de produit du panier + */ public function removeFromCart(Request $request) { $rowId = $request->rowId; @@ -29,11 +38,17 @@ class BasketController extends Controller return $this->getCart(); } + /** + * vidage de panier + */ public function emptyCart() { Cart::destroy(); return $this->getCart(); } + /** + * récupération du panier + */ public function getCart() { $dbpanier = new Collection(); diff --git a/app/Http/Controllers/Bo/OrdersController.php b/app/Http/Controllers/Bo/OrdersController.php index f01dd8b..42fe59f 100644 --- a/app/Http/Controllers/Bo/OrdersController.php +++ b/app/Http/Controllers/Bo/OrdersController.php @@ -22,11 +22,18 @@ use Illuminate\Support\Facades\Session; class OrdersController extends Controller { + /** + * index of orders (Bo) + */ public function index() { $orders = Order::orderBy('date', 'DESC')->get(); - return view('bo.orders', compact('orders')); + return view('bo.orders.index', compact('orders')); } + /** + * action de changement de statut vers l'avant + * @todo : envoyer les mails transactionnels + */ public function changeStatus($reference) { $order = Order::where('reference', $reference)->first(); $order->status_id = $order->status_id + 1; @@ -36,6 +43,9 @@ class OrdersController extends Controller return back()->with('success', "Changement de status enregistré pour la commande " . $order->reference . "."); } + /** + * mise au statut annulé d'une commande + */ public function cancelOrder($reference) { $order = Order::where('reference', $reference)->first(); $order->status_id = 7; @@ -45,6 +55,11 @@ class OrdersController extends Controller return back()->with('success', "La commande " . $order->reference . " à été annulée."); } + /** + * @deprecated + * ajout de produits à la commande + * @todo : supprimer cette méthode qui repose sur un modèle de donnée osolète + */ public function addProduct($orderReference, $productId, $quantity) { $product = Product::findOrFail($productId); $order = Order::where('reference', $orderReference)->first(); @@ -60,7 +75,11 @@ class OrdersController extends Controller return redirect()->route('bo.orders')->with('success', "Le produit à été ajouté."); } - //front sales tunnel step2 recap + /** + * front + * récap panier du tunnel de commande + * @todo : déplacer vers le controller idoine + */ public function recapOrder() { $activestep = 2; @@ -80,8 +99,8 @@ class OrdersController extends Controller return view('sales.recap', compact('activestep', 'cart', 'cartInfos')); } - //save order and go to step 3 /** + * front * Storing order from sales tunnel */ public function store() @@ -130,7 +149,9 @@ class OrdersController extends Controller return redirect()->route('sales.pick-slot', ['reference' => $order->reference]); } - //pick your time slot + /** + * front tunnel de commande étape 3 : choix de créneau + */ public function timeSlotPick($reference) { $activestep = 3; @@ -198,7 +219,11 @@ class OrdersController extends Controller return view('sales.pick-slot', compact('activestep', 'availCreneaux', 'order')); } - //save timeslot and validate order + /** + * front + * enregistrement du créneau de collect + * et validation de la commande + */ public function setTimeSlot(Request $request) { $time_slot = Carbon::createFromFormat('d/m/Y-H:i', $request->selectedcreneau); @@ -228,7 +253,10 @@ class OrdersController extends Controller return redirect()->route('sales.confirm', ['reference' => $order->reference]); } - //show confirmation + /** + * front + * page de confirmation de commande + */ public function confirmOrder($reference) { $activestep = 4; @@ -239,14 +267,21 @@ class OrdersController extends Controller return view('sales.confirm', compact('activestep', 'order')); } - + /** + * bo + * ajx : affichage d'infos sur un client + * @todo : déplacer dans le controller idoine + */ public function getCustomerInfo($id) { $cust = Customers::findOrFail($id); return view('bo.customer.info-popup', compact('cust')); } + /** + * bo : page détatil commande + */ public function orderDetail($reference) { $order = Order::where('reference', '=', $reference)->firstOrFail(); - return view('bo.order.detail', compact('order')); + return view('bo.orders.detail', compact('order')); } } diff --git a/app/Http/Controllers/Bo/ProductsController.php b/app/Http/Controllers/Bo/ProductsController.php index 2deab9a..77f26d5 100644 --- a/app/Http/Controllers/Bo/ProductsController.php +++ b/app/Http/Controllers/Bo/ProductsController.php @@ -13,12 +13,18 @@ use Illuminate\Support\Str; class ProductsController extends Controller { + /** + * Bo index page for products + */ public function index() { $products = Product::paginate(10); return view('bo.products.index', compact('products')); } + /** + * create à product + */ public function create(Request $request, $product_type) { if (!array_key_exists($product_type, config('theme.enum_product_types'))) { @@ -31,6 +37,10 @@ class ProductsController extends Controller return view('bo.products.create', compact('product_type', 'product')); } + /** + * store a new product + * @todo : manage tags and associated products + */ public function store(Request $request) { //products fields @@ -125,6 +135,9 @@ class ProductsController extends Controller return redirect()->route('bo.products.index'); } + /** + * edit an existing product + */ public function edit($id) { $product = Product::findOrFail($id); @@ -151,6 +164,9 @@ class ProductsController extends Controller return view('bo.products.edit', compact('product', 'ranges','existingTags', 'selectedtags', 'existingProds', 'selectedProds')); } + /** + * update an existing product + */ public function update(Request $request, $id) { @@ -280,6 +296,10 @@ class ProductsController extends Controller return redirect()->route('bo.products.edit', $product->id)->with('success', 'Modifications enregistrés !'); } + /** + * Helper method to store a new tag if necessary + * Otherwise retreive an existing tag to associate its id + */ public function storeTag($oTag) { $slug = Str::slug($oTag->label); @@ -294,6 +314,10 @@ class ProductsController extends Controller return $tag->id; } + /** + * destroy a product (soft delete) + * @todo : manage liaisons + */ public function destroy($id) { $product = Product::findOrFail($id); @@ -311,6 +335,10 @@ class ProductsController extends Controller return redirect()->route('bo.products.index'); } + /** + * helper method to update additionnal product info + * foodProduct + */ public function saveFoodProduct(Request $request, $product_id) { $foodProduct = FoodProduct::firstOrNew([ @@ -361,6 +389,10 @@ class ProductsController extends Controller } + /** + * helper method to create additionnal product info + * foodProduct + */ public function storeFoodProduct(Request $request, $product_id) { $foodProduct = new FoodProduct(); @@ -409,6 +441,9 @@ class ProductsController extends Controller } + /** + * product detail intended for Bo + */ public function show() { //not in use diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 5eaa8bd..a421bf6 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -7,6 +7,7 @@ use App\Http\Requests\UpdateInfosRequest; use App\Mail\PasswordResetMail; use App\Mail\RegisterConfirmMail; use App\Models\Customers; +use App\Models\Order; use App\Models\PasswordReset; use Exception; use Illuminate\Http\Request; @@ -30,6 +31,7 @@ class CustomerController extends Controller /** * Enregistre le customer dans la base de données + * et CRM */ public function register(CustomerRegisterRequest $request) { @@ -162,6 +164,9 @@ class CustomerController extends Controller } } + /** + * deconnexion customer + */ public function logout() { if (Auth::guard('customer')->check()) { @@ -170,11 +175,17 @@ class CustomerController extends Controller } } + /** + * page d'accès à la procédure mdp oublié + */ public function forgotPasswordForm(Request $request) { return view('auth.passwords.forgot'); } + /** + * initialisation de la procédure de mdp oublié + */ public function passwordReset(Request $request) { $request->validate([ @@ -223,6 +234,9 @@ class CustomerController extends Controller return view('auth.passwords.reset', compact('customer'))->with('token', $token); } + /** + * changement de mot de passe (depuis la procédure de mdp oublié) + */ public function changePassword(Request $request, $token) { $request->validate([ @@ -257,6 +271,9 @@ class CustomerController extends Controller } } + /** + * profil client (mon compte) + */ public function dashboard(Request $request) { @@ -311,6 +328,9 @@ class CustomerController extends Controller ->with('success', __("Vos informations ont bien été enregistrées.")); } + /** + * changement de mot de passe depuis le profil + */ public function changePasswordWhenAuthenticated(Request $request) { $request->validate([ @@ -327,29 +347,20 @@ class CustomerController extends Controller } } - // public function changeOptin($token) - // { - // // TODO : Route et test de la méthode avec nouveau client CRM pour l'opt in - // die("Attente"); - // $crmId = Customers::where('hashcode', $token)->first()->crm_id; + /** + * affichage des commandes du customer connecté + */ + public function myOrders(Request $request) { + $orders = Order::where('customer_id', Auth::guard('customer')->user()->id)->orderBy('date', 'DESC')->get(); + return view('customer.my-orders', compact('orders')); + } - // /** @var \App\Lib\LDCCRM\ApiV1 */ - // $crm = app('crmApi'); - // $result = $crm->toggleOptInCustomer($crmId); - // if ($result->status === "OK") { - // dd("OK"); - // return back()->with('success', 'Modification enregistrée !'); - // } else { - // switch ($result->code) { - // case 113 || 114: - // dd("KO 113 ou 114"); - // return back()->withErrors("Mise à jour impossible, compte inexistant."); - // default: - // dd("KO default"); - // return back()->withErrors("Une erreur est survenue, merci de réessayer ultérieurement."); - // } - // } - // } + public function orderDetail($reference) { + $order = Order::where('reference', '=', $reference) + ->where('customer_id', Auth::guard('customer')->user()->id) + ->firstOrFail(); + return view('customer.order-detail', compact('order')); + } public function delete($id) { diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index f4a2b76..30e3840 100644 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -8,14 +8,6 @@ use Illuminate\Http\Request; class IndexController extends Controller { - /** - * @deprecated - */ - public function index(Request $request) - { - $content = Content::where('key', 'accueil')->first(); - return view('home', compact('content')); - } public function contact(Request $request) { diff --git a/app/Http/Controllers/ProductsController.php b/app/Http/Controllers/ProductsController.php index 1ad04cc..cbddb01 100644 --- a/app/Http/Controllers/ProductsController.php +++ b/app/Http/Controllers/ProductsController.php @@ -10,6 +10,10 @@ use Illuminate\Support\Str; class ProductsController extends Controller { + + /** + * page des gammes + */ public function ranges(Request $request) { //now in AppServiceProvider @@ -18,6 +22,9 @@ class ProductsController extends Controller return view('ranges'); } + /** + * page une gamme + */ public function range(Request $request, $range_slug) { $range = Range::where('slug', $range_slug)->first(); @@ -27,6 +34,9 @@ class ProductsController extends Controller return view('range', compact('range','products','offres')); } + /** + * page produit + */ public function product(Request $request, $product_slug) { $product = Product::where('slug', $product_slug)->first(); $product->additionnalProductInfo = $product->additionnalProductInfo($product->product_type); @@ -42,6 +52,10 @@ class ProductsController extends Controller return view ('product', compact('product', 'associated')); } + /** + * tous les produits + * recherche par nom de produit + */ public function allProducts(Request $request) { @@ -60,6 +74,9 @@ class ProductsController extends Controller return view('search', compact('products', 'search_title', 'filter')); } + /** + * produits filtrés par tag (1 tag) + */ public function tagFiltered(Request $request, $tag_slug) { $products = Product::where('status', 1) diff --git a/resources/views/bo/order/detail.blade.php b/resources/views/bo/orders/detail.blade.php similarity index 100% rename from resources/views/bo/order/detail.blade.php rename to resources/views/bo/orders/detail.blade.php diff --git a/resources/views/bo/orders.blade.php b/resources/views/bo/orders/index.blade.php similarity index 98% rename from resources/views/bo/orders.blade.php rename to resources/views/bo/orders/index.blade.php index cd13b3d..d7c217f 100644 --- a/resources/views/bo/orders.blade.php +++ b/resources/views/bo/orders/index.blade.php @@ -41,12 +41,7 @@ -{{-- Popup --}} - @endsection @section('scripts') - @endsection diff --git a/resources/views/front/canard/customer/dashboard.blade.php b/resources/views/front/canard/customer/dashboard.blade.php index 5664c82..27351b7 100644 --- a/resources/views/front/canard/customer/dashboard.blade.php +++ b/resources/views/front/canard/customer/dashboard.blade.php @@ -7,6 +7,14 @@

{{ __('Mon Compte') }}

+
+ + icone commandes + + + Mes commandes + +
{{-- route de déconnexion --}} diff --git a/resources/views/front/canard/customer/my-orders.blade.php b/resources/views/front/canard/customer/my-orders.blade.php new file mode 100644 index 0000000..ea6869e --- /dev/null +++ b/resources/views/front/canard/customer/my-orders.blade.php @@ -0,0 +1,35 @@ +@extends('layouts.layout') + +@section('title', __('Mes Commandes')) + +@section('content') +
+

Mes Commandes

+
+
+
+ +
+
Référence
+
Date
+
Total en €
+
Statut
+ + @foreach ($orders as $order) +
+ +
+ {{\Carbon\Carbon::parse($order->date)->format('d/m/Y')}} +
+
@fmt_currency($order->total)
+
{{$order->status->label}}
+ @endforeach +
+
+
+
+@endsection diff --git a/resources/views/front/canard/customer/order-detail.blade.php b/resources/views/front/canard/customer/order-detail.blade.php new file mode 100644 index 0000000..08c01c9 --- /dev/null +++ b/resources/views/front/canard/customer/order-detail.blade.php @@ -0,0 +1,38 @@ +@extends('layouts.layout',['brParam' => $order->reference]) + +@section('title', __('Détail Commande')) + +@section('breadcrumb', request()->route()->getName()) + +@section('content') +
+

Détail de votre commande du {{\Carbon\Carbon::parse($order->date)->format('d/m/Y')}}

+
+
+
+
Etat de votre commande : {{$order->status->label}}
+
Rappel de votre commande ref: {{ $order->reference }}
+ @foreach ($order->lines as $line) +
+
{{ $line->quantity }} x
+
{{ $line->product->name }}
+
{{ $line->formattedTotalTtc }}
+
+ @endforeach +
+
Total
+
{{ $order->formattedTotalTtc }}
+
+
+ A retirer le {{$order->timeslot->day}} à {{$order->timeslot->time}}, à l’adresse suivante :
+ Mon point de retrait express, 15 avenue du Boulevard, 72450 Nom-de-Ville +
+ + + + {{--Voir l'itinéraire--}} +
+
+
+
+@endsection diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index bdb4e89..bec15b7 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -106,6 +106,14 @@ Breadcrumbs::for('account.dashboard', function ($trail) { $trail->parent('home'); $trail->push(__('Mon Compte'), route('account.dashboard')); }); +Breadcrumbs::for('account.my-orders', function ($trail) { + $trail->parent('home'); + $trail->push(__('Mes Commandes'), route('account.my-orders')); +}); +Breadcrumbs::for('account.order-detail', function ($trail, $reference) { + $trail->parent('account.my-orders'); + $trail->push(__('Détail Commandes'), route('account.order-detail', ['reference', $reference])); +}); // Second level Breadcrumbs::for('range', function ($trail, $gamme) { diff --git a/routes/web.php b/routes/web.php index 6b79fc0..2ac6f06 100644 --- a/routes/web.php +++ b/routes/web.php @@ -128,6 +128,8 @@ Route::name('account.') Route::get('/profil', [CustomerController::class, 'dashboard'])->name('dashboard'); Route::post('/profil', [CustomerController::class, 'updateInfos'])->name('update-infos'); Route::post('/profil/change-mdp', [CustomerController::class, 'changePasswordWhenAuthenticated'])->name('change-password'); + Route::get('/commandes', [CustomerController::class, 'myOrders'])->name('my-orders'); + Route::get('/commandes/{reference}', [CustomerController::class, 'orderDetail'])->name('order-detail'); }); //tunnel de commande