Fixed Bulk Assign Ticket, UI Update on Ticket Details, added Project details to the right pane, moved Client and ticket details along with Assign Ticket to the top Ticket Header

This commit is contained in:
johnnyq 2024-04-08 14:44:35 -04:00
parent 2aefbd9fba
commit ea85094be8
2 changed files with 121 additions and 96 deletions

View File

@ -373,7 +373,7 @@ if (isset($_POST['assign_ticket'])) {
// POST variables
$ticket_id = intval($_POST['ticket_id']);
$assigned_to = intval($_POST['assigned_to']);
$ticket_status = sanitizeInput($_POST['ticket_status']);
$ticket_status = intval($_POST['ticket_status']);
// New > Open as assigned
if ($ticket_status == 1 && $assigned_to !== 0) {
@ -516,7 +516,7 @@ if (isset($_POST['bulk_assign_ticket'])) {
foreach ($_POST['ticket_ids'] as $ticket_id) {
$ticket_id = intval($ticket_id);
$sql = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN ticket_status ON ticket_status = ticket_status_id WHERE ticket_id = $ticket_id");
$sql = mysqli_query($mysqli, "SELECT * FROM tickets LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id WHERE ticket_id = $ticket_id");
$row = mysqli_fetch_array($sql);
$ticket_prefix = sanitizeInput($row['ticket_prefix']);

View File

@ -27,6 +27,7 @@ if (isset($_GET['ticket_id'])) {
LEFT JOIN locations ON ticket_location_id = location_id
LEFT JOIN assets ON ticket_asset_id = asset_id
LEFT JOIN vendors ON ticket_vendor_id = vendor_id
LEFT JOIN projects ON ticket_project_id = project_id
LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id
WHERE ticket_id = $ticket_id LIMIT 1"
);
@ -78,6 +79,7 @@ if (isset($_GET['ticket_id'])) {
$ticket_feedback = nullable_htmlentities($row['ticket_feedback']);
$ticket_status = intval($row['ticket_status_id']);
$ticket_status_id = intval($row['ticket_status_id']);
$ticket_status_name = nullable_htmlentities($row['ticket_status_name']);
$ticket_status_color = nullable_htmlentities($row['ticket_status_color']);
@ -94,8 +96,6 @@ if (isset($_GET['ticket_id'])) {
$ticket_assigned_to_display = nullable_htmlentities($row['user_name']);
}
$project_id = intval($row['ticket_project_id']);
$contact_id = intval($row['contact_id']);
$contact_name = nullable_htmlentities($row['contact_name']);
$contact_title = nullable_htmlentities($row['contact_title']);
@ -137,6 +137,18 @@ if (isset($_GET['ticket_id'])) {
$location_zip = nullable_htmlentities($row['location_zip']);
$location_phone = formatPhoneNumber($row['location_phone']);
$project_id = intval($row['project_id']);
$project_name = nullable_htmlentities($row['project_name']);
$project_description = nullable_htmlentities($row['project_description']);
$project_due = nullable_htmlentities($row['project_due']);
$project_manager = nullable_htmlentities($row['project_manager']);
if($project_manager) {
$sql_project_manager = mysqli_query($mysqli,"SELECT * FROM users WHERE user_id = $project_manager");
$row = mysqli_fetch_array($sql_project_manager);
$project_manager_name = nullable_htmlentities($row['user_name']);
}
if ($contact_id) {
//Get Contact Ticket Stats
$ticket_related_open = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_related_open FROM tickets WHERE ticket_status != 'Closed' AND ticket_contact_id = $contact_id ");
@ -263,12 +275,91 @@ if (isset($_GET['ticket_id'])) {
</ol>
<div class="card card-body">
<div class="row">
<div class="col-4">
<div class="media">
<i class="fa fa-fw fa-2x fa-life-ring text-secondary mr-2"></i>
<div class="media-body">
<h3 class="mb-0"><?php echo "$ticket_prefix$ticket_number"; ?><span class='badge badge-pill text-light ml-2' style="background-color: <?php echo $ticket_status_color; ?>"><?php echo $ticket_status_name; ?></span>
</h3>
<div><small class="text-secondary"><?php echo $ticket_subject; ?></small></div>
<div class="mt-1">
<i class="fa fa-fw fa-calendar text-secondary mr-2"></i><?php echo $ticket_created_at; ?>
</div>
<div class="mt-1">
<i class="fa fa-fw fa-history text-secondary mr-2"></i>Updated: <strong><?php echo $ticket_updated_at; ?></strong>
</div>
<div class="mt-1">
<a href="#" data-toggle="modal" data-target="#assignTicketModal<?php echo $ticket_id; ?>">
<i class="fas fa-fw fa-user-check mr-2 text-secondary"></i><?php echo $ticket_assigned_to_display; ?>
</a>
</div>
<div class="col-7">
<h3><i class="fas fa-fw fa-life-ring text-secondary mr-2"></i>Ticket <?php echo "$ticket_prefix$ticket_number"; ?> <span class='badge badge-pill text-light p-2' style="background-color: <?php echo $ticket_status_color; ?>"><?php echo $ticket_status_name; ?></span></h3>
<!-- Ticket closure info -->
<?php
if (!empty($ticket_closed_at)) {
$sql_closed_by = mysqli_query($mysqli, "SELECT * FROM tickets, users WHERE ticket_closed_by = user_id");
$row = mysqli_fetch_array($sql_closed_by);
$ticket_closed_by_display = nullable_htmlentities($row['user_name']);
?>
<div class="mt-1">
<i class="fa fa-fw fa-user text-secondary mr-2"></i>Closed by: <?php echo ucwords($ticket_closed_by_display); ?>
</div>
<div class="mt-1">
<i class="fa fa-fw fa-comment-dots text-secondary mr-2"></i>Feedback: <?php echo $ticket_feedback; ?>
</div>
<?php } ?>
<!-- END Ticket closure info -->
</div>
</div>
</div>
<div class="col-5">
<div class="col-3">
<div class="media">
<i class="fa fa-fw fa-2x fa-users text-secondary mr-2"></i>
<div class="media-body">
<h3 class="mb-0"><?php echo $client_name; ?></h3>
<div>
<i class="fa fa-fw fa-thermometer-half text-secondary mr-2"></i><a href="#" data-toggle="modal" data-target="#editTicketPriorityModal<?php echo $ticket_id; ?>"><?php echo $ticket_priority_display; ?></a>
</div>
<?php
// Ticket scheduling
if (empty ($ticket_closed_at)) { ?>
<div class="mt-1">
<i class="fa fa-fw fa-calendar-check text-secondary mr-2"></i>Scheduled: <a href="#" data-toggle="modal" data-target="#editTicketScheduleModal"> <?php echo $ticket_scheduled_wording ?> </a>
</div>
<?php }
// Time tracking
if (!empty($ticket_total_reply_time)) { ?>
<div class="mt-1">
<i class="far fa-fw fa-clock text-secondary mr-2"></i>Total time worked: <?php echo $ticket_total_reply_time; ?>
</div>
<?php }
// Billable
if ($config_module_enable_accounting) { ?>
<div class="mt-1">
<i class="fa fa-fw fa-dollar-sign text-secondary mr-2"></i>Billable:
<a href="#" data-toggle="modal" data-target="#editTicketBillableModal<?php echo $ticket_id; ?>">
<?php
if ($ticket_billable == 1) {
echo "<span class='badge badge-pill badge-success p-2'>$</span>";
} else {
echo "<span class='badge badge-pill badge-secondary p-2'>X</span>";
}
?>
</a>
</div>
<?php } ?>
</div>
</div>
</div>
<div class="col-3">
</div>
<div class="col-2">
<div class="btn-group float-right d-print-none">
@ -391,10 +482,10 @@ if (isset($_GET['ticket_id'])) {
<!-- Show all active ticket statuses, apart from new or closed as these are system-managed -->
<?php $sql_ticket_status = mysqli_query($mysqli, "SELECT * FROM ticket_statuses WHERE ticket_status_id != 1 AND ticket_status_id != 5 AND ticket_status_active = 1");
while ($row = mysqli_fetch_array($sql_ticket_status)) {
$ticket_status_id = intval($row['ticket_status_id']);
$ticket_status_name = nullable_htmlentities($row['ticket_status_name']); ?>
$ticket_status_id_select = intval($row['ticket_status_id']);
$ticket_status_name_select = nullable_htmlentities($row['ticket_status_name']); ?>
<option value="<?php echo $ticket_status_id ?>" <?php if ($ticket_status == $ticket_status_id) { echo 'selected'; } ?>> <?php echo $ticket_status_name ?> </option>
<option value="<?php echo $ticket_status_id_select ?>" <?php if ($ticket_status == $ticket_status_id_select) { echo 'selected'; } ?>> <?php echo $ticket_status_name_select ?> </option>
<?php } ?>
</select>
@ -590,92 +681,6 @@ if (isset($_GET['ticket_id'])) {
<div class="col-md-3">
<!-- Ticket Details card -->
<div class="card card-body card-outline card-primary mb-3">
<h5><strong><?php echo $client_name; ?></h5></strong>
<div>
<i class="fa fa-fw fa-thermometer-half text-secondary mr-2"></i><a href="#" data-toggle="modal" data-target="#editTicketPriorityModal<?php echo $ticket_id; ?>"><?php echo $ticket_priority_display; ?></a>
</div>
<div class="mt-1">
<i class="fa fa-fw fa-calendar text-secondary mr-2"></i><?php echo $ticket_created_at; ?>
</div>
<div class="mt-2">
<i class="fa fa-fw fa-history text-secondary mr-2"></i>Updated: <strong><?php echo $ticket_updated_at; ?></strong>
</div>
<!-- Ticket closure info -->
<?php
if (!empty($ticket_closed_at)) {
$sql_closed_by = mysqli_query($mysqli, "SELECT * FROM tickets, users WHERE ticket_closed_by = user_id");
$row = mysqli_fetch_array($sql_closed_by);
$ticket_closed_by_display = nullable_htmlentities($row['user_name']);
?>
<div class="mt-1">
<i class="fa fa-fw fa-user text-secondary mr-2"></i>Closed by: <?php echo ucwords($ticket_closed_by_display); ?>
</div>
<div class="mt-1">
<i class="fa fa-fw fa-comment-dots text-secondary mr-2"></i>Feedback: <?php echo $ticket_feedback; ?>
</div>
<?php } ?>
<!-- END Ticket closure info -->
<?php
// Ticket scheduling
if (empty ($ticket_closed_at)) { ?>
<div class="mt-1">
<i class="fa fa-fw fa-calendar-check text-secondary mr-2"></i>Scheduled: <a href="#" data-toggle="modal" data-target="#editTicketScheduleModal"> <?php echo $ticket_scheduled_wording ?> </a>
</div>
<?php }
// Time tracking
if (!empty($ticket_total_reply_time)) { ?>
<div class="mt-1">
<i class="far fa-fw fa-clock text-secondary mr-2"></i>Total time worked: <?php echo $ticket_total_reply_time; ?>
</div>
<?php }
// Billable
if ($config_module_enable_accounting) { ?>
<div class="mt-1">
<i class="fa fa-fw fa-dollar-sign text-secondary mr-2"></i>Billable:
<a href="#" data-toggle="modal" data-target="#editTicketBillableModal<?php echo $ticket_id; ?>">
<?php
if ($ticket_billable == 1) {
echo "<span class='badge badge-pill badge-success p-2'>$</span>";
} else {
echo "<span class='badge badge-pill badge-secondary p-2'>X</span>";
}
?>
</a>
</div>
<?php } ?>
<hr>
<!-- Assigned to -->
<form action="post.php" method="post">
<input type="hidden" name="ticket_id" value="<?php echo $ticket_id; ?>">
<input type="hidden" name="ticket_status" value="<?php echo $ticket_status; ?>">
<input type="hidden" name="assign_ticket" value="Assign">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-user"></i></span>
</div>
<select onchange="this.form.submit()" class="form-control select2" name="assigned_to" <?php if (!empty($ticket_closed_at)) { echo "disabled"; } ?>>
<option value="0">Not Assigned</option>
<?php
while ($row = mysqli_fetch_array($sql_assign_to_select)) {
$user_id = intval($row['user_id']);
$user_name = nullable_htmlentities($row['user_name']); ?>
<option <?php if ($ticket_assigned_to == $user_id) { echo "selected"; } ?> value="<?php echo $user_id; ?>"><?php echo $user_name; ?></option>
<?php } ?>
</select>
</div>
</form>
<!-- End Assigned to -->
</div>
<!-- End Ticket details card -->
<!-- Contact card -->
<?php if ($contact_id) { ?>
<div class="card card-body card-outline card-dark mb-3">
@ -970,6 +975,24 @@ if (isset($_GET['ticket_id'])) {
<?php } //End Else ?>
<!-- End Vendor card -->
<!-- project card -->
<?php if ($project_id) { ?>
<div class="card card-body card-outline card-dark mb-3">
<h5 class="text-secondary">Project</h5>
<div>
<i class="fa fa-fw fa-project-diagram text-secondary mr-3"></i><a href="project_details.php?project_id=<?php echo $project_id; ?>" target="_blank"><strong><?php echo $project_name; ?><i class="fa fa-fw fa-external-link-alt text-secondary ml-2"></i></strong>
</a>
</div>
<?php if ($project_manager) { ?>
<div class="mt-2">
<i class="fa fa-fw fa-user-tie text-secondary mr-3"></i><?php echo $project_manager_name; ?>
</div>
<?php } ?>
</div>
<?php } ?>
<!-- End project card -->
</div> <!-- End col-3 -->
</div> <!-- End row -->
@ -977,6 +1000,8 @@ if (isset($_GET['ticket_id'])) {
<?php
require_once "ticket_edit_modal.php";
require_once "ticket_assign_modal.php";
require_once "ticket_edit_contact_modal.php";
require_once "ticket_edit_asset_modal.php";