Compare commits

..

2 commits

Author SHA1 Message Date
f602ab771d Trigger: Deploy [deploy]
All checks were successful
Deploy netdiag / deploy (push) Successful in 13s
Bringt Commit 7df1461 (Bewertung "nicht messbar" + Status-Validierung) auf Prod.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 23:45:53 +02:00
7df146181f Bewertung "nicht messbar" (Status 3) + Status-Validierung
Die App kennt seit Phase 1 eine vierte Bewertung: der Test konnte gar nicht
durchgefuehrt werden (Switch antwortet nicht auf SNMP, kein Netz, Gegenstelle
fehlt). Ohne diesen Zustand musste sich ein fehlgeschlagener Test als ok, warn
oder fail ausgeben — in der Praxis meist als Gruen.

- protocols.php nimmt nur noch Bewertungen 0-3 an. Ein unbekannter Wert landete
  bisher ungeprueft als Array-Index in Karte und PDF und lief dort ins Leere;
  jetzt wird daraus eine Warnung, nie ein OK.
- Protokollkarte und PDF stellen Status 3 grau dar ("Nicht messbar") — weder
  gruen (waere gelogen) noch rot (waere eine Aussage ueber das Kundennetz, die
  die Messung nicht hergibt).
- Das PDF zeigt die Ampel zusaetzlich als Zeichen (OK / ! / X / ?), damit sie im
  Schwarz-Weiss-Ausdruck beim Kunden lesbar bleibt.
- Sprachschluessel NetDiagMeasureUnmeasurable in de_DE und en_US.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 19:16:34 +02:00
5 changed files with 39 additions and 5 deletions

View file

@ -193,7 +193,10 @@ foreach ($measIn as $m) {
$meas->label = isset($m['label']) ? (string) $m['label'] : '';
$meas->params = isset($m['params']) ? json_encode($m['params'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : null;
$meas->result = isset($m['result']) ? json_encode($m['result'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : null;
$meas->measure_status = isset($m['measureStatus']) ? (int) $m['measureStatus'] : 0;
// Nur bekannte Bewertungen uebernehmen. Ein unbekannter Wert landete sonst
// als Array-Index in Karte und PDF und lief dort ins Leere.
$st = isset($m['measureStatus']) ? (int) $m['measureStatus'] : 0;
$meas->measure_status = ($st >= 0 && $st <= 3) ? $st : 1;
$meas->date_measure = netdiag_api_timestamp($m['dateMeasure'] ?? 0);
$meas->tms = dol_now();
if ($meas->create($user, 1) <= 0) {

View file

@ -59,3 +59,4 @@ NetDiagMeasurements = Messungen
NetDiagMeasureOk = OK
NetDiagMeasureWarn = Warnung
NetDiagMeasureFail = Fehler
NetDiagMeasureUnmeasurable = Nicht messbar

View file

@ -59,3 +59,4 @@ NetDiagMeasurements = Measurements
NetDiagMeasureOk = OK
NetDiagMeasureWarn = Warning
NetDiagMeasureFail = Fail
NetDiagMeasureUnmeasurable = Not measurable

View file

@ -132,20 +132,35 @@ function netdiagGeneratePdf($db, $protocol, $outputlangs)
// Messungen
$pdf->SetFont('', 'B', 12);
$pdf->Cell(0, 7, $outputlangs->transnoentities("NetDiagMeasurements").' ('.count($measurements).')', 0, 1, 'L');
$statuslabels = array(0 => 'OK', 1 => $outputlangs->transnoentities("NetDiagMeasureWarn"), 2 => $outputlangs->transnoentities("NetDiagMeasureFail"));
// Status 3 = "nicht messbar": der Test konnte nicht durchgeführt werden.
// Bewusst grau und mit eigenem Zeichen — weder grün (wäre gelogen) noch rot
// (wäre eine Aussage über das Kundennetz, die die Messung nicht hergibt).
$statuslabels = array(
0 => $outputlangs->transnoentities("NetDiagMeasureOk"),
1 => $outputlangs->transnoentities("NetDiagMeasureWarn"),
2 => $outputlangs->transnoentities("NetDiagMeasureFail"),
3 => $outputlangs->transnoentities("NetDiagMeasureUnmeasurable"),
);
// Zusätzlich ein Zeichen, damit die Ampel auch im Schwarz-Weiß-Ausdruck lesbar bleibt
$statusmarks = array(0 => 'OK', 1 => '!', 2 => 'X', 3 => '?');
foreach ($measurements as $m) {
$st = (int) $m->measure_status;
if ($st < 0 || $st > 3) {
$st = 1; // unbekannter Wert -> als Warnung behandeln, nie als OK
}
if ($st == 2) {
$pdf->SetFillColor(230, 130, 130);
} elseif ($st == 1) {
$pdf->SetFillColor(245, 215, 130);
} elseif ($st == 3) {
$pdf->SetFillColor(210, 210, 210);
} else {
$pdf->SetFillColor(170, 215, 170);
}
$pdf->SetFont('', 'B', 9);
$title = ($m->category ? '['.$m->category.'] ' : '').$m->tool.($m->label ? ' — '.$m->label : '');
$pdf->Cell(150, 6, dol_trunc($title, 80), 1, 0, 'L');
$pdf->Cell(30, 6, $statuslabels[$st], 1, 1, 'C', true);
$pdf->Cell(30, 6, $statusmarks[$st].' '.$statuslabels[$st], 1, 1, 'C', true);
$pdf->SetFont('', '', 8);
$pdf->MultiCell(180, 5, netdiagPdfFlattenResult($m->result), 1, 'L');
}

View file

@ -201,8 +201,18 @@ print '</table></div>';
// Messungen
$measObj = new NetDiagMeasurement($db);
$measurements = $measObj->fetchAllByProtocol($object->id);
$statuslabels = array(0 => 'NetDiagMeasureOk', 1 => 'NetDiagMeasureWarn', 2 => 'NetDiagMeasureFail');
$statuscss = array(0 => 'badge-status4', 1 => 'badge-status1', 2 => 'badge-status8');
$statuslabels = array(
0 => 'NetDiagMeasureOk',
1 => 'NetDiagMeasureWarn',
2 => 'NetDiagMeasureFail',
3 => 'NetDiagMeasureUnmeasurable',
);
$statuscss = array(
0 => 'badge-status4',
1 => 'badge-status1',
2 => 'badge-status8',
3 => 'badge-status0', // grau: Test war nicht durchfuehrbar
);
print '<br>';
print load_fiche_titre($langs->trans("NetDiagMeasurements").' ('.count($measurements).')', '', 'fa-wave-square');
print '<div class="div-table-responsive-no-min"><table class="noborder centpercent">';
@ -213,6 +223,10 @@ print '<th>'.$langs->trans("Result").'</th><th class="center">'.$langs->trans("M
print '</tr>';
foreach ($measurements as $m) {
$st = (int) $m->measure_status;
// Unbekannte Werte nie als OK durchgehen lassen (Array-Zugriff waere sonst leer)
if ($st < 0 || $st > 3) {
$st = 1;
}
print '<tr class="oddeven">';
print '<td class="nowraponall">'.dol_print_date($m->date_measure, 'dayhour').'</td>';
print '<td>'.dol_escape_htmltag($m->category).'</td>';