🪪
Meigens Tech Générateur d'ID Professionnel

👤 Informations de l'Étudiant

Aucun champ n'est sélectionné par défaut. Cochez un champ dans « Champs sélectionnables » pour l'ajouter à la carte.

🔍 1.0×
🖨️ 300 DPI
⚙️ Génération en Vrac & Gestion des Données
Source de génération des ID

Cochez la ou les sources à utiliser pour générer les badges.

Destination de Sauvegarde


Filtrer par Colonne (Optionnel)


(Laissez les deux au défaut pour générer tous les badges.)

⚙️ Configuration de la Carte ID

🎨 Design de la carte — éditeur de fond Dessinez le fond (courbes, bandeaux, couleurs, textes, adresse, signature). Il est enregistré en PNG et appliqué automatiquement comme image de fond ci-dessus.
📁 Designs enregistrés
Aucun design enregistré pour le moment.
↩ Conception du Verso (Dos de Carte)
Le verso est la face arrière de la carte. Il peut contenir du texte libre, un logo, un code QR d'organisation ou toute information complémentaire. Téléchargez une image pour le fond complet du verso. Ceci écrase la couleur de fond ci-dessus.

🖼️ Image de Fond Personnalisée (Recto)

Téléchargez une image pour le fond complet de la carte (recto). Ceci écrase le design et le logo de fond.
Choisissez sur quelle face de la carte le code (ou code-barres) du membre doit apparaître.
11px
🏫 Nom de l'École / Organisation
12px
📝 Slogan / Info Secondaire
8px
📅 Promotion / Année
11px
📋 Champs d'Info (Labels & Valeurs)
Décocher = masquer les étiquettes, valeurs conservées
📐 Alignement
Horizontal
Vertical
12px
11.5px
3px
Ajuste l'espace entre l'étiquette et la valeur.
3px


    🔍 Prévisualisation du code :
    🎨 Design & Fond

    aperçu du logo
    🎨 Fond multi-couches de la carte ▼
    1 Couleur de base (fond plein)
    100%
    2 Dégradé (overlay gradient)
    135°
    0%
    3 Motif décoratif (pattern)
    0%
    4 Image de fond personnalisée (haute résolution)
    Résolution maximale conservée pour l'export. Formats: JPG, PNG, WebP, SVG.
    L'image est recadrée pour couvrir toute la carte (cover).
    📁 Cliquez ou déposez une image ici
    Résolution maximale préservée pour l'export 300 DPI
    Aperçu fond
    100%
    5 Teinte colorée (overlay tint)
    0%
    📐 Marge texte (haut/bas)
    0px
    ⚡ Présets rapides

    🌟 Designs Pro (Fonds Premium)

    Sélectionnez ici un design professionnel permanent qui agira comme un fond d'image.
    #1565c0
    100%
    👶 Règles ID Enfants (sans CIN/NIF)
    Configurez les règles de remplacement pour les champs manquants chez les membres enfants (ex : CIN/NIF remplacé par un autre champ).
    →
    🔄 Champs de Secours (Membres d'Église)
    Quand un champ est absent chez un membre, le système affichera automatiquement un champ de remplacement à la place.
    Exemple : si Téléphone est vide → afficher Num. Urgence.
    →
    🎯 Règles de Design (selon un champ)
    Choisir un design dans la liste 📐 Designs limite les boutons ◀ ▶ (revue par lots) et la génération en lot aux fiches dont une règle pointe vers ce design — aucun rechargement de design par fiche.
    Exemple : Classe = 6e Année → Design 6e. Plusieurs valeurs : 6e | 6ème. Si une fiche correspond à plusieurs règles, la première (en haut) s'applique.
    = →

    100%
    📐 Mise en Page & Positionnement
    Si activé, la position se règle par glisser-déposer sur la carte de prévisualisation (comme la signature).
    Décochez pour masquer uniquement le texte affiché sous le QR/code-barres (le QR/code-barres lui-même reste affiché).
    « Sous le code » : le texte reste collé au QR/code-barres. « Dans les infos » : le code devient une ligne « Code : valeur » comme les autres champs, et rien n'est affiché sous le graphique.
    Réactive le mode QR et reconstruit le QR dans la carte de prévisualisation.
    ✍️ Signature Autorisée
    aperçu de la signature
    La position et la taille de la signature se règlent directement sur la carte de prévisualisation (glisser-déposer, redimensionner).
    🔗 Connexion Google Sheets Cet ID est utilisé pour la recherche en direct et la génération en lot. ID du dossier où seront sauvegardées les photos et autres fichiers générés.

    📋 Lien du Formulaire d'ID Étudiant

    Génère un lien sécurisé (signé) pour que les étudiants remplissent leur formulaire de demande de carte.
    (0 = permanent | 1440 = 24h | 10080 = 7 jours)
    🏢 Logo Meigens Tech (Exports PDF) Ce logo est celui de Meigens Tech (le fournisseur de l'application) — différent du logo de l'organisation affiché sur la carte. Il est utilisé dans l'en-tête, le pied de page et en filigrane des PDF exportés depuis le tableau de bord. Une fois enregistré, il est sauvegardé côté serveur (Script Properties) et partagé pour tous les utilisateurs de ce déploiement.
    aperçu du logo Meigens Tech

    🚀 Fonctionnalités Avancées

    Cette section contient des outils spécialisés pour la gestion de l'infrastructure et des modèles de données.

    Créer un Modèle Client (Feuille de Calcul)

    Crée une nouvelle Google Sheet pré-formatée pour le client spécifié, avec un script d'application Web connecté.

    👥 Comptes à accès limité

    Créez des comptes restreints (ex : agents photo) qui ne voient qu'une recherche par code — jamais le nom complet, jamais la feuille complète, jamais l'éditeur de badge.
    Ce compte ne pourra rechercher que dans cette organisation.

    Comptes existants

    Chargement...

    ❓ Manuel d'Utilisateur Complet Meigens Tech

    Ce guide vous accompagne dans le déploiement de votre formulaire et l'utilisation de l'outil.
    ✅ **1. Démarrage et Connexion**

    L'application nécessite une connexion pour activer toutes les fonctionnalités de génération et de sauvegarde.

    1.1. Connexion / Enregistrement

    • Cliquez sur le bouton **🔐 Connexion / Enregistrement**.
    • **Pour la première fois (Enregistrement)** : Cliquez sur **Pas encore de compte ? Enregistrez-vous.** Remplissez les champs (Email, Nom, Téléphone, Numéro de transaction) et téléchargez la **Preuve de transaction**, puis cliquez sur **Enregistrer**.
    • **Pour les utilisateurs existants (Connexion)** : Entrez votre **Email** et **Mot de passe**, puis cliquez sur **Connexion**.
    • *Succès :* La fenêtre se ferme, les boutons d'action (Télécharger, Générer) sont **activés**.
    🔑 **1. Création du Modèle de Données (Feuille de Calcul)**

    Avant de pouvoir synchroniser des données ou déployer le formulaire étudiant, vous devez créer le classeur qui stockera les informations.

    1. Allez à l'onglet **🚀 Avancé**.
    2. Entrez un nom pour votre client/école dans le champ **Nom du client / École**.
    3. Cliquez sur **🆕 Créer le modèle**.
    4. Le système créera la feuille Google Sheets et vous fournira son **ID**.
    5. **Copiez cet ID**. Il est essentiel pour l'étape suivante.
    🚀 **2. Instructions de Déploiement du Formulaire Web (Google Apps Script)**

    Pour que votre formulaire d'inscription dynamique soit accessible via un lien public (URL), vous devez **déployer** le script associé au classeur Google Sheets.

    ⚠️ Requis pour la génération en lot avec Drive + feuille :
    Ajoutez ces deux fonctions dans votre Code.gs :
    /**
     * saveBadgeDriveId(driveId) — persiste un ID de dossier Drive dans ScriptProperties.
     * Appelé depuis le frontend (fire-and-forget).
     */
    function saveBadgeDriveId(driveId) {
      try {
        if (!driveId || typeof driveId !== 'string') return;
        PropertiesService.getScriptProperties().setProperty('BADGE_DRIVE_FOLDER_ID', driveId.trim());
      } catch (e) { Logger.log('[saveBadgeDriveId] error: ' + e.message); }
    }
    
    /**
     * saveBadgesToDrive(folderId, badgeImagesData) — sauvegarde un tableau de badges
     * (data URIs ou objets {data, name, code}) dans le dossier Drive indiqué.
     * Retourne { saved, errors, results:[{code,url,fileId}] }.
     */
    function saveBadgesToDrive(folderId, badgeImagesData) {
      if (!folderId || !Array.isArray(badgeImagesData) || badgeImagesData.length === 0) {
        return { saved: 0, errors: ['Aucun fichier à sauvegarder ou ID de dossier manquant.'], results: [] };
      }
      try {
        const rootFolder = DriveApp.getFolderById(folderId.trim());
        // Store in Badges sub-folder
        let folder;
        const fi = rootFolder.getFoldersByName('Badges');
        folder = fi.hasNext() ? fi.next() : rootFolder.createFolder('Badges');
    
        let saved = 0;
        const errors = [], results = [];
    
        badgeImagesData.forEach(function(item, index) {
          try {
            const dataUrl       = typeof item === 'string' ? item : (item && item.data ? item.data : '');
            const recipientCode = String(item && (item.code || item.Code || item.recipientCode) || '').trim();
            const safeCode      = recipientCode.replace(/[^A-Za-z0-9_-]/g, '_');
            const baseName      = (item && typeof item === 'object' && item.name)
              ? String(item.name)
              : (safeCode || 'badge_' + (index + 1) + '_' + Date.now());
            const name = String(baseName).replace(/\.(png|jpg|jpeg)$/i, '') + '.png';
            if (!dataUrl) return;
            const parts = dataUrl.split(',');
            if (parts.length < 2) return;
            const mime   = (parts[0].match(/data:(.*?);base64/) || [])[1] || 'image/png';
            const blob   = Utilities.newBlob(Utilities.base64Decode(parts[1]), mime, name);
            // Overwrite existing same-name file to avoid duplicates
            const existing = folder.getFilesByName(name);
            while (existing.hasNext()) existing.next().setTrashed(true);
            const file = folder.createFile(blob);
            try { file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); } catch (_) {}
            const fileId   = file.getId();
            const driveUrl = 'https://drive.google.com/file/d/' + fileId + '/view?usp=sharing';
            saved++;
            results.push({ code: recipientCode, url: driveUrl, fileId: fileId });
          } catch (err) { errors.push('Badge ' + (index + 1) + ': ' + err.message); }
        });
    
        return { saved: saved, errors: errors, results: results };
      } catch (e) {
        throw new Error('Erreur accès Drive (dossier ' + folderId + '): ' + e.message);
      }
    }
    
    /**
     * saveSingleBadgeToDrive(badge) — sauvegarde un seul badge et retourne son URL.
     * @param {{code:string, name:string, base64:string}} badge
     * @returns {{url:string, fileId:string}}
     */
    function saveSingleBadgeToDrive(badge) {
      const folderId = PropertiesService.getScriptProperties().getProperty('BADGE_DRIVE_FOLDER_ID')
                    || PropertiesService.getScriptProperties().getProperty('DRIVE_FOLDER_ID') || '';
      if (!folderId) throw new Error('BADGE_DRIVE_FOLDER_ID not set in Script Properties.');
      const folder = DriveApp.getFolderById(folderId);
      const b64  = badge.base64.replace(/^data:image\/\w+;base64,/, '');
      const bytes = Utilities.base64Decode(b64);
      const name  = (badge.name || badge.code || 'badge') + '.png';
      const blob  = Utilities.newBlob(bytes, 'image/png', name);
      const existing = folder.getFilesByName(name);
      while (existing.hasNext()) existing.next().setTrashed(true);
      const file = folder.createFile(blob);
      file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
      return { url: file.getUrl(), fileId: file.getId() };
    }
                          

    2.1. Déploiement du Script (Étapes Critiques)

    1. **Ouvrir l'éditeur de script** : Ouvrez votre classeur Google Sheets. Cliquez sur **Extensions** < **Apps Script**.
    2. **Lancer le déploiement** : Dans l'éditeur de script, cliquez sur **Déployer** (icône 🚀) > **Nouveau déploiement**.
    3. **Configurer l'Application Web** :
      • Sous "Sélectionner le type", choisissez **Application Web**.
      • **Exécuter l'application en tant que :** Choisissez votre propre adresse e-mail.
      • **Qui a accès :** Sélectionnez **Tout le monde** (crucial pour le formulaire public).
    4. **Déployer et Autoriser** : Cliquez sur **Déployer**. Suivez les étapes d'autorisation (Paramètres avancés > Accéder à [Nom du projet] > Autoriser).
    5. **Copiez l'URL** : Une fois le déploiement réussi, copiez l'**URL de l'application Web** affichée.

    2.2. Finaliser la Configuration (Lien)

    • Retournez à l'onglet **⚙️ Paramètres** de cette application.
    • Allez à la section **🔗 Connexion Google Sheets**.
    • Collez l'URL de l'application Web dans le champ : **URL de l'application Web Google Apps**.
    • Cliquez sur **💾 Sauvegarder Tous les Paramètres**.
    • Vous pouvez maintenant distribuer cette URL à vos participants (**4.3. Partage du Formulaire**).
    ⚙️ **3. Configuration Initiale (Onglet Paramètres)**

    Personnalisez le visuel et les champs de la carte avant de générer les badges.

    3.1. Infos, Design & Mise en page

    • Modifiez le **Nom de l'École** et la **Promotion**.
    • Choisissez le **Design de la Carte** et téléchargez le **Logo de l'École**.
    • Ajustez la **Taille du Logo (%)** et la **Taille du Code-barres**.

    3.2. Champs de la Carte et Format du Code

    • Sélectionnez les **Champs facultatifs** à afficher.
    • **Ajoutez un champ personnalisé** ou **Réordonnez les champs** par glisser-déposer.
    • Définissez le **Format du Code à Générer** pour l'attribution automatique.

    3.3. Connexion Google Sheets (ID)

    • Collez l'**ID Google Sheet** (l'identifiant unique de votre classeur) dans le champ dédié.

    ⚠️ **IMPORTANT :** Cliquez toujours sur **💾 Sauvegarder Tous les Paramètres** après une modification.

    👤 **4. Utilisation Quotidienne (Onglet Infos Étudiant)**

    4.1. Saisie Manuelle et Photos

    • Remplissez les champs et le **Code / ID de l'Étudiant**.
    • Utilisez **📷 Ouvrir Caméra** ou **⬆️ Télécharger Photo** pour le portrait.
    • **⬇️ Télécharger la Carte** (PNG) ou **🆔 Générer & Sauvegarder** (dans la galerie locale).

    4.2. Génération en Vrac et Recherche

    • **Recherche rapide (Live Lookup universelle)** : Si les données sont chargées, tapez **3+ caractères** — Code, ID, Nom, Téléphone, ou toute autre donnée présente dans la fiche — pour remplir le formulaire automatiquement. La recherche fonctionne sur **toutes les colonnes**, quel que soit leur nom.
    • **Charger les données** : Utilisez **📂 Charger Données (Sheets)** ou **Importer CSV** pour la synchronisation.
    • **Lancer le lot** : Cliquez sur **🆔 Lancer Génération en Lot** pour commencer la création en masse (avec option de **Revue par lots**).
    ➕ Ajouter :

    photo
    Centrez votre visage
    autre photo
    Signature Autorisée
    2025–2026
    ▶ Recto
    ▶ Recto
    ↩ Verso
    🛠️ Boîte à outils
    ✏️ Tous les labels & valeurs
    Décocher = masquer les étiquettes, valeurs conservées
    📐 Alignement
    Horizontal
    Vertical
    🏷️ Label
    px
    📝 Valeur
    px
    🎨 Styles de texte
    Auto
    Utiliser icônes
    Combiner icône + texte
    Libellés courts
    Valeurs courtes
    0%
    px
    Sélectionnez un texte sur la carte, puis utilisez le sélecteur "Fond boîte" ci-dessus pour lui appliquer une couleur individuelle.
    🎨 Amélioration de la Photo
    100%
    100%
    100%
    0

    Texte du code
    Masquer le texte sous le QR/code-barres
    8px
    🤖 Assistant IA
    🔑 Clé API  🔴