@php $tabs = [ 'profilo' => 'Dati condivisi', 'accessi' => 'Dipendenti e accessi', 'assistenza' => 'Assistenza interna', 'catalogo' => 'Catalogo e prodotti', 'contabilita' => 'Contabilita', ]; $catalogoActions = [ ['action' => 'nuovo_prodotto', 'label' => 'Nuovo prodotto', 'color' => 'gray'], ['action' => 'estrai_prodotti_fe', 'label' => 'Estrai da FE', 'color' => 'primary'], ['action' => 'importa_listino_csv', 'label' => 'Importa listino CSV', 'color' => 'success'], ['action' => 'scarica_asset_catalogo', 'label' => 'Internalizza asset', 'color' => 'warning'], ['action' => 'genera_referral_amazon', 'label' => 'Prepara link Amazon', 'color' => 'gray'], ]; $assistenzaActions = [ ['action' => 'impostazioni_fe', 'label' => 'Impostazioni FE', 'color' => 'gray'], ['action' => 'acqua_config', 'label' => 'Configura acqua', 'color' => 'gray'], ['action' => 'acqua_scan', 'label' => 'Scansiona FE acqua', 'color' => 'primary'], ]; @endphp
Scheda fornitore
La scheda e divisa in tab operative per separare dati condivisi, accessi, assistenza, catalogo e contabilita senza perdere il contesto del fornitore.
Fornitore
{{ $fornitore->ragione_sociale ?? trim(($fornitore->nome ?? '') . ' ' . ($fornitore->cognome ?? '')) ?: ('Fornitore #' . $fornitore->id) }}
@foreach($tabs as $tabKey => $tabLabel) @endforeach
Qui restano visibili modulo fornitore e catalogo operativo. Il magazzino e la gestione completa del prodotto possono essere spostati in menu dedicati mantenendo qui il quadro sintetico e i collegamenti rapidi.
Azioni catalogo
Azioni automazioni
Un solo punto per le azioni operative del catalogo, senza duplicarle in più riquadri.
FE e acqua raccolte in una toolbar compatta, così la colonna destra non spinge più il layout.
@foreach($catalogoActions as $action) {{ $action['label'] }} @endforeach @foreach($assistenzaActions as $action) {{ $action['label'] }} @endforeach
Questa tab concentra TecnoRepair, seriali e automazioni collegate al fornitore. I ticket operativi e il protocollo comunicazioni possono poi evolvere come viste dedicate, senza ricadere in una scheda unica confusa.
Qui si prepara il perimetro economico del fornitore: pagamenti, fatture, anteprime contabili e ritenute. Preventivi, ordini e fatturazione completa possono innestarsi in questa area senza mischiarsi con catalogo o assistenza.
Fornitore
Codice: {{ $fornitore->codice_univoco ?? '-' }}
Ragione sociale: {{ $fornitore->ragione_sociale ?? '-' }}
Nome: {{ trim(($fornitore->nome ?? '') . ' ' . ($fornitore->cognome ?? '')) ?: '-' }}
Sito: {{ $fornitore->sito_web ?? '-' }}
P.IVA: {{ $fornitore->partita_iva ?? '-' }}
CF: {{ $fornitore->codice_fiscale ?? '-' }}
Indirizzo: {{ $fornitore->indirizzo_completo ?? '-' }}
Note: {{ $this->cleanDisplayValue($fornitore->note) }}
Contatti
Fornitore
Email: {{ $this->cleanDisplayValue($fornitore->email) }}
PEC: {{ $this->cleanDisplayValue($fornitore->pec) }}
Telefono: {{ $fornitore->telefono ?? '-' }}
Cellulare: {{ $fornitore->cellulare ?? '-' }}
Rubrica
@if($fornitore->rubrica)
Email: {{ $fornitore->rubrica->email ?? '-' }}
PEC: {{ $fornitore->rubrica->pec ?? '-' }}
Tel. ufficio: {{ $fornitore->rubrica->telefono_ufficio ?? '-' }}
Tel. cellulare: {{ $fornitore->rubrica->telefono_cellulare ?? '-' }}
Tel. casa: {{ $fornitore->rubrica->telefono_casa ?? '-' }}
Fax: {{ $fornitore->rubrica->fax ?? '-' }}
@else
Nessun collegamento presente.
@endif
Dipendenti e accessi fornitore
La gestione accessi dei dipendenti fornitore e centralizzata qui.
@if(filled($lastGeneratedPassword ?? null))
Ultima password temporanea generata: {{ $lastGeneratedPassword }}
@endif
Usa lo stesso lookup operativo del ticket per agganciare un nominativo già presente nella rubrica unica.
@if($dipendenteRubricaId)
Nominativo selezionato: {{ $dipendenteRubricaSearch }}
@endif @if(count($dipendenteRubricaMatches) > 0)
@foreach($dipendenteRubricaMatches as $match) @endforeach
@elseif(filled($dipendenteRubricaSearch) && ! $dipendenteRubricaId)
Nessun nominativo trovato con questa ricerca.
@endif
Collega nominativo selezionato
Aggiungi dipendente
@forelse($dipendentiRows as $row) @empty @endforelse
Dipendente Email Telefono Utente collegato Stato Azioni
{{ $row['nome'] }} {{ $row['email'] !== '' ? $row['email'] : '-' }} {{ $row['telefono'] !== '' ? $row['telefono'] : '-' }} @if((int) ($row['user_id'] ?? 0) > 0) {{ $row['user_label'] }} (ID {{ (int) $row['user_id'] }}) @if((int) ($row['rubrica_id'] ?? 0) > 0)
Rubrica: {{ $row['rubrica'] ?: ('#' . (int) $row['rubrica_id']) }}
@endif @else @if((int) ($row['rubrica_id'] ?? 0) > 0)
{{ $row['rubrica'] ?: ('Rubrica #' . (int) $row['rubrica_id']) }}
@else - @endif @endif
@if($row['attivo']) attivo @else non attivo @endif
Abilita accesso @if((int) ($row['user_id'] ?? 0) > 0) Reset password @endif Toggle attivo
Nessun dipendente registrato per questo fornitore.
Modulo fornitore separato
Catalogo isolato per questo fornitore tramite codice univoco, con riferimenti pubblici interni e sorgenti esterne archiviate solo nel gestionale.
Scope
{{ $box['catalogo_modulo']['scope_code'] ?? ($fornitore->codice_univoco ?? ('FORN-' . $fornitore->id)) }}
Da FE
{{ (int) ($box['catalogo_modulo']['fe_products'] ?? 0) }}
Da CSV
{{ (int) ($box['catalogo_modulo']['csv_products'] ?? 0) }}
Manuali
{{ (int) ($box['catalogo_modulo']['manual_products'] ?? 0) }}
Solo interni
{{ (int) ($box['catalogo_modulo']['internal_only'] ?? 0) }}
Link sorgente
{{ (int) ($box['catalogo_modulo']['private_links'] ?? 0) }}
Offerte
{{ (int) ($box['catalogo_modulo']['offers'] ?? 0) }}
Amazon link
{{ (int) ($box['catalogo_modulo']['amazon_links'] ?? 0) }}
Catalogo operativo interno
Anagrafica prodotti/servizi del fornitore. I riferimenti esterni importati restano interni al gestionale e la pubblicazione usa il codice interno del catalogo.
Le azioni operative sono state raccolte sopra.
Prodotti
{{ (int) ($box['prodotti']['count'] ?? 0) }}
Serializzati
{{ (int) ($box['prodotti']['serializzati'] ?? 0) }}
Codici agganciati
{{ (int) ($box['prodotti']['identifiers'] ?? 0) }}
Media
{{ (int) ($box['prodotti']['with_media'] ?? 0) }}
@forelse($catalogoProdottiRows as $row) @empty @endforelse
Codice Prodotto Marca / modello Origine Rif. interno Codici Seriali Offerte Catalogo
{{ $row['internal_code'] !== '' ? $row['internal_code'] : '-' }}
{{ $row['name'] !== '' ? $row['name'] : '-' }}
@if($row['color_label'] !== '')
Colore: {{ $row['color_label'] }}
@endif
{{ trim(($row['brand'] ?? '') . ' ' . ($row['model'] ?? '')) ?: '-' }} @if(($row['source'] ?? '') === 'fattura_elettronica') FE @elseif(($row['source'] ?? '') === 'ncom_wholesale_csv') CSV @else manuale @endif
{{ $row['public_reference'] !== '' ? $row['public_reference'] : '-' }}
@if(($row['publication_mode'] ?? '') === 'internal_only')
solo interno
@endif
{{ (int) ($row['identifiers_count'] ?? 0) }} {{ (int) ($row['serials_count'] ?? 0) }} @if($row['track_serials']) track @endif
{{ (int) ($row['offers_count'] ?? 0) }} totali
@if(($row['own_offer_price'] ?? null) !== null) tuo € {{ number_format((float) $row['own_offer_price'], 2, ',', '.') }} @else tuo n/d @endif
@if(($row['best_competitor_price'] ?? null) !== null) competitor € {{ number_format((float) $row['best_competitor_price'], 2, ',', '.') }} @if(($row['best_competitor_source'] ?? '') !== '') | {{ $row['best_competitor_source'] }} @endif @else competitor n/d @endif
@if(($row['amazon_referral_url'] ?? '') !== '')
Amazon referral pronto
@endif
Link sorgente: {{ (int) ($row['private_links'] ?? 0) }}
@if(($row['price_wholesale'] ?? null) !== null) € {{ number_format((float) $row['price_wholesale'], 2, ',', '.') }} @else prezzo n/d @endif @if(($row['stock_quantity'] ?? null) !== null) | stock {{ (int) $row['stock_quantity'] }} @endif
@if(($row['categories'] ?? '') !== '')
{{ $row['categories'] }}
@endif
Nessun prodotto presente per questo fornitore.
Pagamenti
IBAN: {{ $fornitore->iban ?? '-' }}
BIC: {{ $fornitore->bic ?? '-' }}
Modalità predefinita: {{ $fornitore->modalita_pagamento_predefinita ?? '-' }}
Anagrafica unica (Rubrica)
@if($fornitore->rubrica)
Codice: {{ $fornitore->rubrica->codice_univoco ?? '-' }}
Nominativo: {{ $fornitore->rubrica->nome_completo ?? '-' }}
Categoria: {{ $fornitore->rubrica->categoria ?? '-' }}
Stato: {{ $fornitore->rubrica->stato ?? '-' }}
@else
Nessun collegamento presente.
@endif
TAG Fornitore
Digita tag separati da virgola. Premi TAB per accettare il suggerimento corrente e aggiungere automaticamente una virgola.
@foreach($tagSuggestions as $tag) @endforeach
Salva TAG Importa da legacy
@php $features = is_array($box['fornitore_features'] ?? null) ? $box['fornitore_features'] : []; $acqua = is_array($features['acqua'] ?? null) ? $features['acqua'] : []; $acquaEnabled = (bool) ($acqua['enabled'] ?? false); $acquaScan = (bool) ($acqua['scan_enabled'] ?? false); @endphp
TecnoRepair / seriali
Import MDB in anagrafica fornitore e aggancio automatico di seriali e prodotti assistenza.
Importa TecnoRepair
Schede {{ (int) ($box['tecnorepair']['schede'] ?? 0) }}
Aperte / attesa {{ (int) ($box['tecnorepair']['aperte'] ?? 0) }}
Chiuse {{ (int) ($box['tecnorepair']['chiuse'] ?? 0) }}
Seriali {{ (int) ($box['tecnorepair']['seriali'] ?? 0) }}
@forelse($tecnorepairRows as $row)
{{ $row['legacy_numero'] !== '' ? $row['legacy_numero'] : ('Scheda #' . $row['id']) }}
{{ $row['product_model'] !== '' ? $row['product_model'] : '-' }}
Codice: {{ $row['product_code'] !== '' ? $row['product_code'] : '-' }} | Seriale: {{ $row['serial_number'] !== '' ? $row['serial_number'] : '-' }}
{{ $row['status_label'] !== '' ? $row['status_label'] : ($row['status_bucket'] !== '' ? $row['status_bucket'] : 'stato') }}
Allegati: {{ (int) ($row['allegati_count'] ?? 0) }}
@empty
Nessuna scheda TecnoRepair collegata a questo fornitore.
@endforelse
Automazioni / Consumi
Configura acquisizione dati (PDF) e scansione massiva sulle FE già importate.
Acqua {{ $acquaEnabled ? 'ATTIVA' : 'disattiva' }}
Scansione batch {{ $acquaScan ? 'ATTIVA' : 'disattiva' }}
Righe FE {{ (bool) ($fornitore->escludi_righe_fe ?? false) ? 'escluse' : 'incluse' }}
Le azioni FE/acqua sono state raccolte nella toolbar in alto.
Fatture (stabile attivo)
Riepilogo AdE / FE / Contabilità / RA
Apri FE
Totale da pagare {{ number_format((float) ($box['da_pagare']['importo'] ?? 0), 2, ',', '.') }} €
Fonte: {{ (string) ($box['da_pagare']['source'] ?? 'n/d') }}
AdE (staging) {{ (int) ($box['ade']['count'] ?? 0) }} — {{ number_format((float) ($box['ade']['lordo'] ?? 0), 2, ',', '.') }} €
FE importate {{ (int) ($box['fe']['count'] ?? 0) }} — {{ number_format((float) ($box['fe']['totale'] ?? 0), 2, ',', '.') }} €
FE contabilizzate {{ (int) ($box['fe']['contabilizzate'] ?? 0) }}
Da pagare (contabilità) {{ (int) ($box['contabilita']['aperte_count'] ?? 0) }} — {{ number_format((float) ($box['contabilita']['aperte_netto'] ?? 0), 2, ',', '.') }} €
Pagate (contabilità) {{ (int) ($box['contabilita']['pagate_count'] ?? 0) }} — {{ number_format((float) ($box['contabilita']['pagate_netto'] ?? 0), 2, ',', '.') }} €
RA da versare {{ number_format((float) ($box['ra']['da_versare'] ?? 0), 2, ',', '.') }} €
RA versata {{ number_format((float) ($box['ra']['versata'] ?? 0), 2, ',', '.') }} €
RA compensata {{ number_format((float) ($box['ra']['compensata'] ?? 0), 2, ',', '.') }} €
Anteprima AdE
@if(!empty($anteprimaAde))
@foreach($anteprimaAde as $r)
{{ $r['data'] ?: '-' }} — {{ $r['numero'] ?: '-' }}
SDI: {{ $r['sdi_file'] ?: '-' }}
{{ number_format((float) ($r['lordo'] ?? 0), 2, ',', '.') }} €
@endforeach
@else
Nessuna fattura AdE trovata per questo fornitore.
@endif
Anteprima FE
@if(!empty($anteprimaFe)) @else
Nessuna FE importata trovata per questo fornitore.
@endif
Anteprima contabilità
@if(!empty($anteprimaContabilita)) @else
Nessuna registrazione contabile trovata per questo fornitore.
@endif
RA versate/compensate
@if(!empty($raVersateRows))
@foreach($raVersateRows as $ra)
{{ $ra['data_versamento'] ?: '-' }} — {{ strtoupper($ra['stato'] ?: '-') }}
Tributo {{ $ra['tributo'] ?: '1040' }} @if(($ra['f24'] ?? '') !== '') — F24 {{ $ra['f24'] }} @endif
{{ number_format((float) ($ra['importo'] ?? 0), 2, ',', '.') }} €
@endforeach
@else
Nessuna RA versata/compensata trovata per questo fornitore.
@endif