161 lines
5.9 KiB
PHP
161 lines
5.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Fo\Pro;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\CotationsData;
|
|
use App\Models\Objectives;
|
|
use App\Models\PublicPdfs;
|
|
use App\Models\Articles;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Carbon;
|
|
|
|
class DashboardController extends Controller
|
|
{
|
|
/**
|
|
* AGRISPECTIVES
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
// $cotations = CotationsData::whereNotNull('prix')->orderBy('produit')->orderBy('qualite')->orderBy('recolte')
|
|
$cotations = CotationsData::query()
|
|
->select('produit', 'qualite', 'recolte', DB::raw("GROUP_CONCAT(echeance,'::',COALESCE(prix,'--') SEPARATOR '|@|') AS prices"))
|
|
->whereNotNull('prix')
|
|
->groupBy('produit')
|
|
->groupBy('qualite')
|
|
->groupBy('recolte')
|
|
->orderBy('produit')
|
|
->get();
|
|
|
|
$mps = CotationsData::query()->select('produit')->distinct()->orderBy('produit')->get();
|
|
|
|
$dateMajCotations = CotationsData::query()->select('updated_at')->orderBy('id', 'DESC')->first();
|
|
|
|
$dbobjectif = new Objectives();
|
|
// * capte les nouvelles colonnes éventuelles
|
|
$nullData = array_combine(
|
|
$dbobjectif->getFillable(),
|
|
array_fill(0, count($dbobjectif->getFillable()), null)
|
|
);
|
|
$dbobjectif->fill($nullData);
|
|
|
|
$dbobjectif->produit = '--';
|
|
$dbobjectif->qualite = '--';
|
|
$dbobjectif->campagne = '--';
|
|
$dbobjectif->quantite = 0;
|
|
// $dbobjectif->prix = 0;
|
|
$dbobjectif->echeance = '--';
|
|
$dbobjectif->volume_restant = 0;
|
|
// $dbobjectif->observations = '';
|
|
$dbmyObjectives = Objectives::query()->with('status')->whereHas('customer', function (Builder $q) {
|
|
$q->where('id', Auth::guard('frontend')->user()->id);
|
|
})->orderBy('updated_at', 'DESC')->get();
|
|
|
|
$formEnums = $this->getObjectivesFormEnums();
|
|
|
|
$pdfsAnalyse = PublicPdfs::query()->where('category_id', 1)
|
|
->where('is_published', true)->orderBy('created_at', 'DESC')->get();
|
|
$pdfsMarches = PublicPdfs::query()->where('category_id', 2)
|
|
->where('is_published', true)->orderBy('created_at', 'DESC')->get();
|
|
|
|
// * par défaut le marché est fermé
|
|
// * si on est (un jour de semaine) après 11h ou avant 17h45 alors ouvert
|
|
$market_closed = true;
|
|
// * Current time
|
|
$time = Carbon::now();
|
|
// * set time to 11:00
|
|
$start = Carbon::create($time->year, $time->month, $time->day, 11, 0, 0);
|
|
// * set time to 17:45
|
|
$end = Carbon::create($time->year, $time->month, $time->day, 17, 45, 0);
|
|
if ($time->isWeekday()) {
|
|
if ($time->between($start, $end, true)) {
|
|
$market_closed = false;
|
|
}
|
|
}
|
|
|
|
$dayMaj = Carbon::createFromFormat('Y-m-d H:i:s', $dateMajCotations->updated_at)->startOfDay();
|
|
$today = Carbon::now()->startOfDay();
|
|
// * we suppose we have cotations today
|
|
$noCotationsYet = false;
|
|
if ($today > $dayMaj) {
|
|
// * we don't have the cotations yet
|
|
$noCotationsYet = true;
|
|
}
|
|
|
|
$articles = Articles::where([
|
|
['status', 1],
|
|
['category_id', 2]
|
|
])->orderBy('created_at', 'ASC')->paginate(4);
|
|
$objectivesData = [
|
|
'dbobjectif' => $dbobjectif,
|
|
'dbmyObjectives' => $dbmyObjectives,
|
|
'formEnums' => $formEnums,
|
|
];
|
|
return view(
|
|
'fo.pro.dashboard.index',
|
|
compact(
|
|
'cotations',
|
|
'mps',
|
|
'objectivesData',
|
|
'pdfsAnalyse',
|
|
'pdfsMarches',
|
|
'dateMajCotations',
|
|
'market_closed',
|
|
'noCotationsYet',
|
|
'articles'
|
|
)
|
|
);
|
|
}
|
|
|
|
public function waiting(Request $request)
|
|
{
|
|
/** @var \App\Models\Customer */
|
|
$customer = Auth::guard('frontend')->user();
|
|
|
|
if ($customer->is_validated_pro) {
|
|
return \response()->redirectToRoute('fo.pro.dashboard');
|
|
}
|
|
return view('fo.pro.dashboard.waiting');
|
|
}
|
|
|
|
private function getObjectivesFormEnums()
|
|
{
|
|
$enums = array();
|
|
|
|
/** @var \Illuminate\Database\Eloquent\Collection<integer,\App\Models\CotationsData> */
|
|
$produitEnum = CotationsData::query()->select('produit AS value')->distinct()->get();
|
|
$enums['produit'] = $produitEnum;
|
|
$qualiteEnum = array();
|
|
foreach ($produitEnum as $produit) {
|
|
$qualiteEnum[$produit->value] = CotationsData::query()
|
|
->select('qualite AS value')->distinct()->where('produit', $produit->value)->get();
|
|
}
|
|
$enums['qualite'] = $qualiteEnum;
|
|
$campagneEnum = array();
|
|
foreach ($produitEnum as $produit) {
|
|
$campagneEnum[$produit->value] = CotationsData::query()
|
|
->select('recolte AS value')->distinct()->where('produit', $produit->value)->get();
|
|
}
|
|
$enums['campagne'] = $campagneEnum;
|
|
$echeanceEnum = array();
|
|
foreach ($produitEnum as $produit) {
|
|
foreach ($campagneEnum[$produit->value] as $campagne) {
|
|
$echeanceEnum[$produit->value][$campagne->value] = CotationsData::query()
|
|
->select('echeance AS value')->distinct()
|
|
->where('produit', $produit->value)
|
|
->where('recolte', $campagne->value)
|
|
->whereNotNull('prix')
|
|
->get();
|
|
}
|
|
}
|
|
$enums['echeance'] = $echeanceEnum;
|
|
|
|
return $enums;
|
|
}
|
|
}
|