]> _ Git - pmi.git/commitdiff
wait #6128 @1:00
authorsoufiane <soufiane@cubedesigners.com>
Wed, 19 Jul 2023 08:30:11 +0000 (10:30 +0200)
committersoufiane <soufiane@cubedesigners.com>
Wed, 19 Jul 2023 08:30:11 +0000 (10:30 +0200)
app/Http/Middleware/RedirectClientIfAuthenticated.php
app/Models/Cart.php
app/Templates/Order.php [new file with mode: 0644]
resources/views/pages/cart.blade.php
resources/views/pages/order.blade.php [new file with mode: 0644]
resources/views/partials/header.blade.php
routes/web.php

index a7f7ba9156ccb415f1bf4916c4bebe59f929164f..1249a5b3e8d9ee90626b4eca5f79d7e78b04885b 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace App\Http\Middleware;
 
+use App\Models\Cart;
 use Closure;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
@@ -29,12 +30,17 @@ class RedirectClientIfAuthenticated
             $tokenIsValid = Hash::check($token, $actualToken->token);
             if(!$tokenIsValid) abort('404');
         }
+
         if (($request->path() === "se-connecter" || $request->path() === "changer-votre-mot-de-passe") && Auth::guard('web-clients')->check()) {
             return redirect('/');
         }elseif(($request->path() !== "se-connecter" && $request->path() !== "changer-votre-mot-de-passe") && !Auth::guard('web-clients')->check()) {
             return redirect('/se-connecter');
         }
 
+        if($request->path() === "ma-commande" && Cart::hasNoEcommerceProductInCart($request)) {
+            return redirect('/ma-selection');
+        }
+
         return $next($request);
     }
 }
index 0e5fc370147eef7644b3c132b67ad017fcac799c..e115681b10e79a3fd28a392bcd9b27c3be8c30d0 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace App\Models;
 
+use Illuminate\Http\Request;
+
 class Cart extends ECommerceCommon
 {
     protected $table = 'cart';
@@ -60,4 +62,9 @@ class Cart extends ECommerceCommon
 
         return $refs;
     }
+
+    public static function hasNoEcommerceProductInCart(Request $request) {
+        $cartData = $request->session()->get('cart_items', []);
+        return sizeof(array_filter($cartData, function($n) { return empty($n['basic_selling_price']); })) > 0 ?? false;
+    }
 }
diff --git a/app/Templates/Order.php b/app/Templates/Order.php
new file mode 100644 (file)
index 0000000..631c841
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+
+
+namespace App\Templates;
+
+
+class Order extends Base
+{
+    public function getName()
+    {
+        return 'Ma commande';
+    }
+
+    public function init()
+    {
+        parent::init();
+    }
+}
index bc1845c6a4b4de30194b2b2b4d24dcf0ca60073c..43aae7c482b8da82d0d570b4f8062ae18c7076be 100644 (file)
                 <div>
                     <cart :items='items' :sendevents="false" class="bg-grey-100 p-1v pb-0 overflow-hidden"></cart>
 
-                    <div class="bg-grey-100 p-1v pt-0" v-cloak v-if="cartItemCount === cartItemHasPriceCount">
-                        <div class="cart-shipping-fees text-navy">
-                            {{ __('Frais de ports') }} : <span v-cloak>@{{ total > 1000 ? '20€' : '0€' }}</span>
-                        </div>
-                        <div class="cart-total">
-                            <p class="text-2xl text-navy">{{ __('Total HT') }} : <span v-cloak>@{{ total }}</span></p>
-                            <p class="text-2xl text-navy">{{ __('Montant TVA') }} : <span v-cloak>@{{ tva }}</span></p>
-                            <p class="text-2xl text-navy">{{ __('Total TTC') }} : <span v-cloak>@{{ totalTTC }}</span></p>
-                        </div>
-                    </div>
-                    <button class="cart-valid-command btn btn-custom xs:w-full" data-id="" v-cloak v-if="cartItemCount === cartItemHasPriceCount" @click="order({{$pageId}})">
-                        {{ __('Valider la commande') }}
-                    </button>
-
                     @if(\App\Models\Client::getClientConnected())
-                        <div class="cart-links">
-                            <a href="#" id="getQuote" v-cloak v-if="cartItemCount === cartItemHasPriceCount">{{ __('Obtenir un devis officiel') }}</a><br>
+                        <div class="cart-links" style="margin-top: 32px;">
                             <a href="#" @click.prevent="storeCart">{{ __('Enregistrer ce panier') }}</a>
                         </div>
                     @endif
-
-                    <div class="text-sm" v-cloak v-if="cartItemCount === cartItemHasPriceCount">
-                        En nous transmettant votre demande, vous acceptez que PM Instrumentation traite vos données
-                        personnelles dans le but de vous offrir un service de qualité. Pour plus d’information sur la
-                        protection de vos données à caractère personnel, vous pouvez consulter la page
-                        <a href="/vie-privee">Vie privée</a>.
-                    </div>
                 </div>
 
                 <div>
