# 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** ```html
Network Communications (Optional)
``` 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** ```html
Machine Relationships (Optional)
``` 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** ```html
Compliance & Security (Optional)
``` 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_Interface` communication type ID - Inserts up to 3 records into `communications` table - Sets `isprimary = 1` for 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 `compliance` table - 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:** ```sql machines.isactive = 1 AND islocationonly=0 ``` **After:** ```sql 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 `machinetypes` and `functionalaccounts` - 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 ```sql 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 ```sql 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 ```sql CREATE TABLE relationshiptypes ( relationshiptypeid INT PRIMARY KEY AUTO_INCREMENT, relationshiptype VARCHAR(50) NOT NULL, -- 'Controls', 'Dualpath' isactive TINYINT(1) DEFAULT 1 ) ``` #### compliance ```sql 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:** ```html pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$" ``` **MAC Address:** ```html 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: 1. **Basic Info** (existing fields): - Machine Number: 4500 - Model: Okuma LB 3000 - Business Unit: Production - Alias: "Main Turning Center" 2. **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) 3. **Relationships** (new fields): - Controlling PC: PC-SHOP-045 - Dualpath Machine: Machine 4501 (backup) 4. **Compliance** (new fields): - Third Party Managed: No - OT Asset System: Production Control - DoD Asset Type: CNC Lathe **Result:** - Machine inserted into `machines` table - Two communication records inserted into `communications` table: - 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 `compliance` table - Redirects to displaymachine.asp?machineid=[newid] --- ## Security Features ### Parameterized Queries: All database operations use `ADODB.Command` with parameters: ```asp 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()`: ```asp Response.Write("") ``` ### Input Validation: - Required fields checked server-side - Numeric fields validated with `IsNumeric()` - String length limits enforced - NULL handling with `IIf()` --- ## Error Handling ### Graceful Failures: ```asp 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 1. **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 2. **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 3. **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 --- ## Future Enhancements ### For editmacine.asp (Edit Page): 1. **Network Communications Management** - List all existing interfaces - Add new interfaces - Edit existing interfaces - Delete interfaces - Set primary interface 2. **Relationship Management** - View all relationships - Add new relationships - Remove relationships - Edit relationship types 3. **Compliance Management** - Edit all compliance fields - Add security scan records - View scan history - Update compliance status 4. **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 = 1` is 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.md` for 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