Fix waste cartridge display logic in displayprinter.asp

Waste cartridges report inverted values from Zabbix:
- 0 (or 0%) = No waste, everything is fine → Display 100% capacity (green)
- 1 (or 100%) = Needs replacement → Display 0% capacity (red)

Updated logic to:
1. Detect items with "Waste" in the name
2. Handle both binary (0/1) and percentage (0-100) values
3. Invert the display: capacity remaining = 100 - waste level
4. Apply appropriate color coding (red for low capacity, green for high)

Regular supplies (toner, ink, drums) continue to display normally.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
cproudlock
2025-11-18 08:20:02 -05:00
parent 4bcaf0913f
commit f05d0d7fee

View File

@@ -280,26 +280,53 @@ Else
' Try to convert to numeric
On Error Resume Next
Dim numericValue, progressClass
Dim numericValue, progressClass, displayValue, isWaste
numericValue = CDbl(itemValue)
If Err.Number = 0 Then
' Determine progress bar color based on level
If numericValue < 10 Then
progressClass = "bg-danger" ' Red for critical (< 10%)
ElseIf numericValue < 25 Then
progressClass = "bg-warning" ' Yellow for low (< 25%)
' Check if this is a waste cartridge (invert the logic)
isWaste = (InStr(1, itemName, "Waste", 1) > 0)
If isWaste Then
' For waste cartridges: 0 = OK (100% capacity), 1 = Replace (0% capacity)
' If binary (0 or 1), convert to percentage first
If numericValue <= 1 Then
' Binary value: 0 or 1
displayValue = 100 - (numericValue * 100)
Else
' Percentage value: invert it
displayValue = 100 - numericValue
End If
' Color logic for waste capacity
If displayValue < 10 Then
progressClass = "bg-danger" ' Red for critical (< 10% capacity remaining)
ElseIf displayValue < 25 Then
progressClass = "bg-warning" ' Yellow for low (< 25% capacity remaining)
Else
progressClass = "bg-success" ' Green for good (>= 25% capacity remaining)
End If
Else
progressClass = "bg-success" ' Green for good (>= 25%)
' Normal supplies: show value as-is
displayValue = numericValue
' Normal color logic
If numericValue < 10 Then
progressClass = "bg-danger" ' Red for critical (< 10%)
ElseIf numericValue < 25 Then
progressClass = "bg-warning" ' Yellow for low (< 25%)
Else
progressClass = "bg-success" ' Green for good (>= 25%)
End If
End If
' Display supply level with progress bar
Response.Write("<div class='mb-3'>")
Response.Write("<div class='d-flex justify-content-between mb-1'>")
Response.Write("<span><strong>" & Server.HTMLEncode(itemName) & "</strong></span>")
Response.Write("<span>" & Round(numericValue, 1) & "%</span>")
Response.Write("<span>" & Round(displayValue, 1) & "%</span>")
Response.Write("</div>")
Response.Write("<div class='progress' style='height: 25px;'>")
Response.Write("<div class='progress-bar " & progressClass & "' role='progressbar' style='width: " & numericValue & "%;' aria-valuenow='" & numericValue & "' aria-valuemin='0' aria-valuemax='100'>" & Round(numericValue, 1) & "%</div>")
Response.Write("<div class='progress-bar " & progressClass & "' role='progressbar' style='width: " & displayValue & "%;' aria-valuenow='" & displayValue & "' aria-valuemin='0' aria-valuemax='100'>" & Round(displayValue, 1) & "%</div>")
Response.Write("</div>")
Response.Write("</div>")