diff --git a/assets/js/app.js b/assets/js/app.js index 05818b0..9797a4d 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -110,20 +110,40 @@ function guessCategoryFromName(name) { function getExpiredSafety(item, daysExpired) { const cat = mapToLocalCategory(item.category || '', item.name || ''); const loc = (item.location || '').toLowerCase(); - const name = (item.name || '').toLowerCase(); - - // HIGH RISK categories - perishable, can be dangerous - // Latticini freschi, carne, pesce, verdura, frutta - const highRisk = ['latticini', 'carne', 'pesce', 'verdura', 'frutta']; - // MEDIUM RISK - check before consuming - // Pane, surgelati, bevande (fresh juices, milk) - const medRisk = ['pane', 'surgelati']; - - // Items in frigo are more perishable + const inFreezer = loc === 'freezer'; const inFrigo = loc === 'frigo'; + // === FREEZER: il congelamento allunga molto la vita === + // Carne/pesce in freezer: +3 mesi. Verdura/frutta: +6 mesi. Pane: +2 mesi. + // Latticini in freezer: +1-2 mesi. Tutto il resto: +3-6 mesi. + if (inFreezer) { + const highRiskFreezer = ['carne', 'pesce']; + const medRiskFreezer = ['latticini', 'pane']; + const produceRiskFreezer = ['verdura', 'frutta']; + + let bonusDays; + if (highRiskFreezer.includes(cat)) bonusDays = 90; // +3 mesi + else if (produceRiskFreezer.includes(cat)) bonusDays = 180; // +6 mesi + else if (medRiskFreezer.includes(cat)) bonusDays = 60; // +2 mesi + else bonusDays = 120; // +4 mesi default + + const effectiveDays = daysExpired - bonusDays; + + if (effectiveDays <= 0) { + return { level: 'ok', icon: 'βœ…', label: 'OK', tip: `In freezer: ancora sicuro (~${bonusDays - daysExpired}g di margine)` }; + } + if (effectiveDays <= 30) { + return { level: 'warning', icon: 'πŸ‘€', label: 'Controlla', tip: `In freezer da molto, potrebbe aver perso qualitΓ . Consumare presto` }; + } + return { level: 'danger', icon: 'πŸ—‘οΈ', label: 'Buttare', tip: 'In freezer da troppo tempo, rischio di bruciatura da gelo e degrado' }; + } + + // === FRIGO e DISPENSA === + const highRisk = ['latticini', 'carne', 'pesce', 'verdura', 'frutta']; + const medRisk = ['pane', 'surgelati']; + if (highRisk.includes(cat)) { - if (daysExpired <= 2 && inFrigo) { + if (inFrigo && daysExpired <= 2) { return { level: 'warning', icon: 'πŸ‘€', label: 'Controlla', tip: 'Scaduto da poco, controlla odore e aspetto prima di consumare' }; } return { level: 'danger', icon: 'πŸ—‘οΈ', label: 'Buttare', tip: 'Prodotto deperibile scaduto: da buttare per sicurezza' }; @@ -139,9 +159,7 @@ function getExpiredSafety(item, daysExpired) { return { level: 'danger', icon: 'πŸ—‘οΈ', label: 'Buttare', tip: 'Troppo tempo dalla scadenza, meglio buttare' }; } - // LOW RISK - long shelf life items - // Pasta, conserve, condimenti, cereali, snack, bevande confezionate - // "Da consumarsi preferibilmente entro" = TMC, safe well past expiry + // LOW RISK - lunga conservazione (pasta, conserve, condimenti, cereali, snack) if (daysExpired <= 30) { return { level: 'ok', icon: 'βœ…', label: 'OK', tip: 'Prodotto a lunga conservazione, ancora sicuro da consumare' }; } @@ -367,7 +385,8 @@ async function loadDashboard() { total += s.product_count; } }); - document.getElementById('stat-total').textContent = total || summary.reduce((a, s) => a + s.product_count, 0); + // Load shopping list count from Bring! + loadShoppingCount(); // Expiring items const expiringSection = document.getElementById('alert-expiring'); @@ -407,10 +426,11 @@ async function loadDashboard() { else if (days === 1) daysText = 'Da ieri'; else daysText = `Da ${days}g`; const safety = getExpiredSafety(item, days); + const locIcon = item.location === 'freezer' ? '❄️' : item.location === 'frigo' ? '🧊' : ''; return `
- ${escapeHtml(item.name)} + ${locIcon ? locIcon + ' ' : ''}${escapeHtml(item.name)} ${item.brand ? `${escapeHtml(item.brand)}` : ''}
@@ -2180,6 +2200,20 @@ let shoppingListUUID = ''; let shoppingItems = []; let suggestionItems = []; +// Load just the shopping count for dashboard stat card +async function loadShoppingCount() { + try { + const data = await api('bring_list'); + if (data.success && data.items) { + document.getElementById('stat-spesa').textContent = data.items.length; + } else { + document.getElementById('stat-spesa').textContent = '-'; + } + } catch { + document.getElementById('stat-spesa').textContent = '-'; + } +} + async function loadShoppingList() { const statusEl = document.getElementById('bring-status'); const currentEl = document.getElementById('shopping-current'); diff --git a/data/dispensa.db b/data/dispensa.db index 4845204..a163c88 100644 Binary files a/data/dispensa.db and b/data/dispensa.db differ diff --git a/index.html b/index.html index 4891e15..05c7063 100644 --- a/index.html +++ b/index.html @@ -46,10 +46,10 @@ 0 Freezer
-
- πŸ“¦ - 0 - Totale +
+ πŸ›’ + - + Spesa