diff --git a/css/quote_dropdowns_fix.css b/css/quote_dropdowns_fix.css new file mode 100644 index 00000000..24e039f8 --- /dev/null +++ b/css/quote_dropdowns_fix.css @@ -0,0 +1,15 @@ +/*! + * AdminLTE 3.2.0 Specific Dropdown Fix + * Targets .fix-quote-dropdown only + * Prevents alignment bugs in split button dropdowns going too far left + * (ChatGPT) + */ + +.fix-quote-dropdown .dropdown-menu { + left: auto !important; + right: 0 !important; + top: calc(100% + 0.25rem) !important; + transform: none !important; + min-width: max-content; + z-index: 1050; +} diff --git a/modals/invoice_recurring_add_modal.php b/modals/invoice_recurring_add_modal.php index 463f4bd9..dead0ff5 100644 --- a/modals/invoice_recurring_add_modal.php +++ b/modals/invoice_recurring_add_modal.php @@ -27,7 +27,7 @@
diff --git a/post/user/quote.php b/post/user/quote.php index 5c6ee1b0..b144aed5 100644 --- a/post/user/quote.php +++ b/post/user/quote.php @@ -155,9 +155,10 @@ if (isset($_POST['add_quote_to_invoice'])) { } mysqli_query($mysqli,"UPDATE quotes SET quote_status = 'Invoiced' WHERE quote_id = $quote_id"); + mysqli_query($mysqli,"INSERT INTO history SET history_status = 'Invoiced', history_description = 'Quote invoiced as $config_invoice_prefix$invoice_number', history_quote_id = $quote_id"); // Logging - logAction("Invoice", "Create", "$session_name created invoice $config_invoice_prefix$config_invoice_number from quote $config_quote_prefix$quote_number", $client_id, $new_invoice_id); + logAction("Invoice", "Create", "$session_name created invoice $config_invoice_prefix$invoice_number from quote $config_quote_prefix$quote_number", $client_id, $new_invoice_id); customAction('invoice_create', $new_invoice_id); @@ -521,6 +522,31 @@ if (isset($_GET['email_quote'])) { } +if (isset($_GET['mark_quote_invoiced'])) { + + enforceUserPermission('module_sales', 2); + + $quote_id = intval($_GET['mark_quote_invoiced']); + + $sql = mysqli_query($mysqli,"SELECT * FROM quotes WHERE quote_id = $quote_id"); + $row = mysqli_fetch_array($sql); + $quote_prefix = sanitizeInput($row['quote_prefix']); + $quote_number = sanitizeInput($row['quote_number']); + $client_id = intval($row['quote_client_id']); + + mysqli_query($mysqli,"UPDATE quotes SET quote_status = 'Invoiced' WHERE quote_id = $quote_id"); + + mysqli_query($mysqli,"INSERT INTO history SET history_status = 'Invoiced', history_description = 'Quote marked as invoiced', history_quote_id = $quote_id"); + + // Logging + logAction("Quote", "Sent", "$session_name marked quote $quote_prefix$quote_number as invoiced", $client_id, $quote_id); + + $_SESSION['alert_message'] = "Quote marked invoiced"; + + header("Location: " . $_SERVER["HTTP_REFERER"]); + +} + if(isset($_POST['export_quotes_csv'])){ enforceUserPermission('module_sales'); diff --git a/quote.php b/quote.php index 837a37a0..a6be1092 100644 --- a/quote.php +++ b/quote.php @@ -137,7 +137,7 @@ if (isset($_GET['quote_id'])) { Global Quotes