ldc-legaulois/app/Http/Controllers/ProductsController.php

135 lines
5 KiB
PHP
Raw Permalink Normal View History

2020-11-25 16:22:26 +01:00
<?php
namespace App\Http\Controllers;
use App\Enums\GeneralConfigType;
use App\Models\ConsumptionTimes;
2021-11-16 16:00:47 +01:00
use App\Models\Label;
2020-11-25 16:22:26 +01:00
use App\Models\ProductSliderPictures;
use App\Models\MeatTypes;
use App\Models\Products;
2021-09-21 09:26:21 +02:00
use App\Models\Range;
use App\Models\Recipes;
use App\Models\SubRange;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Route;
2020-11-25 16:22:26 +01:00
class ProductsController extends Controller
{
public function index()
{
$productsSlides = ProductSliderPictures::where('status', 1)->orderBy('order', 'ASC')->get();
2022-02-10 16:14:58 +01:00
$meatTypes = MeatTypes::select('name', 'slug')->where('status', 1)->get();
$ct = ConsumptionTimes::select('name', 'slug')->where('status', 1)->get();
$labels = Label::select('name', 'slug')->where('status', 1)->get();
$ranges = Range::where('status', 1)->with('products', function ($q) {
2021-12-23 12:34:55 +01:00
$q->select(['id', 'range_id', 'picture'])
->whereStatus(true)->whereStar(true);
})->orderBy('order')->get();
2021-11-16 16:00:47 +01:00
return view('front.products.index', compact('productsSlides', 'ranges', 'meatTypes', 'ct', 'labels'));
}
2023-01-09 11:46:16 +01:00
public function filter(Model $model, SubRange $slugSubRange = null)
2021-03-20 14:38:15 +01:00
{
// On récupère les mêmes données qu'au dessus pour l'affichage
$productsSlides = ProductSliderPictures::where('status', 1)->orderBy('order', 'ASC')->get();
2022-02-10 16:14:58 +01:00
$ranges = Range::where('status', 1)->get();
$meatTypes = MeatTypes::select('name', 'slug')->where('status', 1)->get();
$ct = ConsumptionTimes::select('name', 'slug')->where('status', 1)->get();
$labels = Label::select('name', 'slug')->where('status', 1)->get();
2022-02-10 16:14:58 +01:00
$type = explode('/', Route::getCurrentRoute()->uri)[1];
$productsList = null;
2022-02-10 16:14:58 +01:00
$title = null;
$gamme = false;
$typeViande = false;
$momentConso = false;
$subranges = false;
switch ($type) {
case 'gamme':
2021-09-21 09:26:21 +02:00
/** @var \App\Models\Range */
2022-02-10 16:14:58 +01:00
$gamme = $model;
$subranges = $gamme->subranges()->orderBy('order')->get();
2023-01-09 11:46:16 +01:00
if ($slugSubRange) {
2022-02-10 16:14:58 +01:00
$title = $gamme->name;
$productsList = $gamme->products()
->where('status', true)
2023-01-09 11:46:16 +01:00
->where('sub_range_id', $slugSubRange->id)
->orderBy('order')
->get();
} else {
$productsList = $gamme->products->where('status', 1)->sortBy('order');
2022-02-10 16:14:58 +01:00
$title = $gamme->name;
}
break;
case 'type-viande':
/** @var \App\Models\MeatTypes */
2022-02-10 16:14:58 +01:00
$meatType = $model;
2021-05-04 16:02:44 +02:00
$productsList = $meatType->products->where('status', 1)->sortBy('order');
2022-02-10 16:14:58 +01:00
$title = $meatType->name;
$typeViande = true;
break;
2021-04-02 17:41:24 +02:00
case 'moment-consommations':
/** @var \App\Models\ConsumptionTimes */
$consumptionTime = $model;
2022-02-10 16:14:58 +01:00
$productsList = $consumptionTime->products->where('status', 1)->sortBy('order');
$title = $consumptionTime->name;
$momentConso = true;
break;
2021-11-16 16:00:47 +01:00
case 'label':
/** @var \App\Models\Label */
2022-02-10 16:14:58 +01:00
$label = $model;
2021-11-16 16:00:47 +01:00
$productsList = $label->products->where('status', 1)->sortBy('order');
2022-02-10 16:14:58 +01:00
$title = $label->name;
$momentConso = true;
2021-11-16 16:00:47 +01:00
break;
default:
abort(404);
break;
2023-01-09 11:46:16 +01:00
} //end switch
$subrange = $slugSubRange;
2021-03-21 22:51:19 +01:00
return view('front.products.index', compact(
'productsList',
'productsSlides',
2021-03-25 09:08:10 +01:00
'ranges',
'subranges',
'subrange',
2021-03-21 22:51:19 +01:00
'meatTypes',
'ct',
2021-11-16 16:00:47 +01:00
'labels',
2021-03-21 22:51:19 +01:00
'title',
'gamme',
'typeViande',
'momentConso'
));
}
2023-01-09 11:18:35 +01:00
/**
* Display product
*
* @param \App\Models\Products $frontProduct
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
*/
public function show(Products $frontProduct)
2021-03-20 14:38:15 +01:00
{
2023-01-09 11:18:35 +01:00
$recipeVideo = $frontProduct->recipe()->first();
2023-01-09 11:18:35 +01:00
$recipes = $frontProduct->recipes()->get();
2022-02-10 16:14:58 +01:00
$ids = [];
2021-03-20 14:38:15 +01:00
foreach ($recipes as $r) {
$ids[] = $r->id;
2021-03-20 14:38:15 +01:00
}
2022-02-10 16:14:58 +01:00
$ids = array_unique($ids);
$generalConfig = app()->view->getShared()['GeneralConfigGlobal'] ?? null;
$generalConfig = $generalConfig ? $generalConfig->where('type', GeneralConfigType::rsm())->first() : null;
2022-02-10 16:14:58 +01:00
$recipes = Recipes::whereIn('id', $ids)->where('status', true)->get();
2023-01-09 11:18:35 +01:00
$product = $frontProduct;
return view('front.products.product', compact('product', 'recipes', 'recipeVideo', 'generalConfig'));
}
2020-11-25 16:22:26 +01:00
}