feat: Info tab v3 — clean month/year stats, currency to Info tab, Gemini costs from .env

- .env: GEMINI_COST_* rates configurable (4 new vars, defaults to current Google pricing)
- api/index.php: GEMINI_COST defines read from env() with fallback; added SHOPPING_NAME_CACHE_PATH
- api/index.php: gemini_usage output — clean month_stats/year_stats (no tracked/retro split)
  updated token estimates: price 700/250, shelf 650/120, cat 280/40, shopping_name 250/40
  added 'pricing' key to response (current rates); removed food_facts from estimate
- index.html: currency selector moved from tab-api to tab-info as first card (global setting)
- app.js: _renderInfoTab() rewritten — just month + year sections, no retro framing
  cost displayed in user's currency (price_currency) with expanded multi-currency conversion
- translations: settings.info.currency_title/hint/year_label added; retro/tracked keys removed
This commit is contained in:
dadaloop82
2026-05-18 06:45:56 +00:00
parent cc0d9763ed
commit 56e68b72f8
6 changed files with 214 additions and 200 deletions
+4 -5
View File
@@ -780,10 +780,6 @@
"log_size": "Protokolle",
"log_level": "Log-Level",
"ai_overview": "KI-Nutzungsübersicht, Inventar und Systemstatus",
"tracked_section": "Erfasst (seit Monitoring-Start)",
"retro_section": "Rückwirkende Schätzung — {month}",
"retro_note": "Schätzung basiert auf KI-Cache-Dateien, die vor der Monitoring-Aktivierung generiert wurden.",
"year_section": "Jahr {year} — Gesamtschätzung",
"calls_unit": "Aufrufe",
"inv_title": "Inventar",
"inv_active": "Aktiv",
@@ -801,7 +797,10 @@
"cache_entries": "Produkte",
"last_backup": "Letztes Backup",
"bring_days": "Token läuft in {n} Tagen ab",
"bring_expired": "Token abgelaufen"
"bring_expired": "Token abgelaufen",
"year_label": "Jahr {year}",
"currency_title": "Währung",
"currency_hint": "Die Währung, die für alle Kosten und Preise in der App verwendet wird."
}
},
"expiry": {
+4 -5
View File
@@ -780,10 +780,6 @@
"log_size": "Logs",
"log_level": "Log level",
"ai_overview": "AI usage overview, inventory and system status",
"tracked_section": "Tracked (since monitoring start)",
"retro_section": "Retroactive estimate — {month}",
"retro_note": "Estimate based on AI cache files generated before monitoring was activated.",
"year_section": "Year {year} — total estimate",
"calls_unit": "calls",
"inv_title": "Inventory",
"inv_active": "Active",
@@ -801,7 +797,10 @@
"cache_entries": "products",
"last_backup": "Last backup",
"bring_days": "token expires in {n} days",
"bring_expired": "token expired"
"bring_expired": "token expired",
"year_label": "Year {year}",
"currency_title": "Currency",
"currency_hint": "The currency used for all costs and prices in the app."
}
},
"expiry": {
+4 -5
View File
@@ -780,10 +780,6 @@
"log_size": "Log",
"log_level": "Livello log",
"ai_overview": "Prospetto utilizzo AI, inventario e stato del sistema",
"tracked_section": "Tracciato (da inizio monitoraggio)",
"retro_section": "Stima retroattiva — {month}",
"retro_note": "Stima basata sulle voci presenti nei file di cache AI, generati prima dell'attivazione del monitoraggio.",
"year_section": "Anno {year} — totale stimato",
"calls_unit": "call",
"inv_title": "Inventario",
"inv_active": "Attivi",
@@ -801,7 +797,10 @@
"cache_entries": "prodotti",
"last_backup": "Ultimo backup",
"bring_days": "token scade tra {n} giorni",
"bring_expired": "token scaduto"
"bring_expired": "token scaduto",
"year_label": "Anno {year}",
"currency_title": "Valuta",
"currency_hint": "La valuta usata per tutti i costi e i prezzi nell'app."
}
},
"expiry": {