-
-
@@ -701,10 +705,12 @@
@@ -1008,6 +1014,8 @@
let html = '';
groupNames.forEach(catName => {
const group = groups[catName];
+ group.open.sort((a, b) => (a.item_name || '').localeCompare(b.item_name || '', 'de', { sensitivity: 'base' }));
+ group.checked.sort((a, b) => (a.item_name || '').localeCompare(b.item_name || '', 'de', { sensitivity: 'base' }));
const allInGroup = [...group.open, ...group.checked];
if (allInGroup.length === 0) return;
@@ -1296,61 +1304,97 @@
// ==========================================
// MODAL: WOCHENPLAN ZUTATEN IMPORTIEREN
// ==========================================
- async function openMealPlanImportModal() {
+ let mealPlanYear = null;
+ let mealPlanWeek = null;
+
+ async function openMealPlanImportModal(year, week) {
openModal('modal-import-mealplan');
const body = document.getElementById('mealplan-import-body');
const confirmBtn = document.getElementById('btn-confirm-import-mealplan');
- if (confirmBtn) confirmBtn.disabled = true;
+ if (confirmBtn) {
+ confirmBtn.disabled = true;
+ confirmBtn.textContent = 'Ausgewählte übernehmen';
+ }
body.innerHTML = `
- ⏳ Zutaten des aktuellen Wochenplans werden geladen...
+ ⏳ Zutaten des Wochenplans werden geladen...
`;
try {
- const res = await fetch('/api/mealplan/ingredients');
+ let url = '/api/mealplan/ingredients';
+ if (year && week) {
+ url += `?year=${encodeURIComponent(year)}&week=${encodeURIComponent(week)}`;
+ }
+ const res = await fetch(url);
if (!res.ok) throw new Error('Fehler beim Laden');
const data = await res.json();
+ mealPlanYear = data.year;
+ mealPlanWeek = data.week;
const groups = data.groups || [];
+ let navHeader = `
+
+
+
+ KW ${data.week} / ${data.year}
+
+
+
+
+ |
+
+
+
+ `;
+
if (groups.length === 0) {
- body.innerHTML = `
+ body.innerHTML = navHeader + `
-
Keine Rezepte im Wochenplan gefunden.
-
Plane zuerst Gerichte im Kochbuch-Wochenmenüplan ein!
+
🍽️
+
Keine Rezepte in dieser Woche geplant
+
Blättere mit ◀ oder ▶ zu einer anderen Woche oder trage Gerichte im Kochbuch-Wochenmenüplan ein.
`;
return;
}
- let html = `
-
- KW ${data.week} / ${data.year}
-
-
-
+ let totalItems = 0;
+ let html = navHeader + `
+
`;
groups.forEach((g, gIdx) => {
+ const items = g.items || g.ingredients || [];
+ totalItems += items.length;
html += `
-
- 🍳 ${escapeHtml(g.recipe_title)}
+
+
+ 🍳 ${escapeHtml(g.recipe_title)}
+
+ ${g.slot_label ? `
${escapeHtml(g.slot_label)}` : ''}
- ${g.ingredients.map((ing, iIdx) => `
-
- `).join('')}
+ ${items.map((ing, iIdx) => {
+ const ingName = ing.name || ing.item_name || ing.raw || '';
+ const amtStr = formatAmount(ing.amount, ing.unit);
+ return `
+
+ `;
+ }).join('')}
`;
@@ -1358,25 +1402,46 @@
html += `
`;
body.innerHTML = html;
- if (confirmBtn) confirmBtn.disabled = false;
+ if (confirmBtn) {
+ confirmBtn.disabled = totalItems === 0;
+ confirmBtn.textContent = `Ausgewählte übernehmen (${totalItems})`;
+ }
} catch (err) {
+ console.error("Fehler beim Laden des Wochenplans:", err);
body.innerHTML = `
-
+
Fehler beim Laden des Wochenplans. Bitte stelle sicher, dass du online bist.
`;
}
}
+ function changeMealPlanImportWeek(delta) {
+ if (!mealPlanYear || !mealPlanWeek) return;
+ let w = mealPlanWeek + delta;
+ let y = mealPlanYear;
+ if (w < 1) {
+ y -= 1;
+ w = 52;
+ } else if (w > 52) {
+ y += 1;
+ w = 1;
+ }
+ openMealPlanImportModal(y, w);
+ }
+
function toggleAllMealPlanChecks(val) {
document.querySelectorAll('.mealplan-ing-checkbox').forEach(cb => cb.checked = val);
updateMealPlanConfirmBtn();
}
function updateMealPlanConfirmBtn() {
- const anyChecked = Array.from(document.querySelectorAll('.mealplan-ing-checkbox')).some(cb => cb.checked);
+ const checkedBoxes = Array.from(document.querySelectorAll('.mealplan-ing-checkbox:checked'));
const btn = document.getElementById('btn-confirm-import-mealplan');
- if (btn) btn.disabled = !anyChecked;
+ if (btn) {
+ btn.disabled = checkedBoxes.length === 0;
+ btn.textContent = `Ausgewählte übernehmen (${checkedBoxes.length})`;
+ }
}
async function confirmImportMealPlanIngredients() {
@@ -1402,13 +1467,20 @@
});
if (res.ok) {
const d = await res.json();
- allItems = d.items || [];
+ if (d.items && Array.isArray(d.items)) {
+ allItems = d.items;
+ } else {
+ await refreshDataFromServer();
+ }
localStorage.setItem('wtc_shop_items_cache', JSON.stringify(allItems));
renderCategoryFilterChips();
renderShoppingList();
- showToast(`${itemsToAdd.length} Zutaten übernommen`);
+ showToast(`✓ ${itemsToAdd.length} Zutaten übernommen`);
+ } else {
+ showToast('Fehler beim Übernehmen');
}
} catch (err) {
+ console.error("Fehler beim Importieren der Zutaten:", err);
showToast('Fehler beim Übernehmen');
}
}