- Move completed migration docs to docs/archive/ - Move session summaries to docs/archive/sessions/ - Rename API_ASP_DOCUMENTATION.md to docs/API.md - Archive redundant Claude reference files - Update docs/README.md as simplified index - Reduce active docs from 45+ files to 8 essential files Remaining docs: - CLAUDE.md (AI context) - TODO.md (task tracking) - docs/README.md, API.md, QUICK_REFERENCE.md - docs/ASP_DEVELOPMENT_GUIDE.md, STANDARDS.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
13 KiB
Add/Edit Machine Form Updates - Summary
Overview
Updated machine add/edit forms to support all Phase 2 migration data including network communications, machine relationships, and compliance information.
Files Modified
1. addmachine.asp
Location: /home/camp/projects/windows/shopdb/addmachine.asp
New Form Sections Added:
A. Network Communications Section
<h6>Network Communications (Optional)</h6>
Tab-based layout with support for up to 3 network interfaces:
Interface 1 (Primary)
- IP Address - Text input with IPv4 validation pattern (field: ip1)
- MAC Address - Text input with MAC address validation pattern (field: mac1)
- Marked as primary interface (isprimary=1)
Interface 2 (Optional)
- IP Address - Text input with IPv4 validation pattern (field: ip2)
- MAC Address - Text input with MAC address validation pattern (field: mac2)
- Secondary interface (isprimary=0)
Interface 3 (Optional)
- IP Address - Text input with IPv4 validation pattern (field: ip3)
- MAC Address - Text input with MAC address validation pattern (field: mac3)
- Secondary interface (isprimary=0)
B. Machine Relationships Section
<h6>Machine Relationships (Optional)</h6>
New Fields:
- Controlling PC - Dropdown populated with all PCs from machines table (WHERE pctypeid IS NOT NULL)
- Dualpath / Redundant Machine - Dropdown populated with all equipment (WHERE pctypeid IS NULL)
C. Compliance & Security Section
<h6>Compliance & Security (Optional)</h6>
New Fields:
- Third Party Managed - Dropdown (N/A, Yes, No)
- Third Party Vendor - Dropdown populated from vendors table
- OT Asset System - Text input for operational technology classification
- DoD Asset Device Type - Text input for Department of Defense asset classification
2. savemachine_direct.asp
Location: /home/camp/projects/windows/shopdb/savemachine_direct.asp
New Data Handling Added:
A. Network Communications Save
- Retrieves form fields:
ip1,mac1,ip2,mac2,ip3,mac3 - Looks up
Network_Interfacecommunication type ID - Inserts up to 3 records into
communicationstable - Sets
isprimary = 1for Interface 1 only (Interfaces 2-3 have isprimary=0) - Only inserts if IP or MAC provided for each interface
- Interface names: "Interface 1", "Interface 2", "Interface 3"
B. Machine Relationships Save
- Retrieves form fields:
controllingpc,dualpathid - Looks up relationship type IDs for 'Controls' and 'Dualpath'
Controls Relationship:
- Creates one-way relationship: PC (machineid) → Equipment (related_machineid)
- Relationship type: 'Controls'
Dualpath Relationship:
- Creates bidirectional relationship
- Direction 1: New Machine → Dualpath Machine
- Direction 2: Dualpath Machine → New Machine
- Both records use 'Dualpath' relationship type
C. Compliance Data Save
- Retrieves form fields:
thirdpartymanaged,thirdpartyvendorid,otassetsystem,dodassettype - Inserts record into
compliancetable - Maps third party managed to ENUM: 'Yes', 'No', or 'NA'
- Stores third party vendor as foreign key to vendors table (third_party_vendorid)
3. displaymachines.asp
Location: /home/camp/projects/windows/shopdb/displaymachines.asp
Query Filter Updated:
Before:
machines.isactive = 1 AND islocationonly=0
After:
machines.isactive = 1 AND islocationonly=0 AND machines.pctypeid IS NULL
Purpose: Exclude PCs from equipment list - PCs should only appear in displaypcs.asp
4. displaymachine.asp
Location: /home/camp/projects/windows/shopdb/displaymachine.asp
Fixed Issues:
- Changed INNER JOIN to LEFT JOIN for
machinetypesandfunctionalaccounts - Allows machines with NULL machinetypeid to still display (fixes redirect to homepage)
- Updated Settings tab to show IP/MAC from communications table instead of old PC tables
- Shows controlling PC from relationships table
Database Tables Used
New Tables Created in Phase 2:
communications
CREATE TABLE communications (
comid INT PRIMARY KEY AUTO_INCREMENT,
machineid INT NOT NULL,
comstypeid INT NOT NULL,
address VARCHAR(50), -- IP address
macaddress VARCHAR(50),
interfacename VARCHAR(50),
isprimary TINYINT(1) DEFAULT 0,
isactive TINYINT(1) DEFAULT 1,
FOREIGN KEY (machineid) REFERENCES machines(machineid),
FOREIGN KEY (comstypeid) REFERENCES comstypes(comstypeid)
)
machinerelationships
CREATE TABLE machinerelationships (
relationshipid INT PRIMARY KEY AUTO_INCREMENT,
machineid INT NOT NULL,
related_machineid INT NOT NULL,
relationshiptypeid INT NOT NULL,
isactive TINYINT(1) DEFAULT 1,
FOREIGN KEY (machineid) REFERENCES machines(machineid),
FOREIGN KEY (related_machineid) REFERENCES machines(machineid),
FOREIGN KEY (relationshiptypeid) REFERENCES relationshiptypes(relationshiptypeid)
)
relationshiptypes
CREATE TABLE relationshiptypes (
relationshiptypeid INT PRIMARY KEY AUTO_INCREMENT,
relationshiptype VARCHAR(50) NOT NULL, -- 'Controls', 'Dualpath'
isactive TINYINT(1) DEFAULT 1
)
compliance
CREATE TABLE compliance (
complianceid INT PRIMARY KEY AUTO_INCREMENT,
machineid INT NOT NULL,
is_third_party_managed ENUM('Yes', 'No', 'NA'),
third_party_manager VARCHAR(100),
ot_asset_system VARCHAR(100),
ot_asset_device_type VARCHAR(100),
is_compliant TINYINT(1),
FOREIGN KEY (machineid) REFERENCES machines(machineid)
)
Form Validation
Client-Side Validation (HTML5):
IP Address:
pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$"
MAC Address:
pattern="^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"
Server-Side Validation:
All inputs are:
- Trimmed of whitespace
- Checked for empty values before INSERT
- Passed through parameterized queries (SQL injection protection)
- Used with
IIf()to convert empty strings to NULL
Workflow Examples
Adding a New CNC Machine with Full Data:
-
Basic Info (existing fields):
- Machine Number: 4500
- Model: Okuma LB 3000
- Business Unit: Production
- Alias: "Main Turning Center"
-
Network (new fields):
- Interface 1 IP: 192.168.10.50
- Interface 1 MAC: 00:1A:2B:3C:4D:5E
- Interface 2 IP: 192.168.10.51
- Interface 2 MAC: 00:1A:2B:3C:4D:5F
- Interface 3: (left blank)
-
Relationships (new fields):
- Controlling PC: PC-SHOP-045
- Dualpath Machine: Machine 4501 (backup)
-
Compliance (new fields):
- Third Party Managed: No
- OT Asset System: Production Control
- DoD Asset Type: CNC Lathe
Result:
- Machine inserted into
machinestable - Two communication records inserted into
communicationstable:- Interface 1: 192.168.10.50 (isprimary=1)
- Interface 2: 192.168.10.51 (isprimary=0)
- Controls relationship: PC-SHOP-045 → Machine 4500
- Dualpath relationships: 4500 ↔ 4501 (bidirectional)
- Compliance record inserted into
compliancetable - Redirects to displaymachine.asp?machineid=[newid]
Security Features
Parameterized Queries:
All database operations use ADODB.Command with parameters:
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objConn
cmd.CommandText = "INSERT INTO communications (...) VALUES (?, ?, ?, ?, ?)"
cmd.Parameters.Append cmd.CreateParameter("@machineid", 3, 1, , machineid)
...
cmd.Execute
HTML Encoding:
All user input displayed in dropdowns uses Server.HTMLEncode():
Response.Write("<option value='" & id & "'>" & Server.HTMLEncode(displayText) & "</option>")
Input Validation:
- Required fields checked server-side
- Numeric fields validated with
IsNumeric() - String length limits enforced
- NULL handling with
IIf()
Error Handling
Graceful Failures:
On Error Resume Next
cmd.Execute
Set cmd = Nothing
On Error Goto 0
All Phase 2 data inserts use error suppression to allow partial success:
- Machine can be created even if communication insert fails
- Relationship creation failures don't block machine creation
- Compliance data is optional
User Feedback:
- Success: Redirects to displaymachine.asp with new machine
- Failure: Shows error message with "Go back" link
- Duplicate machine number: Prevented with validation check
Testing Checklist
- Add machine with all new fields populated
- Add machine with only required fields (Phase 2 fields empty)
- Verify IP address validation (invalid format rejected)
- Verify MAC address validation (invalid format rejected)
- Verify controlling PC creates correct relationship
- Verify dualpath creates bidirectional relationships
- Verify compliance data saves correctly
- Test with special characters in text fields
- Verify displaymachines.asp no longer shows PCs
- Verify machines with NULL machinetypeid still display
- Test redirect after successful machine creation
- Verify Settings tab shows data from communications table
Known Limitations
-
No Relationship Editing
- Cannot modify relationships after creation
- Must edit relationships via database or future edit form
- Future enhancement: Edit relationships on machine edit page
-
No Communication Editing
- Cannot modify IP/MAC after creation
- Must edit via database or future edit form
- Future enhancement: Edit communications on machine edit page
-
PC Filter Assumption
- Assumes all PCs have
pctypeid IS NOT NULL - Legacy PCs may not have pctypeid set
- Migration should ensure all PCs have pctypeid
- Assumes all PCs have
Future Enhancements
For editmacine.asp (Edit Page):
-
Network Communications Management
- List all existing interfaces
- Add new interfaces
- Edit existing interfaces
- Delete interfaces
- Set primary interface
-
Relationship Management
- View all relationships
- Add new relationships
- Remove relationships
- Edit relationship types
-
Compliance Management
- Edit all compliance fields
- Add security scan records
- View scan history
- Update compliance status
-
Bulk Operations
- Assign same PC to multiple machines
- Create multiple dualpath links at once
- Bulk update compliance data
Migration Notes
Data Already Imported:
- 308 equipment with network communications
- 144 PC control relationships
- 62 dualpath relationships
- 164 machines with compliance data
- 68 security scans
What This Form Adds:
- Ability to create NEW machines with Phase 2 data
- Ensures all new machines have proper network configuration
- Establishes relationships at creation time
- Records compliance data from day one
Troubleshooting
Machine redirects to homepage:
- Check if model has NULL machinetypeid
- Run:
UPDATE models SET machinetypeid = X WHERE modelnumberid = Y - Or use LEFT JOIN fix in displaymachine.asp
IP address not showing:
- Check if communication record was created
- Verify
isprimary = 1is set - Check Settings tab query for communications join
Relationship not created:
- Verify relationship types exist in database
- Check for duplicate relationships (prevents re-insert)
- Verify both machines have valid machineids
PC still showing in equipment list:
- Verify PC has
pctypeid IS NOT NULL - Check displaymachines.asp WHERE clause includes PC filter
- Clear browser cache
Contact / Support
For questions about these changes:
- See
/home/camp/projects/windows/shopdb/sql/migration_phase2/for migration scripts - See
/home/camp/projects/windows/shopdb/DISPLAY_PAGES_UPDATE_SUMMARY.mdfor display page changes - Review import logs in
/tmp/inventory_import_final.log
Change Log
Date: 2025-11-07
Files Modified:
- /home/camp/projects/windows/shopdb/addmachine.asp
- /home/camp/projects/windows/shopdb/savemachine_direct.asp
- /home/camp/projects/windows/shopdb/displaymachines.asp
- /home/camp/projects/windows/shopdb/displaymachine.asp
Changes:
- Redesigned addmachine.asp with Bootstrap tabs (Basic Info, Network, Relationships, Compliance, Location)
- Added support for up to 3 network interfaces on add machine form
- Added machine relationship fields (controlling PC, dualpath)
- Added compliance data fields with third-party vendor dropdown
- Updated save handler to insert Phase 2 data (multiple interfaces, relationships, compliance)
- Fixed displaymachines.asp to exclude PCs (pctypeid IS NULL filter)
- Fixed displaymachine.asp LEFT JOIN for NULL machinetypes
- Updated Settings tab to show communications data
- Fixed NULL handling in controlling PC dropdown (Server.HTMLEncode type mismatch)
- Changed third_party_manager from text field to third_party_vendorid foreign key
Database Impact:
- New records created in: communications (up to 3 per machine), machinerelationships, compliance
- Added third_party_vendorid column to compliance table
- All changes backward compatible