@extends('layouts.app') @section('title', 'SNMP - Relevés des Consommables - Print Manager') @section('content')

Relevés SNMP {{ $materiels->count() }}

Alertes Relever tout
@include('partials.session-alerts') @if(session('error_details'))
Détails des échecs :
{{ session('error_details') }}
@endif @if($materiels->isEmpty())

Aucun matériel avec adresse IP. Ajoutez une adresse IP aux matériels pour utiliser SNMP.

@else
@foreach($marques as $marque)
id, (array) request('marque_id', [])) ? 'checked' : '' }}>
@endforeach
@foreach($modeles as $modele)
id, (array) request('modele_id', [])) ? 'checked' : '' }}>
@endforeach
Reset
@foreach($materiels as $m) @php $releves = $derniersReleves->get($m->id, collect()); $colorOrder = ['black' => 0, 'cyan' => 1, 'magenta' => 2, 'yellow' => 3]; $colorToners = []; $nonToners = collect(); $compteurs = collect(); foreach ($releves as $r) { if ($r->type_consommable === 'compteur') { $compteurs->push($r); continue; } if ($r->type_consommable === 'dechet_toner' && $r->index_entree >= 100) { continue; } $desc = mb_strtolower($r->description ?: ''); $isStaple = str_contains($desc, 'staple') || str_contains($desc, 'agrafe'); $isToner = !$isStaple && in_array($r->type_consommable, ['toner', 'encre']); if ($isToner) { $_four = \App\Services\SnmpNameMapper::findFourniture($m, $r); $color = $_four ? (\App\Services\SnmpNameMapper::extractColor($_four->nom) ?? \App\Services\SnmpNameMapper::extractColor($r->description)) : \App\Services\SnmpNameMapper::extractColor($r->description); if ($color && isset($colorOrder[$color])) { $colorToners[] = ['item' => $r, 'order' => $colorOrder[$color]]; } else { $nonToners->push($r); } } else { $nonToners->push($r); } } usort($colorToners, fn($a, $b) => $a['order'] - $b['order']); $sortedToners = array_map(fn($t) => $t['item'], $colorToners); $nonTonersPct = $nonToners->filter(fn($r) => $r->pourcentage !== null); $pireNonToner = null; $pireScore = -1; foreach ($nonTonersPct as $r) { $score = $r->type_consommable === 'dechet_toner' ? $r->pourcentage : 100 - $r->pourcentage; if ($score > $pireScore) { $pireScore = $score; $pireNonToner = $r; } } $last = $releves->first(); // Extraction N&B / couleur $compteurNb = null; $compteurCouleur = null; foreach ($compteurs as $c) { $desc = mb_strtolower($c->description ?: ''); if (str_contains($desc, 'n&b') || str_contains($desc, 'noir') || str_contains($desc, 'black')) { $compteurNb = $c; } elseif (str_contains($desc, 'couleur') || str_contains($desc, 'color')) { $compteurCouleur = $c; } else { $compteurNb = $compteurNb ?? $c; } } @endphp @endforeach
Matériel Marque IP Localisation Consommables Compteurs Statut SNMP Dernier relevé Actions
{{ $m->nom }} {{ $m->marque->nom ?? '-' }} @if($m->adresse_ip){{ $m->adresse_ip }}@else-@endif {{ $m->localisation ?? '-' }} @foreach($sortedToners as $r) @php $_four = \App\Services\SnmpNameMapper::findFourniture($m, $r); $_nom = $_four ? $_four->nom . ' (' . $_four->reference . ')' : \App\Services\SnmpNameMapper::translate($r->description ?: $r->type_consommable); @endphp {{ \Illuminate\Support\Str::limit($_nom, 30) }} {{ $r->pourcentage !== null ? $r->pourcentage . '%' : '' }} @endforeach @if($pireNonToner) @php $pct = $pireNonToner->pourcentage; $isWaste = $pireNonToner->type_consommable === 'dechet_toner'; $badgeClass = 'bg-secondary'; if ($pct !== null) { $badgeClass = $isWaste ? ($pct > 80 ? 'bg-danger' : ($pct > 50 ? 'bg-warning text-dark' : 'bg-success')) : ($pct < 20 ? 'bg-danger' : ($pct < 50 ? 'bg-warning text-dark' : 'bg-success')); } @endphp {{ $pct }}% @endif @if(empty($sortedToners) && $nonToners->isEmpty() && $compteurs->isEmpty()) Aucun relevé @endif @if($compteurNb) N&B: {{ number_format($compteurNb->niveau_actuel, 0, ',', ' ') }} @endif @if($compteurCouleur) Coul.: {{ number_format($compteurCouleur->niveau_actuel, 0, ',', ' ') }} @endif @if(!$compteurNb && !$compteurCouleur) - @endif @if($m->snmp_ok === true) OK @elseif($m->snmp_ok === false) ÉCHEC @else Inconnu @endif {{ $last?->releve_at?->format('d/m/Y H:i') ?: '-' }}
@endif
@push('styles') @endpush @push('scripts') @endpush @endsection