Link OTC sales to market days
This commit is contained in:
1 parent
759e337976
commit
47c09a3e4c
6 files changed
+167
-9
No files matched your search
@@ -595,7 +595,7 @@ function auth_render_lager_content(array $lagerProducts, array $lagerArtikel, ar
|
||||
. '</div>';
|
||||
}
|
||||
|
||||
function render_auth_home_page(array $user, array $otcProducts = [], array $bestellungenTable = [], array $marketOccurrencesTable = [], array $lagerProducts = [], array $lagerArtikel = [], array $lagerManufacturers = []): void
|
||||
function render_auth_home_page(array $user, array $otcProducts = [], array $otcMarketOptions = [], array $bestellungenTable = [], array $marketOccurrencesTable = [], array $lagerProducts = [], array $lagerArtikel = [], array $lagerManufacturers = []): void
|
||||
{
|
||||
$otcProductRows = '';
|
||||
foreach ($otcProducts as $product) {
|
||||
@@ -615,6 +615,25 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
$otcProductRows .= '</div>';
|
||||
}
|
||||
|
||||
$otcMarketOccurrenceOptions = [];
|
||||
$otcMarketDayOptions = '';
|
||||
foreach ($otcMarketOptions as $option) {
|
||||
$occurrenceId = (int) ($option['occurrence_id'] ?? 0);
|
||||
$dayId = (int) ($option['day_id'] ?? 0);
|
||||
if ($occurrenceId <= 0 || $dayId <= 0) {
|
||||
continue;
|
||||
}
|
||||
$marketName = (string) ($option['market_name'] ?? '');
|
||||
$otcMarketOccurrenceOptions[$occurrenceId] = $marketName;
|
||||
$day = (string) ($option['date'] ?? '');
|
||||
$dayLabel = $day === '' ? '' : (new DateTimeImmutable($day))->format('d.m.Y');
|
||||
$otcMarketDayOptions .= '<option value="' . $dayId . '" data-market-occurrence-id="' . $occurrenceId . '">' . auth_escape_html($dayLabel) . '</option>';
|
||||
}
|
||||
$otcMarketOccurrenceOptionHtml = '<option value="">Veranstaltung auswählen</option>';
|
||||
foreach ($otcMarketOccurrenceOptions as $occurrenceId => $marketName) {
|
||||
$otcMarketOccurrenceOptionHtml .= '<option value="' . $occurrenceId . '">' . auth_escape_html($marketName) . '</option>';
|
||||
}
|
||||
|
||||
if ($otcProductRows === '') {
|
||||
$otcProductRows = '<p class="sg-body sg-form-sections-card__sentence">Keine aktiven OTC-Produkte erfasst.</p>';
|
||||
}
|
||||
@@ -792,6 +811,31 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo '<input class="sg-interaction-element sg-input-single-line sg-input-single-line--inactive-selectable sg-form-inactive-selectable" type="text" id="otc-city" value="Oberengstringen" data-otc-order-city>';
|
||||
echo '</label>';
|
||||
echo '</div>';
|
||||
echo '<section class="sg-form-sections-card__chapter" aria-labelledby="otc-market-link-title">';
|
||||
echo '<h2 id="otc-market-link-title" class="sg-strong sg-form-sections-card__chapter-title">Veranstaltungsbezug</h2>';
|
||||
echo '<div class="sg-form-sections-card__field-group">';
|
||||
echo '<label class="sg-checkbox-field-option sg-checkbox-field-option--inactive-selectable sg-body" data-component="checkbox-field" data-component-state="inactive-selectable">';
|
||||
echo '<button class="sg-checkbox-field sg-checkbox-field--inactive-selectable" type="button" role="checkbox" aria-checked="false" aria-label="Verkauf ist auf einer Veranstaltung" data-otc-market-link-toggle>';
|
||||
echo '<span class="sg-checkbox-field__mark" aria-hidden="true">✓</span>';
|
||||
echo '</button><span>Verkauf ist auf einer Veranstaltung</span>';
|
||||
echo '<input type="hidden" name="market_sale" value="0" data-otc-market-link-enabled>';
|
||||
echo '</label>';
|
||||
echo '</div>';
|
||||
echo '<div class="sg-form-sections-card__field-group">';
|
||||
echo '<label class="sg-labeled-input-row"><span class="sg-label">Veranstaltung</span>';
|
||||
echo '<select class="sg-interaction-element sg-input-single-line sg-input-single-line--disabled sg-form-disabled sg-pulldown" disabled aria-disabled="true" data-otc-market-occurrence>';
|
||||
echo $otcMarketOccurrenceOptionHtml;
|
||||
echo '</select>';
|
||||
echo '</label>';
|
||||
echo '</div>';
|
||||
echo '<div class="sg-form-sections-card__field-group">';
|
||||
echo '<label class="sg-labeled-input-row"><span class="sg-label">Durchführungstag</span>';
|
||||
echo '<select class="sg-interaction-element sg-input-single-line sg-input-single-line--disabled sg-form-disabled sg-pulldown" disabled aria-disabled="true" data-otc-market-day>';
|
||||
echo '<option value="">Zuerst Veranstaltung auswählen</option>' . $otcMarketDayOptions;
|
||||
echo '</select>';
|
||||
echo '</label>';
|
||||
echo '</div>';
|
||||
echo '</section>';
|
||||
echo '<div class="sg-form-sections-card__field-group">';
|
||||
echo '<div class="sg-body sg-otc-order-form__status hidden" data-otc-order-success>Bestellung erfolgreich erfasst! Die Bestellnummer wird automatisch generiert.</div>';
|
||||
echo '<div class="sg-body sg-otc-order-form__status sg-otc-order-form__status--error hidden" data-otc-order-error></div>';
|
||||
@@ -1427,6 +1471,10 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo " const houseNumberInput = form.querySelector('[data-otc-order-house-number]');";
|
||||
echo " const zipInput = form.querySelector('[data-otc-order-zip]');";
|
||||
echo " const cityInput = form.querySelector('[data-otc-order-city]');";
|
||||
echo " const marketLinkToggle = form.querySelector('[data-otc-market-link-toggle]');";
|
||||
echo " const marketLinkEnabledInput = form.querySelector('[data-otc-market-link-enabled]');";
|
||||
echo " const marketOccurrenceInput = form.querySelector('[data-otc-market-occurrence]');";
|
||||
echo " const marketDayInput = form.querySelector('[data-otc-market-day]');";
|
||||
echo " const submitBtn = overlay.querySelector('[data-otc-order-submit]');";
|
||||
echo " const errorEl = form.querySelector('[data-otc-order-error]');";
|
||||
echo " const successEl = form.querySelector('[data-otc-order-success]');";
|
||||
@@ -1480,6 +1528,10 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo " };";
|
||||
echo " const getInputValue = (input) => parseInt(input.value || '0', 10) || 0;";
|
||||
echo " const getFieldValue = (input) => (input ? input.value.trim() : '');";
|
||||
echo " const isMarketLinkEnabled = () => marketLinkToggle?.getAttribute('aria-checked') === 'true';";
|
||||
echo " const setDisabledSelectState = (select, disabled) => { if (!select) { return; } select.disabled = disabled; select.setAttribute('aria-disabled', String(disabled)); select.classList.toggle('sg-form-disabled', disabled); select.classList.toggle('sg-input-single-line--disabled', disabled); select.classList.toggle('sg-form-inactive-selectable', !disabled); select.classList.toggle('sg-input-single-line--inactive-selectable', !disabled); };";
|
||||
echo " const syncMarketDayOptions = () => { if (!marketOccurrenceInput || !marketDayInput) { return; } const occurrenceId = marketOccurrenceInput.value; Array.from(marketDayInput.options).forEach((option, index) => { if (index === 0) { option.hidden = false; option.disabled = false; return; } const matches = occurrenceId !== '' && option.dataset.marketOccurrenceId === occurrenceId; option.hidden = !matches; option.disabled = !matches; }); if (!occurrenceId || !Array.from(marketDayInput.options).some((option) => option.value === marketDayInput.value && !option.disabled)) { marketDayInput.value = ''; } setDisabledSelectState(marketDayInput, !isMarketLinkEnabled() || occurrenceId === ''); };";
|
||||
echo " const syncMarketLinkState = () => { const enabled = isMarketLinkEnabled(); if (marketLinkEnabledInput) { marketLinkEnabledInput.value = enabled ? '1' : '0'; } setDisabledSelectState(marketOccurrenceInput, !enabled); if (!enabled && marketOccurrenceInput) { marketOccurrenceInput.value = ''; } syncMarketDayOptions(); };";
|
||||
echo " const updatePaymentAddButton = () => { addPaymentButton.disabled = paymentRows.querySelectorAll('[data-otc-payment-row]').length >= paymentOptionValues.length; };";
|
||||
echo " const updateFormState = () => {";
|
||||
echo " const totalQty = productInputs.reduce((sum, input) => sum + getInputValue(input), 0);";
|
||||
@@ -1491,7 +1543,8 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo " && !!getFieldValue(streetInput)";
|
||||
echo " && !!getFieldValue(houseNumberInput)";
|
||||
echo " && !!getFieldValue(zipInput)";
|
||||
echo " && !!getFieldValue(cityInput);";
|
||||
echo " && !!getFieldValue(cityInput)";
|
||||
echo " && (!isMarketLinkEnabled() || (!!getFieldValue(marketOccurrenceInput) && !!getFieldValue(marketDayInput)));";
|
||||
echo " let errorMsg = '';";
|
||||
echo " if (totalQty === 0) {";
|
||||
echo " errorMsg = 'Mindestens ein Produkt mit Menge > 0 erforderlich.';";
|
||||
@@ -1499,6 +1552,8 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo " errorMsg = 'Bestelldatum auswählen.';";
|
||||
echo " } else if (!getFieldValue(firstNameInput) || !getFieldValue(lastNameInput) || !getFieldValue(streetInput) || !getFieldValue(houseNumberInput) || !getFieldValue(zipInput) || !getFieldValue(cityInput)) {";
|
||||
echo " errorMsg = 'Alle Rechnungsadress-Felder ausfüllen.';";
|
||||
echo " } else if (isMarketLinkEnabled() && (!getFieldValue(marketOccurrenceInput) || !getFieldValue(marketDayInput))) {";
|
||||
echo " errorMsg = 'Veranstaltung und Durchführungstag auswählen.';";
|
||||
echo " }";
|
||||
echo " if (errorEl) {";
|
||||
echo " errorEl.textContent = errorMsg;";
|
||||
@@ -1515,6 +1570,8 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo " updatePaymentAddButton();";
|
||||
echo " clearError();";
|
||||
echo " if (!preserveSuccess) { clearSuccess(); }";
|
||||
echo " if (marketLinkToggle) { marketLinkToggle.setAttribute('aria-checked', 'false'); marketLinkToggle.classList.remove('sg-form-active'); marketLinkToggle.classList.add('sg-checkbox-field--inactive-selectable'); }";
|
||||
echo " syncMarketLinkState();";
|
||||
echo " if (!preserveSuccess) { updateFormState(); }";
|
||||
echo " };";
|
||||
echo " const closeConfirmation = () => {";
|
||||
@@ -1581,6 +1638,9 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo " addPaymentButton.addEventListener('click', addPaymentRow);";
|
||||
echo " bindPaymentRow(paymentRows.querySelector('[data-otc-payment-row]'));";
|
||||
echo " updatePaymentAddButton();";
|
||||
echo " marketLinkToggle?.addEventListener('click', (event) => { event.stopImmediatePropagation(); const enabled = marketLinkToggle.getAttribute('aria-checked') !== 'true'; marketLinkToggle.setAttribute('aria-checked', String(enabled)); marketLinkToggle.classList.toggle('sg-form-active', enabled); marketLinkToggle.classList.toggle('sg-checkbox-field--inactive-selectable', !enabled); syncMarketLinkState(); updateFormState(); });";
|
||||
echo " marketOccurrenceInput?.addEventListener('change', () => { syncMarketDayOptions(); updateFormState(); });";
|
||||
echo " marketDayInput?.addEventListener('change', updateFormState);";
|
||||
echo " const submitOrder = async (orderData) => {";
|
||||
echo " let submissionSucceeded = false;";
|
||||
echo " const originalBtnText = confirmationSubmit.innerHTML;";
|
||||
@@ -1630,14 +1690,16 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo " products: products,";
|
||||
echo " orderDate: orderDateInput ? orderDateInput.value : '',";
|
||||
echo " payments: Array.from(paymentRows.querySelectorAll('[data-otc-payment-row]')).map((row) => ({ paymentMethod: row.querySelector('[data-otc-payment-method]').value, amount: parseFloat(row.querySelector('[data-otc-payment-amount]').value || '0') || 0 })),";
|
||||
echo " billing: {";
|
||||
echo " billing: {";
|
||||
echo " firstName: getFieldValue(firstNameInput),";
|
||||
echo " lastName: getFieldValue(lastNameInput),";
|
||||
echo " street: getFieldValue(streetInput),";
|
||||
echo " houseNumber: getFieldValue(houseNumberInput),";
|
||||
echo " zip: getFieldValue(zipInput),";
|
||||
echo " city: getFieldValue(cityInput)";
|
||||
echo " }";
|
||||
echo " city: getFieldValue(cityInput)";
|
||||
echo " },";
|
||||
echo " marketOccurrenceId: isMarketLinkEnabled() ? getFieldValue(marketOccurrenceInput) : null,";
|
||||
echo " marketOccurrenceDayId: isMarketLinkEnabled() ? getFieldValue(marketDayInput) : null";
|
||||
echo " };";
|
||||
echo " openConfirmation(orderData);";
|
||||
echo " });";
|
||||
@@ -1645,6 +1707,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $best
|
||||
echo " if (event.target.closest('[data-otc-confirmation-cancel]')) { closeConfirmation(); return; }";
|
||||
echo " if (event.target.closest('[data-otc-confirmation-submit]') && pendingOrderData) { submitOrder(pendingOrderData); }";
|
||||
echo " });";
|
||||
echo " syncMarketLinkState();";
|
||||
echo " updateFormState();";
|
||||
echo "})();";
|
||||
echo "if (window.sgInitHelpIconOverlays) {";
|
||||
|
||||
Reference in new issue
Block a user