netgescon-day0/app/Http/View/Composers/SidebarComposer.php

52 lines
2.4 KiB
PHP
Executable File

<?php
namespace App\Http\View\Composers;
use Illuminate\View\View;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
use App\Models\Stabile;
use App\Models\Gestione;
use Spatie\Permission\Traits\HasRoles;
class SidebarComposer
{
public function compose(View $view)
{
$user = Auth::user();
if ($user && !in_array(HasRoles::class, class_uses($user))) {
$user->setRelation('roles', collect()); // fallback vuoto
}
$stabili = collect();
if ($user) {
if (method_exists($user, 'hasRole') && $user->hasRole('super-admin')) {
$stabili = Stabile::orderBy('denominazione')->get();
} elseif ($user->amministratore) {
// Usa 'id' invece di 'id_amministratore' per la chiave modernizzata
$stabili = Stabile::where('amministratore_id', $user->amministratore->id)->orderBy('denominazione')->get();
}
}
$stabileAttivo = session('stabile_corrente') ?? ($stabili->first() ? $stabili->first()->denominazione : null);
$stabileObj = $stabili->firstWhere('denominazione', $stabileAttivo);
$gestioni = $stabileObj ? Gestione::where('stabile_id', $stabileObj->id)->orderByDesc('anno_gestione')->get() : collect();
$annoAttivo = session('anno_corrente') ?? ($gestioni->first() ? $gestioni->first()->anno_gestione : date('Y'));
$gestioneAttiva = session('gestione_corrente') ?? ($gestioni->first() ? $gestioni->first()->tipo_gestione : 'Ord.');
$view->with([
'stabili' => $stabili,
'stabileAttivo' => $stabileAttivo,
'anni' => $gestioni->pluck('anno_gestione')->unique(),
'annoAttivo' => $annoAttivo,
'gestione' => $gestioneAttiva,
'hasAnyStabile' => $stabili->count() > 0,
'canGesconImport' => $user ? $user->can('gescon-import.view') : false,
'canGesconExecute' => $user ? $user->can('gescon-import.execute') : false,
'canGesconConfig' => $user ? $user->can('gescon-import.config') : false,
'canContabilitaGescon' => $user ? $user->can('contabilita-gescon.view') : false,
'activeModules' => Cache::remember('netgescon.active_modules', 3600, function () {
return DB::table('modules')->where('status', 'active')->pluck('name')->toArray();
}),
]);
}
}