<%
'=============================================================================
' FILE: savemachine.asp
' PURPOSE: Create new machine with nested entity creation
' REFACTORED: 2025-10-27 - Removed machinetypeid (now inherited from models table)
' NOTE: Machines now inherit machinetypeid from their model. Each model has one machine type.
'=============================================================================
' Initialize error handling
Call InitializeErrorHandling("savemachine.asp")
' Get and validate all inputs
Dim machinenumber, modelid, businessunitid, alias, machinenotes, mapleft, maptop
machinenumber = Trim(Request.Form("machinenumber"))
modelid = Trim(Request.Form("modelid"))
businessunitid = Trim(Request.Form("businessunitid"))
alias = Trim(Request.Form("alias"))
machinenotes = Trim(Request.Form("machinenotes"))
mapleft = Trim(Request.Form("mapleft"))
maptop = Trim(Request.Form("maptop"))
' Validate required fields
If machinenumber = "" Then
Call HandleValidationError("addmachine.asp", "INVALID_INPUT")
End If
If Not ValidateID(modelid) Then
Call HandleValidationError("addmachine.asp", "INVALID_ID")
End If
If Not ValidateID(businessunitid) Then
Call HandleValidationError("addmachine.asp", "INVALID_ID")
End If
' Validate field lengths
If Len(machinenumber) > 50 Then
Call HandleValidationError("addmachine.asp", "INVALID_INPUT")
End If
If Len(alias) > 50 Then
Call HandleValidationError("addmachine.asp", "INVALID_INPUT")
End If
' machinenotes is TEXT field, no length validation needed
' Check if machine number already exists
Dim checkSQL, rsCheck
checkSQL = "SELECT COUNT(*) as cnt FROM machines WHERE machinenumber = ?"
Set rsCheck = ExecuteParameterizedQuery(objConn, checkSQL, Array(machinenumber))
If Not rsCheck.EOF Then
If Not IsNull(rsCheck("cnt")) Then
If CLng(rsCheck("cnt")) > 0 Then
rsCheck.Close
Set rsCheck = Nothing
Response.Write("
Error: Machine number '" & Server.HTMLEncode(machinenumber) & "' already exists.
")
Response.Write("
Go back")
Call CleanupResources()
Response.End
End If
End If
End If
rsCheck.Close
Set rsCheck = Nothing
' Build INSERT statement with parameterized query
' NOTE: machinetypeid is now inherited from models table and doesn't need to be specified
Dim params, paramList
strSQL = "INSERT INTO machines (machinenumber, modelnumberid, businessunitid"
' Add optional fields to SQL
If alias <> "" Then
strSQL = strSQL & ", alias"
End If
If machinenotes <> "" Then
strSQL = strSQL & ", machinenotes"
End If
If mapleft <> "" And maptop <> "" Then
If IsNumeric(mapleft) And IsNumeric(maptop) Then
strSQL = strSQL & ", mapleft, maptop"
End If
End If
strSQL = strSQL & ", isactive, islocationonly) VALUES (?, ?, ?"
' Build param list dynamically
Dim paramCount
paramCount = 3 ' Start with 3 required params
' Count optional params
If alias <> "" Then paramCount = paramCount + 1
If machinenotes <> "" Then paramCount = paramCount + 1
If mapleft <> "" And maptop <> "" Then
If IsNumeric(mapleft) And IsNumeric(maptop) Then
paramCount = paramCount + 2
End If
End If
paramCount = paramCount + 2 ' For isactive and islocationonly
' Initialize array with correct size
ReDim paramList(paramCount - 1)
Dim paramIndex
paramIndex = 0
' Add required fields
paramList(paramIndex) = machinenumber
paramIndex = paramIndex + 1
paramList(paramIndex) = modelid
paramIndex = paramIndex + 1
paramList(paramIndex) = businessunitid
paramIndex = paramIndex + 1
' Add optional fields to param list
If alias <> "" Then
strSQL = strSQL & ", ?"
paramList(paramIndex) = alias
paramIndex = paramIndex + 1
End If
If machinenotes <> "" Then
strSQL = strSQL & ", ?"
paramList(paramIndex) = machinenotes
paramIndex = paramIndex + 1
End If
If mapleft <> "" And maptop <> "" Then
If IsNumeric(mapleft) And IsNumeric(maptop) Then
strSQL = strSQL & ", ?, ?"
paramList(paramIndex) = mapleft
paramIndex = paramIndex + 1
paramList(paramIndex) = maptop
paramIndex = paramIndex + 1
End If
End If
' Add isactive and islocationonly values
strSQL = strSQL & ", ?, ?)"
paramList(paramIndex) = 1 ' isactive = 1
paramIndex = paramIndex + 1
paramList(paramIndex) = 0 ' islocationonly = 0
' Execute parameterized insert
Dim recordsAffected
recordsAffected = ExecuteParameterizedInsert(objConn, strSQL, paramList)
' Get the new machine ID
Dim newMachineId
Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid")
newMachineId = 0
If Not rsCheck.EOF Then
If Not IsNull(rsCheck("newid")) Then
newMachineId = CLng(rsCheck("newid"))
End If
End If
rsCheck.Close
Set rsCheck = Nothing
' Cleanup resources
Call CleanupResources()
' Redirect to display page
If recordsAffected > 0 And newMachineId > 0 Then
%>
<%
Else
Response.Write("Error: Machine was not added successfully.")
End If
%>