]>
Raphaël G. Git Repositories - cdn/blob - public/ausweis.php
7 date_default_timezone_set ( 'Europe/Paris' );
9 //XXX: Append FPDF paths and qrlib to include_path
10 ini_set ( 'include_path' , ini_get ( 'include_path' ) . PATH_SEPARATOR
. '/usr/share/php/fpdf' . PATH_SEPARATOR
. '/usr/share/php/fpdf/font' . PATH_SEPARATOR
. '../vendor/phpqrcode' );
13 define ( 'FPDF_FONTPATH' , '../vendor/font' );
23 $reasons = [ 'travail' , 'achats' , 'sante' , 'famille' , 'handicap' , 'sport_animaux' , 'convocation' , 'missions' , 'enfants' ];
27 empty ( $_REQUEST [ 'type' ]) ||
28 empty ( $_REQUEST [ 'lastname' ]) ||
29 empty ( $_REQUEST [ 'firstname' ]) ||
30 empty ( $_REQUEST [ 'birthdate' ]) ||
31 empty ( $_REQUEST [ 'birthplace' ]) ||
32 empty ( $_REQUEST [ 'address' ]) ||
33 empty ( $_REQUEST [ 'function' ]) ||
34 empty ( $_REQUEST [ 'location' ]) ||
35 empty ( $_REQUEST [ 'date' ]) ||
36 empty ( $_REQUEST [ 'time' ])
39 //XXX: round it to previous 5 minute
40 $time = floor ( strtotime ( 'now' )/ 300 )* 300 ;
46 if ( empty ( $_REQUEST [ 'type' ])) {
47 if (! empty ( $_SERVER [ 'SCRIPT_URL' ])) {
48 if ( $_SERVER [ 'SCRIPT_URL' ] == '/bnp' ) {
50 } elseif ( $_SERVER [ 'SCRIPT_URL' ] == '/poltrone' ) {
51 $selected = 'poltrone' ;
52 } elseif ( $_SERVER [ 'SCRIPT_URL' ] == '/convoc' ) {
53 $selected = 'convocation' ;
54 } elseif ( $_SERVER [ 'SCRIPT_URL' ] == '/achat' ) {
56 } elseif ( $_SERVER [ 'SCRIPT_URL' ] == '/sport' ) {
57 $selected = 'sport_animaux' ;
58 } elseif ( $_SERVER [ 'SCRIPT_URL' ] == '/travail' ) {
59 $selected = 'travail' ;
63 if ( $_REQUEST [ 'type' ] == 'bnp' || $_REQUEST [ 'type' ] == 'poltrone' || in_array ( $_REQUEST [ 'type' ], $reasons )) {
64 $selected = $_REQUEST [ 'type' ];
70 < title
> Ausweis generator
</ title
>
84 justify
- content
: space
- between
;
92 border
: .1 rem solid black
;
102 input
[ type
= "submit" ] {
105 input
[ type
= "submit" ]: first
- child
,
106 input
[ type
= "submit" ]: last
- child
{
113 < h1
> Generateur d
'attestation</h1>
114 <p>Tous les champs sont obligatoires, format de date jj/mm/aaaa, format horaire hh:mm</p>
115 <form action="<?php echo htmlspecialchars( $_SERVER [' REQUEST_URI
']); ?>" method="post">
118 <label for="type">Type</label>
120 <optgroup label="Professional">
121 <option value="bnp"<?php echo empty( $selected )|| $selected ==' bnp
'?' selected
= "selected" ':' '; ?>>Bnp</option>
122 <option value="poltrone"<?php echo !empty( $selected )&& $selected ==' poltrone
'?' selected
= "selected" ':' '; ?>>Poltrone</option>
124 <optgroup label="Personnal">
125 <option value="travail"<?php echo !empty( $selected )&& $selected ==' travail
'?' selected
= "selected" ':' '; ?>>Travail</option>
126 <option value="achats"<?php echo !empty( $selected )&& $selected ==' achats
'?' selected
= "selected" ':' '; ?>>Achat</option>
127 <option value="sante"<?php echo !empty( $selected )&& $selected ==' sante
'?' selected
= "selected" ':' '; ?>>Sante</option>
128 <option value="famille"<?php echo !empty( $selected )&& $selected ==' famille
'?' selected
= "selected" ':' '; ?>>Famille</option>
129 <option value="handicap"<?php echo !empty( $selected )&& $selected ==' handicap
'?' selected
= "selected" ':' '; ?>>Handicap</option>
130 <option value="sport_animaux"<?php echo !empty( $selected )&& $selected ==' sport_animaux
'?' selected
= "selected" ':' '; ?>>Sport</option>
131 <option value="convocation"<?php echo !empty( $selected )&& $selected ==' convocation
'?' selected
= "selected" ':' '; ?>>Convocation</option>
132 <option value="missions"<?php echo !empty( $selected )&& $selected ==' missions
'?' selected
= "selected" ':' '; ?>>Mission</option>
133 <option value="enfants"<?php echo !empty( $selected )&& $selected ==' enfants
'?' selected
= "selected" ':' '; ?>>Enfant</option>
140 <label for="firstname">Prénom</label>
141 <input type="text" name="firstname" value="<?php echo htmlspecialchars( $_REQUEST [' firstname
']??' '); ?>" />
149 <label for="lastname">Nom</label>
150 <input type="text" name="lastname" value="<?php echo htmlspecialchars( $_REQUEST [' lastname
']??' '); ?>" />
158 <label for="birthdate">Date de naissance</label>
159 <input class="date" type="text" name="birthdate" value="<?php echo htmlspecialchars( $_REQUEST [' birthdate
']??' '); ?>" />
162 <span>01/01/1970</span>
167 <label for="birthplace">Lieu de naissance</label>
168 <input type="text" name="birthplace" value="<?php echo htmlspecialchars( $_REQUEST [' birthplace
']??' '); ?>" />
176 <label for="address">Adresse</label>
177 <input type="text" name="address" value="<?php echo htmlspecialchars( $_REQUEST [' address
']??' '); ?>" />
180 <span>30 rue des boulets 75011 Paris</span>
185 <label for="function">Fonction</label>
186 <input type="text" name="function" value="<?php echo htmlspecialchars( $_REQUEST [' function ']??' Technicien ( e
) d\'
astreint ( e
) '); ?>" />
189 <span>Technicien(e) d' astreint ( e
)</ span
>
194 < label
for = "location" > Fait à
</ label
>
195 < input type
= "text" name
= "location" value
= "<?php echo htmlspecialchars( $_REQUEST ['location']??'Paris'); ?>" />
203 < label
for = "date" > Sortie
</ label
>
204 < input
class = "date" type
= "text" name
= "date" value
= "<?php echo htmlspecialchars( $_REQUEST ['date']??date('d/m/Y', $time )); ?>" />
205 < label
for = "time" > a
</ label
>
206 < input
class = "time" type
= "text" name
= "time" value
= "<?php echo htmlspecialchars( $_REQUEST ['time']??date('H:i', $time )); ?>" />
211 < input type
= "submit" value
= "Afficher" />
212 < input type
= "submit" name
= "download" value
= "Télécharger" />
213 < input type
= "submit" name
= "download" value
= "iBug" />
223 if (! empty ( $_SERVER [ 'REQUEST_METHOD' ]) && $_SERVER [ 'REQUEST_METHOD' ] != 'GET' && ! empty ( $_REQUEST [ 'download' ]) && $_REQUEST [ 'download' ] == 'iBug' ) {
224 header ( 'Location: ' . $_SERVER [ 'REQUEST_URI' ]. '?' . http_build_query ( $_REQUEST ));
235 static function fixDate ( $date ) {
236 $return = preg_replace (
238 '%^([0-9] {2} )/([0-9] {2} )/([0-9] {4} )$%' ,
239 '%^([0-9] {2} )/([0-9] {2} )/([0-9] {2} )$%' ,
240 '%^([0-9] {2} )([0-9] {2} )([0-9] {4} )$%' ,
241 '%^([0-9] {2} )([0-9] {2} )([0-9] {2} )$%'
251 if (! preg_match ( '/^[0-9] {4} -[0-9] {2} -[0-9] {2} $/' , $return )) {
252 die ( 'Unable to fix date "' . $date . '" please use dd/mm/aaaa format' );
260 static function fixTime ( $time ) {
261 $return = preg_replace (
263 '%^([0-9] {2} ):([0-9] {2} )%' ,
264 '%^([0-9] {2} )h([0-9] {2} )%' ,
265 '%^([0-9] {2} )([0-9] {2} )%'
274 if (! preg_match ( '/^[0-9] {2} :[0-9] {2} $/' , $return )) {
275 die ( 'Unable to fix time "' . $time . '" please use HH:ii format' );
281 * Add ausweis attestation
283 static function addAttestation ( $p , $reason , $firstname , $lastname , $birthdate , $birthplace , $address , $location , $date , $time ) {
299 //Disable auto page break
300 $p- > SetAutoPageBreak ( false , 0 );
303 $p- > SetMargins ( 23.8 , 0 );
309 $p- > setFont ( 'LiberationSerif' , 'B' , 17 );
312 $p- > Cell ( 0 , 20 , utf8_decode ( 'ATTESTATION DE DÉPLACEMENT DÉROGATOIRE' ), 0 , 0 , 'C' );
318 $p- > setFont ( 'MicrosoftSansSerif' , '' , 10.5 );
321 $p- > Cell ( 0 , 4 , utf8_decode ( 'En application du décret n°2020-1310 du 29 octobre 2020 prescrivant les mesures générales' ), 0 , 1 , 'C' );
322 $p- > Cell ( 0 , 4 , utf8_decode ( 'nécessaires pour faire face à l \' épidémie de Covid19 dans le cadre de l \' état d \' urgence sanitaire' ), 0 , 1 , 'C' );
328 $p- > Cell ( 0 , 4 , utf8_decode ( 'Je soussigné(e),' ), 0 , 1 , 'L' );
334 $posName = $p- > getY ();
337 $p- > Cell ( 0 , 8 , utf8_decode ( 'Mme/M. :' ), 0 , 1 , 'L' );
340 $posBirth = $p- > getY ();
343 $p- > Cell ( 75 , 8 , utf8_decode ( 'Né(e) le :' ), 0 , 0 , 'L' );
344 $p- > Cell ( 0 , 8 , utf8_decode ( 'à :' ), 0 , 1 , 'L' );
347 $posAddress = $p- > getY ();
350 $p- > Cell ( 0 , 8 , utf8_decode ( 'Demeurant :' ), 0 , 1 , 'L' );
356 $p- > Cell ( 0 , 4.2 , utf8_decode ( 'certifie que mon déplacement est lié au motif suivant (cocher la case) autorisé par le décret' ), 0 , 1 , 'L' );
357 $p- > Cell ( 0 , 4.2 , utf8_decode ( 'n°2020-1310 du 29 octobre 2020 prescrivant les mesures générales nécessaires pour faire face à' ), 0 , 1 , 'L' );
358 $p- > Cell ( 0 , 4.2 , utf8_decode ( 'l \' épidémie de Covid19 dans le cadre de l \' état d \' urgence sanitaire¹ :' ), 0 , 1 , 'L' );
370 $p- > SetLeftMargin ( 37.5 , 0 );
373 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Déplacements entre le domicile et le lieu d \' exercice de l \' activité professionnelle ou un établissement d \' enseignement ou de formation, déplacements professionnels ne pouvant être différés², déplacements pour un concours ou un examen' ), 0 , 'J' );
375 //Save travail position
376 $pos [ 'travail' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
385 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Déplacements pour effectuer des achats de fournitures nécessaires à l \' activité professionnelle, des achats de première nécessité³ dans des établissements dont les activités demeurent autorisées, le retrait de commande et les livraisons à domicile' ), 0 , 'J' );
387 //Save achats position
388 $pos [ 'achats' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
397 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Consultations, examens et soins ne pouvant être ni assurés à distance et l \' achat de médicaments' ), 0 , 'J' );
399 //Save sante position
400 $pos [ 'sante' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
409 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Déplacements pour motif familial impérieux, pour l \' assistance aux personnes vulnérables et précaires ou la garde d \' enfants' ), 0 , 'J' );
411 //Save famille position
412 $pos [ 'famille' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
421 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Déplacement des personnes en situation de handicap et leur accompagnant' ), 0 , 'J' );
423 //Save handicap position
424 $pos [ 'handicap' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
433 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Déplacements brefs, dans la limite d \' une heure quotidienne et dans un rayon maximal d \' un kilomètre autour du domicile, liés soit à l \' activité physique individuelle des personnes, à l \' exclusion de toute pratique sportive collective et de toute proximité avec d \' autres personnes, soit à la promenade avec les seules personnes regroupées dans un même domicile, soit aux besoins des animaux de compagnie' ), 0 , 'J' );
435 //Save sport_animaux position
436 $pos [ 'sport_animaux' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
445 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Convocation judiciaire ou administrative et pour se rendre dans un service public' ), 0 , 'J' );
447 //Save convocation position
448 $pos [ 'convocation' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
457 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Participation à des missions d \' intérêt général sur demande de l \' autorité administrative' ), 0 , 'J' );
459 //Save missions position
460 $pos [ 'missions' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
469 $p- > MultiCell ( 148 , 4.25 , utf8_decode ( 'Déplacement pour chercher les enfants à l \' école et à l \' occasion de leurs activités périscolaires' ), 0 , 'J' );
471 //Save enfants position
472 $pos [ 'enfants' ] = $y +
( $p- > getY () - $y ) / 2 - $boxSize / 2 ;
475 $p- > SetLineWidth ( 0.5 );
478 foreach ( $pos as $k => $v ) {
479 $p- > Rect ( 27.75 , $v , 5.85 , 5.85 );
483 $p- > SetLeftMargin ( 23.9 , 0 );
486 $p- > SetY ( '-64.9' , true );
489 $posLocation = $p- > getY ();
491 //Add creation location
492 $p- > Cell ( 0 , 4 , utf8_decode ( 'Fait à :' ), 0 , 1 , 'L' );
495 $p- > SetY ( '-56.9' , true );
498 $posDate = $p- > getY ();
501 $p- > Cell ( 60.1 , 4 , utf8_decode ( 'Le :' ), 0 , 0 , 'L' );
502 $p- > Cell ( 0 , 4 , utf8_decode ( 'à :' ), 0 , 1 , 'L' );
505 $p- > SetY ( '-51' , true );
508 $p- > setFont ( 'MicrosoftSansSerif' , '' , 10 );
510 //Add creation mentions
511 $p- > Cell ( 0 , 4 , utf8_decode ( '(Date et heure de début de sortie à mentionner obligatoirement)' ), 0 , 1 , 'L' );
514 $p- > setFont ( 'MicrosoftSansSerif' , '' , 10.5 );
517 $p- > SetY ( '-45.3' , true );
520 $p- > Cell ( 12 , 4 , utf8_decode ( 'Signature :' ), 0 , 0 , 'L' );
524 $p- > SetY ( '-33.25' , true );
527 $p- > setFont ( 'MicrosoftSansSerif' , '' , 8 );
530 $p- > Cell ( 12.5 , 3.5 , utf8_decode ( '¹' ), 0 , 0 , 'C' );
531 $p- > MultiCell ( 0 , 3.5 , utf8_decode ( 'Les personnes souhaitant bénéficier de l \' une de ces exceptions doivent se munir s \' il y a lieu, lors de leurs' . " \n " . 'déplacements hors de leur domicile, d \' un document leur permettant de justifier que le déplacement considéré entre' . " \n " . 'dans le champ de l \' une de ces exceptions' ), 0 , 'L' );
533 $p- > Cell ( 12.5 , 3.5 , utf8_decode ( '²' ), 0 , 0 , 'C' );
534 $p- > MultiCell ( 0 , 3.5 , utf8_decode ( 'A utiliser par les travailleurs non-salariés, lorsqu \' ils ne peuvent disposer d \' un justificatif de déplacement établi par leur' . " \n " . 'employeur' ), 0 , 'L' );
536 $p- > Cell ( 12.5 , 3.5 , utf8_decode ( '³' ), 0 , 0 , 'C' );
537 $p- > MultiCell ( 0 , 3.5 , utf8_decode ( 'Y compris les acquisitions à titre gratuit (distribution de denrées alimentaires...) et les déplacements liés à la' . " \n " . 'perception de prestations sociales et au retrait d \' espèces' ), 0 , 'L' );
541 $p- > setFont ( 'Helvetica' , '' , 11 );
544 $p- > setXY ( 41 , $posName );
547 $p- > Cell ( 0 , 8 , utf8_decode ( $firstname . ' ' . $lastname ), 0 , 0 , 'L' );
550 $p- > setXY ( 41 , $posBirth );
553 $birthdate = self
:: fixDate ( $birthdate );
556 $p- > Cell ( 63 , 8 , utf8_decode ( $birthdate ), 0 , 0 , 'L' );
557 $p- > Cell ( 0 , 8 , utf8_decode ( $birthplace ), 0 , 0 , 'L' );
560 $p- > setXY ( 46 , $posAddress );
563 $p- > Cell ( 0 , 7 , utf8_decode ( $address ), 0 , 0 , 'L' );
566 $p- > setXY ( 27.75 , $pos [ $reason ]);
569 $p- > setXY ( 36 , $posLocation );
572 $p- > Cell ( 0 , 4 , utf8_decode ( $location ), 0 , 0 , 'L' );
575 $p- > setXY ( 31 , $posDate );
578 $date = self
:: fixDate ( $date );
581 $time = self
:: fixTime ( $time );
584 $p- > Cell ( 58 , 4 , utf8_decode ( $date ), 0 , 0 , 'L' );
585 $p- > Cell ( 0 , 4 , utf8_decode ( $time ), 0 , 0 , 'L' );
588 $p- > setXY ( 27.75 , $pos [ $reason ]);
591 $p- > setFont ( 'Helvetica' , '' , 16 );
594 $p- > Cell ( 0 , 6.5 , 'X' , 0 , 0 , 'L' );
597 $delay = rand ( 30 , 60 );
601 'Cree le: ' . date ( 'd/m/Y \a H:i' , strtotime ( '-' . $delay . ' minutes' , strtotime ( $date . ' ' . $time ))),
603 'Prenom: ' . $firstname ,
604 'Naissance: ' . date ( 'd/m/Y' , strtotime ( $birthdate )). ' a ' . $birthplace ,
605 'Adresse: ' . $address ,
606 'Sortie: ' . date ( 'd/m/Y \a H:i' , strtotime ( $date . ' ' . $time )),
611 $qrText = implode ( "; \n " , $qrData );
617 $qrPath = stream_get_meta_data ( $qrFile )[ 'uri' ];
621 QRcode
:: png ( $qrText , $qrPath , QR_ECLEVEL_M
, 6 , 4 , false );
622 #$qrPng = ob_get_contents();
626 $p- > Image ( $qrPath , 146 , 221 , 40 , 40 , 'PNG' );
629 //XXX: add the attestation de déplacement dérogatoire page
633 $p- > Image ( $qrPath , 12.5 , 12.5 , 117 , 0 , 'PNG' );
638 * Add ausweis quittance
640 static function addQuittance ( $p , $firstname , $lastname , $address , $titleowner , $firstowner , $lastowner , $addressowner , $sign , $loyer , $charge ) {
651 $p- > SetMargins ( 30 , 0 );
653 //Disable auto page break
654 $p- > SetAutoPageBreak ( false , 0 );
657 $p- > SetY ( $lineHeight );
660 $p- > setFont ( 'Helvetica' , 'B' , 18 );
663 $p- > Cell ( 0 , 20 , utf8_decode ( 'QUITTANCE DE LOYER' ), 0 , 0 , 'C' );
666 $p- > Ln ( $titleHeight );
669 $p- > setFont ( 'Times' , '' , 9 );
672 $p- > Cell ( 0 , 5 , utf8_decode ( 'Quittance de loyer pour la période du ' . date ( '01/m/Y' , strtotime ( '-1 month' )). ' au ' . date ( 'd/m/Y' , strtotime ( '-1 day' , strtotime ( 'first day of now' )))), 0 , 0 , 'C' );
679 $p- > setFont ( 'Times' , 'BU' , 10 );
682 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Bailleur :' ), 0 , 0 , 'L' );
683 $p- > Cell ( 0 , 5 , utf8_decode ( 'Colocataire :' ), 0 , 0 , 'L' );
689 $p- > setFont ( 'Times' , '' , 9 );
692 $p- > Cell ( $labelLength , 5 , utf8_decode ( $titleowner . ' ' . $firstowner . ' ' . $lastowner ), 0 , 0 , 'L' );
693 $p- > Cell ( 0 , 5 , utf8_decode ( $firstname . ' ' . $lastname ), 0 , 0 , 'L' );
695 $p- > Cell ( $labelLength , 5 , utf8_decode ( $addressowner ), 0 , 0 , 'L' );
696 $p- > Cell ( 0 , 5 , utf8_decode ( $address ), 0 , 0 , 'L' );
699 $p- > Ln ( $lineHeight * 1.5 );
702 $p- > Cell ( 0 , 5 , utf8_decode ( 'Angers le ' . date ( '07/m/Y' , strtotime ( '-1 month' ))), 0 , 0 , 'R' );
708 $p- > setFont ( 'Times' , 'BU' , 10 );
711 $p- > Cell ( 0 , 5 , utf8_decode ( 'Adresse de location :' ), 0 , 0 , 'L' );
715 $p- > setFont ( 'Times' , 'B' , 9 );
718 $p- > Cell ( 0 , 5 , utf8_decode ( $address ), 0 , 0 , 'L' );
724 $p- > setFont ( 'Times' , '' , 10 );
727 $total = $loyer +
$charge ;
730 $p- > MultiCell ( 0 , 5 , utf8_decode ( 'Je soussigné ' . $titleowner . ' ' . $firstowner . ' ' . $lastowner . ', usufruitier du logement situé au ' . $address . ', déclare avoir reçu de ' . $firstname . ' ' . $lastname . ', colocataire de ce logement, la somme de ' . str_replace ( '.' , ',' , sprintf ( '%.2f' , $total )). ' euros correspondant au loyer et aux charges dus pour la période allant du ' . date ( '01/m/Y' , strtotime ( '-1 month' )). ' au ' . date ( 'd/m/Y' , strtotime ( '-1 day' , strtotime ( 'first day of now' ))). '. Cette somme correspond aux montants suivants :' ), 0 , 'J' );
736 $p- > Cell ( 0 , 5 , utf8_decode ( 'Loyer hors charge :' ), 0 , 0 , 'L' );
740 $p- > setFont ( 'Times' , '' , 9 );
742 $p- > Cell ( 0 , 5 , utf8_decode ( str_replace ( '.' , ',' , sprintf ( '%.2f' , $loyer )). ' euros' ), 0 , 0 , 'L' );
748 $p- > setFont ( 'Times' , '' , 10 );
751 $p- > Cell ( 0 , 5 , utf8_decode ( 'Provision pour charges :' ), 0 , 0 , 'L' );
755 $p- > setFont ( 'Times' , '' , 9 );
757 $p- > Cell ( 0 , 5 , utf8_decode ( str_replace ( '.' , ',' , sprintf ( '%.2f' , $charge )). ' euros' ), 0 , 0 , 'L' );
763 $p- > setFont ( 'Times' , 'BU' , 10 );
766 $p- > Cell ( 0 , 5 , utf8_decode ( 'Somme totale reçue :' ), 0 , 0 , 'L' );
770 $p- > setFont ( 'Times' , 'B' , 9 );
772 $p- > Cell ( 0 , 5 , utf8_decode ( str_replace ( '.' , ',' , sprintf ( '%.2f' , $total )). ' euros' ), 0 , 0 , 'L' );
778 $p- > setFont ( 'Times' , '' , 10 );
781 $p- > Cell ( 0 , 5 , utf8_decode ( 'Date du paiement :' ), 0 , 0 , 'L' );
785 $p- > setFont ( 'Times' , '' , 9 );
786 $p- > Cell ( 0 , 5 , utf8_decode ( date ( '05/m/Y' , strtotime ( '-1 month' )). ' par virement' ), 0 , 0 , 'L' );
795 $p- > setFont ( 'Times' , '' , 10 );
797 //Add creation location
798 $p- > Cell ( 0 , 5 , utf8_decode ( 'Fait à Angers le ' . date ( '07/m/Y' , strtotime ( '-1 month' ))), 0 , 0 , 'L' );
802 $p- > Cell ( 12 , 5 , utf8_decode ( 'Signature :' ), 0 , 0 , 'L' );
806 $p- > Image ( $sign , 45 , 245 , 30 , 0 , 'PNG' );
809 $p- > setFont ( 'Times' , '' , 10 );
815 $p- > MultiCell ( 0 , 5 , utf8_decode ( 'La présente quittance est valable sous réserve d \' encaissement des sommes indiquées et de tous droits ou instances en cours. Elle n \' est libératoire que pour la période indiquée et n \' implique pas présomption de paiement des échéances antérieures qui pourraient rester dues.' ), 0 , 'J' );
819 * Add ausweis employer
821 static function addEmployer ( $p , $employerTitle , $employerFunction , $employerCompany , $employerCity , $logo , $stamp , $sign , $workplaces , $firstname , $lastname , $birthdate , $birthplace , $address , $function ) {
827 'Transport en commun' ,
835 $labelLength = 51.75 ;
844 $p- > SetMargins ( 25 , 0 );
846 //Disable auto page break
847 $p- > SetAutoPageBreak ( false , 0 );
850 #$p->Ln($titleHeight);
851 $p- > SetY ( $titleHeight );
854 $p- > setFont ( 'TrebuchetMS' , 'B' , 16 );
857 $p- > Cell ( 0 , 20 , utf8_decode ( 'JUSTIFICATIF DE DÉPLACEMENT PROFESSIONNEL' ), 0 , 0 , 'C' );
863 $p- > setFont ( 'Times' , '' , 10 );
866 $p- > Cell ( 0 , 5 , utf8_decode ( 'En application du décret n°2020-1310 du 29 octobre 2020 prescrivant les mesures générales nécessaires pour' ), 0 , 1 , 'C' );
867 $p- > Cell ( 0 , 5 , utf8_decode ( 'faire face à l \' épidémie de Covid19 dans le cadre de l \' état d \' urgence sanitaire' ), 0 , 1 , 'C' );
873 $p- > Cell ( 0 , 5 , utf8_decode ( 'Je soussigné(e),' ), 0 , 0 , 'L' );
879 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Nom et prénom de l \' employeur :' ), 0 , 0 , 'L' );
880 $p- > Cell ( 0 , 5 , utf8_decode ( $employerTitle ), 0 , 0 , 'L' );
886 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Fonctions :' ), 0 , 0 , 'L' );
887 $p- > Cell ( 0 , 5 , utf8_decode ( $employerFunction ), 0 , 0 , 'L' );
893 $p- > MultiCell ( 0 , 5 , utf8_decode ( 'Certifie que les déplacements de la personne ci-après, entre son domicile et le ou les lieux d \' exercice de son activité professionnelle ou à l \' occasion de l \' exercice de ses fonctions, ne peuvent être différés ou sont indispensables à l \' exercice d \' activités ne pouvant être organisées sous forme de télétravail :' ), 0 , 'J' );
896 $p- > Ln ( $lineHeight-5 );
899 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Nom :' ), 0 , 0 , 'L' );
900 $p- > Cell ( 0 , 5 , utf8_decode ( $lastname ), 0 , 0 , 'L' );
902 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Prénom :' ), 0 , 0 , 'L' );
903 $p- > Cell ( 0 , 5 , utf8_decode ( $firstname ), 0 , 0 , 'L' );
905 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Date de naissance :' ), 0 , 0 , 'L' );
906 $p- > Cell ( 0 , 5 , utf8_decode ( $birthdate ), 0 , 0 , 'L' );
908 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Lieu de naissance :' ), 0 , 0 , 'L' );
909 $p- > Cell ( 0 , 5 , utf8_decode ( $birthplace ), 0 , 0 , 'L' );
911 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Adresse du domicile :' ), 0 , 0 , 'L' );
912 $p- > Cell ( 0 , 5 , utf8_decode ( $address ), 0 , 0 , 'L' );
914 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Nature de l \' activité professionnelle :' ), 0 , 0 , 'L' );
915 $p- > Cell ( 0 , 5 , utf8_decode ( $function ), 0 , 0 , 'L' );
919 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Moyens de déplacement :' ), 0 , 0 , 'L' );
920 $p- > Cell ( 0 , 5 , /*' '.*/ implode ( ', ' , $conveyances ), 0 , 0 , 'L' );
926 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Durée de validité :' ), 0 , 0 , 'L' );
927 $p- > Cell ( 0 , 5 , utf8_decode ( '6 mois' ), 0 , 0 , 'L' );
933 $p- > Cell ( 0 , 5 , utf8_decode ( 'Lieux d \' exercice de l \' activité professionnelle :' ), 0 , 0 , 'L' );
934 foreach ( $workplaces as $siret => $location ) {
936 #$p->cell($labelLength/1.5, 5, ' '.$siret.' :', 0, 0, 'l');
937 $p- > cell ( 0 , 5 , ' ' . utf8_decode ( $location ), 0 , 0 , 'l' );
941 #$p->Ln($lineHeight*2);
944 $p- > SetY ( '-65' , true );
947 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Nom et cachet de l \' employeur :' ), 0 , 0 , 'L' );
948 $p- > Cell ( 0 , 5 , utf8_decode ( $employerCompany ), 0 , 0 , 'L' );
954 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Fait à :' ), 0 , 0 , 'L' );
955 $p- > Cell ( 0 , 5 , utf8_decode ( $employerCity ), 0 , 0 , 'L' );
961 $p- > Cell ( $labelLength , 5 , utf8_decode ( 'Le :' ), 0 , 0 , 'L' );
962 $p- > Cell ( 0 , 5 , utf8_decode ( '02 novembre 2020' ), 0 , 0 , 'L' );
968 $p- > SetY ( '-40' , true );
971 $p- > setFont ( 'MicrosoftSansSerif' , '' , 7 );
974 $p- > Cell ( 0 , 4 , utf8_decode ( 'Ce document, établi par l \' employeur, est suffisant pour justifier les déplacements professionnels d \' un salarié, qu \' il s \' agisse :' ), 0 , 0 , 'L' );
975 $p- > Ln ( $lineHeight / 2 );
976 $p- > Cell ( 0 , 4 , utf8_decode ( '- du trajet habituel entre le domicile et le lieu de travail du salarié ou des déplacements entre les différents lieux de travail lorsque la nature' ), 0 , 0 , 'L' );
977 $p- > Ln ( $lineHeight / 2 );
978 $p- > Cell ( 0 , 4 , utf8_decode ( 'de ses fonctions l \' exige' ), 0 , 0 , 'L' );
979 $p- > Ln ( $lineHeight / 2 );
980 $p- > Cell ( 0 , 4 , utf8_decode ( '- des déplacements de nature professionnelle qui ne peuvent pas être différés, à la demande de l \' employeur.' ), 0 , 0 , 'L' );
981 $p- > Ln ( $lineHeight / 2 );
982 $p- > Cell ( 0 , 4 , utf8_decode ( 'Il n \' est donc pas nécessaire que le salarié se munisse, en plus de ce justificatif, de l \' attestation de déplacement dérogatoire.' ), 0 , 0 , 'L' );
983 $p- > Ln ( $lineHeight / 2 );
984 $p- > Cell ( 0 , 4 , utf8_decode ( 'Les travailleurs non-salariés, pour lesquels ce justificatif ne peut être établi, doivent en revanche se munir de l \' attestation de déplacement' ), 0 , 0 , 'L' );
985 $p- > Ln ( $lineHeight / 2 );
986 $p- > Cell ( 0 , 4 , utf8_decode ( 'dérogatoire en cochant le premier motif de déplacement' ), 0 , 0 , 'L' );
989 $p- > Image ( $logo , 10 , 8 , 40 , 0 , 'PNG' );
990 $p- > Image ( $stamp , 130 , 210 , 60 , 0 , 'PNG' );
991 $p- > Image ( $sign , 110 , 215 , 25 , 0 , 'PNG' );
1003 if ( $_REQUEST [ 'type' ] == 'bnp' ) {
1005 $data [ 'employer' ] = [
1006 'title' => 'Jean-Laurent Bonnafé' ,
1007 'function' => 'Administrateur Directeur Général de BNP Paribas' ,
1008 'company' => 'BNP PARIBAS' ,
1009 'address' => '16 Boulevard des Italiens 75009 Paris' ,
1011 'vat' => 'FR76662042449'
1015 $data [ 'workplaces' ] = [
1016 //TODO: add others...
1017 66204244932405 => '37 place du Marché St Honoré 75001 Paris' ,
1018 66204244932355 => '36b avenue de l \' Opéra 75002 Paris' ,
1019 66204244920376 => '67 rue de Bretagne 75003 Paris' ,
1020 66204244919998 => '48 rue des Archives 75004 Paris' ,
1021 66204244915558 => '50 boulevard de Saint Marcel 75005 Paris' ,
1022 66204244920368 => '1 rue de Medicis 75006 Paris' ,
1023 66204244941596 => '64 rue de Sèvres 75007 Paris' ,
1024 66204244943238 => '10 boulevard Malesherbes 75008 Paris' ,
1025 66204244900014 => '16 boulevard des Italiens 75009 Paris' ,
1026 66204244932454 => '150 rue du fbg Poissonniere 75010 Paris' ,
1027 66204244941539 => '41 rue Basfroi 75011 Paris' ,
1028 66204244943733 => '47 boulevard Diderot 75012 Paris' ,
1029 66204244920897 => '109 rue de Tolbiac 75013 Paris' ,
1030 66204244941265 => '160 boulevard Macdonald 75019 Paris' ,
1031 66204244925110 => '4 place Saint Fargeau 75020 Paris' ,
1032 00000000000000 => 'Île-de-France' ,
1033 99999999999999 => 'France' ,
1037 $data [ 'sign' ] = '../picture/ausweis/bnp/sign.png' ;
1038 $data [ 'stamp' ] = '../picture/ausweis/bnp/stamp.png' ;
1039 $data [ 'logo' ] = '../picture/ausweis/bnp/logo.png' ;
1042 $data [ 'reason' ] = 'travail' ;
1046 } elseif ( $_REQUEST [ 'type' ] == 'poltrone' ) {
1048 $data [ 'employer' ] = [
1049 'title' => 'M Renzo Ricci' ,
1050 'function' => 'Président' ,
1051 'company' => 'POLTRONESOFA \' FRANCE' ,
1052 'address' => '6 Rue Jean Jaures 92800 Puteaux' ,
1053 'city' => 'Puteaux' ,
1054 'vat' => 'FR88422036905'
1058 $data [ 'workplaces' ] = [
1059 42203690500020 => 'Place du Marché St Honoré 75001 Paris' ,
1060 42203690500558 => '72 Boulevard de Sébastopol 75003 Paris' ,
1061 42203690500756 => 'Avenue de Fontainebleau 94320 Thiais' ,
1062 //42203690500749 => 'Cc Opensky Lot A03 78200 Buchelay',
1063 //42203690500681 => 'L\'oseraie 95520 Osny',
1064 42203690500533 => '1 rue de la Mare au Chanvre 91700 Sainte-Geneviève-des-Bois' ,
1065 42203690500483 => '23 rue Alexandre Chatrian 77410 Claye-Souilly' ,
1066 42203690500434 => 'Route Nationale 10 78210 Coignières' ,
1067 42203690500186 => 'Avenue Henri Barbusse 78340 Les Clayes-sous-Bois' ,
1068 42203690500152 => 'La Saussaie Beauclair 93110 Rosny-sous-Bois' ,
1069 42203690500095 => '234 Boulevard du Havre 95220 Pierrelaye'
1073 $data [ 'sign' ] = '../picture/ausweis/poltrone/sign.png' ;
1074 $data [ 'stamp' ] = '../picture/ausweis/poltrone/stamp.png' ;
1075 $data [ 'logo' ] = '../picture/ausweis/poltrone/logo.png' ;
1078 $data [ 'reason' ] = 'travail' ;
1082 } elseif ( $_REQUEST [ 'type' ] == 'sport_animaux' ) {
1084 $data [ 'reason' ] = 'sport_animaux' ;
1085 $data [ 'sign' ] = '../picture/ausweis/bnp/sign.png' ;
1089 } elseif ( $_REQUEST [ 'type' ] == 'achats' ) {
1091 $data [ 'reason' ] = 'achats' ;
1092 $data [ 'sign' ] = '../picture/ausweis/bnp/sign.png' ;
1100 * - sport_animaux: 358,
1101 * - convocation: 295,
1105 } elseif ( in_array ( $_REQUEST [ 'type' ], $reasons )) {
1107 $data [ 'reason' ] = $_REQUEST [ 'type' ];
1116 //XXX: was Ausweis_ now we use Travail_firstname_lastname.pdf
1117 $fileName = ucfirst ( $data [ 'reason' ]). '_' . preg_replace ([ '/[^a-zA-Z0-9]/' , '/__+/' ], [ '_' , '_' ], $_REQUEST [ 'firstname' ]. '_' . $_REQUEST [ 'lastname' ]). '_' . date ( 'Ymd_Hi' , strtotime ( Ausweis
:: fixDate ( $_REQUEST [ 'date' ]). ' ' . Ausweis
:: fixTime ( $_REQUEST [ 'time' ]))). '.pdf' ;
1120 $p = new FPDF ( 'P' , 'mm' , 'A4' );
1123 #$p->AddFont('Marianne-Bold', '', 'marianne-bold.php');
1124 #$p->AddFont('Marianne-Bold', 'B', 'marianne-bold.php');
1125 #$p->AddFont('Marianne-Bold', 'BI', 'marianne-bold.php');
1126 #$p->AddFont('Marianne-Bold', 'I', 'marianne-bold.php');
1128 //Add mariane regular
1129 #$p->AddFont('Marianne-Regular', '', 'marianne-regular.php');
1130 #$p->AddFont('Marianne-Regular', 'B', 'marianne-regular.php');
1131 #$p->AddFont('Marianne-Regular', 'BI', 'marianne-regular.php');
1132 #$p->AddFont('Marianne-Regular', 'I', 'marianne-regular.php');
1135 $p- > AddFont ( 'TrebuchetMS' , '' , 'trebuc.php' );
1136 $p- > AddFont ( 'TrebuchetMS' , 'B' , 'trebucb.php' );
1137 $p- > AddFont ( 'TrebuchetMS' , 'BI' , 'trebucbi.php' );
1138 $p- > AddFont ( 'TrebuchetMS' , 'I' , 'trebuci.php' );
1140 //Add liberation serif
1141 $p- > AddFont ( 'LiberationSerif' , '' , 'liberationserif.php' );
1142 $p- > AddFont ( 'LiberationSerif' , 'B' , 'liberationserifb.php' );
1143 $p- > AddFont ( 'LiberationSerif' , 'BI' , 'liberationserifbi.php' );
1144 $p- > AddFont ( 'LiberationSerif' , 'I' , 'liberationserifi.php' );
1146 //Add microsoft sans serif
1147 $p- > AddFont ( 'MicrosoftSansSerif' , '' , 'micross.php' );
1148 $p- > AddFont ( 'MicrosoftSansSerif' , 'B' , 'micross.php' );
1149 $p- > AddFont ( 'MicrosoftSansSerif' , 'BI' , 'micross.php' );
1150 $p- > AddFont ( 'MicrosoftSansSerif' , 'I' , 'micross.php' );
1153 $p- > SetTitle ( 'Justificatif de déplacement professionnel' , true );
1154 $p- > SetCreator ( $_SERVER [ 'PHP_SELF' ], true );
1155 $p- > SetAuthor ( 'Französischer Kommandantur' , true );
1156 $p- > SetSubject ( 'Verkehrsausweis' , true );
1161 Ausweis
:: addAttestation (
1164 $_REQUEST [ 'firstname' ],
1165 $_REQUEST [ 'lastname' ],
1166 $_REQUEST [ 'birthdate' ],
1167 $_REQUEST [ 'birthplace' ],
1168 $_REQUEST [ 'address' ],
1169 $_REQUEST [ 'location' ],
1175 * Employer attestation type
1177 //XXX: add the justificatif de déplacement professionnel page
1178 if (! empty ( $data [ 'employer' ])) {
1180 * Add employer attestation
1182 Ausweis
:: addEmployer (
1184 $data [ 'employer' ][ 'title' ],
1185 $data [ 'employer' ][ 'function' ],
1186 $data [ 'employer' ][ 'company' ],
1187 $data [ 'employer' ][ 'city' ],
1191 $data [ 'workplaces' ],
1192 $_REQUEST [ 'firstname' ],
1193 $_REQUEST [ 'lastname' ],
1194 $_REQUEST [ 'birthdate' ],
1195 $_REQUEST [ 'birthplace' ],
1196 $_REQUEST [ 'address' ],
1197 $_REQUEST [ 'function' ]
1202 * Personnal sport and buy attestation type
1204 if ( $data [ 'reason' ] == 'sport_animaux' || $data [ 'reason' ] == 'achats' ) {
1206 * Add quittance attestation
1208 Ausweis
:: addQuittance (
1210 $_REQUEST [ 'firstname' ],
1211 $_REQUEST [ 'lastname' ],
1212 $_REQUEST [ 'address' ],
1216 '6 chemin Bas des Plaines 49000 Angers' ,
1217 '../picture/ausweis/bnp/sign.png' ,
1226 //Send common headers
1227 header ( 'Content-Type: application/pdf' );
1229 //Send download headers
1230 if (! empty ( $_REQUEST [ 'download' ])) {
1231 if ( $_REQUEST [ 'download' ] == 'iBug' ) {
1232 header ( 'Content-Type: application/octet-stream' );
1234 header ( 'Content-Disposition: attachment; filename="' . rawurlencode ( $fileName ). '"' );
1235 //Send display headers
1237 header ( 'Content-Disposition: inline; filename="' . rawurlencode ( $fileName ). '"' );
1240 //Send remaining headers
1241 header ( 'Cache-Control: private, max-age=0, must-revalidate' );
1242 header ( 'Pragma: public' );
1245 $output = $p- > Output ( 'S' );
1247 //Send content-length
1248 header ( 'Content-Length: ' . strlen ( $output ));