]>
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 ));