OFFLINE
Tablou de bord
Igienizare azi
0%
0/0 completat
Temperaturi
0
înregistrări azi
Recepții
0
marfă recepționată
Dezinsecție
0/4
trimestre anul curent
Acțiuni rapide
Checklist Igienizare
Bucătărie, toalete, sală — zilnic
Temperaturi Frigidere
Dimineață & seară — 2x pe zi
Recepție Marfă
Lot, dată, furnizor, conformitate
Registru Dezinsecție
Trimestrial — 4x pe an
Checklist Igienizare Zilnic
Temperaturi Frigidere
Gestionare Frigidere
Recepție Marfă
Registru Dezinsecție / Deratizare
Generare Raport ANPC / DSP
Setări
Export toate datele (JSON)
Descarcă backup complet
Import date
Restaurează din backup JSON
Șterge toate datele
Acțiune ireversibilă

HORECACheck v1.0

100% Offline — Date stocate local

Conformitate ANPC / DSP

${content} `); win.document.close(); win.print(); } // ========== SETTINGS ========== function exportAll() { const data = {}; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key.startsWith('hc_')) data[key] = localStorage.getItem(key); } const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'horecacheck_backup_' + today() + '.json'; a.click(); URL.revokeObjectURL(url); showToast('Backup exportat ✓'); } function importAll(event) { const file = event.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = e => { try { const data = JSON.parse(e.target.result); for (const key in data) { if (key.startsWith('hc_')) localStorage.setItem(key, data[key]); } showToast('Date importate cu succes ✓'); refreshDashboard(); } catch { showToast('Fișier invalid', true); } }; reader.readAsText(file); event.target.value = ''; } function clearAllData() { if (!confirm('ATENȚIE: Toate datele vor fi șterse ireversibil. Continuă?')) return; const keys = []; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key.startsWith('hc_')) keys.push(key); } keys.forEach(k => localStorage.removeItem(k)); showToast('Toate datele au fost șterse'); refreshDashboard(); } // ========== MODALS ========== function closeModal(id) { document.getElementById(id).classList.remove('open'); } // Close modals on overlay click document.querySelectorAll('.modal-overlay').forEach(m => { m.addEventListener('click', e => { if (e.target === m) m.classList.remove('open'); }); }); // ========== INIT ========== refreshDashboard(); // Auto-select temp moment based on time const hour = new Date().getHours(); if (hour >= 12) { const sel = document.getElementById('tempMoment'); if (sel) sel.value = 'seara'; } // Register Service Worker if ('serviceWorker' in navigator) { navigator.serviceWorker.register('./service-worker.js') .then(reg => console.log('SW registered:', reg.scope)) .catch(err => console.log('SW error:', err)); } // PWA Install Banner let deferredPrompt; const pwaBanner = document.createElement('div'); pwaBanner.id = 'pwaBanner'; pwaBanner.innerHTML = `
Control Horeca
✅ Control Horeca Lucrează offline - datele tale rămân private
`; document.body.appendChild(pwaBanner); const bannerStyle = pwaBanner.querySelector('div'); window.addEventListener('beforeinstallprompt', (e) => { e.preventDefault(); deferredPrompt = e; bannerStyle.style.transform = 'translateY(0)'; }); document.getElementById('pwaInstallBtn').addEventListener('click', async () => { if (!deferredPrompt) return; deferredPrompt.prompt(); await deferredPrompt.userChoice; deferredPrompt = null; bannerStyle.style.transform = 'translateY(100%)'; }); document.getElementById('pwaCloseBtn').addEventListener('click', () => { bannerStyle.style.transform = 'translateY(100%)'; localStorage.setItem('pwaBannerClosed', 'true'); });