Updated edit ticket asset to new ajax-modal and add additonal assets field

This commit is contained in:
johnnyq 2025-09-24 14:51:34 -04:00
parent 690007be5c
commit 92209c7125
5 changed files with 130 additions and 58 deletions

View File

@ -106,7 +106,7 @@ while ($row = mysqli_fetch_array($sql)) {
<?php require_once "../includes/footer.php"; <?php require_once "../includes/footer.php";
?> ?>
<script src='../plugins/fullcalendar/dist/index.global.js'></script> <script src='/plugins/fullcalendar/dist/index.global.js'></script>
<script> <script>
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {

View File

@ -1,51 +1,111 @@
<div class="modal" id="editTicketAssetModal<?php echo $ticket_id; ?>" tabindex="-1"> <?php
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header bg-dark">
<h5 class="modal-title"><i class="fa fa-fw fa-desktop mr-2"></i>Editing ticket Asset: <strong><?php echo "$ticket_prefix$ticket_number"; ?></strong> - <?php echo $client_name; ?></h5>
<button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<form action="post.php" method="post" autocomplete="off">
<input type="hidden" name="ticket_id" value="<?php echo $ticket_id; ?>">
<div class="modal-body">
<div class="form-group"> require_once '../../../includes/modal_header.php';
<label>Asset</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-desktop"></i></span>
</div>
<select class="form-control select2" name="asset">
<option value="0">- None -</option>
<?php
$sql_assets = mysqli_query($mysqli, "SELECT asset_id, asset_name, contact_name FROM assets LEFT JOIN contacts ON contact_id = asset_contact_id WHERE asset_client_id = $client_id AND asset_archived_at IS NULL ORDER BY asset_name ASC"); $ticket_id = intval($_GET['id']);
while ($row = mysqli_fetch_array($sql_assets)) {
$asset_id_select = intval($row['asset_id']);
$asset_name_select = nullable_htmlentities($row['asset_name']);
$asset_contact_name_select = nullable_htmlentities($row['contact_name']);
?>
<option <?php if ($asset_id == $asset_id_select) { echo "selected"; } ?> value="<?php echo $asset_id_select; ?>"><?php echo "$asset_name_select - $asset_contact_name_select"; ?></option>
<?php $sql = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN clients ON client_id = ticket_client_id WHERE ticket_id = $ticket_id LIMIT 1");
}
?>
</select>
</div>
</div> $row = mysqli_fetch_array($sql);
$client_id = intval($row['client_id']);
$client_name = nullable_htmlentities($row['client_name']);
$ticket_prefix = nullable_htmlentities($row['ticket_prefix']);
$ticket_number = intval($row['ticket_number']);
$ticket_category = intval($row['ticket_category']);
$ticket_subject = nullable_htmlentities($row['ticket_subject']);
$ticket_details = nullable_htmlentities($row['ticket_details']);
$ticket_priority = nullable_htmlentities($row['ticket_priority']);
$ticket_billable = intval($row['ticket_billable']);
$ticket_vendor_ticket_number = nullable_htmlentities($row['ticket_vendor_ticket_number']);
$ticket_created_at = nullable_htmlentities($row['ticket_created_at']);
$ticket_due_at = nullable_htmlentities($row['ticket_due_at']);
$ticket_assigned_to = intval($row['ticket_assigned_to']);
$contact_id = intval($row['ticket_contact_id']);
$asset_id = intval($row['ticket_asset_id']);
$location_id = intval($row['ticket_location_id']);
$vendor_id = intval($row['ticket_vendor_id']);
$project_id = intval($row['ticket_project_id']);
</div> // Additional Assets Selected
$additional_assets_array = array();
$sql_additional_assets = mysqli_query($mysqli, "SELECT asset_id FROM ticket_assets WHERE ticket_id = $ticket_id");
while ($row = mysqli_fetch_array($sql_additional_assets)) {
$additional_asset_id = intval($row['asset_id']);
$additional_assets_array[] = $additional_asset_id;
}
<div class="modal-footer"> // Generate the HTML form content using output buffering.
<button type="submit" name="edit_ticket_asset" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button> ob_start();
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button> ?>
</div>
</form> <div class="modal-header bg-dark">
<h5 class="modal-title"><i class="fa fa-fw fa-desktop mr-2"></i>Editing ticket Asset: <strong><?php echo "$ticket_prefix$ticket_number"; ?></strong> - <?php echo $client_name; ?></h5>
</div> <button type="button" class="close text-white" data-dismiss="modal">
</div> <span>&times;</span>
</button>
</div> </div>
<form action="post.php" method="post" autocomplete="off">
<input type="hidden" name="ticket_id" value="<?php echo $ticket_id; ?>">
<div class="modal-body">
<div class="form-group">
<label>Asset</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-desktop"></i></span>
</div>
<select class="form-control select2" name="asset">
<option value="0">- None -</option>
<?php
$sql_assets = mysqli_query($mysqli, "SELECT asset_id, asset_name, contact_name FROM assets LEFT JOIN contacts ON contact_id = asset_contact_id WHERE asset_client_id = $client_id AND asset_archived_at IS NULL ORDER BY asset_name ASC");
while ($row = mysqli_fetch_array($sql_assets)) {
$asset_id_select = intval($row['asset_id']);
$asset_name_select = nullable_htmlentities($row['asset_name']);
$asset_contact_name_select = nullable_htmlentities($row['contact_name']);
?>
<option <?php if ($asset_id == $asset_id_select) { echo "selected"; } ?> value="<?php echo $asset_id_select; ?>"><?php echo "$asset_name_select - $asset_contact_name_select"; ?></option>
<?php
}
?>
</select>
</div>
</div>
<div class="form-group">
<label>Additional Assets</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-desktop"></i></span>
</div>
<select class="form-control select2" name="additional_assets[]" data-tags="true" data-placeholder="- Select Additional Assets -" multiple>
<option value=""></option>
<?php
$sql_assets = mysqli_query($mysqli, "SELECT asset_id, asset_name, contact_name FROM assets LEFT JOIN contacts ON contact_id = asset_contact_id WHERE asset_client_id = $client_id AND asset_id != $asset_id AND asset_archived_at IS NULL ORDER BY asset_name ASC");
while ($row = mysqli_fetch_array($sql_assets)) {
$asset_id_select = intval($row['asset_id']);
$asset_name_select = nullable_htmlentities($row['asset_name']);
$asset_contact_name_select = nullable_htmlentities($row['contact_name']);
?>
<option value="<?php echo $asset_id_select; ?>"
<?php if (in_array($asset_id_select, $additional_assets_array)) { echo "selected"; } ?>
><?php echo "$asset_name_select - $asset_contact_name_select"; ?></option>
<?php } ?>
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" name="edit_ticket_asset" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Save</button>
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
</div>
</form>
<?php
require_once '../../../includes/modal_footer.php';

View File

@ -571,6 +571,19 @@ if (isset($_POST['edit_ticket_asset'])) {
mysqli_query($mysqli, "UPDATE tickets SET ticket_asset_id = $asset_id WHERE ticket_id = $ticket_id"); mysqli_query($mysqli, "UPDATE tickets SET ticket_asset_id = $asset_id WHERE ticket_id = $ticket_id");
// Add Additional Assets
if (isset($_POST['additional_assets'])) {
mysqli_query($mysqli, "DELETE FROM ticket_assets WHERE ticket_id = $ticket_id");
foreach ($_POST['additional_assets'] as $additional_asset) {
$additional_asset_id = intval($additional_asset);
mysqli_query($mysqli, "INSERT INTO ticket_assets SET ticket_id = $ticket_id, asset_id = $additional_asset_id");
}
} else {
// If no additional assets are provided, delete them all
// This handles cases where the assets input might be cleared or not set at all.
mysqli_query($mysqli, "DELETE FROM ticket_assets WHERE ticket_id = $ticket_id");
}
// Get ticket / asset details for logging // Get ticket / asset details for logging
$sql = mysqli_query($mysqli, "SELECT asset_name, ticket_prefix, ticket_number, ticket_status_name, ticket_client_id FROM assets $sql = mysqli_query($mysqli, "SELECT asset_name, ticket_prefix, ticket_number, ticket_status_name, ticket_client_id FROM assets
LEFT JOIN tickets ON ticket_asset_id = asset_id LEFT JOIN tickets ON ticket_asset_id = asset_id

View File

@ -437,7 +437,7 @@ if (isset($_GET['ticket_id'])) {
data-modal-url="modals/ticket/ticket_contact.php?id=<?= $ticket_id ?>"> data-modal-url="modals/ticket/ticket_contact.php?id=<?= $ticket_id ?>">
<i class="fa fa-fw fa-user mr-2"></i>Add Contact <i class="fa fa-fw fa-user mr-2"></i>Add Contact
</a> </a>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editTicketAssetModal<?php echo $ticket_id; ?>"> <a class="dropdown-item ajax-modal" href="#" data-modal-url="modals/ticket/ticket_edit_asset.php?id=<?= $ticket_id ?>">
<i class="fas fa-fw fa-desktop mr-2"></i>Add Asset <i class="fas fa-fw fa-desktop mr-2"></i>Add Asset
</a> </a>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editTicketVendorModal<?php echo $ticket_id; ?>"> <a class="dropdown-item" href="#" data-toggle="modal" data-target="#editTicketVendorModal<?php echo $ticket_id; ?>">
@ -1124,7 +1124,7 @@ if (isset($_GET['ticket_id'])) {
<h5 class="card-title"><i class="fas fa-fw fa-desktop mr-2 mt-2"></i>Primary Asset</h5> <h5 class="card-title"><i class="fas fa-fw fa-desktop mr-2 mt-2"></i>Primary Asset</h5>
<div class="card-tools"> <div class="card-tools">
<?php if (empty($ticket_resolved_at) && lookupUserPermission("module_support") >= 2) { ?> <?php if (empty($ticket_resolved_at) && lookupUserPermission("module_support") >= 2) { ?>
<a class="btn btn-light text-secondary btn-sm" href="#" data-toggle="modal" data-target="#editTicketAssetModal<?php echo $ticket_id; ?>"> <a class="btn btn-light text-secondary btn-sm ajax-modal" href="#" data-modal-url="modals/ticket/ticket_edit_asset.php?id=<?= $ticket_id ?>">
<i class="fas fa-edit"></i> <i class="fas fa-edit"></i>
</a> </a>
<?php } ?> <?php } ?>
@ -1255,7 +1255,6 @@ if (isset($_GET['ticket_id'])) {
<?php <?php
if (lookupUserPermission("module_support") >= 2 && empty($ticket_closed_at)) { if (lookupUserPermission("module_support") >= 2 && empty($ticket_closed_at)) {
require_once "modals/ticket/ticket_edit_asset.php";
require_once "modals/ticket/ticket_edit_vendor.php"; require_once "modals/ticket/ticket_edit_vendor.php";
require_once "modals/ticket/ticket_add_watcher.php"; require_once "modals/ticket/ticket_add_watcher.php";
require_once "modals/ticket/ticket_change_client.php"; require_once "modals/ticket/ticket_change_client.php";
@ -1292,7 +1291,7 @@ require_once "../includes/footer.php";
</div> </div>
</div> </div>
<script src="../js/show_modals.js"></script> <script src="/js/show_modals.js"></script>
<?php if (empty($ticket_closed_at)) { ?> <?php if (empty($ticket_closed_at)) { ?>
<!-- create js variable related to ticket timer setting --> <!-- create js variable related to ticket timer setting -->
@ -1307,7 +1306,7 @@ require_once "../includes/footer.php";
<script src="js/ticket_collision_detection.js"></script> <script src="js/ticket_collision_detection.js"></script>
<?php } ?> <?php } ?>
<script src="../js/pretty_content.js"></script> <script src="/js/pretty_content.js"></script>
<script> <script>
$('#summaryModal').on('shown.bs.modal', function (e) { $('#summaryModal').on('shown.bs.modal', function (e) {
@ -1326,7 +1325,7 @@ require_once "../includes/footer.php";
}); });
</script> </script>
<script src="../plugins/SortableJS/Sortable.min.js"></script> <script src="/plugins/SortableJS/Sortable.min.js"></script>
<script> <script>
new Sortable(document.querySelector('table#tasks tbody'), { new Sortable(document.querySelector('table#tasks tbody'), {
handle: '.drag-handle', handle: '.drag-handle',

View File

@ -27,14 +27,14 @@ header("X-Frame-Options: DENY");
<link rel="stylesheet" href="/plugins/fontawesome-free/css/all.min.css"> <link rel="stylesheet" href="/plugins/fontawesome-free/css/all.min.css">
<!-- Custom Styles --> <!-- Custom Styles -->
<link href="/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css" rel="stylesheet" type="text/css"> <link rel="stylesheet" href="/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css" >
<link href="/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css"> <link rel="stylesheet" href="/plugins/select2/css/select2.min.css">
<link href="/plugins/select2-bootstrap4-theme/select2-bootstrap4.min.css" rel="stylesheet" type="text/css"> <link rel="stylesheet" href="/plugins/select2-bootstrap4-theme/select2-bootstrap4.min.css">
<link href="/plugins/daterangepicker/daterangepicker.css" rel="stylesheet"> <link rel="stylesheet" href="/plugins/daterangepicker/daterangepicker.css">
<link href="/plugins/toastr/toastr.min.css" rel="stylesheet"> <link rel="stylesheet" href="/plugins/toastr/toastr.min.css">
<link href="/plugins/DataTables/datatables.min.css" rel="stylesheet"> <link rel="stylesheet" href="/plugins/DataTables/datatables.min.css">
<link href="/plugins/intl-tel-input/css/intlTelInput.min.css" rel="stylesheet"> <link rel="stylesheet" href="/plugins/intl-tel-input/css/intlTelInput.min.css">
<link href="/css/itflow_custom.css" rel="stylesheet"> <link rel="stylesheet" href="/css/itflow_custom.css">
<link rel="stylesheet" href="/plugins/adminlte/css/adminlte.min.css"> <link rel="stylesheet" href="/plugins/adminlte/css/adminlte.min.css">
<!-- Scripts --> <!-- Scripts -->