-                    <div class="bg-grey-100 p-1v" v-cloak v-show="cartItemCount !== cartItemHasPriceCount">
+                    <div class="bg-grey-100 p-1v">
                         @form([
                         'action' => '/ajax/request_quote',
                         'ga'=>false,
                         'extra_fields' => '<input type="hidden" name="cart_data" :value="cartData">' // Populated by VueJS
                         ])
                     </div>
-
-                    <div class="bg-grey-100 p-1v cart-addresses" v-cloak v-show="cartItemCount === cartItemHasPriceCount">
-                        <h2 class="font-normal">{{ __('Choisir une adresse de facturation') }} :</h2>
-                        <form class="mb-12">
-                            <div class="grid grid-cols-2 grid-gap-lg grid-rows-0 mb-3">
-                                <div class="bg-white p-3" v-for="address in addresses" :key="address.id">
-                                    <div class="form-group flex items-start" :data="address.address_billing">
-                                        <input :id="'billing_address-'+address.id" name="billing_address" type="radio" :checked="address.billing_address === '1' ? true : false"/>
-                                        <label :for="'billing_address-'+address.id">
-                                            @verbatim
-                                                <span class="text-navy">{{ address.name }}</span>
-                                                <div class="text-sm leading-5">
-                                                    {{ address.company }}<br>
-                                                    {{ address.firstname }}&nbsp;{{ address.lastname }}<br>
-                                                    {{ address.address }}<br>
-                                                    {{ address.zipcode }}<br>
-                                                    {{ address.city }}
-                                                </div>
-                                            @endverbatim
-                                        </label>
-                                    </div>
-                                </div>
-                            </div>
-                            <a href="/mon-compte#address">{{ __('Ajouter une adresse') }}</a>
-                        </form>
-                        <h2 class="font-normal">{{ __('Choisir une adresse de livraison') }} :</h2>
-                        <form>
-                            <div class="grid grid-cols-2 grid-gap-lg grid-rows-0 mb-3">
-                                <div class="bg-white p-3" v-for="address in addresses" :key="address.id">
-                                    <div class="form-group flex items-start" :data="address.address_billing">
-                                        <input :id="'delivery_address-'+address.id" name="delivery_address" type="radio" :checked="address.delivery_address === '1' ? true : false"/>
-                                        <label :for="'delivery_address-'+address.id">
-                                            @verbatim
-                                                <span class="text-navy">{{ address.name }}</span>
-                                                <div class="text-sm leading-5">
-                                                    {{ address.company }}<br>
-                                                    {{ address.firstname }}&nbsp;{{ address.lastname }}<br>
-                                                    {{ address.address }}<br>
-                                                    {{ address.zipcode }}<br>
-                                                    {{ address.city }}
-                                                </div>
-                                            @endverbatim
-                                        </label>
-                                    </div>
-                                </div>
-                            </div>
-                            <a href="/mon-compte#address">{{ __('Ajouter une adresse') }}</a>
-                        </form>
-                    </div>
                 </div>
 
             </grid>
