Phase 2 Migration: Complete PC consolidation and fixes

## Phase 2 Migration Complete
Successfully migrated all 286 active PCs from pc table to machines table.

### Migration Scripts Added/Updated:
- **Phase 1.0**: Added ensure_all_machinetypes.sql (machinetypes 15-20)
- **Phase 1.5**: Added migrate_equipment_ips_to_communications.sql
- **Phase 2**: Updated 01_migrate_pcs_to_machines.sql for duplicate handling
- **Phase 2**: Updated 08_update_schema_for_api.sql (rename pcid→machineid)
- **Phase 2 Fixes**: Added FIX_migrate_remaining_pcs.sql (60 unmigrated PCs)
- **Phase 2 Fixes**: Added FIX_pc_machine_types.sql

### Network Devices View Updated:
- **CREATE_vw_network_devices_with_fqdn.sql**: Complete rewrite for Phase 2
  - Infrastructure devices (IDF, Server, Switch, Camera, Access Point) query machines table
  - Printers remain in separate printers table (has fqdn column)
  - UNION approach: machines (machinetypeid 15-19) + printers table

### Documentation Added:
- DATA_MIGRATION_EXPLAINED.md - Full migration architecture
- PRODUCTION_MIGRATION_PLAN.md - Production deployment plan
- VIEWS_MIGRATION_ANALYSIS.md - Views requiring updates
- PRINTER_INSTALLER_FIX_2025-11-20.md - Printer installer fixes
- SCHEMA_COMPARISON_REPORT_2025-11-20.md - Phase 2 schema comparison

### ASP Files Updated:
- api_printers.asp - Printer API fixes
- displaynotifications.asp - UI improvements
- install_printer.asp - Installer fixes
- v2/api_printers.asp - V2 API updates
- v2/install_printer.asp - V2 installer updates

### Migration Results (DEV):
- Total machines: 523 (237 equipment + 286 PCs)
- Communications: 1,309
- Warranties: 212
- Machine relationships: 201
- PC migration: 286/286 ✓
- Duplicate PCs removed: 166 duplicates cleaned

### Key Achievements:
✓ All 286 active PCs migrated to machines table
✓ Network devices view updated for Phase 2 architecture
✓ pc_to_machine_id_mapping table populated (286 entries)
✓ Duplicate PC records cleaned (452→286)
✓ Schema updates for API compatibility (pcid→machineid)

### Next Steps:
- Update PHP Dashboard API for Phase 2 schema (CRITICAL - see POWERSHELL_API_PHASE2_ISSUES.md)
- Update PowerShell scripts for Phase 2 schema
- Test Update-PC-CompleteAsset-Silent.bat
- Production deployment planning

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
cproudlock
2025-11-21 09:15:47 -05:00
parent 4cabc823ef
commit 08d95f579a
18 changed files with 3860 additions and 187 deletions

View File

