Fix dualpath propagation, getShopfloorPCs filtering, USB management, and printer features

- Fix dualpath PC propagation direction (Equipment->PC) in api.asp and db_helpers.asp
- Fix early exit in CreatePCMachineRelationship preventing propagation
- Fix getShopfloorPCs to filter machinetypeid IN (33,34,35) instead of >= 33
- Fix getShopfloorPCs to show equipment numbers via GROUP_CONCAT subquery
- Add detailed PropagateDP logging for dualpath debugging
- Default "Show on Shopfloor Dashboard" checkbox to checked in addnotification.asp
- Add USB label batch printing, single USB labels, and USB history pages
- Add printer supplies tracking and toner report enhancements
- Add uptime map visualization page
- Add dashboard/lobby display SQL migration
- Update CLAUDE.md with IIS 401 workaround documentation
- Update TODO.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-02-03 10:44:55 -05:00
parent 8945fe2a0a
commit e382a3246e
27 changed files with 1926 additions and 255 deletions

View File

@@ -0,0 +1,181 @@
<%
' Returns both standard and metered part numbers as pipe-delimited string
' Format: "standard|metered" or just "standard" if no metered option
Function GetSupplyPartNumbers(printerModel, supplyName)
On Error Resume Next
Dim pn, sn, isDrum, isWaste, stdPN, metPN
pn = UCase(printerModel)
sn = UCase(supplyName)
isDrum = (InStr(sn, "DRUM") > 0 Or InStr(sn, "IMAGING") > 0)
isWaste = (InStr(sn, "WASTE") > 0)
stdPN = ""
metPN = ""
' VersaLink C415
If InStr(pn, "C415") > 0 Then
If isWaste Then
stdPN = "008R13335"
ElseIf isDrum Then
stdPN = "013R00701"
ElseIf InStr(sn, "BLACK") > 0 Then
stdPN = "006R04677"
metPN = "006R04681"
ElseIf InStr(sn, "CYAN") > 0 Then
stdPN = "006R04678"
metPN = "006R04682"
ElseIf InStr(sn, "MAGENTA") > 0 Then
stdPN = "006R04679"
metPN = "006R04683"
ElseIf InStr(sn, "YELLOW") > 0 Then
stdPN = "006R04680"
metPN = "006R04684"
End If
' VersaLink C405
ElseIf InStr(pn, "C405") > 0 Then
If isWaste Then
stdPN = "108R01124"
ElseIf isDrum Then
stdPN = "101R00555"
ElseIf InStr(sn, "BLACK") > 0 Then
stdPN = "106R03500"
ElseIf InStr(sn, "CYAN") > 0 Then
stdPN = "106R03501"
ElseIf InStr(sn, "MAGENTA") > 0 Then
stdPN = "106R03502"
ElseIf InStr(sn, "YELLOW") > 0 Then
stdPN = "106R03503"
End If
' VersaLink C7125/C7100
ElseIf InStr(pn, "C7125") > 0 Or InStr(pn, "C7100") > 0 Then
If isWaste Then
stdPN = "115R00129"
ElseIf isDrum Then
stdPN = "013R00688"
ElseIf InStr(sn, "BLACK") > 0 Then
stdPN = "006R01824"
metPN = "006R01820"
ElseIf InStr(sn, "CYAN") > 0 Then
stdPN = "006R01825"
metPN = "006R01821"
ElseIf InStr(sn, "MAGENTA") > 0 Then
stdPN = "006R01826"
metPN = "006R01822"
ElseIf InStr(sn, "YELLOW") > 0 Then
stdPN = "006R01827"
metPN = "006R01823"
End If
' VersaLink B7125
ElseIf InStr(pn, "B7125") > 0 Then
If isWaste Then
stdPN = "115R00129"
ElseIf isDrum Then
stdPN = "013R00687"
ElseIf InStr(sn, "BLACK") > 0 Or InStr(sn, "TONER") > 0 Then
stdPN = "006R01818"
metPN = "006R01819"
End If
' VersaLink B405
ElseIf InStr(pn, "B405") > 0 Then
If isWaste Then
stdPN = "108R01124"
ElseIf isDrum Then
stdPN = "101R00554"
ElseIf InStr(sn, "BLACK") > 0 Or InStr(sn, "TONER") > 0 Then
stdPN = "106R03580"
End If
' AltaLink C8135
ElseIf InStr(pn, "C8135") > 0 Then
If isWaste Then
stdPN = "008R08101"
ElseIf isDrum Then
stdPN = "013R00681"
ElseIf InStr(sn, "BLACK") > 0 Then
stdPN = "006R01746"
ElseIf InStr(sn, "CYAN") > 0 Then
stdPN = "006R01747"
ElseIf InStr(sn, "MAGENTA") > 0 Then
stdPN = "006R01748"
ElseIf InStr(sn, "YELLOW") > 0 Then
stdPN = "006R01749"
End If
' Xerox EC8036/AltaLink C8036 (compatible with WC7800 and AltaLink C80xx toner)
ElseIf InStr(pn, "EC8036") > 0 Or InStr(pn, "C8036") > 0 Then
Dim altPN
altPN = ""
If isWaste Then
stdPN = "008R13061"
ElseIf isDrum Then
stdPN = "013R00677"
ElseIf InStr(sn, "BLACK") > 0 Then
stdPN = "006R01509"
altPN = "006R01697"
metPN = "006R01701"
ElseIf InStr(sn, "CYAN") > 0 Then
stdPN = "006R01512"
altPN = "006R01698"
metPN = "006R01702"
ElseIf InStr(sn, "MAGENTA") > 0 Then
stdPN = "006R01511"
altPN = "006R01699"
metPN = "006R01703"
ElseIf InStr(sn, "YELLOW") > 0 Then
stdPN = "006R01510"
altPN = "006R01700"
metPN = "006R01704"
End If
' Return all 3 options for EC8036
If altPN <> "" Then
GetSupplyPartNumbers = stdPN & "|" & altPN & "|" & metPN
Exit Function
End If
' HP LaserJet Pro M454dw / M454dn / MFP M479fdw / M479fdn (414A/414X series)
ElseIf InStr(pn, "M454") > 0 Or InStr(pn, "M479") > 0 Then
If InStr(sn, "BLACK") > 0 Then
stdPN = "W2020A"
metPN = "W2020X"
ElseIf InStr(sn, "CYAN") > 0 Then
stdPN = "W2021A"
metPN = "W2021X"
ElseIf InStr(sn, "MAGENTA") > 0 Then
stdPN = "W2023A"
metPN = "W2023X"
ElseIf InStr(sn, "YELLOW") > 0 Then
stdPN = "W2022A"
metPN = "W2022X"
End If
' HP LaserJet Pro M251nw / M252dw / MFP M277dw (201A/201X series)
ElseIf InStr(pn, "M251") > 0 Or InStr(pn, "M252") > 0 Or InStr(pn, "M277") > 0 Then
If InStr(sn, "BLACK") > 0 Then
stdPN = "CF400A"
metPN = "CF400X"
ElseIf InStr(sn, "CYAN") > 0 Then
stdPN = "CF401A"
metPN = "CF401X"
ElseIf InStr(sn, "MAGENTA") > 0 Then
stdPN = "CF403A"
metPN = "CF403X"
ElseIf InStr(sn, "YELLOW") > 0 Then
stdPN = "CF402A"
metPN = "CF402X"
End If
End If
If metPN <> "" Then
GetSupplyPartNumbers = stdPN & "|" & metPN
Else
GetSupplyPartNumbers = stdPN
End If
End Function
Function IsWasteSupply(supplyName)
IsWasteSupply = (InStr(1, UCase(supplyName), "WASTE") > 0)
End Function
%>