From 2e79c7320ba322d7244170db94c6950f9e2a0fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 18 Aug 2021 17:04:51 +0200 Subject: [PATCH] Add ranges resource on BO Add product belongsTo Range --- app/Http/Controllers/ProduitsController.php | 6 +- .../Controllers/bo/ProductsController.php | 47 ++++---- app/Http/Controllers/bo/RangeController.php | 106 ++++++++++++++++++ app/Http/Requests/StoreProductRequest.php | 32 ++++++ app/Http/Requests/StoreRangeRequest.php | 30 +++++ app/Http/Requests/UpdateProductRequest.php | 32 ++++++ app/Http/Requests/UpdateRangeRequest.php | 30 +++++ app/Models/Product.php | 5 +- app/Models/Range.php | 16 +++ ...8_18_154119_create_models_ranges_table.php | 31 +++++ .../2021_08_18_154140_create_ranges_table.php | 32 ++++++ ..._154206_add_range_id_to_products_table.php | 34 ++++++ resources/views/bo/products/create.blade.php | 22 +--- resources/views/bo/products/edit.blade.php | 29 +---- resources/views/bo/products/index.blade.php | 1 + .../views/bo/products/input-forms.blade.php | 43 +++++++ resources/views/bo/ranges/create.blade.php | 27 +++++ resources/views/bo/ranges/edit.blade.php | 30 +++++ resources/views/bo/ranges/index.blade.php | 53 +++++++++ .../views/bo/ranges/input-forms.blade.php | 13 +++ resources/views/layouts/bo.blade.php | 2 + .../views/modules/flashMessage.blade.php | 54 +++++++++ routes/web.php | 2 + 23 files changed, 605 insertions(+), 72 deletions(-) create mode 100644 app/Http/Controllers/bo/RangeController.php create mode 100644 app/Http/Requests/StoreProductRequest.php create mode 100644 app/Http/Requests/StoreRangeRequest.php create mode 100644 app/Http/Requests/UpdateProductRequest.php create mode 100644 app/Http/Requests/UpdateRangeRequest.php create mode 100644 app/Models/Range.php create mode 100644 database/migrations/2021_08_18_154119_create_models_ranges_table.php create mode 100644 database/migrations/2021_08_18_154140_create_ranges_table.php create mode 100644 database/migrations/2021_08_18_154206_add_range_id_to_products_table.php create mode 100644 resources/views/bo/products/input-forms.blade.php create mode 100644 resources/views/bo/ranges/create.blade.php create mode 100644 resources/views/bo/ranges/edit.blade.php create mode 100644 resources/views/bo/ranges/index.blade.php create mode 100644 resources/views/bo/ranges/input-forms.blade.php create mode 100644 resources/views/modules/flashMessage.blade.php diff --git a/app/Http/Controllers/ProduitsController.php b/app/Http/Controllers/ProduitsController.php index 8bea4fd..f9ec0db 100644 --- a/app/Http/Controllers/ProduitsController.php +++ b/app/Http/Controllers/ProduitsController.php @@ -3,14 +3,16 @@ namespace App\Http\Controllers; use App\Models\Product; +use App\Models\Range; use Illuminate\Http\Request; class ProduitsController extends Controller { public function index() { $products = Product::all(); - if (view()->exists('front.basic.produits-porteurs')) - return view('front.basic.produits-porteurs', compact('products')); + if (view()->exists('front.basic.produits-porteurs')) { + return view('front.basic.produits-porteurs', compact('products', 'ranges')); + } return redirect()->route('home'); } } diff --git a/app/Http/Controllers/bo/ProductsController.php b/app/Http/Controllers/bo/ProductsController.php index 319599f..d684315 100644 --- a/app/Http/Controllers/bo/ProductsController.php +++ b/app/Http/Controllers/bo/ProductsController.php @@ -3,7 +3,10 @@ namespace App\Http\Controllers\bo; use App\Http\Controllers\Controller; +use App\Http\Requests\StoreProductRequest; +use App\Http\Requests\UpdateProductRequest; use App\Models\Product; +use App\Models\Range; use Illuminate\Http\Request; use Illuminate\Support\Str; @@ -27,32 +30,34 @@ class ProductsController extends Controller */ public function create() { - return view('bo.products.create'); + $ranges = Range::all(); + if (!count($ranges)) { + return \redirect()->route('bo.ranges.index') + ->with( + 'error', + 'Vous devez ajouter une gamme avant de pouvoir ajouter un produit' + ); + } + return view('bo.products.create', compact('ranges')); } /** * Store a newly created resource in storage. * - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\StoreProductRequest $request * @return \Illuminate\Http\Response */ - public function store(Request $request) + public function store(StoreProductRequest $request) { $name = $request->name; $slug = Str::slug($name); $no_art = $request->no_art; $picture = $request->picture; - $request->validate([ - 'name' => 'required|string|max:255', - 'picture' => 'image|mimes:jpeg,png,jpg|max:2048|dimensions:' . - 'max-width=500' . - ',max-height=500', - ]); - $product = new Product(); $product->name = $name; $product->no_art = $no_art; + $product->range()->associate($request->range_id); $product->save(); if ($picture !== null) { @@ -84,32 +89,34 @@ class ProductsController extends Controller */ public function edit($id) { + $ranges = Range::all(); + if (!count($ranges)) { + return \redirect()->route('bo.ranges.index') + ->with( + 'error', + 'Vous devez ajouter une gamme avant de pouvoir ajouter un produit' + ); + } $product = Product::findOrFail($id); - return view('bo.products.edit', compact('product')); + return view('bo.products.edit', compact('product', 'ranges')); } /** * Update the specified resource in storage. * - * @param \Illuminate\Http\Request $request + * @param \App\Http\Requests\UpdateProductRequest $request * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(UpdateProductRequest $request, $id) { $name = $request->name; $slug = Str::slug($name); $no_art = $request->no_art; $picture = $request->picture; - $request->validate([ - 'name' => 'required|string|max:255', - 'picture' => 'image|mimes:jpeg,png,jpg|max:2048|dimensions:' . - 'max-width=500' . - ',max-height=500', - ]); - $product = Product::findOrFail($id); + $product->range()->associate($request->range_id); if ($picture !== null) { if ($product->picture !== null && file_exists(public_path('images/produits/') . $product->picture)) diff --git a/app/Http/Controllers/bo/RangeController.php b/app/Http/Controllers/bo/RangeController.php new file mode 100644 index 0000000..3ef8146 --- /dev/null +++ b/app/Http/Controllers/bo/RangeController.php @@ -0,0 +1,106 @@ +validated()))->save()) { + return back()->withErrors('Impossible de sauvegarder la gamme'); + } + return \response()->redirectToRoute('bo.ranges.index') + ->with('success', 'La gamme à bien été enregistré !'); + } + + /** + * Display the specified resource. + * + * @param \App\Models\Range $range + * @return \Illuminate\Http\Response + */ + public function show(Range $range) + { + return view('bo.ranges.view', compact('range')); + } + + /** + * Show the form for editing the specified resource. + * + * @param \App\Models\Range $range + * @return \Illuminate\Http\Response + */ + public function edit(Range $range) + { + return view('bo.ranges.update', compact('range')); + } + + /** + * Update the specified resource in storage. + * + * @param \App\Http\Requests\UpdateRangeRequest $request + * @param \App\Models\Range $range + * @return \Illuminate\Http\Response + */ + public function update(UpdateRangeRequest $request, Range $range) + { + $range->fill($request->validated()); + $range->saveOrFail(); + return \response()->redirectToRoute('bo.ranges.edit', $range) + ->with('success', 'La gamme à bien été mise à jour !'); + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\Range $range + * @return \Illuminate\Http\Response + */ + public function destroy(Range $range) + { + if ($range->products()->count()) { + return back()->withError( + 'Cette gamme est associé a des produits, la supression n\'est pas possible' + ); + } + if (!$range->delete()) { + return back()->withError( + 'Erreur lors de la suppression de la gamme' + ); + } + return \response()->redirectToRoute('bo.ranges.index') + ->with('warning', 'La gamme à bien été supprimée !'); + } +} diff --git a/app/Http/Requests/StoreProductRequest.php b/app/Http/Requests/StoreProductRequest.php new file mode 100644 index 0000000..5ee33df --- /dev/null +++ b/app/Http/Requests/StoreProductRequest.php @@ -0,0 +1,32 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'name' => 'required|string|min:2|max:255', + 'picture' => 'image|mimes:jpeg,png,jpg|max:2048|dimensions:max-width=500,max-height=500', + 'range_id' => 'exists:ranges,id' + ]; + } +} diff --git a/app/Http/Requests/StoreRangeRequest.php b/app/Http/Requests/StoreRangeRequest.php new file mode 100644 index 0000000..0771fbf --- /dev/null +++ b/app/Http/Requests/StoreRangeRequest.php @@ -0,0 +1,30 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'name' => 'required|string|min:2|max:255' + ]; + } +} diff --git a/app/Http/Requests/UpdateProductRequest.php b/app/Http/Requests/UpdateProductRequest.php new file mode 100644 index 0000000..f4a36d0 --- /dev/null +++ b/app/Http/Requests/UpdateProductRequest.php @@ -0,0 +1,32 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'name' => 'required|string|min:2|max:255', + 'picture' => 'image|mimes:jpeg,png,jpg|max:2048|dimensions:max-width=500,max-height=500', + 'range_id' => 'exists:ranges,id' + ]; + } +} diff --git a/app/Http/Requests/UpdateRangeRequest.php b/app/Http/Requests/UpdateRangeRequest.php new file mode 100644 index 0000000..b2bbf40 --- /dev/null +++ b/app/Http/Requests/UpdateRangeRequest.php @@ -0,0 +1,30 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'name' => 'required|string|min:2|max:255' + ]; + } +} diff --git a/app/Models/Product.php b/app/Models/Product.php index 7fb8e6b..3a253a0 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -6,5 +6,8 @@ use Illuminate\Database\Eloquent\Model; class Product extends Model { - // + public function range() + { + return $this->belongsTo(Range::class); + } } diff --git a/app/Models/Range.php b/app/Models/Range.php new file mode 100644 index 0000000..504c88b --- /dev/null +++ b/app/Models/Range.php @@ -0,0 +1,16 @@ +hasMany(Product::class); + } +} diff --git a/database/migrations/2021_08_18_154119_create_models_ranges_table.php b/database/migrations/2021_08_18_154119_create_models_ranges_table.php new file mode 100644 index 0000000..d0132e2 --- /dev/null +++ b/database/migrations/2021_08_18_154119_create_models_ranges_table.php @@ -0,0 +1,31 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('models_ranges'); + } +} diff --git a/database/migrations/2021_08_18_154140_create_ranges_table.php b/database/migrations/2021_08_18_154140_create_ranges_table.php new file mode 100644 index 0000000..0fa3fd4 --- /dev/null +++ b/database/migrations/2021_08_18_154140_create_ranges_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('ranges'); + } +} diff --git a/database/migrations/2021_08_18_154206_add_range_id_to_products_table.php b/database/migrations/2021_08_18_154206_add_range_id_to_products_table.php new file mode 100644 index 0000000..bc11a2c --- /dev/null +++ b/database/migrations/2021_08_18_154206_add_range_id_to_products_table.php @@ -0,0 +1,34 @@ +foreignId('range_id')->before('created_at')->references('id') + ->on('ranges')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('products', function (Blueprint $table) { + $table->dropForeign(['range_id']); + $table->dropColumn('range_id'); + }); + } +} diff --git a/resources/views/bo/products/create.blade.php b/resources/views/bo/products/create.blade.php index 73f61e8..f28cad0 100644 --- a/resources/views/bo/products/create.blade.php +++ b/resources/views/bo/products/create.blade.php @@ -20,27 +20,7 @@
- @if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- - -
-
- - -
-
-
- -
+ @include('bo.products.input-forms')
diff --git a/resources/views/bo/products/edit.blade.php b/resources/views/bo/products/edit.blade.php index 43ff9fc..db5fa76 100644 --- a/resources/views/bo/products/edit.blade.php +++ b/resources/views/bo/products/edit.blade.php @@ -23,34 +23,7 @@
- @if ($errors->any()) -
-
    - @foreach ($errors->all() as $error) -
  • {{ $error }}
  • - @endforeach -
-
- @endif -
- - -
-
- - -
-
-
- - @if ($product->picture !== null) -
-
- - {{$product->name}} - - @endif -
+ @include('bo.products.input-forms')
diff --git a/resources/views/bo/products/index.blade.php b/resources/views/bo/products/index.blade.php index 5033954..aa2bd15 100644 --- a/resources/views/bo/products/index.blade.php +++ b/resources/views/bo/products/index.blade.php @@ -43,6 +43,7 @@ {{$product->name}} + Modifier
diff --git a/resources/views/bo/products/input-forms.blade.php b/resources/views/bo/products/input-forms.blade.php new file mode 100644 index 0000000..0ac4eb1 --- /dev/null +++ b/resources/views/bo/products/input-forms.blade.php @@ -0,0 +1,43 @@ +@if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+@endif +
+ + +
+
+ + +
+
+
+ + @if (isset($product->picture) and $product->picture !== null) +
+
+ + {{$product->name}} + + @endif +
+
+
+
+ +
+ +
+
diff --git a/resources/views/bo/ranges/create.blade.php b/resources/views/bo/ranges/create.blade.php new file mode 100644 index 0000000..3cbe9ed --- /dev/null +++ b/resources/views/bo/ranges/create.blade.php @@ -0,0 +1,27 @@ +@extends('layouts.bo') + +@section('content') +
+ + @csrf +
+
+
+ <{{ __('Gammes - Ajout') }} +
+
+ +
+
+ +
+
+
+
+ @include('bo.ranges.input-forms') +
+ +
+@endsection diff --git a/resources/views/bo/ranges/edit.blade.php b/resources/views/bo/ranges/edit.blade.php new file mode 100644 index 0000000..6a60b6b --- /dev/null +++ b/resources/views/bo/ranges/edit.blade.php @@ -0,0 +1,30 @@ +@extends('layouts.bo') + +@section('content') +
+
+ @method('PUT') + @csrf +
+
+
+ <{{ __('Gammes - Modification') }} +
+
+ @if (session('success')) + {{ session('success') }} + @endif +
+
+ +
+
+
+
+ @include('bo.ranges.input-forms') +
+
+
+@endsection diff --git a/resources/views/bo/ranges/index.blade.php b/resources/views/bo/ranges/index.blade.php new file mode 100644 index 0000000..99a3fd2 --- /dev/null +++ b/resources/views/bo/ranges/index.blade.php @@ -0,0 +1,53 @@ +@extends('layouts.bo') + +@section('content') +
+
+
+
+ {{ __('Gammes') }} +
+
+ +
+ +
+
+
+ @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + + + + + + + @foreach($ranges as $range) + + + + + @endforeach + +
{{ __('Nom') }}
{{$range->name}} + {{ __('Modifier') }} +
+ @method('DELETE') + @csrf + +
+
+
+
+@endsection diff --git a/resources/views/bo/ranges/input-forms.blade.php b/resources/views/bo/ranges/input-forms.blade.php new file mode 100644 index 0000000..8069d20 --- /dev/null +++ b/resources/views/bo/ranges/input-forms.blade.php @@ -0,0 +1,13 @@ +@if ($errors->any()) +
+ +
+@endif +
+ + +
diff --git a/resources/views/layouts/bo.blade.php b/resources/views/layouts/bo.blade.php index 718dd45..a58f17f 100644 --- a/resources/views/layouts/bo.blade.php +++ b/resources/views/layouts/bo.blade.php @@ -87,6 +87,7 @@ Instant gagnants @endsuperadmin Code EAN + Gammes Produits porteurs @superadmin Social share @@ -113,6 +114,7 @@
+ @include('modules.flashMessage') @yield('content')
diff --git a/resources/views/modules/flashMessage.blade.php b/resources/views/modules/flashMessage.blade.php new file mode 100644 index 0000000..cf0c257 --- /dev/null +++ b/resources/views/modules/flashMessage.blade.php @@ -0,0 +1,54 @@ +@if ($message = Session::get('success')) + +@endif + + +@if ($message = Session::get('error')) + +@endif + + +@if ($message = Session::get('warning')) + +@endif + + +@if ($message = Session::get('info')) + +@endif + + +@if ($errors->any()) + +@endif diff --git a/routes/web.php b/routes/web.php index 2d12e9f..f54c0c1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -95,6 +95,8 @@ Route::namespace('bo') Route::post('/winners-list/arcadia/{id}/send', 'WinnersListController@createCourrierArcadia')->name('courrier-arcadia'); //produits porteurs Route::resource('products',ProductsController::class)->withoutMiddleware('is-super-admin'); + Route::resource('ranges', RangeController::class) + ->withoutMiddleware('is-super-admin'); // Route::get('/products', 'ProductsController@index')->name('products'); // Route::get('/products/{id}', 'ProductsController@edit')->name('products.edit');