mirror of https://github.com/itflow-org/itflow
Fix dupe race condition with ticket, invoice, quote, project, recurring ticket numbering when being created in parallel Atomically update and get the next ticket number in one SQL query everywhere.
This commit is contained in:
parent
f09d8ffe05
commit
99e2487d2b
|
|
@ -9,7 +9,6 @@
|
||||||
</div>
|
</div>
|
||||||
<form action="post.php" method="post" autocomplete="off">
|
<form action="post.php" method="post" autocomplete="off">
|
||||||
<input type="hidden" name="quote_id" value="<?php echo $quote_id; ?>">
|
<input type="hidden" name="quote_id" value="<?php echo $quote_id; ?>">
|
||||||
<input type="hidden" name="client_net_terms" value="<?php echo $client_net_terms; ?>">
|
|
||||||
|
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -774,10 +774,16 @@ if (isset($_POST['bulk_add_client_ticket'])) {
|
||||||
|
|
||||||
$client_name = sanitizeInput($row['client_name']);
|
$client_name = sanitizeInput($row['client_name']);
|
||||||
|
|
||||||
// Get the next Ticket Number and update the config
|
// Atomically increment and get the new ticket number
|
||||||
$sql_ticket_number = mysqli_query($mysqli, "SELECT config_ticket_next_number FROM settings WHERE company_id = 1");
|
mysqli_query($mysqli, "
|
||||||
$ticket_number_row = mysqli_fetch_array($sql_ticket_number);
|
UPDATE settings
|
||||||
$ticket_number = intval($ticket_number_row['config_ticket_next_number']);
|
SET
|
||||||
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Sanitize Config Vars from get_settings.php and Session Vars from check_login.php
|
// Sanitize Config Vars from get_settings.php and Session Vars from check_login.php
|
||||||
$config_ticket_prefix = sanitizeInput($config_ticket_prefix);
|
$config_ticket_prefix = sanitizeInput($config_ticket_prefix);
|
||||||
|
|
@ -788,18 +794,10 @@ if (isset($_POST['bulk_add_client_ticket'])) {
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
||||||
// Increment the config ticket next number
|
|
||||||
$new_config_ticket_next_number = $ticket_number + 1;
|
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
|
||||||
|
|
||||||
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_category = $category_id, ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_billable = $billable, ticket_status = $ticket_status, ticket_created_by = $session_user_id, ticket_assigned_to = $assigned_to, ticket_url_key = '$url_key', ticket_client_id = $client_id, ticket_project_id = $project_id");
|
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_category = $category_id, ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_billable = $billable, ticket_status = $ticket_status, ticket_created_by = $session_user_id, ticket_assigned_to = $assigned_to, ticket_url_key = '$url_key', ticket_client_id = $client_id, ticket_project_id = $project_id");
|
||||||
|
|
||||||
$ticket_id = mysqli_insert_id($mysqli);
|
$ticket_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Update the next ticket number in the database
|
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
|
||||||
|
|
||||||
// Add Tasks
|
// Add Tasks
|
||||||
if (!empty($_POST['tasks'])) {
|
if (!empty($_POST['tasks'])) {
|
||||||
foreach ($_POST['tasks'] as $task) {
|
foreach ($_POST['tasks'] as $task) {
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,16 @@ if (isset($_POST['add_invoice'])) {
|
||||||
// Get Net Terms
|
// Get Net Terms
|
||||||
$client_net_terms = intval(getFieldById('clients', $client_id, 'client_net_terms'));
|
$client_net_terms = intval(getFieldById('clients', $client_id, 'client_net_terms'));
|
||||||
|
|
||||||
//Get the last Invoice Number and add 1 for the new invoice number
|
// Atomically increment and get the new invoice number
|
||||||
$invoice_number = $config_invoice_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_invoice_next_number = $config_invoice_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_invoice_next_number = $new_config_invoice_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_invoice_next_number = LAST_INSERT_ID(config_invoice_next_number),
|
||||||
|
config_invoice_next_number = config_invoice_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$invoice_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
@ -81,16 +87,9 @@ if (isset($_POST['add_invoice_copy'])) {
|
||||||
$date = sanitizeInput($_POST['date']);
|
$date = sanitizeInput($_POST['date']);
|
||||||
|
|
||||||
//Get Net Terms
|
//Get Net Terms
|
||||||
$sql = mysqli_query($mysqli,"SELECT client_net_terms FROM clients, invoices WHERE client_id = invoice_client_id AND invoice_id = $invoice_id");
|
$sql = mysqli_query($mysqli,"SELECT * FROM clients, invoices WHERE client_id = invoice_client_id AND invoice_id = $invoice_id");
|
||||||
$row = mysqli_fetch_array($sql);
|
$row = mysqli_fetch_array($sql);
|
||||||
$client_net_terms = intval($row['client_net_terms']);
|
$client_net_terms = intval($row['client_net_terms']);
|
||||||
|
|
||||||
$new_invoice_number = $config_invoice_next_number;
|
|
||||||
$new_config_invoice_next_number = $config_invoice_next_number + 1;
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_invoice_next_number = $new_config_invoice_next_number WHERE company_id = 1");
|
|
||||||
|
|
||||||
$sql = mysqli_query($mysqli,"SELECT * FROM invoices WHERE invoice_id = $invoice_id");
|
|
||||||
$row = mysqli_fetch_array($sql);
|
|
||||||
$invoice_scope = sanitizeInput($row['invoice_scope']);
|
$invoice_scope = sanitizeInput($row['invoice_scope']);
|
||||||
$invoice_discount_amount = floatval($row['invoice_discount_amount']);
|
$invoice_discount_amount = floatval($row['invoice_discount_amount']);
|
||||||
$invoice_amount = floatval($row['invoice_amount']);
|
$invoice_amount = floatval($row['invoice_amount']);
|
||||||
|
|
@ -101,6 +100,17 @@ if (isset($_POST['add_invoice_copy'])) {
|
||||||
$old_invoice_prefix = sanitizeInput($row['invoice_prefix']);
|
$old_invoice_prefix = sanitizeInput($row['invoice_prefix']);
|
||||||
$old_invoice_number = intval($row['invoice_number']);
|
$old_invoice_number = intval($row['invoice_number']);
|
||||||
|
|
||||||
|
// Atomically increment and get the new invoice number
|
||||||
|
mysqli_query($mysqli, "
|
||||||
|
UPDATE settings
|
||||||
|
SET
|
||||||
|
config_invoice_next_number = LAST_INSERT_ID(config_invoice_next_number),
|
||||||
|
config_invoice_next_number = config_invoice_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$new_invoice_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,16 @@ if (isset($_POST['add_project'])) {
|
||||||
// Sanitize Project Prefix
|
// Sanitize Project Prefix
|
||||||
$config_project_prefix = sanitizeInput($config_project_prefix);
|
$config_project_prefix = sanitizeInput($config_project_prefix);
|
||||||
|
|
||||||
// Get the next Project Number and add 1 for the new Project number
|
// Atomically increment and get the new project number
|
||||||
$project_number = $config_project_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_project_next_number = $config_project_next_number + 1;
|
UPDATE settings
|
||||||
|
SET
|
||||||
|
config_project_next_number = LAST_INSERT_ID(config_project_next_number),
|
||||||
|
config_project_next_number = config_project_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_project_next_number = $new_config_project_next_number WHERE company_id = 1");
|
$project_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
mysqli_query($mysqli, "INSERT INTO projects SET project_prefix = '$config_project_prefix', project_number = $project_number, project_name = '$project_name', project_description = '$project_description', project_due = '$due_date', project_manager = $project_manager, project_client_id = $client_id");
|
mysqli_query($mysqli, "INSERT INTO projects SET project_prefix = '$config_project_prefix', project_number = $project_number, project_name = '$project_name', project_description = '$project_description', project_due = '$due_date', project_manager = $project_manager, project_client_id = $client_id");
|
||||||
|
|
||||||
|
|
@ -44,15 +49,19 @@ if (isset($_POST['add_project'])) {
|
||||||
$ticket_template_subject = sanitizeInput($row['ticket_template_subject']);
|
$ticket_template_subject = sanitizeInput($row['ticket_template_subject']);
|
||||||
$ticket_template_details = mysqli_escape_string($mysqli, $row['ticket_template_details']);
|
$ticket_template_details = mysqli_escape_string($mysqli, $row['ticket_template_details']);
|
||||||
|
|
||||||
// Get the next Ticket Number and add 1 for the new ticket number
|
// Atomically increment and get the new ticket number
|
||||||
$ticket_number = $config_ticket_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_ticket_next_number = $config_ticket_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_subject = '$ticket_template_subject', ticket_details = '$ticket_template_details', ticket_priority = 'Low', ticket_status = 1, ticket_created_by = $session_user_id, ticket_client_id = $client_id, ticket_project_id = $project_id");
|
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_subject = '$ticket_template_subject', ticket_details = '$ticket_template_details', ticket_priority = 'Low', ticket_status = 1, ticket_created_by = $session_user_id, ticket_client_id = $client_id, ticket_project_id = $project_id");
|
||||||
|
|
||||||
$config_ticket_next_number = $config_ticket_next_number + 1;
|
|
||||||
|
|
||||||
$ticket_id = mysqli_insert_id($mysqli);
|
$ticket_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Task Templates for Ticket template and add the to the ticket
|
// Task Templates for Ticket template and add the to the ticket
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,16 @@ if (isset($_POST['add_quote'])) {
|
||||||
|
|
||||||
$client_id = intval($_POST['client']);
|
$client_id = intval($_POST['client']);
|
||||||
|
|
||||||
//Get the last Quote Number and add 1 for the new Quote number
|
// Atomically increment and get the new quote number
|
||||||
$quote_number = $config_quote_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_quote_next_number = $config_quote_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_quote_next_number = $new_config_quote_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_quote_next_number = LAST_INSERT_ID(config_quote_next_number),
|
||||||
|
config_quote_next_number = config_quote_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$quote_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$quote_url_key = randomString(156);
|
$quote_url_key = randomString(156);
|
||||||
|
|
@ -49,10 +55,16 @@ if (isset($_POST['add_quote_copy'])) {
|
||||||
|
|
||||||
$config_quote_prefix = sanitizeInput($config_quote_prefix);
|
$config_quote_prefix = sanitizeInput($config_quote_prefix);
|
||||||
|
|
||||||
//Get the last Invoice Number and add 1 for the new invoice number
|
// Atomically increment and get the new quote number
|
||||||
$quote_number = $config_quote_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_quote_next_number = $config_quote_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_quote_next_number = $new_config_quote_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_quote_next_number = LAST_INSERT_ID(config_quote_next_number),
|
||||||
|
config_quote_next_number = config_quote_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$quote_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
$sql = mysqli_query($mysqli,"SELECT * FROM quotes WHERE quote_id = $quote_id");
|
$sql = mysqli_query($mysqli,"SELECT * FROM quotes WHERE quote_id = $quote_id");
|
||||||
$row = mysqli_fetch_array($sql);
|
$row = mysqli_fetch_array($sql);
|
||||||
|
|
@ -106,16 +118,10 @@ if (isset($_POST['add_quote_to_invoice'])) {
|
||||||
|
|
||||||
$quote_id = intval($_POST['quote_id']);
|
$quote_id = intval($_POST['quote_id']);
|
||||||
$date = sanitizeInput($_POST['date']);
|
$date = sanitizeInput($_POST['date']);
|
||||||
$client_net_terms = intval($_POST['client_net_terms']);
|
|
||||||
|
|
||||||
$config_invoice_prefix = sanitizeInput($config_invoice_prefix);
|
$sql = mysqli_query($mysqli,"SELECT * FROM clients, quotes WHERE client_id = quote_client_id AND quote_id = $quote_id");
|
||||||
|
|
||||||
$invoice_number = $config_invoice_next_number;
|
|
||||||
$new_config_invoice_next_number = $config_invoice_next_number + 1;
|
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_invoice_next_number = $new_config_invoice_next_number WHERE company_id = 1");
|
|
||||||
|
|
||||||
$sql = mysqli_query($mysqli,"SELECT * FROM quotes WHERE quote_id = $quote_id");
|
|
||||||
$row = mysqli_fetch_array($sql);
|
$row = mysqli_fetch_array($sql);
|
||||||
|
$client_net_terms = intval($row['client_net_terms']);
|
||||||
$quote_prefix = sanitizeInput($row['quote_prefix']);
|
$quote_prefix = sanitizeInput($row['quote_prefix']);
|
||||||
$quote_number = sanitizeInput($row['quote_number']);
|
$quote_number = sanitizeInput($row['quote_number']);
|
||||||
$quote_discount_amount = floatval($row['quote_discount_amount']);
|
$quote_discount_amount = floatval($row['quote_discount_amount']);
|
||||||
|
|
@ -127,6 +133,19 @@ if (isset($_POST['add_quote_to_invoice'])) {
|
||||||
$client_id = intval($row['quote_client_id']);
|
$client_id = intval($row['quote_client_id']);
|
||||||
$category_id = intval($row['quote_category_id']);
|
$category_id = intval($row['quote_category_id']);
|
||||||
|
|
||||||
|
$config_invoice_prefix = sanitizeInput($config_invoice_prefix);
|
||||||
|
|
||||||
|
// Atomically increment and get the new invoice number
|
||||||
|
mysqli_query($mysqli, "
|
||||||
|
UPDATE settings
|
||||||
|
SET
|
||||||
|
config_invoice_next_number = LAST_INSERT_ID(config_invoice_next_number),
|
||||||
|
config_invoice_next_number = config_invoice_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$invoice_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,16 @@ if (isset($_POST['add_invoice_recurring'])) {
|
||||||
$client_id = intval($row['invoice_client_id']);
|
$client_id = intval($row['invoice_client_id']);
|
||||||
$category_id = intval($row['invoice_category_id']);
|
$category_id = intval($row['invoice_category_id']);
|
||||||
|
|
||||||
//Get the last Recurring Invoice Number and add 1 for the new Recurring Invoice number
|
// Atomically increment and get the new recurring_invoice number
|
||||||
$recurring_invoice_number = $config_recurring_invoice_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_recurring_invoice_next_number = $config_recurring_invoice_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_recurring_invoice_next_number = $new_config_recurring_invoice_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_recurring_invoice_next_number = LAST_INSERT_ID(config_recurring_invoice_next_number),
|
||||||
|
config_recurring_invoice_next_number = config_recurring_invoice_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$recurring_invoice_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
mysqli_query($mysqli,"INSERT INTO recurring_invoices SET recurring_invoice_prefix = '$config_recurring_invoice_prefix', recurring_invoice_number = $recurring_invoice_number, recurring_invoice_scope = '$invoice_scope', recurring_invoice_frequency = '$recurring_invoice_frequency', recurring_invoice_next_date = DATE_ADD('$invoice_date', INTERVAL 1 $recurring_invoice_frequency), recurring_invoice_status = 1, recurring_invoice_amount = $invoice_amount, recurring_invoice_currency_code = '$invoice_currency_code', recurring_invoice_note = '$invoice_note', recurring_invoice_category_id = $category_id, recurring_invoice_client_id = $client_id");
|
mysqli_query($mysqli,"INSERT INTO recurring_invoices SET recurring_invoice_prefix = '$config_recurring_invoice_prefix', recurring_invoice_number = $recurring_invoice_number, recurring_invoice_scope = '$invoice_scope', recurring_invoice_frequency = '$recurring_invoice_frequency', recurring_invoice_next_date = DATE_ADD('$invoice_date', INTERVAL 1 $recurring_invoice_frequency), recurring_invoice_status = 1, recurring_invoice_amount = $invoice_amount, recurring_invoice_currency_code = '$invoice_currency_code', recurring_invoice_note = '$invoice_note', recurring_invoice_category_id = $category_id, recurring_invoice_client_id = $client_id");
|
||||||
|
|
||||||
|
|
@ -66,10 +72,16 @@ if (isset($_POST['add_recurring_invoice'])) {
|
||||||
$category = intval($_POST['category']);
|
$category = intval($_POST['category']);
|
||||||
$scope = sanitizeInput($_POST['scope']);
|
$scope = sanitizeInput($_POST['scope']);
|
||||||
|
|
||||||
//Get the last Recurring Number and add 1 for the new Recurring number
|
// Atomically increment and get the new recurring_invoice number
|
||||||
$recurring_invoice_number = $config_recurring_invoice_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_recurring_invoice_next_number = $config_recurring_invoice_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_recurring_invoice_next_number = $new_config_recurring_invoice_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_recurring_invoice_next_number = LAST_INSERT_ID(config_recurring_invoice_next_number),
|
||||||
|
config_recurring_invoice_next_number = config_recurring_invoice_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$recurring_invoice_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
mysqli_query($mysqli,"INSERT INTO recurring_invoices SET recurring_invoice_prefix = '$config_recurring_invoice_prefix', recurring_invoice_number = $recurring_invoice_number, recurring_invoice_scope = '$scope', recurring_invoice_frequency = '$frequency', recurring_invoice_next_date = '$start_date', recurring_invoice_category_id = $category, recurring_invoice_status = 1, recurring_invoice_currency_code = '$session_company_currency', recurring_invoice_client_id = $client_id");
|
mysqli_query($mysqli,"INSERT INTO recurring_invoices SET recurring_invoice_prefix = '$config_recurring_invoice_prefix', recurring_invoice_number = $recurring_invoice_number, recurring_invoice_scope = '$scope', recurring_invoice_frequency = '$frequency', recurring_invoice_next_date = '$start_date', recurring_invoice_category_id = $category, recurring_invoice_status = 1, recurring_invoice_currency_code = '$session_company_currency', recurring_invoice_client_id = $client_id");
|
||||||
|
|
||||||
|
|
@ -286,10 +298,16 @@ if (isset($_GET['force_recurring'])) {
|
||||||
$client_id = intval($row['recurring_invoice_client_id']);
|
$client_id = intval($row['recurring_invoice_client_id']);
|
||||||
$client_net_terms = intval($row['client_net_terms']);
|
$client_net_terms = intval($row['client_net_terms']);
|
||||||
|
|
||||||
//Get the last Invoice Number and add 1 for the new invoice number
|
// Atomically increment and get the new invoice number
|
||||||
$new_invoice_number = $config_invoice_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_invoice_next_number = $config_invoice_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_invoice_next_number = $new_config_invoice_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_invoice_next_number = LAST_INSERT_ID(config_invoice_next_number),
|
||||||
|
config_invoice_next_number = config_invoice_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$new_invoice_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
|
||||||
|
|
@ -103,11 +103,16 @@ if (isset($_POST['bulk_force_recurring_tickets'])) {
|
||||||
$config_ticket_from_email = sanitizeInput($config_ticket_from_email);
|
$config_ticket_from_email = sanitizeInput($config_ticket_from_email);
|
||||||
$config_base_url = sanitizeInput($config_base_url);
|
$config_base_url = sanitizeInput($config_base_url);
|
||||||
|
|
||||||
// Assign this new ticket the next ticket number & increment config_ticket_next_number by 1 (for the next ticket)
|
// Atomically increment and get the new ticket number
|
||||||
$ticket_number_sql = mysqli_fetch_array(mysqli_query($mysqli, "SELECT config_ticket_next_number FROM settings WHERE company_id = 1"));
|
mysqli_query($mysqli, "
|
||||||
$ticket_number = intval($ticket_number_sql['config_ticket_next_number']);
|
UPDATE settings
|
||||||
$new_config_ticket_next_number = $ticket_number + 1;
|
SET
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Raise the ticket
|
// Raise the ticket
|
||||||
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_source = 'Recurring', ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = '$ticket_status', ticket_billable = $billable, ticket_url_key = '$url_key', ticket_created_by = $created_id, ticket_assigned_to = $assigned_id, ticket_contact_id = $contact_id, ticket_client_id = $client_id, ticket_asset_id = $asset_id, ticket_category = $category, ticket_recurring_ticket_id = $recurring_ticket_id");
|
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_source = 'Recurring', ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = '$ticket_status', ticket_billable = $billable, ticket_url_key = '$url_key', ticket_created_by = $created_id, ticket_assigned_to = $assigned_id, ticket_contact_id = $contact_id, ticket_client_id = $client_id, ticket_asset_id = $asset_id, ticket_category = $category, ticket_recurring_ticket_id = $recurring_ticket_id");
|
||||||
|
|
@ -236,10 +241,16 @@ if (isset($_GET['force_recurring_ticket'])) {
|
||||||
$config_ticket_from_email = sanitizeInput($config_ticket_from_email);
|
$config_ticket_from_email = sanitizeInput($config_ticket_from_email);
|
||||||
$config_base_url = sanitizeInput($config_base_url);
|
$config_base_url = sanitizeInput($config_base_url);
|
||||||
|
|
||||||
// Assign this new ticket the next ticket number & increment config_ticket_next_number by 1 (for the next ticket)
|
// Atomically increment and get the new ticket number
|
||||||
$ticket_number = $config_ticket_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_ticket_next_number = $config_ticket_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Raise the ticket
|
// Raise the ticket
|
||||||
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_source = 'Recurring', ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = '$ticket_status', ticket_billable = $billable, ticket_url_key = '$url_key', ticket_created_by = $created_id, ticket_assigned_to = $assigned_id, ticket_contact_id = $contact_id, ticket_client_id = $client_id, ticket_asset_id = $asset_id, ticket_category = $category, ticket_recurring_ticket_id = $recurring_ticket_id");
|
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_source = 'Recurring', ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = '$ticket_status', ticket_billable = $billable, ticket_url_key = '$url_key', ticket_created_by = $created_id, ticket_assigned_to = $assigned_id, ticket_contact_id = $contact_id, ticket_client_id = $client_id, ticket_asset_id = $asset_id, ticket_category = $category, ticket_recurring_ticket_id = $recurring_ticket_id");
|
||||||
|
|
|
||||||
|
|
@ -1503,10 +1503,16 @@ if (isset($_POST['bulk_add_asset_ticket'])) {
|
||||||
|
|
||||||
$subject_asset_prepended = "$asset_name - $subject";
|
$subject_asset_prepended = "$asset_name - $subject";
|
||||||
|
|
||||||
// Get the next Ticket Number and update the config
|
// Atomically increment and get the new ticket number
|
||||||
$sql_ticket_number = mysqli_query($mysqli, "SELECT config_ticket_next_number FROM settings WHERE company_id = 1");
|
mysqli_query($mysqli, "
|
||||||
$ticket_number_row = mysqli_fetch_array($sql_ticket_number);
|
UPDATE settings
|
||||||
$ticket_number = intval($ticket_number_row['config_ticket_next_number']);
|
SET
|
||||||
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Sanitize Config Vars from get_settings.php and Session Vars from check_login.php
|
// Sanitize Config Vars from get_settings.php and Session Vars from check_login.php
|
||||||
$config_ticket_prefix = sanitizeInput($config_ticket_prefix);
|
$config_ticket_prefix = sanitizeInput($config_ticket_prefix);
|
||||||
|
|
@ -1517,18 +1523,10 @@ if (isset($_POST['bulk_add_asset_ticket'])) {
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
||||||
// Increment the config ticket next number
|
|
||||||
$new_config_ticket_next_number = $ticket_number + 1;
|
|
||||||
|
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
|
||||||
|
|
||||||
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_category = $category_id, ticket_subject = '$subject_asset_prepended', ticket_details = '$details', ticket_priority = '$priority', ticket_billable = $billable, ticket_status = $ticket_status, ticket_asset_id = $asset_id, ticket_created_by = $session_user_id, ticket_assigned_to = $assigned_to, ticket_url_key = '$url_key', ticket_client_id = $client_id, ticket_project_id = $project_id");
|
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_category = $category_id, ticket_subject = '$subject_asset_prepended', ticket_details = '$details', ticket_priority = '$priority', ticket_billable = $billable, ticket_status = $ticket_status, ticket_asset_id = $asset_id, ticket_created_by = $session_user_id, ticket_assigned_to = $assigned_to, ticket_url_key = '$url_key', ticket_client_id = $client_id, ticket_project_id = $project_id");
|
||||||
|
|
||||||
$ticket_id = mysqli_insert_id($mysqli);
|
$ticket_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Update the next ticket number in the database
|
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
|
||||||
|
|
||||||
// Add Tasks
|
// Add Tasks
|
||||||
if (!empty($_POST['tasks'])) {
|
if (!empty($_POST['tasks'])) {
|
||||||
foreach ($_POST['tasks'] as $task) {
|
foreach ($_POST['tasks'] as $task) {
|
||||||
|
|
@ -2155,11 +2153,18 @@ if (isset($_POST['add_invoice_from_ticket'])) {
|
||||||
|
|
||||||
if ($invoice_id == 0) {
|
if ($invoice_id == 0) {
|
||||||
|
|
||||||
//Get the last Invoice Number and add 1 for the new invoice number
|
|
||||||
$invoice_number = $config_invoice_next_number;
|
|
||||||
$invoice_prefix = sanitizeInput($config_invoice_prefix);
|
$invoice_prefix = sanitizeInput($config_invoice_prefix);
|
||||||
$new_config_invoice_next_number = $config_invoice_next_number + 1;
|
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_invoice_next_number = $new_config_invoice_next_number WHERE company_id = 1");
|
// Atomically increment and get the new invoice number
|
||||||
|
mysqli_query($mysqli, "
|
||||||
|
UPDATE settings
|
||||||
|
SET
|
||||||
|
config_invoice_next_number = LAST_INSERT_ID(config_invoice_next_number),
|
||||||
|
config_invoice_next_number = config_invoice_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$invoice_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,16 @@ if (!empty($subject)) {
|
||||||
$contact = intval($row['contact_id']);
|
$contact = intval($row['contact_id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get the next Ticket Number and add 1 for the new ticket number
|
// Atomically increment and get the new ticket number
|
||||||
$ticket_number = $config_ticket_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_ticket_next_number = $config_ticket_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli,"UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Insert ticket
|
// Insert ticket
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
|
||||||
|
|
@ -34,10 +34,16 @@ if (isset($_POST['add_ticket'])) {
|
||||||
$priority = sanitizeInput($_POST['priority']);
|
$priority = sanitizeInput($_POST['priority']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the next Ticket Number and add 1 for the new ticket number
|
// Atomically increment and get the new ticket number
|
||||||
$ticket_number = $config_ticket_next_number;
|
mysqli_query($mysqli, "
|
||||||
$new_config_ticket_next_number = $config_ticket_next_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_source = 'Portal', ticket_category = $category, ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = 1, ticket_billable = $config_ticket_default_billable, ticket_created_by = $session_user_id, ticket_contact_id = $session_contact_id, ticket_asset_id = $asset, ticket_url_key = '$url_key', ticket_client_id = $session_client_id");
|
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_source = 'Portal', ticket_category = $category, ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = 1, ticket_billable = $config_ticket_default_billable, ticket_created_by = $session_user_id, ticket_contact_id = $session_contact_id, ticket_asset_id = $asset, ticket_url_key = '$url_key', ticket_client_id = $session_client_id");
|
||||||
$ticket_id = mysqli_insert_id($mysqli);
|
$ticket_id = mysqli_insert_id($mysqli);
|
||||||
|
|
|
||||||
|
|
@ -317,13 +317,16 @@ if (mysqli_num_rows($sql_recurring_tickets) > 0) {
|
||||||
$ticket_status = 2; // Set to open if we've auto-assigned an agent
|
$ticket_status = 2; // Set to open if we've auto-assigned an agent
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assign this new ticket the next ticket number
|
// Atomically increment and get the new ticket number
|
||||||
$ticket_number_sql = mysqli_fetch_array(mysqli_query($mysqli, "SELECT config_ticket_next_number FROM settings WHERE company_id = 1"));
|
mysqli_query($mysqli, "
|
||||||
$ticket_number = intval($ticket_number_sql['config_ticket_next_number']);
|
UPDATE settings
|
||||||
|
SET
|
||||||
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
// Increment config_ticket_next_number by 1 (for the next ticket)
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
$new_config_ticket_next_number = $ticket_number + 1;
|
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
|
||||||
|
|
||||||
// Raise the ticket
|
// Raise the ticket
|
||||||
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_source = 'Recurring', ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = '$ticket_status', ticket_billable = $billable, ticket_created_by = $created_id, ticket_assigned_to = $assigned_id, ticket_contact_id = $contact_id, ticket_client_id = $client_id, ticket_asset_id = $asset_id, ticket_category = $category, ticket_recurring_ticket_id = $recurring_ticket_id");
|
mysqli_query($mysqli, "INSERT INTO tickets SET ticket_prefix = '$config_ticket_prefix', ticket_number = $ticket_number, ticket_source = 'Recurring', ticket_subject = '$subject', ticket_details = '$details', ticket_priority = '$priority', ticket_status = '$ticket_status', ticket_billable = $billable, ticket_created_by = $created_id, ticket_assigned_to = $assigned_id, ticket_contact_id = $contact_id, ticket_client_id = $client_id, ticket_asset_id = $asset_id, ticket_category = $category, ticket_recurring_ticket_id = $recurring_ticket_id");
|
||||||
|
|
@ -600,14 +603,16 @@ while ($row = mysqli_fetch_array($sql_recurring_invoices)) {
|
||||||
$recurring_payment_method = sanitizeInput($row['recurring_payment_method']);
|
$recurring_payment_method = sanitizeInput($row['recurring_payment_method']);
|
||||||
$recurring_payment_account_id = intval($row['recurring_payment_account_id']);
|
$recurring_payment_account_id = intval($row['recurring_payment_account_id']);
|
||||||
|
|
||||||
// Get the last Invoice Number and add 1 for the new invoice number
|
// Atomically increment and get the new invoice number
|
||||||
$sql_invoice_number = mysqli_query($mysqli, "SELECT * FROM settings WHERE company_id = 1");
|
mysqli_query($mysqli, "
|
||||||
$row = mysqli_fetch_array($sql_invoice_number);
|
UPDATE settings
|
||||||
$config_invoice_next_number = intval($row['config_invoice_next_number']);
|
SET
|
||||||
|
config_invoice_next_number = LAST_INSERT_ID(config_invoice_next_number),
|
||||||
|
config_invoice_next_number = config_invoice_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
$new_invoice_number = $config_invoice_next_number;
|
$new_invoice_number = mysqli_insert_id($mysqli);
|
||||||
$new_config_invoice_next_number = $config_invoice_next_number + 1;
|
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_invoice_next_number = $new_config_invoice_next_number WHERE company_id = 1");
|
|
||||||
|
|
||||||
//Generate a unique URL key for clients to access
|
//Generate a unique URL key for clients to access
|
||||||
$url_key = randomString(156);
|
$url_key = randomString(156);
|
||||||
|
|
|
||||||
|
|
@ -76,10 +76,16 @@ $allowed_extensions = array('jpg', 'jpeg', 'gif', 'png', 'webp', 'pdf', 'txt', '
|
||||||
function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments, $original_message_file) {
|
function addTicket($contact_id, $contact_name, $contact_email, $client_id, $date, $subject, $message, $attachments, $original_message_file) {
|
||||||
global $mysqli, $config_app_name, $company_name, $company_phone, $config_ticket_prefix, $config_ticket_client_general_notifications, $config_ticket_new_ticket_notification_email, $config_base_url, $config_ticket_from_name, $config_ticket_from_email, $config_ticket_default_billable, $allowed_extensions;
|
global $mysqli, $config_app_name, $company_name, $company_phone, $config_ticket_prefix, $config_ticket_client_general_notifications, $config_ticket_new_ticket_notification_email, $config_base_url, $config_ticket_from_name, $config_ticket_from_email, $config_ticket_default_billable, $allowed_extensions;
|
||||||
|
|
||||||
$ticket_number_sql = mysqli_fetch_array(mysqli_query($mysqli, "SELECT config_ticket_next_number FROM settings WHERE company_id = 1"));
|
// Atomically increment and get the new ticket number
|
||||||
$ticket_number = intval($ticket_number_sql['config_ticket_next_number']);
|
mysqli_query($mysqli, "
|
||||||
$new_config_ticket_next_number = $ticket_number + 1;
|
UPDATE settings
|
||||||
mysqli_query($mysqli, "UPDATE settings SET config_ticket_next_number = $new_config_ticket_next_number WHERE company_id = 1");
|
SET
|
||||||
|
config_ticket_next_number = LAST_INSERT_ID(config_ticket_next_number),
|
||||||
|
config_ticket_next_number = config_ticket_next_number + 1
|
||||||
|
WHERE company_id = 1
|
||||||
|
");
|
||||||
|
|
||||||
|
$ticket_number = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
// Clean up the message
|
// Clean up the message
|
||||||
$message = trim($message);
|
$message = trim($message);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue