Files
shopdb/addmodel.asp
cproudlock 12a35ed7e0 Add inline machine type creation and employee search results
- Add "+ New" button for machine types when adding models on network device pages
  (firewall, switch, server, access point, camera)
- Machine type dropdown now grouped by category (Equipment, Network, PC)
- Add firewall device type to savenetworkdevice.asp
- Remove employee autocomplete dropdown from global search bar
- Add employee search results to search.asp results page
- Update data_cache.asp with null-safe CLng handling

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 16:18:10 -05:00

337 lines
14 KiB
Plaintext

<!DOCTYPE html>
<html lang="en">
<head>
<!--#include file="./includes/header.asp"-->
<!--#include file="./includes/sql.asp"-->
</head>
<%
theme = Request.Cookies("theme")
IF theme = "" THEN
theme="bg-theme1"
END IF
%>
<body class="bg-theme <%Response.Write(theme)%>">
<!-- start loader -->
<div id="pageloader-overlay" class="visible incoming"><div class="loader-wrapper-outer"><div class="loader-wrapper-inner" ><div class="loader"></div></div></div></div>
<!-- end loader -->
<!-- Start wrapper-->
<div id="wrapper">
<!--#include file="./includes/leftsidebar.asp"-->
<!--Start topbar header-->
<!--#include file="./includes/topbarheader.asp"-->
<!--End topbar header-->
<div class="clearfix"></div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row mt-3">
<div class="col-lg-8 offset-lg-2">
<div class="card">
<div class="card-body">
<div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:20px;">
<h5 class="card-title" style="margin:0;">
<i class="zmdi zmdi-collection-item"></i> Add Model
</h5>
<a href="javascript:history.back()" class="btn btn-sm btn-secondary">
<i class="zmdi zmdi-arrow-left"></i> Back
</a>
</div>
<form method="post" action="./savemodeldirect.asp" id="modelForm">
<div class="form-group">
<label for="modelnumber">Model Number <span class="text-danger">*</span></label>
<input type="text" class="form-control" id="modelnumber" name="modelnumber"
required maxlength="255" placeholder="e.g., EC8036, ProDesk 600 G5">
</div>
<div class="form-group">
<label for="vendorid">Manufacturer <span class="text-danger">*</span></label>
<div class="input-group">
<select class="form-control" id="vendorid" name="vendorid" required>
<option value="">-- Select Manufacturer --</option>
<%
Dim strSQL, rsVendors
strSQL = "SELECT * FROM vendors WHERE isactive = 1 ORDER BY vendor ASC"
Set rsVendors = objconn.Execute(strSQL)
While Not rsVendors.EOF
Response.Write("<option value='" & rsVendors("vendorid") & "'>" & Server.HTMLEncode(rsVendors("vendor")) & "</option>")
rsVendors.MoveNext
Wend
rsVendors.Close
Set rsVendors = Nothing
%>
<option value="new">+ Add New Manufacturer</option>
</select>
<div class="input-group-append">
<button type="button" class="btn btn-info" id="addVendorBtn">
<i class="zmdi zmdi-plus"></i> New
</button>
</div>
</div>
</div>
<!-- Hidden section for adding new manufacturer -->
<div id="newVendorSection" class="new-vendor-section" style="display:none; padding:15px; border-radius:5px; margin-bottom:15px;">
<h6 class="mb-3"><i class="zmdi zmdi-plus-circle"></i> New Manufacturer</h6>
<div class="form-group">
<label for="newvendorname">Manufacturer Name</label>
<input type="text" class="form-control" id="newvendorname" name="newvendorname"
maxlength="50" placeholder="e.g., HP, Xerox, Dell">
</div>
<div class="form-group">
<label>This manufacturer makes:</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="isprinter" name="isprinter" value="1">
<label class="form-check-label" for="isprinter">
Printers
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="ispc" name="ispc" value="1">
<label class="form-check-label" for="ispc">
PCs/Computers
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="ismachine" name="ismachine" value="1">
<label class="form-check-label" for="ismachine">
Machines/Equipment
</label>
</div>
</div>
<button type="button" class="btn btn-sm btn-secondary" id="cancelNewVendor">
<i class="zmdi zmdi-close"></i> Cancel
</button>
</div>
<div class="form-group">
<label>This model is for:</label>
<small class="form-text text-muted mb-2">Select at least one category</small>
<div class="form-check">
<input class="form-check-input model-type" type="checkbox" id="modelisprinter" name="modelisprinter" value="1">
<label class="form-check-label" for="modelisprinter">
<i class="zmdi zmdi-print"></i> Printer
</label>
</div>
<div class="form-check">
<input class="form-check-input model-type" type="checkbox" id="modelispc" name="modelispc" value="1">
<label class="form-check-label" for="modelispc">
<i class="zmdi zmdi-desktop-windows"></i> PC/Computer
</label>
</div>
<div class="form-check">
<input class="form-check-input model-type" type="checkbox" id="modelismachine" name="modelismachine" value="1">
<label class="form-check-label" for="modelismachine">
<i class="zmdi zmdi-memory"></i> Machine/Equipment/Network Device
</label>
</div>
</div>
<!-- Machine Type Selection (shown when Machine/Equipment is checked) -->
<div class="form-group" id="machineTypeSection" style="display:none;">
<label for="machinetypeid">Machine/Device Type</label>
<div class="input-group">
<select class="form-control" id="machinetypeid" name="machinetypeid">
<option value="">-- Select Type --</option>
<%
Dim rsMachineTypes, strMTSQL
strMTSQL = "SELECT machinetypeid, machinetype, category FROM machinetypes WHERE isactive = 1 ORDER BY category, machinetype ASC"
Set rsMachineTypes = objconn.Execute(strMTSQL)
Dim lastCategory
lastCategory = ""
While Not rsMachineTypes.EOF
If rsMachineTypes("category") <> lastCategory Then
If lastCategory <> "" Then Response.Write("</optgroup>")
Response.Write("<optgroup label='" & Server.HTMLEncode(rsMachineTypes("category")) & "'>")
lastCategory = rsMachineTypes("category")
End If
Response.Write("<option value='" & rsMachineTypes("machinetypeid") & "'>" & Server.HTMLEncode(rsMachineTypes("machinetype")) & "</option>")
rsMachineTypes.MoveNext
Wend
If lastCategory <> "" Then Response.Write("</optgroup>")
rsMachineTypes.Close
Set rsMachineTypes = Nothing
%>
<option value="new">+ Add New Type</option>
</select>
<div class="input-group-append">
<button type="button" class="btn btn-info" id="addMachineTypeBtn">
<i class="zmdi zmdi-plus"></i> New
</button>
</div>
</div>
</div>
<!-- Hidden section for adding new machine type -->
<div id="newMachineTypeSection" class="new-vendor-section" style="display:none; padding:15px; border-radius:5px; margin-bottom:15px;">
<h6 class="mb-3"><i class="zmdi zmdi-plus-circle"></i> New Machine/Device Type</h6>
<div class="form-group">
<label for="newmachinetypename">Type Name</label>
<input type="text" class="form-control" id="newmachinetypename" name="newmachinetypename"
maxlength="50" placeholder="e.g., Firewall, Router, UPS">
</div>
<div class="form-group">
<label for="newmachinetypecategory">Category</label>
<select class="form-control" id="newmachinetypecategory" name="newmachinetypecategory">
<option value="Equipment">Equipment</option>
<option value="Network">Network Device</option>
</select>
</div>
<button type="button" class="btn btn-sm btn-secondary" id="cancelNewMachineType">
<i class="zmdi zmdi-close"></i> Cancel
</button>
</div>
<div class="form-group">
<label for="documentationpath">Documentation URL (Optional)</label>
<input type="url" class="form-control" id="documentationpath" name="documentationpath"
maxlength="255" placeholder="https://...">
<small class="form-text text-muted">Link to support docs, manual, or spec sheet</small>
</div>
<div class="form-group">
<label for="notes">Notes (Optional)</label>
<textarea class="form-control" id="notes" name="notes"
rows="3" maxlength="255" placeholder="Additional notes about this model"></textarea>
</div>
<hr>
<div class="form-group text-right">
<button type="submit" class="btn btn-primary btn-lg">
<i class="zmdi zmdi-check"></i> Add Model
</button>
<a href="javascript:history.back()" class="btn btn-secondary btn-lg">
<i class="zmdi zmdi-close"></i> Cancel
</a>
</div>
</form>
</div>
</div>
</div>
</div>
<!-- End Row -->
<!-- End container-fluid-->
</div><!--End content-wrapper-->
<!--Start Back To Top Button-->
<a href="javaScript:void();" class="back-to-top"><i class="fa fa-angle-double-up"></i> </a>
<!--End Back To Top Button-->
<!--Start footer-->
<footer class="footer">
<div class="container">
<div class="text-center">
</div>
</div>
</footer>
<!--End footer-->
</div><!--End wrapper-->
<!-- Bootstrap core JavaScript-->
<script src="assets/js/jquery.min.js"></script>
<script src="assets/js/popper.min.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
<!-- simplebar js -->
<script src="assets/plugins/simplebar/js/simplebar.js"></script>
<!-- sidebar-menu js -->
<script src="assets/js/sidebar-menu.js"></script>
<!-- Custom scripts -->
<script src="assets/js/app-script.js"></script>
<style>
/* New vendor section styling for all themes */
.new-vendor-section {
background: rgba(255, 255, 255, 0.03);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.new-vendor-section h6 {
color: rgba(255, 255, 255, 0.9);
}
</style>
<script>
$(document).ready(function() {
// Show/hide new vendor section
$('#addVendorBtn, #vendorid').on('change click', function() {
if ($('#vendorid').val() === 'new' || $(this).attr('id') === 'addVendorBtn') {
$('#vendorid').val('new');
$('#newVendorSection').slideDown();
$('#newvendorname').prop('required', true);
}
});
$('#cancelNewVendor').on('click', function() {
$('#newVendorSection').slideUp();
$('#vendorid').val('');
$('#newvendorname').val('').prop('required', false);
$('#isprinter, #ispc, #ismachine').prop('checked', false);
});
// Show/hide machine type section when Machine/Equipment is checked
$('#modelismachine').on('change', function() {
if ($(this).is(':checked')) {
$('#machineTypeSection').slideDown();
} else {
$('#machineTypeSection').slideUp();
$('#machinetypeid').val('');
$('#newMachineTypeSection').slideUp();
}
});
// Show/hide new machine type section
$('#addMachineTypeBtn, #machinetypeid').on('change click', function() {
if ($('#machinetypeid').val() === 'new' || $(this).attr('id') === 'addMachineTypeBtn') {
$('#machinetypeid').val('new');
$('#newMachineTypeSection').slideDown();
$('#newmachinetypename').prop('required', true);
}
});
$('#cancelNewMachineType').on('click', function() {
$('#newMachineTypeSection').slideUp();
$('#machinetypeid').val('');
$('#newmachinetypename').val('').prop('required', false);
});
// Form validation - at least one model type must be selected
$('#modelForm').on('submit', function(e) {
var atLeastOneChecked = $('.model-type:checked').length > 0;
if (!atLeastOneChecked) {
e.preventDefault();
alert('Please select at least one category for this model (Printer, PC, or Machine)');
return false;
}
// If adding new vendor, make sure name is filled
if ($('#vendorid').val() === 'new' && $('#newvendorname').val().trim() === '') {
e.preventDefault();
alert('Please enter a manufacturer name or select an existing one');
$('#newvendorname').focus();
return false;
}
// If adding new machine type, make sure name is filled
if ($('#machinetypeid').val() === 'new' && $('#newmachinetypename').val().trim() === '') {
e.preventDefault();
alert('Please enter a machine type name or select an existing one');
$('#newmachinetypename').focus();
return false;
}
});
});
</script>
</body>
</html>
<%
objConn.Close
%>