Attestation Déplacement - Integration Jeedom PHP auto - creation fichier local et envoi telegram

Il te faut une virgule à chaque fin de ligne hormis la derniere

1 « J'aime »

Bonjour,
Je propose les modifs suivantes, afin d’être conforme :
- modification des « motifs » :

    const TRAVAIL = 'travail';
    const ACHATS = 'achats';
    const SANTE = 'sante';
    const FAMILLE = 'famille';
    const HANDICAP = 'handicap';
    const SPORT_ANIMAUX = 'sport_animaux';
    const CONVOCATION = 'convocation';
    const MISSIONS = 'missions';
    const ENFANTS = 'enfants';

-modification du QR code afin d’avoir un CRLF à chaque champ (c’est le cas sur le site officiel)
// génération du QR code

        $date_time=strftime("%d/%m/%G a %Hh%M");
        $qrcode='Cree le: '.$date_time.';'. PHP_EOL.'Nom: '.$name.';'. PHP_EOL.'Prenom: '.$fname.';'. PHP_EOL.'Naissance: '.$ddn.' a '.$lieu_ddn.';'. PHP_EOL.'Adresse:'.$address.' '.$zip.' '.$ville.';'. PHP_EOL.'Sortie: '.$date_time.';'. PHP_EOL.'Motifs: '.implode (',', $motifs);
        $this->url_qrcode = dirname(__FILE__) . '/EXPORT/qrcode_attest'.$fname.'.png';
        $qrFile = QRcode::png($qrcode,$this->url_qrcode);

- et enfin ajout d’une page avec le QR code grand format, comme la version officielle

        $pdf->addPage();
		$pdf->Image(dirname(__FILE__) . '/EXPORT/qrcode_attest'.$fname.'.png', 20, 20, 100, 100);

Désolé …

1 « J'aime »

Hello
Pense à mettre le balise dans ton message. Ce sera plus lisible

Hello

Effectivement avec ces petites modifications / adaptations supplémentaires on se rapproche encore plus de ce que la génération depuis le site officiel génère.

Je vois éventuellement encore quelques autres modifications à faire :

  1. il manque un espace après les 2 points du champ adresse.
  2. à priori sur la version officielle, j’ai repéré ça en passant par un outil de décodage de QR Code en ligne (ici zxing.org), il y a des espaces devant chacune des entrées Nom, Prenom, … seul le 'Cree le … ’ est totalement calé à gauche.

aucune idée si ça peut avoir une incidence sur la validité du QR Code, mais au cas où

1 « J'aime »

Salut @jjl87,

Merci de ta contribution!

  • Ok pour les constantes de motifs,

  • Pour les retour chariots, j’utilise des ‹ \n › (dernière version mise en ligne hier soir). Pour ma culture, y’a une différence avec PHP.EOF ?

  • pour la seconde page, j’ai mis un argument optionnel sur l’appel de la fonction, par défaut à false pour ajouter la seconde page

function generate_attest($name,$fname,$ddn,$lieu_ddn,$address,$zip,$ville, $motifs, $secondPage=false)

  • Merci @Ludo, corrigé, ajouts des espaces manquants.

note : J’ai mis les fichier sur github - histoire de minimiser les modifs sur le 1er post, n’hésitez pas à PR au besoin.

A noter que le repo du ministère est dispo:

sous licence MIT,

Je n’ai pas les compétence pour rétro engenirer le bousin, mais si c’est open, je me dis qu’il n’ont pas passé des heures d’ingé pour sécuriser un qrcode, pas assez d’intérêt à mon avis, objectif de toutes façon atteint (distancier les policier lors des controles)…

Hello,

Pour info je travail dessus, Et je l’ai déjà edit pour qu’il donne un lien direct vers le fichier pdf, et la je suis en train de mettre en place la generation grace au paramètre dans l’url.

Comme sa on peux demander le pdf en direct sur le site et le download. Sa evite trop de dépendance en local

Cdt
Thibaut

Salut Titi,

Yes ! J’ai vu également qu’il avaient changé l’attestation le 29.

Est ce que tu as le lien vers le nouveau pdf? je trouve des truc, mais rien qui n’est ce qui sort du générateur officiel…

Histoire de remettre les croix au bon endroit.

Yes elle est dans le code :wink:

Cdt
Thibaut

J’ai une mauvaise nouvelle, le site de du gouv est même pas a jours, elle a encore changer today …

mpfffff j’suis une quiche, je cherchais partout un lien http https, etc… et enfait le pdf esst directement dans le git…

