@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
| Actions |
@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
| {{ $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') ?: '-' }}
|
|
@endforeach
@endif