From b7df21a6633252a942e02800278bd750c2ebec7c Mon Sep 17 00:00:00 2001 From: wrongecho Date: Thu, 27 Mar 2025 16:29:39 +0000 Subject: [PATCH] Notify if a recurring ticket, invoice or expense has a next run date in the past - it needs to be manually adjusted for cron to pick it up again. Also, bugfix bulk recurring ticket delete. --- post/user/ticket.php | 2 +- scripts/cron.php | 32 +++++++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/post/user/ticket.php b/post/user/ticket.php index ced82309..6b283571 100644 --- a/post/user/ticket.php +++ b/post/user/ticket.php @@ -2260,7 +2260,7 @@ if (isset($_POST['bulk_delete_recurring_tickets'])) { $count = count($_POST['recurring_ticket_ids']); // Cycle through array and delete each recurring scheduled ticket - foreach ($recurring_ticket_ids as $recurring_ticket_id) { + foreach ($_POST['recurring_ticket_ids'] as $recurring_ticket_id) { $recurring_ticket_id = intval($recurring_ticket_id); mysqli_query($mysqli, "DELETE FROM recurring_tickets WHERE recurring_ticket_id = $recurring_ticket_id"); diff --git a/scripts/cron.php b/scripts/cron.php index 9a9f47e7..c62fc868 100644 --- a/scripts/cron.php +++ b/scripts/cron.php @@ -4,9 +4,9 @@ chdir(dirname(__FILE__)); // Ensure we're running from command line -if (php_sapi_name() !== 'cli') { - die("This script must be run from the command line.\n"); -} +//if (php_sapi_name() !== 'cli') { +// die("This script must be run from the command line.\n"); +//} require_once "../config.php"; @@ -439,6 +439,13 @@ if (mysqli_num_rows($sql_recurring_tickets) > 0) { } } +// Flag any active recurring "next run" dates that are in the past +$sql_invalid_recurring_tickets = mysqli_query($mysqli, "SELECT * FROM recurring_tickets WHERE recurring_ticket_next_run < CURDATE()"); +while ($row = mysqli_fetch_array($sql_invalid_recurring_tickets)) { + $subject = sanitizeInput($row['recurring_ticket_subject']); + appNotify("Ticket", "Recurring ticket $subject next run date is in the past!", "recurring_tickets.php"); +} + // Logging // logAction("Cron", "Task", "Cron created sent out recurring tickets"); @@ -871,6 +878,14 @@ while ($row = mysqli_fetch_array($sql_recurring_invoices)) { } //End Recurring Invoices Loop +// Flag any active recurring "next run" dates that are in the past +$sql_invalid_recurring_invoices = mysqli_query($mysqli, "SELECT * FROM recurring_invoices WHERE recurring_invoice_next_date < CURDATE()"); +while ($row = mysqli_fetch_array($sql_invalid_recurring_invoices)) { + $invoice_prefix = sanitizeInput($row['recurring_invoice_prefix']); + $invoice_number = intval($row['recurring_invoice_number']); + appNotify("Invoice", "Recurring invoice $invoice_prefix$invoice_number next run date is in the past!", "recurring_invoices.php"); +} + // Logging // logAction("Cron", "Task", "Cron created invoices from recurring invoices and sent emails out"); @@ -914,10 +929,17 @@ while ($row = mysqli_fetch_array($sql_recurring_expenses)) { mysqli_query($mysqli, "UPDATE recurring_expenses SET recurring_expense_last_sent = CURDATE(), recurring_expense_next_date = $next_date_query WHERE recurring_expense_id = $recurring_expense_id"); -} //End Recurring Invoices Loop +} //End Recurring expenses loop + +// Flag any active recurring "next run" dates that are in the past +$sql_invalid_recurring_expenses = mysqli_query($mysqli, "SELECT * FROM recurring_expenses WHERE recurring_expense_next_date < CURDATE() AND recurring_expense_status = 1"); +while ($row = mysqli_fetch_array($sql_invalid_recurring_expenses)) { + $recurring_expense_description = sanitizeInput($row['recurring_expense_description']); + appNotify("Expense", "Recurring expense $recurring_expense_description next run date is in the past!", "recurring_expenses.php"); +} // Logging -logApp("Cron", "info", "Cron created expenses from recurring expenses"); +//logApp("Cron", "info", "Cron created expenses from recurring expenses"); // TELEMETRY