fix design, add addresses

This commit is contained in:
Ludovic CANDELLIER
2022-12-29 16:16:09 +01:00
parent 7819a8e11b
commit 28c200fd9f
22 changed files with 165 additions and 75 deletions

View File

@@ -6,12 +6,16 @@ use Illuminate\Http\Request;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Repositories\Shop\Articles; use App\Repositories\Shop\Articles;
use App\Repositories\Shop\Categories;
class ArticleController extends Controller class ArticleController extends Controller
{ {
public function show($id) public function show($id)
{ {
$data['article'] = Articles::getArticleToSell($id); $data['article'] = Articles::getArticleToSell($id);
// $data['breadcrumb'] = Categories::getAncestorsByCategory($category_id);
// dump($data);
// exit;
return view('Shop.Articles.show', $data); return view('Shop.Articles.show', $data);
} }
} }

View File

@@ -15,6 +15,8 @@ use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Sebastienheyd\Boilerplate\Rules\Password; use Sebastienheyd\Boilerplate\Rules\Password;
use App\Repositories\Shop\Customers;
use App\Repositories\Shop\CustomerAddresses;
use App\Models\Shop\Customer; use App\Models\Shop\Customer;
@@ -51,14 +53,8 @@ class RegisterController extends Controller
protected function create(array $data) protected function create(array $data)
{ {
$user = Customer::withTrashed()->updateOrCreate(['email' => $data['email']], [ $user = Customers::create($data);
'active' => true, CustomerAddresses::add($user->id, $data);
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
return $user; return $user;
} }

View File

@@ -54,6 +54,7 @@ class Categories
} }
$tree[] = $leaf; $tree[] = $leaf;
} }
$tree = collect($tree)->sortBy('name')->toArray();
return $tree; return $tree;
} }

View File

