{{ toastMsg }}
🔴 Mode hors ligne — données sauvegardées localement
{{ cfm.icon }}
{{ cfm.title }}
{{ cfm.sub }}
{{ workingMag || 'TOUS' }} ADMIN {{ chipUser }}
{{ err }}
⚙ Accès administrateur
© 2026 BREF — Droits réservés à Mr Gian Nicolas
← Retour
Administration
Accès restreint
{{ err }}
BREF
INVENTAIRE
{{ loadingLabel }}
{{ loadStatus }}

Bonjour, {{ name }} 👋

{{ magLabel }}

{{ gen }}
Générés
{{ scan }}
Scannés
{{ gen ? pct + '%' : '—' }}
Complété
📱
Scanner
Scan meubles & EAN
📈
Suivi
Avancement inventaire
🏷️
Étiquettes
Générer & imprimer
📊
Export
CSV & sync
⚙️
Administration
Comptes, secteurs, réf.
© 2026 BREF — Droits réservés à Mr Gian Nicolas
📈 Suivi inventaire
Avancement global
{{ gen }}
Générés
{{ scan }}
Scannés ✓
{{ rest }}
Restants
{{ pct }}% complété
Par secteur (cliquer pour voir les meubles restants)
Aucun meuble généré
{{ openSectors[sec.sector] ? '▼' : '▶' }} {{ sec.sector }} {{ sec.scan }}/{{ sec.gen }}
{{ sec.pct }}%
🎉 Secteur complet !
⚠️ Meubles scannés hors liste {{ orphans.length }}

Ces meubles ont été scannés mais n'ont pas d'étiquette générée.

{{ o.meuble_num }} {{ o.userId || '—' }} · {{ o.mag || '—' }}
{{ o.refCount }} réf.
📊 Export
✅ Tout est synchronisé
Meubles {{ exportByMeuble.length }}
Aucun meuble scanné
{{ mb.num }} {{ mb.sect }}
{{ mb.scanCount }} réf. · {{ mb.total }} u. · {{ mb.agents }} agent(s)
👤 {{ d.userId || '—' }} · {{ d.mag || '—' }} · {{ d.date || '—' }}
{{ s.code }}{{ s.nom }} ×{{ s.qty || 1 }}
🚫 Articles inconnus {{ exportUnknowns.length }}
Aucun article inconnu
{{ u.code }} {{ u.meuble }} · {{ u.secteur }}
{{ u.userId }} · {{ u.date }}
🏷️ Étiquettes
Générer des étiquettes
⚠️ Sélectionnez d'abord un magasin de travail dans la barre en haut
🏪 Génération pour : {{ workingMag }}
Aperçu {{ etMeubles.length }}
Aperçu des 10 premières · {{ etMeubles.length }} générées au total
📱 Scanner
📦{{ currentMeuble }}

Scanner les articles… Toucher ici — scannez d'abord l'étiquette meuble

{{ alertMsg }}
Aucun code scanné
{{ row.e.code }}
{{ row.e.nom }}
{{ eanScans.length }} réf. — {{ eanTotal }} u.
⚙️ Administration
Comptes utilisateurs
Chargement…
Comptes utilisateurs {{ CU.mag }}
IDMagasin(s)Permissions
Aucun compte
{{ u.username }} ADMIN 🔒 Bloqué ⭐ Tous {{ p }}
Secteurs d'inventaire
Aucun secteur
{{ s.code }}{{ s.label }}
Magasins
Aucun magasin
{{ m }}
🔒 IPs autorisées

Seules ces IPs peuvent accéder à l'application. Si vide → accès ouvert.

Aucune IP configurée — accès ouvert
{{ a.ip }} {{ a.label || '' }}
🌐 Votre IP actuelle : {{ currentIP || 'Détection…' }}
🏪 Magasin de travail : {{ workingMag }}
Meubles générés {{ invFilteredMeubles.length }}
⚠️ Aucun meuble scanné dans la base : tous les meubles sont donc considérés « vides ». Les supprimer reviendrait à tout effacer.
{{ selectedGenCount }} sélectionné(s)
Aucun meuble généré
{{ openSectors[grp.sect] ? '▼' : '▶' }} {{ grp.sect }}
{{ grp.scannes }} scannés {{ grp.items.length }} total
{{ it.m.num }} {{ it.m.mag || '?' }}
Meubles scannés {{ invScannedList.length }}
Aucun meuble scanné
{{ row.d.meuble_num || row.key }}
{{ row.d.userId || '—' }} · {{ row.d.mag || '—' }} · {{ row.d.date || '—' }}
{{ (row.d.scans || []).length }} réf. · {{ row.total }} u.
Référentiel produits {{ refTotalProduits }} produits

Colonnes : secteur | code_article | code_ean | nom_produit

SecteurCode art.EANNom
{{ r.secteur }}{{ r.code_article || '—' }}{{ r.code_ean || '—' }}{{ r.nom_produit }}
… +{{ refRows.length - 12 }} lignes
{{ refProgress }}
Référentiel vide
{{ r.sect }} {{ r.count }} produits
📦 Archiver l'inventaire actuel

Sauvegarde l'inventaire complet dans une archive, puis vide les tables pour repartir à zéro.

🧪 Mode test : l'archive est créée mais l'inventaire n'est pas vidé.
Archives disponibles
Aucune archive
{{ a.nom }}
{{ a.date_archive }} · {{ a.mag || 'Tous' }} · {{ a.nb_meubles }} meubles · {{ a.nb_articles }} articles
Onglet « {{ adminTab }} » — à reconstruire prochainement.
La navigation entre onglets marche déjà. 🙂
{{ moduleTitle }}
Écran « {{ moduleTitle }} » — on le reconstruira à la prochaine étape.
La navigation, elle, marche déjà. 🙂