mirror of
https://github.com/itflow-org/itflow
synced 2026-09-22 14:41:17 +00:00
Add ability for recurring invoices to be generated as draft to allow review and amendment prior to sending
This commit is contained in:
@@ -674,7 +674,7 @@ if ($config_send_invoice_reminders == 1) {
|
||||
// Logging
|
||||
// logAudit("Cron", "Task", "Cron created notifications for past due invoices and sent out notifications to the primary and billing contacts email");
|
||||
|
||||
// Send Recurring Invoices that match todays date and are active
|
||||
// Generate & Send Recurring Invoices that match todays date and are active
|
||||
|
||||
//Loop through all recurring that match today's date and is active
|
||||
$sql_recurring_invoices = mysqli_query($mysqli, "SELECT client_name, client_net_terms, recurring_invoice_amount, recurring_invoice_category_id,
|
||||
@@ -682,7 +682,7 @@ $sql_recurring_invoices = mysqli_query($mysqli, "SELECT client_name, client_net_
|
||||
recurring_invoice_discount_amount, recurring_invoice_email_notify,
|
||||
recurring_invoice_frequency, recurring_invoice_id, recurring_invoice_last_sent,
|
||||
recurring_invoice_next_date, recurring_invoice_note, recurring_invoice_scope,
|
||||
recurring_invoice_status, recurring_payment_account_id, recurring_payment_currency_code,
|
||||
recurring_invoice_status, recurring_invoice_auto_send, recurring_payment_account_id, recurring_payment_currency_code,
|
||||
recurring_payment_method, recurring_payment_recurring_invoice_id FROM recurring_invoices
|
||||
LEFT JOIN recurring_payments ON recurring_invoice_id = recurring_payment_recurring_invoice_id
|
||||
LEFT JOIN clients ON client_id = recurring_invoice_client_id
|
||||
@@ -701,6 +701,7 @@ while ($row = mysqli_fetch_assoc($sql_recurring_invoices)) {
|
||||
$recurring_invoice_amount = floatval($row['recurring_invoice_amount']);
|
||||
$recurring_invoice_currency_code = escapeSql($row['recurring_invoice_currency_code']);
|
||||
$recurring_invoice_note = escapeSql($row['recurring_invoice_note']);
|
||||
$recurring_invoice_auto_send = intval($row['recurring_invoice_auto_send']);
|
||||
$recurring_invoice_email_notify = intval($row['recurring_invoice_email_notify']);
|
||||
$category_id = intval($row['recurring_invoice_category_id']);
|
||||
$client_id = intval($row['recurring_invoice_client_id']);
|
||||
@@ -726,7 +727,7 @@ while ($row = mysqli_fetch_assoc($sql_recurring_invoices)) {
|
||||
//Generate a unique URL key for clients to access
|
||||
$url_key = randomString(32);
|
||||
|
||||
mysqli_query($mysqli, "INSERT INTO invoices SET invoice_prefix = '$config_invoice_prefix', invoice_number = $new_invoice_number, invoice_scope = '$recurring_invoice_scope', invoice_date = CURDATE(), invoice_due = DATE_ADD(CURDATE(), INTERVAL $client_net_terms day), invoice_discount_amount = $recurring_invoice_discount_amount, invoice_amount = $recurring_invoice_amount, invoice_currency_code = '$recurring_invoice_currency_code', invoice_note = '$recurring_invoice_note', invoice_category_id = $category_id, invoice_status = 'Sent', invoice_url_key = '$url_key', invoice_recurring_invoice_id = $recurring_invoice_id, invoice_client_id = $client_id");
|
||||
mysqli_query($mysqli, "INSERT INTO invoices SET invoice_prefix = '$config_invoice_prefix', invoice_number = $new_invoice_number, invoice_scope = '$recurring_invoice_scope', invoice_date = CURDATE(), invoice_due = DATE_ADD(CURDATE(), INTERVAL $client_net_terms day), invoice_discount_amount = $recurring_invoice_discount_amount, invoice_amount = $recurring_invoice_amount, invoice_currency_code = '$recurring_invoice_currency_code', invoice_note = '$recurring_invoice_note', invoice_category_id = $category_id, invoice_status = 'Draft', invoice_url_key = '$url_key', invoice_recurring_invoice_id = $recurring_invoice_id, invoice_client_id = $client_id");
|
||||
|
||||
$new_invoice_id = mysqli_insert_id($mysqli);
|
||||
|
||||
@@ -751,13 +752,17 @@ while ($row = mysqli_fetch_assoc($sql_recurring_invoices)) {
|
||||
|
||||
}
|
||||
|
||||
mysqli_query($mysqli, "INSERT INTO history SET history_status = 'Sent', history_description = 'Invoice Generated from Recurring!', history_invoice_id = $new_invoice_id");
|
||||
mysqli_query($mysqli, "INSERT INTO history SET history_status = 'Draft', history_description = 'Invoice Generated from Recurring!', history_invoice_id = $new_invoice_id");
|
||||
|
||||
appNotify("Recurring Sent", "Recurring Invoice $config_invoice_prefix$new_invoice_number for $client_name Sent", "/agent/invoice.php?invoice_id=$new_invoice_id", $client_id);
|
||||
if ($recurring_invoice_auto_send == 1) {
|
||||
appNotify("Recurring Sent", "Recurring Invoice $config_invoice_prefix$new_invoice_number for $client_name Sent", "/agent/invoice.php?invoice_id=$new_invoice_id", $client_id);
|
||||
} else {
|
||||
appNotify("Recurring Generated", "Recurring Invoice $config_invoice_prefix$new_invoice_number for $client_name Generated", "/agent/invoice.php?invoice_id=$new_invoice_id", $client_id);
|
||||
}
|
||||
|
||||
triggerCustomAction('invoice_create', $new_invoice_id);
|
||||
|
||||
//Update recurring dates
|
||||
// Update recurring dates
|
||||
|
||||
mysqli_query($mysqli, "UPDATE recurring_invoices SET recurring_invoice_last_sent = CURDATE(), recurring_invoice_next_date = DATE_ADD(CURDATE(), INTERVAL 1 $recurring_invoice_frequency) WHERE recurring_invoice_id = $recurring_invoice_id");
|
||||
|
||||
@@ -783,7 +788,8 @@ while ($row = mysqli_fetch_assoc($sql_recurring_invoices)) {
|
||||
$contact_name = escapeSql($row['contact_name']);
|
||||
$contact_email = escapeSql($row['contact_email']);
|
||||
|
||||
if ($config_recurring_auto_send_invoice == 1 && $recurring_invoice_email_notify == 1) {
|
||||
// Send invoice email if: (1) Global recurring auto-send is on, (2) the recurring invoice is set to auto-send (than just be a draft), and (3) the recurring invoice is opted in for the client to be notified
|
||||
if ($config_recurring_auto_send_invoice == 1 && $recurring_invoice_auto_send == 1 && $recurring_invoice_email_notify == 1) {
|
||||
|
||||
$subject = "Invoice $invoice_prefix$invoice_number";
|
||||
$body = "Hello $contact_name,<br><br>An invoice regarding \"$invoice_scope\" has been generated. Please view the details below.<br><br>Invoice: $invoice_prefix$invoice_number<br>Issue Date: $invoice_date<br>Total: " . numfmt_format_currency($currency_format, $invoice_amount, $recurring_invoice_currency_code) . "<br>Due Date: $invoice_due<br><br><br>To view your invoice, please click <a href=\'https://$config_base_url/guest/guest_view_invoice.php?invoice_id=$new_invoice_id&url_key=$invoice_url_key\'>here</a>.<br><br><br>--<br>$company_name - Billing<br>$config_invoice_from_email<br>$company_phone";
|
||||
@@ -851,6 +857,17 @@ while ($row = mysqli_fetch_assoc($sql_invalid_recurring_invoices)) {
|
||||
}
|
||||
// End Flag any active recurring "next run" dates that are in the past
|
||||
|
||||
// Start Notify draft invoices needing review
|
||||
$sql_invoices_pending_send = mysqli_query($mysqli,"SELECT invoice_id FROM invoices WHERE invoice_status = 'Draft'");
|
||||
$invoices_pending_send = mysqli_num_rows($sql_invoices_pending_send);
|
||||
|
||||
if ($invoices_pending_send > 0) {
|
||||
|
||||
appNotify("Draft Invoices", "There are $invoices_pending_send draft invoices pending review", "/agent/invoices.php?&status=Draft");
|
||||
}
|
||||
// End Notify draft invoices needing review
|
||||
|
||||
|
||||
|
||||
// Start Recurring Payments
|
||||
$sql_recurring_payments = mysqli_query($mysqli, "
|
||||
|
||||
Reference in New Issue
Block a user