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);";