@@ -21,6 +21,17 @@ class CustomerAddresses
return CustomerAddress::find($id); return CustomerAddress::find($id);
} }
public static function add($user_id, $data)
{
return self::store([
'customer_id' => $user_id,
'address' => $data['delivery_address'],
'address2' => $data['delivery_address2'],
'zipcode' => $data['delivery_zipcode'],
'city' => $data['city'],
]);
}
public static function store($data) public static function store($data)
{ {
$id = $data['id'] ?? false; $id = $data['id'] ?? false;

View File

@@ -148,8 +148,22 @@ class Customers
public static function create($data) public static function create($data)
{ {
$data['uuid'] = Str::uuid()->toString(); $user = Customer::create([
return Customer::create($data); 'uuid' => Str::uuid(),
'active' => true,
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'company' => $data['company'],
'tva' => $data['tva'],
'phone' => $data['phone'],
'address' => $data['address'],
'address2' => $data['address2'],
'zipcode' => $data['zipcode'],
'city' => $data['city'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
return $user;
} }
public static function update($data, $id = false) public static function update($data, $id = false)

View File

@@ -20,12 +20,12 @@ class Homepages
public static function getFooter() public static function getFooter()
{ {
return self::get(2)->text ?? ''; return self::get(2)->text ?? '';
} }
public static function getExtraFooter() public static function getExtraFooter()
{ {
return self::get(3)->text ?? ''; return self::get(3)->text ?? '';
} }
public static function get($id) public static function get($id)

View File

@@ -60,6 +60,10 @@ label {
color: #517C39; color: #517C39;
} }
a.green {
color: #517C39 !important;
}
.green-dark { .green-dark {
color: #335012; color: #335012;
} }

View File

@@ -130,7 +130,11 @@
"config": { "config": {
"optimize-autoloader": true, "optimize-autoloader": true,
"preferred-install": "dist", "preferred-install": "dist",
"sort-packages": true "sort-packages": true,
"allow-plugins": {
"pestphp/pest-plugin": true,
"dealerdirect/phpcodesniffer-composer-installer": true
}
}, },
"extra": { "extra": {
"laravel": { "laravel": {

View File

@@ -3,7 +3,7 @@
<img src="{{ App\Repositories\Shop\Articles::getPreviewSrc($article['image'] ?? false) }}" class="card-img-top" alt="{{ $product_name }}"> <img src="{{ App\Repositories\Shop\Articles::getPreviewSrc($article['image'] ?? false) }}" class="card-img-top" alt="{{ $product_name }}">
<div class="card-body p-2 pb-1"> <div class="card-body p-2 pb-1">
<div class="row card-title"> <div class="row card-title">
<div class="col-12"> <div class="col-12 light">
<!-- <!--
<i class="fa fa-heart red"></i> <i class="fa fa-heart red"></i>
--> -->

View File

@@ -28,10 +28,10 @@
@if (count($article['tags'] ?? [])) @if (count($article['tags'] ?? []))
<h3>Caractéristiques</h3> <h3>Caractéristiques</h3>
@foreach ($article['tags'] as $tag_group => $items) @foreach ($article['tags'] as $tag_group => $items)
<div> <div class="mb-2">
{{ $tag_group }} : {{ $tag_group }} :
@foreach ($items as $tag) @foreach ($items as $tag)
<span class="btn btn-xs pt-0 pb-0">{{ $tag }}</span> <span class="btn btn-xs btn-secondary pt-0 pb-0">{{ $tag }}</span>
@endforeach @endforeach
</div> </div>
@endforeach @endforeach

View File

@@ -0,0 +1,36 @@
<div class="row">
<div class="col-12">
@include('components.form.input', [
'name' => ($prefix ?? '') . 'address',
'value' => $customer['address'] ?? '',
'label' => $label ?? '',
])
</div>
</div>
<div class="row">
<div class="col-12">
@include('components.form.input', [
'name' => ($prefix ?? '') . 'address2',
'value' => $customer['address2'] ?? '',
'label' => 'Complément d\'adresse',
])
</div>
</div>
<div class="row">
<div class="col-4">
@include('components.form.input', [
'name' => ($prefix ?? '') . 'zipcode',
'value' => $customer['zipcode'] ?? '',
'label' => 'Code postal',
])
</div>
<div class="col-8">
@include('components.form.input', [
'name' => ($prefix ?? '') . 'city',
'value' => $customer['city'] ?? '',
'label' => 'Ville',
])
</div>
</div>

View File

@@ -0,0 +1,36 @@
<div class="row">
<div class="col-12">
@include('components.form.input', [
'name' => 'delivery_address',
'value' => $customer['address'] ?? '',
'label' => $label ?? '',
])
</div>
</div>
<div class="row">
<div class="col-12">
@include('components.form.input', [
'name' => 'delivery_address2',
'value' => $customer['address2'] ?? '',
'label' => 'Complément d\'adresse',
])
</div>
</div>
<div class="row">
<div class="col-4">
@include('components.form.input', [
'name' => 'delivery_zipcode',
'value' => $customer['zipcode'] ?? '',
'label' => 'Code postal',
])
</div>
<div class="col-8">
@include('components.form.input', [
'name' => 'delivery_city',
'value' => $customer['city'] ?? '',
'label' => 'Ville',
])
</div>
</div>

View File

@@ -49,40 +49,4 @@
</div> </div>
</div> </div>
<div class="row"> @include('Shop.Customers.partials.address', ['label' => 'Adresse de facturation'])
<div class="col-12">
@include('components.form.input', [
'name' => 'address',
'value' => $customer['address'] ?? '',
'label' => 'Adresse de facturation',
])
</div>
</div>
<div class="row">
<div class="col-12">
@include('components.form.input', [
'name' => 'address2',
'value' => $customer['address2'] ?? '',
'label' => 'Complément d\'adresse',
])
</div>
</div>
<div class="row">
<div class="col-4">
@include('components.form.input', [
'name' => 'zipcode',
'value' => $customer['zipcode'] ?? '',
'label' => 'Code postal',
])
</div>
<div class="col-8">
@include('components.form.input', [
'name' => 'city',
'value' => $customer['city'] ?? '',
'label' => 'Ville',
])
</div>
</div>

View File

@@ -1,8 +1,8 @@
@if ($shelve['articles']) @if ($shelve['articles'])
<div class="mb-3 bg-green-ultra-dark rounded-lg"> <div class="mb-3 rounded-lg">
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">
<h1 class="p-2" style="font-size: 2em;">{{ $shelve['name'] }}</h1> <h1 class="p-2 green" style="font-size: 2em;">{{ $shelve['name'] }}</h1>
</div> </div>
<div class="col-6 text-right"> <div class="col-6 text-right">
<a class="mt-2 btn btn-green-dark" href="{{ route('Shop.Categories.show', ['id' => $shelve['id']]) }}">Découvrir la sélection</a> <a class="mt-2 btn btn-green-dark" href="{{ route('Shop.Categories.show', ['id' => $shelve['id']]) }}">Découvrir la sélection</a>
@@ -13,7 +13,7 @@
<div class="col-11 mx-auto shelve_slider_{{ $shelve['id'] }} slider"> <div class="col-11 mx-auto shelve_slider_{{ $shelve['id'] }} slider">
@foreach ($shelve['articles'] as $name => $article) @foreach ($shelve['articles'] as $name => $article)
<div class="text-center pr-2 pl-2"> <div class="text-center pr-2 pl-2">
<a class="green-fluo" href="{{ route('Shop.Articles.show', ['id' => $article['id']]) }}"> <a class="green" href="{{ route('Shop.Articles.show', ['id' => $article['id']]) }}">
<img data-lazy="{{ App\Repositories\Shop\Articles::getPreviewSrc($article['image'] ?? false) }}" class="d-block w-100 rounded" alt="{{ $name }}"/> <img data-lazy="{{ App\Repositories\Shop\Articles::getPreviewSrc($article['image'] ?? false) }}" class="d-block w-100 rounded" alt="{{ $name }}"/>
{{ $name }} {{ $name }}
</a> </a>

View File

@@ -11,11 +11,11 @@
<button class="btn btn-secondary" id="register">Créez mon compte</button> <button class="btn btn-secondary" id="register">Créez mon compte</button>
</p> </p>
<x-layout.collapse id="identification" title="Déjà client" class="d-none identification gradient-green1 rounded-lg"> <x-layout.collapse id="identification" title="Déjà client" class="d-none identification rounded-lg">
@include('Shop.auth.partials.login') @include('Shop.auth.partials.login')
</x-layout.collapse> </x-layout.collapse>
<x-layout.collapse id="personal_data" title="Informations personnelles" class="d-none personal_data gradient-green1 rounded-lg"> <x-layout.collapse id="personal_data" title="Informations personnelles" class="d-none personal_data rounded-lg" uncollapsed=true>
@include('Shop.auth.partials.register') @include('Shop.auth.partials.register')
</x-layout.collapse> </x-layout.collapse>
@endif @endif
@@ -23,15 +23,15 @@
{{ Form::open(['route' => 'Shop.Orders.store', 'id' => 'order-form', 'autocomplete' => 'off']) }} {{ Form::open(['route' => 'Shop.Orders.store', 'id' => 'order-form', 'autocomplete' => 'off']) }}
<div id="registred" @if (!App\Repositories\Shop\Customers::isConnected()) class="d-none" @endif> <div id="registred" @if (!App\Repositories\Shop\Customers::isConnected()) class="d-none" @endif>
<x-layout.collapse id="adresses" title="Adresses" class="gradient-green1 rounded-lg mb-3" uncollapsed=true> <x-layout.collapse id="adresses" title="Adresses" class="rounded-lg mb-3" uncollapsed=true>
@include('Shop.Orders.partials.addresses') @include('Shop.Orders.partials.addresses')
</x-layout.collapse> </x-layout.collapse>
<x-layout.collapse id="delivery_mode" title="Mode de livraison" class="gradient-green1 rounded-lg mb-3" uncollapsed=true> <x-layout.collapse id="delivery_mode" title="Mode de livraison" class="rounded-lg mb-3" uncollapsed=true>
@include('Shop.Orders.partials.deliveries') @include('Shop.Orders.partials.deliveries')
</x-layout.collapse> </x-layout.collapse>
<x-layout.collapse id="payment" title="Paiement" class="gradient-green1 rounded-lg mb-3" uncollapsed=true> <x-layout.collapse id="payment" title="Paiement" class="rounded-lg mb-3" uncollapsed=true>
@include('Shop.Orders.partials.payments') @include('Shop.Orders.partials.payments')
</x-layout.collapse> </x-layout.collapse>
</div> </div>
@@ -40,7 +40,7 @@
</div> </div>
<div class="col-4"> <div class="col-4">
<x-card class='shadow gradient-green1'> <x-card class='shadow'>
@include('Shop.Baskets.partials.basketTotal') @include('Shop.Baskets.partials.basketTotal')
</x-card> </x-card>
</div> </div>

View File

@@ -1,5 +1,5 @@
{!! Form::open(['route' => 'Shop.register.post', 'method' => 'post', 'autocomplete'=> 'off']) !!} {!! Form::open(['route' => 'Shop.register.post', 'method' => 'post', 'autocomplete'=> 'off']) !!}
<div class="row"> <div class="row green">
<div class="col-12"> <div class="col-12">
<x-card title='Créez votre compte' class='mt-3 mb-3'> <x-card title='Créez votre compte' class='mt-3 mb-3'>
@@ -8,11 +8,13 @@
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-6">
<div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}"> <div class="form-group {{ $errors->has('password') ? 'has-error' : '' }}">
<label>Mot de passe</label>
{{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password'), 'required']) }} {{ Form::password('password', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password'), 'required']) }}
{!! $errors->first('password','<p class="text-danger"><strong>:message</strong></p>') !!} {!! $errors->first('password','<p class="text-danger"><strong>:message</strong></p>') !!}
</div> </div>
</div> </div>
<div class="col-6"> <div class="col-6">
<label>Confirmation du mot de passe</label>
<div class="form-group {{ $errors->has('password_confirmation') ? 'has-error' : '' }}"> <div class="form-group {{ $errors->has('password_confirmation') ? 'has-error' : '' }}">
{{ Form::password('password_confirmation', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password_confirm'), 'required']) }} {{ Form::password('password_confirmation', ['class' => 'form-control', 'placeholder' => __('boilerplate::auth.fields.password_confirm'), 'required']) }}
{!! $errors->first('password_confirmation','<p class="text-danger"><strong>:message</strong></p>') !!} {!! $errors->first('password_confirmation','<p class="text-danger"><strong>:message</strong></p>') !!}
@@ -22,8 +24,17 @@
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
@include('components.form.checkbox', ['name' => 'use_for_delivery', 'value' => false]) @include('components.form.checkboxes.icheck', [
Utiliser une autre adresse pour la livraison 'name' => 'use_for_delivery',
'value' => false,
'label' => 'Utiliser une autre adresse pour la livraison',
])
</div>
</div>
<div class="row d-none" id="address_delivery">
<div class="col-12">
@include('Shop.Customers.partials.address', ['label' => 'Adresse de livraison', 'prefix' => 'delivery_'])
</div> </div>
</div> </div>
@@ -40,3 +51,12 @@
</div> </div>
</div> </div>
{!! Form::close() !!} {!! Form::close() !!}
@push('js')
<script>
$('#use_for_delivery').click(function() {
$('#address_delivery').toggleClass('d-none');
})
</script>
@endpush

View File

@@ -23,7 +23,7 @@
<body class="bg-green-dark"> <body class="bg-green-dark">
<div class="container bg-green-ultra-dark" style="min-height: 100vh;"> <div class="container bg-light" style="min-height: 100vh;">
<main> <main>
@include("Shop.layout.partials.header") @include("Shop.layout.partials.header")
<div class="content-wrapper"> <div class="content-wrapper">

View File

@@ -1,7 +1,7 @@
<div class="row"> <div class="row">
<div class="col-12 text-right p-2"> <div class="col-12 text-right p-2">
<a href="{{ route('Shop.Basket.basket') }}" style="color: white;"> <a href="{{ route('Shop.Basket.basket') }}" style="color: white;">
<button type="button" class="btn bg-green-dark light"> <button type="button" class="btn green">
<i class="fa fa-2x fa-fw fa-shopping-basket mr-2"></i> <i class="fa fa-2x fa-fw fa-shopping-basket mr-2"></i>
<span class="ml-2 badge bg-yellow green-dark"> <span class="ml-2 badge bg-yellow green-dark">
<span id="count-basket">{{ \App\Repositories\Core\User\ShopCart::getTotalQuantity() }}</span> <span id="count-basket">{{ \App\Repositories\Core\User\ShopCart::getTotalQuantity() }}</span>

View File

@@ -1,7 +1,7 @@
<div class="row bg-green"> <div class="row bg-light">
<div class="col-3 form-inline"> <div class="col-3 form-inline">
<a href="/"><img src="/img/logo.jpg" class="img-responvive"></a> <a href="/"><img src="/img/logo.png" height="52"></a>
</div> </div>
<div class="col-5 form-inline"> <div class="col-5 form-inline">

View File

@@ -1,6 +1,6 @@
<div class="row"> <div class="row">
<div class="col-12 text-right p-2"> <div class="col-12 text-right p-2">
<button type="button" class="btn bg-green-dark light" data-toggle="dropdown"> <button type="button" class="btn bg-light green" data-toggle="dropdown">
@if (App\Repositories\Shop\Customers::isConnected()) @if (App\Repositories\Shop\Customers::isConnected())
<img src="{{ App\Repositories\Shop\Customers::getAvatar() }}" class="img-fluid" title="{{ App\Repositories\Shop\Customers::getName() }}"> <img src="{{ App\Repositories\Shop\Customers::getAvatar() }}" class="img-fluid" title="{{ App\Repositories\Shop\Customers::getName() }}">
@else @else

View File

@@ -1,19 +1,19 @@
<div class="row shadow mb-3"> <div class="row shadow mb-3">
<div class="col-12 pl-0 pr-0"> <div class="col-12 pl-0 pr-0">
<nav class="navbar navbar-expand-lg navbar-light gradient-green1"> <nav class="navbar navbar-expand-lg navbar-light">
<div class="collapse navbar-collapse" id="navbarContent"> <div class="collapse navbar-collapse" id="navbarContent">
<ul class="navbar-nav"> <ul class="navbar-nav">
@foreach ($categories as $menu) @foreach ($categories as $menu)
<li class="nav-item dropdown megamenu"> <li class="nav-item dropdown megamenu">
@if ($menu['children'] ?? false) @if ($menu['children'] ?? false)
<a id="megamenu_{{ $menu['id'] }}" href="{{ route('Shop.Categories.show', ['id' => $menu['id']]) }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle font-weight-bold text-uppercase @if (($category['id'] ?? false) == $menu['id']) active @endif"> <a id="megamenu_{{ $menu['id'] }}" href="{{ route('Shop.Categories.show', ['id' => $menu['id']]) }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle font-weight-bold text-uppercase green @if (($category['id'] ?? false) == $menu['id']) active @endif">
{{ $menu['name'] }} {{ $menu['name'] }}
</a> </a>
<div aria-labelledby="megamenu_{{ $menu['id'] }}" class="dropdown-menu border-0 p-0 m-0"> <div aria-labelledby="megamenu_{{ $menu['id'] }}" class="dropdown-menu border-0 p-0 m-0">
@include('Shop.layout.partials.megamenu') @include('Shop.layout.partials.megamenu')
</div> </div>
@else @else
<a href="{{ route('Shop.Categories.show', ['id' => $menu['id']]) }}" class="nav-link font-weight-bold text-uppercase @if (($category['id'] ?? false) == $menu['id']) active @endif"> <a href="{{ route('Shop.Categories.show', ['id' => $menu['id']]) }}" class="nav-link font-weight-bold text-uppercase green @if (($category['id'] ?? false) == $menu['id']) active @endif">
{{ $menu['name'] }} {{ $menu['name'] }}
</a> </a>
@endif @endif
@@ -22,7 +22,7 @@
</ul> </ul>
</div> </div>
<div class="float-right p-3"> <div class="float-right p-3">
<span style="font-size: 1.2em; font-weight: 600;"> <span class="green" style="font-size: 1.2em; font-weight: 600;">
Variétés Paysannes de la Semence à l'Assiette Variétés Paysannes de la Semence à l'Assiette
</span> </span>
</div> </div>

View File

@@ -1,4 +1,4 @@
<div class="icheck-{{ $color ?? 'success' }} {{ $class ?? '' }}"> <div class="icheck-{{ $color ?? 'success' }} {{ $class ?? '' }}">
@include('components.form.checkbox') @include('components.form.checkbox')
<label class="control-label light" for="{{ $id_name ?? $name }}">{{ $label ?? '' }}</label> <label class="control-label" for="{{ $id_name ?? $name }}">{{ $label ?? '' }}</label>
</div> </div>