0, 'pagate' => 0, 'registrate' => 0, 'totale_aperto' => 0.0, 'totale_registrato' => 0.0, ]; /** @var array> */ public array $fattureRows = []; /** @var array> */ public array $queueRows = []; public static function canAccess(): bool { $user = Auth::user(); return $user instanceof User && $user->hasAnyRole(['super-admin', 'admin', 'amministratore', 'fornitore']); } public function mount(): void { [$fornitore] = $this->resolveOperatoreContext(allowAdminWithoutSupplier: true); if (! $fornitore instanceof Fornitore) { $this->missingAdminContext = true; return; } $this->fornitore = $fornitore; $this->fornitoreLabel = $this->getFornitoreLabel($fornitore); $this->loadData(); } public function getTicketsUrl(): string { if ($this->fornitore instanceof Fornitore) { return TicketOperativi::getUrl(['fornitore' => (int) $this->fornitore->id], panel: 'admin-filament'); } return TicketOperativi::getUrl(panel: 'admin-filament'); } public function getCollaboratoriUrl(): string { if ($this->fornitore instanceof Fornitore) { return Collaboratori::getUrl(['fornitore' => (int) $this->fornitore->id], panel: 'admin-filament'); } return Collaboratori::getUrl(panel: 'admin-filament'); } protected function loadData(): void { if (! $this->fornitore instanceof Fornitore) { return; } $this->queueRows = TicketIntervento::query() ->with(['ticket.stabile.amministratore']) ->where('fornitore_id', (int) $this->fornitore->id) ->whereIn('stato', ['in_verifica', 'fatturabile', 'fatturato']) ->orderByDesc('updated_at') ->limit(40) ->get() ->map(fn(TicketIntervento $intervento) => [ 'ticket_id' => (int) $intervento->ticket_id, 'intervento_id' => (int) $intervento->id, 'stato' => (string) $intervento->stato, 'stabile' => (string) ($intervento->ticket?->stabile?->denominazione ?? '-'), 'amministratore' => (string) ($intervento->ticket?->stabile?->amministratore?->denominazione_studio ?? '-'), 'titolo' => (string) ($intervento->ticket?->titolo ?? '-'), 'aggiornato' => optional($intervento->updated_at)->format('d/m/Y H:i') ?: '-', 'url' => TicketInterventoScheda::getUrl(['record' => (int) $intervento->id], panel: 'admin-filament'), ]) ->all(); if (! Schema::hasTable('contabilita_fatture_fornitori')) { $this->contabilitaReady = false; return; } $this->contabilitaReady = true; $fatture = FatturaFornitore::query() ->with(['stabile.amministratore']) ->where('fornitore_id', (int) $this->fornitore->id) ->orderByDesc('data_documento') ->orderByDesc('id') ->limit(100) ->get(); $this->stats = [ 'aperte' => $fatture->whereIn('stato', ['inserito', 'contabilizzato'])->count(), 'pagate' => $fatture->where('stato', 'pagato')->count(), 'registrate' => $fatture->count(), 'totale_aperto' => (float) $fatture->whereIn('stato', ['inserito', 'contabilizzato'])->sum('netto_da_pagare'), 'totale_registrato' => (float) $fatture->sum('totale'), ]; $this->fattureRows = $fatture ->map(fn(FatturaFornitore $fattura) => [ 'id' => (int) $fattura->id, 'data_documento' => optional($fattura->data_documento)->format('d/m/Y') ?: '-', 'numero_documento' => (string) ($fattura->numero_documento ?? '-'), 'stato' => (string) ($fattura->stato ?? 'inserito'), 'stabile' => (string) ($fattura->stabile?->denominazione ?? '-'), 'amministratore' => (string) ($fattura->stabile?->amministratore?->denominazione_studio ?? '-'), 'descrizione' => (string) ($fattura->descrizione ?? ''), 'totale' => (float) ($fattura->totale ?? 0), 'netto' => (float) ($fattura->netto_da_pagare ?? 0), ]) ->all(); } }