@@ -110,22 +110,30 @@ Do While Not rs.EOF
End If
End If
' Build standard name: CSFName-Location-VendorModel (no dash between vendor and model)
If csfName <> "" And csfName <> "NONE" And csfName <> "gage lab " Then
' Has CSF name
' Check if CSF name already matches the machine location (avoid duplication)
If cleanMachine <> "" And LCase(csfName) <> LCase(cleanMachine) Then
standardName = csfName & "-" & cleanMachine & "-" & vendor & shortDescription
Else
' CSF name same as location, or no location - just use CSF-VendorModel
standardName = csfName & "-" & vendor & shortDescription
End If
' Determine printer name to use
' Prefer Windows Name from database if it's already in standardized format (contains dashes)
' Otherwise generate standardized name automatically
If InStr(printerName, "-") > 0 Then
' Use database Windows Name as-is (user manually set it)
standardName = printerName
Else
' No CSF name - use Location-VendorModel
If cleanMachine <> "" Then
standardName = cleanMachine & "-" & vendor & shortDescription
' Generate standard name: CSFName-Location-VendorModel (no dash between vendor and model)
If csfName <> "" And csfName <> "NONE" And csfName <> "gage lab " Then
' Has CSF name
' Check if CSF name already matches the machine location (avoid duplication)
If cleanMachine <> "" And LCase(csfName) <> LCase(cleanMachine) Then
standardName = csfName & "-" & cleanMachine & "-" & vendor & shortDescription
Else
' CSF name same as location, or no location - just use CSF-VendorModel
standardName = csfName & "-" & vendor & shortDescription
End If
Else
standardName = "Printer" & rs("printerid") & "-" & vendor & shortDescription
' No CSF name - use Location-VendorModel
If cleanMachine <> "" Then
standardName = cleanMachine & "-" & vendor & shortDescription
Else
standardName = "Printer" & rs("printerid") & "-" & vendor & shortDescription
End If
End If
End If
standardName = Replace(standardName, """", "\""")

View File

@@ -156,75 +156,21 @@ Else
Response.Write(" echo ERROR: Could not download installer" & vbCrLf)
Response.Write(")" & vbCrLf)
Else
' No installer - use universal driver
Dim driverName, driverInf
Select Case UCase(printer("vendor"))
Case "HP"
driverName = "HP Universal Printing PCL 6"
driverInf = "hpcu255u.inf"
Case "XEROX"
driverName = "Xerox Global Print Driver PCL6"
driverInf = "xeroxgpd.inf"
Case "HID"
driverName = "HP Universal Printing PCL 6"
driverInf = "hpcu255u.inf"
Case Else
driverName = "Generic / Text Only"
driverInf = ""
End Select
Response.Write("echo Using universal driver: " & driverName & vbCrLf)
' No specific installer - use universal PrinterInstaller.exe
Response.Write("echo Using universal printer installer..." & vbCrLf)
Response.Write("echo." & vbCrLf)
' Generate PowerShell script to install printer
Response.Write("powershell -NoProfile -ExecutionPolicy Bypass -Command """ & vbCrLf)
Response.Write(" Write-Host 'Installing printer with universal driver...' -ForegroundColor Cyan;" & vbCrLf)
Response.Write(" " & vbCrLf)
Response.Write(" $printerName = '" & Replace(printer("name"), "'", "''") & "';" & vbCrLf)
Response.Write(" $address = '" & Replace(printer("address"), "'", "''") & "';" & vbCrLf)
Response.Write(" $driverName = '" & Replace(driverName, "'", "''") & "';" & vbCrLf)
Response.Write(" $portName = 'IP_' + $address;" & vbCrLf)
Response.Write(" " & vbCrLf)
' Check if driver is installed
If driverInf <> "" Then
Response.Write(" # Check if driver exists" & vbCrLf)
Response.Write(" $driver = Get-PrinterDriver -Name $driverName -ErrorAction SilentlyContinue;" & vbCrLf)
Response.Write(" if (-not $driver) {" & vbCrLf)
Response.Write(" Write-Host 'ERROR: Universal driver not found!' -ForegroundColor Red;" & vbCrLf)
Response.Write(" Write-Host 'Please install ' $driverName ' from Windows Update or driver package' -ForegroundColor Yellow;" & vbCrLf)
Response.Write(" exit 1;" & vbCrLf)
Response.Write(" }" & vbCrLf)
Response.Write(" " & vbCrLf)
End If
' Create port
Response.Write(" # Create TCP/IP port" & vbCrLf)
Response.Write(" $port = Get-PrinterPort -Name $portName -ErrorAction SilentlyContinue;" & vbCrLf)
Response.Write(" if (-not $port) {" & vbCrLf)
Response.Write(" Write-Host 'Creating printer port...' -ForegroundColor Yellow;" & vbCrLf)
Response.Write(" Add-PrinterPort -Name $portName -PrinterHostAddress $address -ErrorAction Stop;" & vbCrLf)
Response.Write(" Write-Host 'Port created successfully' -ForegroundColor Green;" & vbCrLf)
Response.Write(" } else {" & vbCrLf)
Response.Write(" Write-Host 'Port already exists' -ForegroundColor Green;" & vbCrLf)
Response.Write(" }" & vbCrLf)
Response.Write(" " & vbCrLf)
' Add printer
Response.Write(" # Add printer" & vbCrLf)
Response.Write(" $existingPrinter = Get-Printer -Name $printerName -ErrorAction SilentlyContinue;" & vbCrLf)
Response.Write(" if (-not $existingPrinter) {" & vbCrLf)
Response.Write(" Write-Host 'Adding printer...' -ForegroundColor Yellow;" & vbCrLf)
Response.Write(" Add-Printer -Name $printerName -DriverName $driverName -PortName $portName -ErrorAction Stop;" & vbCrLf)
Response.Write(" Write-Host 'Printer installed successfully!' -ForegroundColor Green;" & vbCrLf)
Response.Write(" } else {" & vbCrLf)
Response.Write(" Write-Host 'Printer already exists' -ForegroundColor Green;" & vbCrLf)
Response.Write(" }" & vbCrLf)
Response.Write("""" & vbCrLf)
Response.Write("" & vbCrLf)
Response.Write("if %ERRORLEVEL% neq 0 (" & vbCrLf)
Response.Write(" echo ERROR: Failed to install printer" & vbCrLf)
Response.Write("echo Downloading PrinterInstaller.exe..." & vbCrLf)
Response.Write("powershell -NoProfile -Command """ & _
"$ProgressPreference = 'SilentlyContinue'; " & _
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; " & _
"Invoke-WebRequest -Uri 'https://tsgwp00525.rd.ds.ge.com/shopdb/installers/PrinterInstaller.exe' " & _
"-OutFile '%TEMP%\PrinterInstaller.exe' -UseBasicParsing -UseDefaultCredentials""" & vbCrLf)
Response.Write("if exist ""%TEMP%\PrinterInstaller.exe"" (" & vbCrLf)
Response.Write(" echo Running installer..." & vbCrLf)
Response.Write(" ""%TEMP%\PrinterInstaller.exe"" ""/PRINTER=" & printer("standardname") & """" & vbCrLf)
Response.Write(" del ""%TEMP%\PrinterInstaller.exe"" 2>nul" & vbCrLf)
Response.Write(") else (" & vbCrLf)
Response.Write(" echo ERROR: Could not download PrinterInstaller.exe" & vbCrLf)
Response.Write(")" & vbCrLf)
End If