Edit : les modif que j’ai vu concernaient l’entete avec la référence du décrèt.

=> Mis à jour sur le github

Mince,

Bon, les modifs sont assez rapides à implémenter ceci dit…

Vivement le plugin!

Hello,

Nous on fait des test :
Voici le serveur qui a la version final actuel :
http://146.59.195.223:1234/

Quand mon truc sera stable, Je le publierais sur github pour que vous puissiez m’aidée a l’ammeliorer

Ps : Le repo du gouvernement est pas a jours, il y en a eux une nouvelle cette nuit

Cdt
Thibaut

PPs :
Un exemple de lien de gen :
http://146.59.195.223:1234/#prenom=Camille&nom=Dupond&date-de-naissance=01/01/1914&lieu-de-naissance=Avion&adresse=Siege%20B36&ville=Charles%20de%20gaulle&code-postal=95700&reason=achats&autogenpdf

C’est celle qu’on trouve en téléchargement direct sur le site du gouvernement (sans la saisie auto) !

J’adore le « né(e) le à » tout collé et sans espace, ça va encore changé dans pas longtemps

Yes, c’est celle du gouvernement, mais avec de la saisie auto et surtout déjà le nouveaux PDF

Cdt
Thibaut

Ok, j’ai implémenté la nouvelle attestation,

QUand on aura besoin, il suffira dans le code de mettre :

$ag->setCertif('30-10-2020-attestation-de-deplacement-derogatoire.pdf');

et maintenant les position sont définie dans un json, avec en clé le nom du fichier, juste à ajouter le nouveau certificat dans ‹ /Certificat › et de modifier le json !

2 « J'aime »

Bonjour,

Merci pour ce super boulot c’est top.
J’ai fait des scénarios pour lancer automatiquement une demande telegram en cas de détection d’absence ou encore une demande vocale par Alexa pour générer une attestation avant de partir.

Par contre, si une bonne âme veut bien regarder, je ne comprends pas, mon PDF se génère bien mais la case du motif n’est pas renseignée…je sèche

require_once dirname(__FILE__) . '/../../script/customs_scripts/PDF_Gen/AttestGen.class.php';
$ag = new ATTESTGEN();
// =génération du pdf, retourne l'url du document, va dans le sous répoertoire 'EXPORT' du dossier précédent
$pdfURL = $ag->generate_attest($nom, $prenom, $date_naissance,$lieu_naissance,$adresse,$code_postal,$ville, array($motif));  // les noms des variables me semblent explicites
// pour récupérer l'URL du qrcode généré, même endroit
$pngURL = $ag->getPNGURL();

// la liste des motif que j'utilise, 
//les nom des clé étant les valeurs de la variable retourné dans un ask telegram préalable transmis dans un tag 'motif'
$$motifArray=array('Travail'=>ATTESTGEN::TRAVAIL,
                  'Ecole'=>ATTESTGEN::ENFANTS,
                  'Sortie'=>ATTESTGEN::SPORT_ANIMAUX,
                  'Achats'=>ATTESTGEN::ACHATS,
                  'Soins'=>ATTESTGEN::SANTE,
                  'Famille'=>ATTESTGEN::FAMILLE            
  
  );

// les renseignements des utilisateurs,
// les clés sont les valeurs du tag 'Qui' que je passe au scénario
$infosArray=array(
  'Damien'=>array('nom'=>'','prenom'=>'Damien', 'ddn'=>'24','lieu_naiss'=>'TO','adresse'=>' ','ville'=>'', 'code_postal'=>''),
  'Alicia'=>array('nom'=>'','prenom'=>'Alicia', 'ddn'=>'20','lieu_naiss'=>'TO','adresse'=>'','ville'=>'', 'code_postal'=>'')
  );
$tags=$scenario->getTags();// récup des tag

if(!isset($tags['#qui#'])){// si le tag qui n'est pas renseigné, je me met moi, pour les tests principalement
  	$scenario->setLog('QUI non reconnu'.$tags['#qui#']);
	$tags['#qui#']='Damien';
}
if(!isset($tags['#motif#'])){// pour les motif, par défaut je met sortie, comme ça quand je ne répond pas au ask il m'envoi par défaut une attestation sortie
  	$scenario->setLog('motif non reconnu'.$tags['#motif#']);
	$tags['#motif#']='sport_animaux';
}
$qui=$tags['#qui#'];

