mirror of
https://github.com/itflow-org/itflow
synced 2026-08-05 15:17:17 +00:00
Statuses can be flagged to pause the resolution clock; sla_history records the intervals a ticket's clock actually ran and the deadline is re-based on remaining budget when it resumes. Adds SLA Summary and SLA by Client reports, an SLA state filter on the ticket list, SLA colouring on kanban cards, and an Urgent column on the Tickets by Client report. DB update 2.5.1. Also fixes resolution SLA verdicts being skipped when resolving via kanban or the client portal.
181 lines
9.7 KiB
PHP
181 lines
9.7 KiB
PHP
<!-- Main Sidebar Container -->
|
|
<aside class="main-sidebar sidebar-dark-primary d-print-none">
|
|
|
|
<a class="pb-1 mt-1 brand-link" href="/agent/<?= $config_start_page ?>">
|
|
<p class="h5"><i class="nav-icon fas fa-arrow-left ml-3 mr-2"></i>
|
|
<span class="brand-text ">Back | <strong>Reports</strong>
|
|
</p>
|
|
</a>
|
|
|
|
<!-- Sidebar -->
|
|
<div class="sidebar">
|
|
|
|
<!-- Sidebar Menu -->
|
|
<nav>
|
|
|
|
<ul class="nav nav-pills nav-sidebar flex-column mt-2" data-widget="treeview" data-accordion="false">
|
|
|
|
<?php if ($config_module_enable_accounting == 1 && lookupUserPermission("module_financial") >= 1) { ?>
|
|
<li class="nav-header">INCOME</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/income_summary.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "income_summary.php") { echo "active"; } ?>">
|
|
<i class="fas fa-hand-holding-usd nav-icon"></i>
|
|
<p>Income</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/income_by_client.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "income_by_client.php") { echo "active"; } ?>">
|
|
<i class="far fa-user nav-icon"></i>
|
|
<p>Income by Client</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/recurring_by_client.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "recurring_by_client.php") { echo "active"; } ?>">
|
|
<i class="fa fa-sync nav-icon"></i>
|
|
<p>Recurring Income by Client</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/outstanding_balances.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "outstanding_balances.php") { echo "active"; } ?>">
|
|
<i class="fa fa-exclamation-triangle nav-icon"></i>
|
|
<p>Outstanding Balances</p>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-header">EXPENSES</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/expense_summary.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "expense_summary.php") { echo "active"; } ?>">
|
|
<i class="fas fa-shopping-cart nav-icon"></i>
|
|
<p>Expense</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/expense_by_vendor.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "expense_by_vendor.php") { echo "active"; } ?>">
|
|
<i class="far fa-building nav-icon"></i>
|
|
<p>Expense by Vendor</p>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-header">STATEMENTS</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/tax_summary.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "tax_summary.php") { echo "active"; } ?>">
|
|
<i class="fas fa-percent nav-icon"></i>
|
|
<p>Tax Summary</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/profit_loss.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "profit_loss.php") { echo "active"; } ?>">
|
|
<i class="fas fa-file-invoice-dollar nav-icon"></i>
|
|
<p>Profit & Loss</p>
|
|
</a>
|
|
</li>
|
|
<?php } // End financial reports IF statement ?>
|
|
|
|
<?php if (($config_module_enable_accounting == 1 && lookupUserPermission("module_financial") >= 1) || ($config_module_enable_ticketing && lookupUserPermission("module_support") >= 1)) { ?>
|
|
<li class="nav-header">TIME</li>
|
|
<?php } ?>
|
|
<?php if ($config_module_enable_accounting == 1 && lookupUserPermission("module_financial") >= 1) { ?>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/tickets_unbilled.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "tickets_unbilled.php") { echo "active"; } ?>">
|
|
<i class="nav-icon fas fa-hourglass-half"></i>
|
|
<p>Unbilled Tickets</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/client_ticket_time_detail.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "client_ticket_time_detail.php") { echo "active"; } ?>">
|
|
<i class="nav-icon fas fa-stopwatch"></i>
|
|
<p>Time Detail by Client</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<?php if ($config_module_enable_ticketing && lookupUserPermission("module_support") >= 1) { ?>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/time_by_tech.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "time_by_tech.php") { echo "active"; } ?>">
|
|
<i class="nav-icon fas fa-user-clock"></i>
|
|
<p>Time by Technician</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
|
|
<?php if (($config_module_enable_ticketing && lookupUserPermission("module_support") >= 1) || lookupUserPermission("module_credential") >= 1) { ?>
|
|
<li class="nav-header">TECHNICAL</li>
|
|
<?php } ?>
|
|
<?php if ($config_module_enable_ticketing && lookupUserPermission("module_support") >= 1) { ?>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/ticket_summary.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "ticket_summary.php") { echo "active"; } ?>">
|
|
<i class="nav-icon fas fa-life-ring"></i>
|
|
<p>Tickets</p>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/ticket_by_client.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "ticket_by_client.php") { echo "active"; } ?>">
|
|
<i class="nav-icon fas fa-life-ring"></i>
|
|
<p>Tickets by Client</p>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/sla_summary.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "sla_summary.php") { echo "active"; } ?>">
|
|
<i class="nav-icon fas fa-stopwatch"></i>
|
|
<p>SLA Summary</p>
|
|
</a>
|
|
</li>
|
|
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/sla_by_client.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "sla_by_client.php") { echo "active"; } ?>">
|
|
<i class="nav-icon fas fa-stopwatch"></i>
|
|
<p>SLA by Client</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
<?php if (lookupUserPermission("module_credential") >= 1) { ?>
|
|
<li class="nav-item">
|
|
<a href="/agent/reports/credential_rotation.php" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "credential_rotation.php") { echo "active"; } ?>">
|
|
<i class="nav-icon fas fa-key"></i>
|
|
<p>Credential Rotation</p>
|
|
</a>
|
|
</li>
|
|
<?php } ?>
|
|
|
|
<?php
|
|
$sql_custom_links = mysqli_query($mysqli, "SELECT * FROM custom_links
|
|
WHERE custom_link_location = 5 AND custom_link_archived_at IS NULL
|
|
ORDER BY custom_link_order ASC, custom_link_name ASC"
|
|
);
|
|
|
|
while ($row = mysqli_fetch_assoc($sql_custom_links)) {
|
|
$custom_link_name = escapeHtml($row['custom_link_name']);
|
|
$custom_link_uri = escapeUrl($row['custom_link_uri']);
|
|
$custom_link_icon = escapeHtml($row['custom_link_icon']);
|
|
$custom_link_new_tab = intval($row['custom_link_new_tab']);
|
|
if ($custom_link_new_tab == 1) {
|
|
$target = "target='_blank' rel='noopener noreferrer'";
|
|
} else {
|
|
$target = "";
|
|
}
|
|
|
|
?>
|
|
|
|
<li class="nav-item">
|
|
<a href="<?= $custom_link_uri ?>" <?= $target ?> class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == basename($custom_link_uri)) { echo "active"; } ?>">
|
|
<i class="fas fa-<?= $custom_link_icon ?> nav-icon"></i>
|
|
<p><?= $custom_link_name ?></p>
|
|
<i class="fas fa-angle-right nav-icon float-right"></i>
|
|
</a>
|
|
</li>
|
|
|
|
<?php } ?>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
<!-- /.sidebar-menu -->
|
|
|
|
<div class="sidebar-custom mb-3">
|
|
|
|
</div>
|
|
|
|
</div>
|
|
<!-- /.sidebar -->
|
|
</aside>
|