mirror of
https://github.com/itflow-org/itflow
synced 2026-09-21 22:21:15 +00:00
Invoicing - bug: fix not being able to add tickets to invoice; feature: add ability to remove tickets from invoice
This commit is contained in:
@@ -141,7 +141,7 @@ if (isset($_GET['invoice_id'])) {
|
|||||||
//Get billable, and unbilled tickets to add to invoice
|
//Get billable, and unbilled tickets to add to invoice
|
||||||
$sql_tickets_billable = mysqli_query(
|
$sql_tickets_billable = mysqli_query(
|
||||||
$mysqli, "
|
$mysqli, "
|
||||||
SELECT 1
|
SELECT ticket_id, ticket_subject, ticket_number, ticket_prefix, ticket_status
|
||||||
FROM
|
FROM
|
||||||
tickets
|
tickets
|
||||||
WHERE
|
WHERE
|
||||||
@@ -151,10 +151,9 @@ if (isset($_GET['invoice_id'])) {
|
|||||||
AND
|
AND
|
||||||
ticket_invoice_id = 0
|
ticket_invoice_id = 0
|
||||||
AND
|
AND
|
||||||
ticket_status = 5;
|
ticket_status IN (4, 5);
|
||||||
");
|
");
|
||||||
|
|
||||||
|
|
||||||
//Add up all the payments for the invoice and get the total amount paid to the invoice
|
//Add up all the payments for the invoice and get the total amount paid to the invoice
|
||||||
$sql_amount_paid = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS amount_paid FROM payments WHERE payment_invoice_id = $invoice_id");
|
$sql_amount_paid = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS amount_paid FROM payments WHERE payment_invoice_id = $invoice_id");
|
||||||
$row = mysqli_fetch_assoc($sql_amount_paid);
|
$row = mysqli_fetch_assoc($sql_amount_paid);
|
||||||
@@ -697,7 +696,7 @@ if (isset($_GET['invoice_id'])) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm d-print-none <?php if (mysqli_num_rows($sql_tickets) == 0) { echo "d-none"; } ?>">
|
<div class="col-sm d-print-none <?php if (mysqli_num_rows($sql_tickets) == 0 && mysqli_num_rows($sql_tickets_billable) == 0) { echo "d-none"; } ?>">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header text-bold">
|
<div class="card-header text-bold">
|
||||||
<i class="fa fa-life-ring me-2"></i>Tickets
|
<i class="fa fa-life-ring me-2"></i>Tickets
|
||||||
@@ -728,15 +727,19 @@ if (isset($_GET['invoice_id'])) {
|
|||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
<th>Date</th>
|
<th>Date</th>
|
||||||
<th>Subject</th>
|
<th>Subject</th>
|
||||||
<th class="text-end">Time Worked</th>
|
<th class="text-end">Time Worked</th>
|
||||||
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
while ($row = mysqli_fetch_assoc($sql_tickets)) {
|
while ($row = mysqli_fetch_assoc($sql_tickets)) {
|
||||||
|
$ticket_prefix = escapeHtml($row['ticket_prefix']);
|
||||||
|
$ticket_number = escapeHtml($row['ticket_number']);
|
||||||
$ticket_id = intval($row['ticket_id']);
|
$ticket_id = intval($row['ticket_id']);
|
||||||
$ticket_created_at = escapeHtml($row['ticket_created_at']);
|
$ticket_created_at = escapeHtml($row['ticket_created_at']);
|
||||||
$ticket_subject = escapeHtml($row['ticket_subject']);
|
$ticket_subject = escapeHtml($row['ticket_subject']);
|
||||||
@@ -744,9 +747,12 @@ if (isset($_GET['invoice_id'])) {
|
|||||||
|
|
||||||
?>
|
?>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td><a href="ticket.php?ticket_id=<?= $ticket_id ?>"><?= "$ticket_prefix$ticket_number" ?></a></td>
|
||||||
<td><?= $ticket_created_at ?></td>
|
<td><?= $ticket_created_at ?></td>
|
||||||
<td><?= $ticket_subject ?></td>
|
<td><?= $ticket_subject ?></td>
|
||||||
<td class="text-end"><?= $ticket_total_time_worked ?></td>
|
<td class="text-end"><?= $ticket_total_time_worked ?></td>
|
||||||
|
<td align="right"><a class="btn btn-light text-danger confirm-link" title="Remove" href="post.php?remove_ticket_from_invoice&invoice_id=<?= $invoice_id ?>&ticket_id=<?= $ticket_id ?>&csrf_token=<?= $_SESSION['csrf_token'] ?>"><i class="fa fa-times"></i></a></td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,8 +44,16 @@
|
|||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
<td><?= $ticket_subject ?></td>
|
<td><?= $ticket_subject ?></td>
|
||||||
<td><a href='ticket.php?ticket_id=<?= $ticket_id ?>&invoice_id=<?= $invoice_id ?>#addInvoiceFromTicketModal'>
|
<td>
|
||||||
<i class="fas fa-fw fa-plus-circle"></i></td>
|
<form action="post.php" method="post">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
|
||||||
|
<input type="hidden" name="invoice_id" value="<?= $invoice_id ?>">
|
||||||
|
<input type="hidden" name="ticket_id" value="<?= $ticket_id ?>">
|
||||||
|
<button class="btn btn-link p-0" type="submit" name="add_ticket_to_invoice" title="Add ticket to invoice">
|
||||||
|
<i class="fas fa-fw fa-plus-circle"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@@ -1003,6 +1003,7 @@ if (isExportRequest('export_invoices')) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: This should probably be removed as we now allow multiple invoices to be linked to a single ticket
|
||||||
if (isset($_POST['link_invoice_to_ticket'])) {
|
if (isset($_POST['link_invoice_to_ticket'])) {
|
||||||
|
|
||||||
validateCSRFToken();
|
validateCSRFToken();
|
||||||
@@ -1041,7 +1042,28 @@ if (isset($_POST['add_ticket_to_invoice'])) {
|
|||||||
|
|
||||||
flashAlert("Ticket linked to invoice");
|
flashAlert("Ticket linked to invoice");
|
||||||
|
|
||||||
redirect("post.php?add_ticket_to_invoice=$invoice_id");
|
redirect("invoice.php?invoice_id=$invoice_id");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_GET['remove_ticket_from_invoice'])) {
|
||||||
|
|
||||||
|
validateCSRFToken();
|
||||||
|
|
||||||
|
enforceUserPermission('module_sales', 2);
|
||||||
|
|
||||||
|
$invoice_id = intval($_GET['invoice_id']);
|
||||||
|
$ticket_id = intval($_GET['ticket_id']);
|
||||||
|
|
||||||
|
$client_id = intval(getFieldById('tickets', $ticket_id, 'ticket_client_id'));
|
||||||
|
|
||||||
|
enforceClientAccess();
|
||||||
|
|
||||||
|
mysqli_query($mysqli,"UPDATE tickets SET ticket_invoice_id = 0 WHERE ticket_id = $ticket_id");
|
||||||
|
|
||||||
|
flashAlert("Ticket unlinked from invoice");
|
||||||
|
|
||||||
|
redirect("invoice.php?invoice_id=$invoice_id");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user