// on valorise les variables selon les entrée des array au dessus
$nom=$infosArray[$qui]['nom'];
$prenom=$infosArray[$qui]['prenom'];
$date_naissance=$infosArray[$qui]['ddn'];
$lieu_naissance=$infosArray[$qui]['lieu_naiss'];
$adresse=$infosArray[$qui]['adresse'];
$code_postal=$infosArray[$qui]['code_postal'];
$ville=$infosArray[$qui]['ville'];

$motif=$motifArray[$tags['#motif#']];// selection du motif

$date_time=strftime("%d/%m/%G a %Hh%M");// récupération de la date+heure courante

// génération du pdf
$ag = new ATTESTGEN();
$pdfURL = $ag->generate_attest($nom, $prenom, $date_naissance,$lieu_naissance,$adresse,$code_postal,$ville, array($motif));
$pngURL = $ag->getPNGURL();

$scenario->setLog('PDF URL String : '.$pdfURL);
$scenario->setLog('PNG URL String : '.$pngURL);

//option fichier PNG pour le QR code et pdf
$strOption='file='.$pngURL.','.$pdfURL;
$scenario->setLog('Option String : '.$strOption);
$messCol= array('title'=>$strOption, 'message'=> 'Attestation COVID du '.$date_time.' / '.$motif);

if($qui=='Damien'){
	$cmd=cmd::byString("#[Informatique][Bot Telegram][]#");
}elseif($qui=='Alicia'){
  	$cmd=cmd::byString("#[Informatique][Bot Telegram][]#");
}
$cmd->execCmd($messCol, $cache=0);

//suppression des fichiers sur le serveur
$success=$ag->deleteAllFiles();
$scenario->setLog('success delete all file :'.$success);

Les logs du scénarios

[2020-11-01 17:55:23][SCENARIO] Start : Lancement provoque par le scenario  : [test][Generation]. Tags : {"#qui#":"Damien","#motif#":"Ecole"}
[2020-11-01 17:55:23][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-11-01 17:55:23][SCENARIO] Exécution d'un bloc code
[2020-11-01 17:55:23][SCENARIO] PDF URL String : /var/www/html/script/customs_scripts/PDF_Gen/EXPORT/attestation-2020-11-01_17-55_Damien+.pdf
[2020-11-01 17:55:23][SCENARIO] PNG URL String : /var/www/html/script/customs_scripts/PDF_Gen/EXPORT/qrcode_attestDamien.png
[2020-11-01 17:55:23][SCENARIO] Option String : file=/var/www/html/script/customs_scripts/PDF_Gen/EXPORT/qrcode_attestDamien.png,/var/www/html/script/customs_scripts/PDF_Gen/EXPORT/attestation-2020-11-01_17-55_Damien+.pdf
[2020-11-01 17:55:24][SCENARIO] success delete all file :1
[2020-11-01 17:55:24][SCENARIO] Exécution du sous-élément de type [action] : action
[2020-11-01 17:55:24][SCENARIO] Exécution de la commande [Informatique][Bot Telegram][Alicia ] avec comme option(s) : {"background":"0","title":"","message":""}
[2020-11-01 17:55:24][SCENARIO] Exécution de la commande [Informatique][Bot Telegram][Dams008 - ] avec comme option(s) : {"background":"0","title":"","message":""}
[2020-11-01 17:55:24][SCENARIO] Fin correcte du scénario

Bonjour à tous

Beau travail collaboratif :slight_smile:

J’attends le plugin pour tester.

Salut Nex008,

la je vois pas mais 2/3 trucs :

if(!isset($tags['#motif#'])){// pour les motif, par défaut je met sortie, comme ça quand je ne répond pas au ask il m'envoi par défaut une attestation sortie
  	$scenario->setLog('motif non reconnu'.$tags['#motif#']);
	$tags['#motif#']='sport_animaux';
}

ne peux pas fonctionner car ‹ sport_animaux › n’est pas une clé du tableau des motifs :

if(!isset($tags['#motif#'])){
  	$scenario->setLog('motif non reconnu'.$tags['#motif#']);
	$tags['#motif#']='Sortie';
}

dans ton scénario, ajoute après

$motif=$motifArray[$tags['#motif#']];// selection du motif

la ligne

$scenario->setLog('Selection du motif : '.$tags['#motif#'].' / '.$motif);

Pour voir si ça passe bien ici. et remet le log

Dans le code, la « croix » n’est pas mise s’il ne reconnais pas le motif (ds les dernières versions).

super, merci.
Je teste et je te dis ça