Refactor partner dropdowns to utilize authorization permissions across various management pages. Enhance invoice creation in webhooks to include account hierarchy. Add marketing system migration script for transitioning files to database structure.
This commit is contained in:
@@ -308,8 +308,9 @@ $pdf .= '</tbody>
|
||||
</div>';
|
||||
|
||||
if ($tax_amount > 0) {
|
||||
$tax_percentage = ($subtotal > 0) ? round(($tax_amount / $subtotal) * 100, 2) : 0;
|
||||
$pdf .= '<div class="total-row">
|
||||
<div class="total-label">' . htmlspecialchars($lbl_tax) . '</div>
|
||||
<div class="total-label">' . htmlspecialchars($lbl_tax) . ' (' . $tax_percentage . '%)</div>
|
||||
<div class="total-amount">€ ' . number_format($tax_amount, 2) . '</div>
|
||||
</div>';
|
||||
} else {
|
||||
|
||||
@@ -230,6 +230,10 @@ async function connectDeviceForSoftware() {
|
||||
deviceVersion = "";
|
||||
deviceHwVersion = "";
|
||||
|
||||
// Clear the flag so popup shows for each new device connection
|
||||
// This allows users to connect multiple devices in the same session
|
||||
sessionStorage.removeItem('customerDataShownThisSession');
|
||||
|
||||
//set progress bar
|
||||
progressBar("1", "", "");
|
||||
|
||||
@@ -612,14 +616,23 @@ async function fetchSoftwareOptions() {
|
||||
document.getElementById("softwareOptionsContainer").style.display = "block";
|
||||
progressBar("100", "Software options loaded", "#04AA6D");
|
||||
|
||||
// Check if customer data already exists in sessionStorage
|
||||
const savedCustomerData = sessionStorage.getItem('customerData');
|
||||
// Check if we're returning from a payment
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const isReturningFromPayment = urlParams.has('payment_return') || urlParams.has('order_id');
|
||||
|
||||
// Show user info modal only if no saved data and not in debug mode
|
||||
if ((typeof DEBUG === 'undefined' || !DEBUG || typeof DEBUG_ID === 'undefined' || !DEBUG_ID) && !savedCustomerData) {
|
||||
// Check if customer data was already shown in THIS session (not from previous session)
|
||||
const customerDataShownThisSession = sessionStorage.getItem('customerDataShownThisSession');
|
||||
|
||||
// Show user info modal unless:
|
||||
// 1. We're in debug mode
|
||||
// 2. We're returning from payment
|
||||
// 3. We already showed the modal in this session
|
||||
if ((typeof DEBUG === 'undefined' || !DEBUG || typeof DEBUG_ID === 'undefined' || !DEBUG_ID)
|
||||
&& !isReturningFromPayment
|
||||
&& !customerDataShownThisSession) {
|
||||
showUserInfoModal();
|
||||
} else {
|
||||
// Customer data already exists or debug mode - reveal software options immediately
|
||||
// Debug mode, returning from payment, or already shown this session - reveal software options immediately
|
||||
const softwareOptions = document.getElementById("softwareOptions");
|
||||
if (softwareOptions) {
|
||||
softwareOptions.style.filter = "none";
|
||||
@@ -992,6 +1005,9 @@ function showUserInfoModal() {
|
||||
// Save customer data to sessionStorage
|
||||
sessionStorage.setItem('customerData', JSON.stringify(customerData));
|
||||
|
||||
// Mark that we've shown the customer data modal in this session
|
||||
sessionStorage.setItem('customerDataShownThisSession', 'true');
|
||||
|
||||
// Send to API
|
||||
await sendUserInfoToAPI(customerData);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user