namespace App\Http\Middleware;
+use App\Models\Cart;
use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
$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);
}
}
namespace App\Models;
+use Illuminate\Http\Request;
+
class Cart extends ECommerceCommon
{
protected $table = 'cart';
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;
+ }
}
--- /dev/null
+<?php
+
+
+namespace App\Templates;
+
+
+class Order extends Base
+{
+ public function getName()
+ {
+ return 'Ma commande';
+ }
+
+ public function init()
+ {
+ parent::init();
+ }
+}
<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 }} {{ 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 }} {{ 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>
--- /dev/null
+@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 }} {{ 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 }} {{ 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
</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')
//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')