diff --git a/resources/views/pages/order.blade.php b/resources/views/pages/order.blade.php
new file mode 100644 (file)
index 0000000..d556680
--- /dev/null
@@ -0,0 +1,110 @@
+@extends('layouts/app')
+
+@php($pageId = $page->id)
+
+@section('content')
+    <content class="pb-3v cart-page">
+        <text-block :title="$page->title" title-tag="h1" />
+
+        <div v-if="cartItemCount > 0">
+
+            {{-- Columns set to auto because cart will disappear when quote form is sent, leaving just the confirmation message. --}}
+            <grid cols="auto" class="sm:grid-cols-1">
+
+                {{-- Nested divs to allow grey backgrounds of columns to match the height of their content instead of total height --}}
+                <div>
+                    <cart :items='items' :sendevents="false" class="bg-grey-100 p-1v pb-0 overflow-hidden"></cart>
+
+                    <div class="bg-grey-100 p-1v pt-0" v-cloak v-if="cartItemCount === cartItemHasPriceCount">
+                        <div class="cart-shipping-fees text-navy">
+                            {{ __('Frais de ports') }} : <span v-cloak>@{{ total > 1000 ? '20€' : '0€' }}</span>
+                        </div>
+                        <div class="cart-total">
+                            <p class="text-2xl text-navy">{{ __('Total HT') }} : <span v-cloak>@{{ total }}</span></p>
+                            <p class="text-2xl text-navy">{{ __('Montant TVA') }} : <span v-cloak>@{{ tva }}</span></p>
+                            <p class="text-2xl text-navy">{{ __('Total TTC') }} : <span v-cloak>@{{ totalTTC }}</span></p>
+                        </div>
+                    </div>
+                    <button class="cart-valid-command btn btn-custom xs:w-full" data-id="" v-cloak v-if="cartItemCount === cartItemHasPriceCount" @click="order({{$pageId}})">
+                        {{ __('Valider la commande') }}
+                    </button>
+
+                    @if(\App\Models\Client::getClientConnected())
+                        <div class="cart-links">
+                            <a href="{{ $nav->getHrefByName('cart') }}" v-cloak>{{ __('Obtenir un devis officiel') }}</a><br>
+                            <a href="#" @click.prevent="storeCart">{{ __('Enregistrer ce panier') }}</a>
+                        </div>
+                    @endif
+
+                    <div class="text-sm" v-cloak v-if="cartItemCount === cartItemHasPriceCount">
+                        En nous transmettant votre demande, vous acceptez que PM Instrumentation traite vos données
+                        personnelles dans le but de vous offrir un service de qualité. Pour plus d’information sur la
+                        protection de vos données à caractère personnel, vous pouvez consulter la page
+                        <a href="/vie-privee">Vie privée</a>.
+                    </div>
+                </div>
+
+                <div>
+                    <div class="bg-grey-100 p-1v cart-addresses" v-cloak>
+                        <h2 class="font-normal">{{ __('Choisir une adresse de facturation') }} :</h2>
+                        <form class="mb-12">
+                            <div class="grid grid-cols-2 grid-gap-lg grid-rows-0 mb-3">
+                                <div class="bg-white p-3" v-for="address in addresses" :key="address.id">
+                                    <div class="form-group flex items-start" :data="address.address_billing">
+                                        <input :id="'billing_address-'+address.id" name="billing_address" type="radio" :checked="address.billing_address === '1' ? true : false"/>
+                                        <label :for="'billing_address-'+address.id">
+                                            @verbatim
+                                                <span class="text-navy">{{ address.name }}</span>
+                                                <div class="text-sm leading-5">
+                                                    {{ address.company }}<br>
+                                                    {{ address.firstname }}&nbsp;{{ address.lastname }}<br>
+                                                    {{ address.address }}<br>
+                                                    {{ address.zipcode }}<br>
+                                                    {{ address.city }}
+                                                </div>
+                                            @endverbatim
+                                        </label>
+                                    </div>
+                                </div>
+                            </div>
+                            <a href="/mon-compte#address">{{ __('Ajouter une adresse') }}</a>
+                        </form>
+                        <h2 class="font-normal">{{ __('Choisir une adresse de livraison') }} :</h2>
+                        <form>
+                            <div class="grid grid-cols-2 grid-gap-lg grid-rows-0 mb-3">
+                                <div class="bg-white p-3" v-for="address in addresses" :key="address.id">
+                                    <div class="form-group flex items-start" :data="address.address_billing">
+                                        <input :id="'delivery_address-'+address.id" name="delivery_address" type="radio" :checked="address.delivery_address === '1' ? true : false"/>
+                                        <label :for="'delivery_address-'+address.id">
+                                            @verbatim
+                                                <span class="text-navy">{{ address.name }}</span>
+                                                <div class="text-sm leading-5">
+                                                    {{ address.company }}<br>
+                                                    {{ address.firstname }}&nbsp;{{ address.lastname }}<br>
+                                                    {{ address.address }}<br>
+                                                    {{ address.zipcode }}<br>
+                                                    {{ address.city }}
+                                                </div>
+                                            @endverbatim
+                                        </label>
+                                    </div>
+                                </div>
+                            </div>
+                            <a href="/mon-compte#address">{{ __('Ajouter une adresse') }}</a>
+                        </form>
+                    </div>
+                </div>
+
+            </grid>
+
+        </div>
+
+        <div v-cloak v-if="cartItemCount == 0" class="p-1v text-center bg-grey-100 text-lg">
+            {{ __("Vous n'avez encore rien sélectionné") }}
+        </div>
+
+    </content>
+    <modal-confirm>
+        <p>@{{ confirmMessage }}</p>
+    </modal-confirm>
+@endsection
index f3b04cfc9e10a5e168711e2558fe21e4b903bb74..fabbdd2b9d2bd0dca70264de146a8035879d606a 100644 (file)
@@ -43,7 +43,7 @@
         </ul>
 
         @if (config('features.quote'))
-            <a href="{{ $nav->getHrefByName('cart') }}"
+            <a :href="cartItemCount === cartItemHasPriceCount ? '{{ $nav->getHrefByName('order') }}' : '{{ $nav->getHrefByName('cart') }}' "
                @click="openCart"
                class="cart-header text-right flex items-center cursor-pointer text-white hover:text-primary">
                 @include('partials.cart')
index f0c3b44df10cc168fd44df7cf12864ded8c05537..532001b771179605e5aa35fb6d6d665157290987 100644 (file)
@@ -15,7 +15,7 @@ Route::post('/reset-password', 'Client\ResetPasswordController@resetPassword')->
 //add specific name to be simple to add active class
 //add middleware to secure this specific page
 Route::any('{page}', 'PageController@catchall')->where(
-    ['page' => '\b(se-connecter|mon-compte|paniers-enregistres|mes-commandes)\b']
+    ['page' => '\b(se-connecter|mon-compte|paniers-enregistres|mes-commandes|ma-commande)\b']
 )->name('client')->middleware('client');
 
 Route::any('{page}/{subs?}',  'PageController@catchall')