diff --git a/modules/market_management/service.php b/modules/market_management/service.php index 7075941..ef7cc39 100644 --- a/modules/market_management/service.php +++ b/modules/market_management/service.php @@ -357,7 +357,7 @@ function market_management_search_occurrences(PDO $pdo, array $input): array function market_management_list_active_occurrence_options(PDO $pdo): array { $stmt = $pdo->query( - 'SELECT o.id AS occurrence_id, m.name AS market_name, o.status, + 'SELECT o.id AS occurrence_id, o.market_definition_id, m.name AS market_name, o.status, d.id AS day_id, d.date FROM market_occurrence o INNER JOIN market_definition m ON m.id = o.market_definition_id diff --git a/modules/shared/auth/ui/home.php b/modules/shared/auth/ui/home.php index a227643..3a90754 100644 --- a/modules/shared/auth/ui/home.php +++ b/modules/shared/auth/ui/home.php @@ -621,19 +621,20 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM $otcMarketDayOptions = ''; foreach ($otcMarketOptions as $option) { $occurrenceId = (int) ($option['occurrence_id'] ?? 0); + $marketDefinitionId = (int) ($option['market_definition_id'] ?? 0); $dayId = (int) ($option['day_id'] ?? 0); - if ($occurrenceId <= 0 || $dayId <= 0) { + if ($occurrenceId <= 0 || $marketDefinitionId <= 0 || $dayId <= 0) { continue; } $marketName = (string) ($option['market_name'] ?? ''); - $otcMarketOccurrenceOptions[$occurrenceId] = $marketName; + $otcMarketOccurrenceOptions[$marketDefinitionId] = $marketName; $day = (string) ($option['date'] ?? ''); $dayLabel = $day === '' ? '' : (new DateTimeImmutable($day))->format('d.m.Y'); - $otcMarketDayOptions .= ''; + $otcMarketDayOptions .= ''; } $otcMarketOccurrenceOptionHtml = ''; - foreach ($otcMarketOccurrenceOptions as $occurrenceId => $marketName) { - $otcMarketOccurrenceOptionHtml .= ''; + foreach ($otcMarketOccurrenceOptions as $marketDefinitionId => $marketName) { + $otcMarketOccurrenceOptionHtml .= ''; } if ($otcProductRows === '') { @@ -860,6 +861,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM echo '
'; echo '

Gesamtzahl Flaschen: 0

'; echo '

Gesamtbetrag: CHF 0.00

'; + echo ''; echo '
'; echo ''; echo ''; @@ -1493,6 +1495,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM echo " const confirmationQuantity = overlay.querySelector('[data-otc-confirmation-quantity]');"; echo " const confirmationTotal = overlay.querySelector('[data-otc-confirmation-total]');"; echo " const confirmationSubmit = overlay.querySelector('[data-otc-confirmation-submit]');"; + echo " const confirmationError = overlay.querySelector('[data-otc-confirmation-error]');"; echo " let pendingOrderData = null;"; echo " const openTriggers = () => document.querySelectorAll('[data-otc-order-open]');"; echo " const setTriggerState = (expanded) => {"; @@ -1500,6 +1503,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM echo " };"; echo " const clearError = () => {"; echo " if (errorEl) { errorEl.textContent = ''; errorEl.classList.add('hidden'); }"; + echo " if (confirmationError) { confirmationError.textContent = ''; confirmationError.classList.add('hidden'); }"; echo " };"; echo " const clearSuccess = () => {"; echo " if (successEl) { successEl.textContent = successDefaultText; successEl.classList.add('hidden'); }"; @@ -1538,7 +1542,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM 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-pulldown--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 syncMarketDayOptions = () => { if (!marketOccurrenceInput || !marketDayInput) { return; } const marketDefinitionId = marketOccurrenceInput.value; Array.from(marketDayInput.options).forEach((option, index) => { if (index === 0) { option.hidden = false; option.disabled = false; return; } const matches = marketDefinitionId !== '' && option.dataset.marketDefinitionId === marketDefinitionId; option.hidden = !matches; option.disabled = !matches; }); if (!marketDefinitionId || !Array.from(marketDayInput.options).some((option) => option.value === marketDayInput.value && !option.disabled)) { marketDayInput.value = ''; } setDisabledSelectState(marketDayInput, !isMarketLinkEnabled() || marketDefinitionId === ''); };"; 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 = () => {"; @@ -1671,17 +1675,15 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM echo " closeConfirmation();"; echo " resetForm();"; echo " toggleOverlay(false);"; - echo " } else if (errorEl) {"; - echo " errorEl.textContent = result.error || 'Unbekannter Fehler';"; - echo " errorEl.classList.remove('hidden');"; - echo " closeConfirmation();"; + echo " } else {"; + echo " const message = result.error || 'Unbekannter Fehler';"; + echo " if (errorEl) { errorEl.textContent = message; errorEl.classList.remove('hidden'); }"; + echo " if (confirmationError) { confirmationError.textContent = message; confirmationError.classList.remove('hidden'); }"; echo " }"; echo " } catch (error) {"; - echo " if (errorEl) {"; - echo " errorEl.textContent = 'Netzwerkfehler: ' + error.message;"; - echo " errorEl.classList.remove('hidden');"; - echo " }"; - echo " closeConfirmation();"; + echo " const message = 'Netzwerkfehler: ' + error.message;"; + echo " if (errorEl) { errorEl.textContent = message; errorEl.classList.remove('hidden'); }"; + echo " if (confirmationError) { confirmationError.textContent = message; confirmationError.classList.remove('hidden'); }"; echo " } finally {"; echo " confirmationSubmit.innerHTML = originalBtnText;"; echo " confirmationSubmit.disabled = false;"; @@ -1706,7 +1708,7 @@ function render_auth_home_page(array $user, array $otcProducts = [], array $otcM echo " zip: getFieldValue(zipInput),"; echo " city: getFieldValue(cityInput)"; echo " },"; - echo " marketOccurrenceId: isMarketLinkEnabled() ? getFieldValue(marketOccurrenceInput) : null,"; + echo " marketOccurrenceId: isMarketLinkEnabled() ? (marketDayInput?.selectedOptions[0]?.dataset.marketOccurrenceId || null) : null,"; echo " marketOccurrenceDayId: isMarketLinkEnabled() ? getFieldValue(marketDayInput) : null"; echo " };"; echo " openConfirmation(orderData);";