]> Raphaël G. Git Repositories - cdn/blob - public/ausweis.php
Split address in address, zipcode and city
[cdn] / public / ausweis.php
1 <?php
2 /**
3 * Ausweis generator
4 */
5
6 //Set default timezone
7 date_default_timezone_set('Europe/Paris');
8
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');
11
12 //XXX: Set font path
13 define('FPDF_FONTPATH', '../vendor/font');
14
15 //Load FPDF
16 require 'fpdf.php';
17
18 //Require qrcode
19 //XXX: need php-gd
20 require 'qrlib.php';
21
22 //Set reasons
23 $reasons = ['travail', 'achats', 'sante', 'famille', 'handicap', 'sport_animaux', 'convocation', 'missions', 'enfants'];
24
25 //Display form
26 if (
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['zipcode']) ||
34 empty($_REQUEST['city']) ||
35 empty($_REQUEST['function']) ||
36 empty($_REQUEST['location']) ||
37 empty($_REQUEST['date']) ||
38 empty($_REQUEST['time'])
39 ) {
40 //Set time
41 //XXX: round it to previous 5 minute
42 $time = floor(strtotime('now')/300)*300;
43
44 //Set selected
45 $selected = null;
46
47 //Set selected
48 if (empty($_REQUEST['type'])) {
49 if (!empty($_SERVER['SCRIPT_URL'])) {
50 if ($_SERVER['SCRIPT_URL'] == '/bnp') {
51 $selected = 'bnp';
52 } elseif ($_SERVER['SCRIPT_URL'] == '/poltrone') {
53 $selected = 'poltrone';
54 } elseif ($_SERVER['SCRIPT_URL'] == '/convoc') {
55 $selected = 'convocation';
56 } elseif ($_SERVER['SCRIPT_URL'] == '/achat') {
57 $selected = 'achats';
58 } elseif ($_SERVER['SCRIPT_URL'] == '/sport') {
59 $selected = 'sport_animaux';
60 } elseif ($_SERVER['SCRIPT_URL'] == '/travail') {
61 $selected = 'travail';
62 }
63 }
64 } else {
65 if ($_REQUEST['type'] == 'bnp' || $_REQUEST['type'] == 'poltrone' || in_array($_REQUEST['type'], $reasons)) {
66 $selected = $_REQUEST['type'];
67 }
68 }
69 ?>
70 <!DOCTYPE html>
71 <html lang="fr">
72 <head>
73 <title>Ausweis generator</title>
74 <style>
75 p {
76 color: red;
77 font-weight: bold;
78 }
79 div,
80 section {
81 margin: 1rem auto;
82 text-align: center;
83 }
84 div div {
85 display: flex;
86 justify-content: space-between;
87 margin: 0 auto;
88 width: 25rem;
89 }
90 span {
91 color: #ccc;
92 font-style: italic;
93 }
94 input,
95 select {
96 border: .1rem solid black;
97 border-radius: .2rem;
98 box-sizing: border-box;
99 width: 12rem;
100 }
101 input:invalid,
102 select:invalid {
103 border-color: #c33333;
104 background-color: #f9c3c3;
105 color: #c33333;
106 }
107 input:valid,
108 select:valid {
109 background-color: #c3f9c3;
110 border-color: #33c333;
111 color: #33c333;
112 }
113 input[type="date"] {
114 width: 9rem;
115 }
116 input[type="time"] {
117 width: 6rem;
118 }
119 input[type="submit"] {
120 background-color: #efefef;
121 border-color: black;
122 color: black;
123 margin: 0 .5rem;
124 }
125 input[type="submit"]:first-child,
126 input[type="submit"]:last-child {
127 margin: 0;
128 }
129 </style>
130 </head>
131 <body>
132 <section>
133 <h1>Generateur d'attestation</h1>
134 <p>Tous les champs sont obligatoires, format de date jj/mm/aaaa, format horaire hh:mm</p>
135 <form action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?>" method="post" autocomplete="on">
136 <div>
137 <div>
138 <label for="type">Type</label>
139 <select id="type" name="type" required="required">
140 <optgroup label="Professional">
141 <option value="bnp"<?php echo empty($selected)||$selected=='bnp'?' selected="selected"':''; ?>>Bnp</option>
142 <option value="poltrone"<?php echo !empty($selected)&&$selected=='poltrone'?' selected="selected"':''; ?>>Poltrone</option>
143 </optgroup>
144 <optgroup label="Personnal">
145 <option value="travail"<?php echo !empty($selected)&&$selected=='travail'?' selected="selected"':''; ?>>Travail</option>
146 <option value="achats"<?php echo !empty($selected)&&$selected=='achats'?' selected="selected"':''; ?>>Achat</option>
147 <option value="sante"<?php echo !empty($selected)&&$selected=='sante'?' selected="selected"':''; ?>>Sante</option>
148 <option value="famille"<?php echo !empty($selected)&&$selected=='famille'?' selected="selected"':''; ?>>Famille</option>
149 <option value="handicap"<?php echo !empty($selected)&&$selected=='handicap'?' selected="selected"':''; ?>>Handicap</option>
150 <option value="sport_animaux"<?php echo !empty($selected)&&$selected=='sport_animaux'?' selected="selected"':''; ?>>Sport</option>
151 <option value="convocation"<?php echo !empty($selected)&&$selected=='convocation'?' selected="selected"':''; ?>>Convocation</option>
152 <option value="missions"<?php echo !empty($selected)&&$selected=='missions'?' selected="selected"':''; ?>>Mission</option>
153 <option value="enfants"<?php echo !empty($selected)&&$selected=='enfants'?' selected="selected"':''; ?>>Enfant</option>
154 </optgroup>
155 </select>
156 </div>
157 </div>
158 <div>
159 <div>
160 <label for="firstname">Prénom</label>
161 <input type="text" id="firstname" name="firstname" value="<?php echo htmlspecialchars($_REQUEST['firstname']??''); ?>" autocomplete="given-name" required="required" />
162 </div>
163 <div>
164 <span>Jean</span>
165 </div>
166 </div>
167 <div>
168 <div>
169 <label for="lastname">Nom</label>
170 <input type="text" id="lastname" name="lastname" value="<?php echo htmlspecialchars($_REQUEST['lastname']??''); ?>" autocomplete="family-name" required="required" />
171 </div>
172 <div>
173 <span>Dupont</span>
174 </div>
175 </div>
176 <div>
177 <div>
178 <label for="birthdate">Date de naissance</label>
179 <input type="date" id="birthdate" name="birthdate" value="<?php echo htmlspecialchars($_REQUEST['birthdate']??''); ?>" autocomplete="bday" required="required" />
180 </div>
181 <div>
182 <span>01/01/1970</span>
183 </div>
184 </div>
185 <div>
186 <div>
187 <label for="birthplace">Lieu de naissance</label>
188 <input type="text" id="birthplace" name="birthplace" value="<?php echo htmlspecialchars($_REQUEST['birthplace']??''); ?>" required="required" />
189 </div>
190 <div>
191 <span>Lyon</span>
192 </div>
193 </div>
194 <div>
195 <div>
196 <label for="address">Adresse</label>
197 <input type="text" id="address" name="address" value="<?php echo htmlspecialchars($_REQUEST['address']??''); ?>" autocomplete="address-line1" required="required" />
198 </div>
199 <div>
200 <span>10 rue Colbert</span>
201 </div>
202 </div>
203 <div>
204 <div>
205 <label for="zipcode">Code postal</label>
206 <input type="text" id="zipcode" name="zipcode" value="<?php echo htmlspecialchars($_REQUEST['zipcode']??''); ?>" autocomplete="postal-code" required="required" />
207 </div>
208 <div>
209 <span>75002</span>
210 </div>
211 </div>
212 <div>
213 <div>
214 <label for="city">Ville</label>
215 <input type="text" id="city" name="city" value="<?php echo htmlspecialchars($_REQUEST['city']??''); ?>" autocomplete="address-level2" required="required" />
216 </div>
217 <div>
218 <span>Paris</span>
219 </div>
220 </div>
221 <div>
222 <div>
223 <label for="function">Fonction</label>
224 <input type="text" id="function" name="function" value="<?php echo htmlspecialchars($_REQUEST['function']??'Technicien(e) d\'astreint(e)'); ?>" autocomplete="organization-title" required="required" />
225 </div>
226 <div>
227 <span>Technicien(e) d'astreint(e)</span>
228 </div>
229 </div>
230 <div>
231 <div>
232 <label for="location">Fait à</label>
233 <input type="text" id="location" name="location" value="<?php echo htmlspecialchars($_REQUEST['location']??'Paris'); ?>" autocomplete="address-level2" required="required" />
234 </div>
235 <div>
236 <span>Paris</span>
237 </div>
238 </div>
239 <div>
240 <div>
241 <label for="date">Sortie</label>
242 <input type="date" id="date" name="date" value="<?php echo htmlspecialchars($_REQUEST['date']??date('Y-m-d', $time)); ?>" required="required" />
243 <label for="time">a</label>
244 <?php /*<datalist id="timelist">
245 <?php for($h = 0; $h < 24; $h++): for($m = 0; $m < 55; $m += 5): ?>
246 <option value="<?php printf('%02d:%02d', $h, $m); ?>"<?php if ($_REQUEST['time']??date('H:i', $time) == sprintf('%02d:%02d', $h, $m)): ?> selected="selected"<?php endif; ?>>
247 <?php endfor; endfor ?>
248 </datalist> */ ?>
249 <input type="time" id="time" name="time" value="<?php echo htmlspecialchars($_REQUEST['time']??date('H:i', $time)); ?>" step="300"<?php # list="timelist" ?> required="required" />
250 </div>
251 </div>
252 <script>
253 document.getElementById("time").onchange = function () {
254 //Extract time array
255 var time = document.getElementById("time").value.split(':');
256 //Floor time minutes to closest value
257 time[1] = (parseInt(time[1]/5)*5).toString().padStart(2, "0");
258 //Set back value
259 document.getElementById("time").value = time.join(':');
260 }
261 </script>
262 <div>
263 <div>
264 <input type="submit" value="Afficher" />
265 <input type="submit" name="download" value="Télécharger" />
266 <input type="submit" name="download" value="iBug" />
267 </div>
268 </div>
269 </form>
270 </section>
271 </body>
272 </html>
273 <?php
274 exit;
275 }
276
277 if (!empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'GET' && !empty($_REQUEST['download']) && $_REQUEST['download'] == 'iBug') {
278 header('Location: '.$_SERVER['REQUEST_URI'].'?'.http_build_query($_REQUEST));
279 exit;
280 }
281
282 /**
283 * Ausweis class
284 */
285 class Ausweis {
286 /**
287 * Fix date
288 */
289 static function fixDate($date) {
290 $return = preg_replace(
291 [
292 '%^([0-9]{4})-([0-9]{2})-([0-9]{2})$%',
293 '%^([0-9]{2})/([0-9]{2})/([0-9]{4})$%',
294 '%^([0-9]{2})/([0-9]{2})/([0-9]{2})$%',
295 '%^([0-9]{2})([0-9]{2})([0-9]{4})$%',
296 '%^([0-9]{2})([0-9]{2})([0-9]{2})$%'
297 ],
298 [
299 '\1-\2-\3',
300 '\3-\2-\1',
301 '20\3-\2-\1',
302 '\3-\2-\1',
303 '20\3-\2-\1'
304 ],
305 $date
306 );
307 if (!preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $return)) {
308 die('Unable to fix date "'.$date.'" please use dd/mm/aaaa format');
309 }
310 return $return;
311 }
312
313 /**
314 * Fix time
315 */
316 static function fixTime($time) {
317 $return = preg_replace(
318 [
319 '%^([0-9]{2}):([0-9]{2})%',
320 '%^([0-9]{2})h([0-9]{2})%',
321 '%^([0-9]{2})([0-9]{2})%'
322 ],
323 [
324 '\1:\2',
325 '\1:\2',
326 '\1:\2'
327 ],
328 $time
329 );
330 if (!preg_match('/^[0-9]{2}:[0-9]{2}$/', $return)) {
331 die('Unable to fix time "'.$time.'" please use HH:ii format');
332 }
333 return $return;
334 }
335
336 /**
337 * Add ausweis attestation
338 */
339 static function addAttestation($p, $reason, $firstname, $lastname, $birthdate, $birthplace, $address, $location, $date, $time) {
340 //Set positions
341 $pos = [];
342
343 //Add page
344 $p->AddPage();
345
346 //Set label length
347 $labelLength = 30;
348
349 //Set line height
350 $lineHeight = 7.9;
351
352 //Set title height
353 $titleHeight = 15;
354
355 //Disable auto page break
356 $p->SetAutoPageBreak(false, 0);
357
358 //Set margins
359 $p->SetMargins(23.8, 0);
360
361 //Set y
362 $p->SetY(12);
363
364 //Set font
365 $p->setFont('LiberationSerif', 'B', 17);
366
367 //Addd title
368 $p->Cell(0, 20, utf8_decode('ATTESTATION DE DÉPLACEMENT DÉROGATOIRE'), 0, 0, 'C');
369
370 //Set y
371 $p->SetY(28.5);
372
373 //Set font
374 $p->setFont('MicrosoftSansSerif', '', 10.5);
375
376 //Add legal mention
377 $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');
378 $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');
379
380 //Set y
381 $p->setY(40.25);
382
383 //Add formal
384 $p->Cell(0, 4, utf8_decode('Je soussigné(e),'), 0, 1, 'L');
385
386 //Set y
387 $p->setY(46.25);
388
389 //Save name pos
390 $posName = $p->getY();
391
392 //Add employee
393 $p->Cell(0, 8, utf8_decode('Mme/M. :'), 0, 1, 'L');
394
395 //Save birth pos
396 $posBirth = $p->getY();
397
398 //Add birth
399 $p->Cell(75, 8, utf8_decode('Né(e) le :'), 0, 0, 'L');
400 $p->Cell(0, 8, utf8_decode('à :'), 0, 1, 'L');
401
402 //Save address pos
403 $posAddress = $p->getY();
404
405 //Add address
406 $p->Cell(0, 8, utf8_decode('Demeurant :'), 0, 1, 'L');
407
408 //Set y
409 $p->setY(71);
410
411 //Add certification
412 $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');
413 $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');
414 $p->Cell(0, 4.2, utf8_decode('l\'épidémie de Covid19 dans le cadre de l\'état d\'urgence sanitaire¹ :'), 0, 1, 'L');
415
416 //Jump line
417 $p->Ln(3.5);
418
419 //Set box size
420 $boxSize = 5.85;
421
422 //Save y
423 $y = $p->getY();
424
425 //Set margins
426 $p->SetLeftMargin(37.5, 0);
427
428 //Add travail
429 $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');
430
431 //Save travail position
432 $pos['travail'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
433
434 //Jump line
435 $p->Ln(6.5);
436
437 //Save y
438 $y = $p->getY();
439
440 //Add achats
441 $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');
442
443 //Save achats position
444 $pos['achats'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
445
446 //Jump line
447 $p->Ln(6.5);
448
449 //Save y
450 $y = $p->getY();
451
452 //Add sante
453 $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');
454
455 //Save sante position
456 $pos['sante'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
457
458 //Jump line
459 $p->Ln(6.5);
460
461 //Save y
462 $y = $p->getY();
463
464 //Add famille
465 $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');
466
467 //Save famille position
468 $pos['famille'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
469
470 //Jump line
471 $p->Ln(6.5);
472
473 //Save y
474 $y = $p->getY();
475
476 //Add handicap
477 $p->MultiCell(148, 4.25, utf8_decode('Déplacement des personnes en situation de handicap et leur accompagnant'), 0, 'J');
478
479 //Save handicap position
480 $pos['handicap'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
481
482 //Jump line
483 $p->Ln(6.5);
484
485 //Save y
486 $y = $p->getY();
487
488 //Add sport_animaux
489 $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');
490
491 //Save sport_animaux position
492 $pos['sport_animaux'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
493
494 //Jump line
495 $p->Ln(6.5);
496
497 //Save y
498 $y = $p->getY();
499
500 //Add convocation
501 $p->MultiCell(148, 4.25, utf8_decode('Convocation judiciaire ou administrative et pour se rendre dans un service public'), 0, 'J');
502
503 //Save convocation position
504 $pos['convocation'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
505
506 //Jump line
507 $p->Ln(6.5);
508
509 //Save y
510 $y = $p->getY();
511
512 //Add missions
513 $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');
514
515 //Save missions position
516 $pos['missions'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
517
518 //Jump line
519 $p->Ln(6.5);
520
521 //Save y
522 $y = $p->getY();
523
524 //Add enfants
525 $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');
526
527 //Save enfants position
528 $pos['enfants'] = $y + ($p->getY() - $y) / 2 - $boxSize / 2;
529
530 //Set line width
531 $p->SetLineWidth(0.5);
532
533 //Add boxes
534 foreach($pos as $k => $v) {
535 $p->Rect(27.75, $v, 5.85, 5.85);
536 }
537
538 //Set margins
539 $p->SetLeftMargin(23.9, 0);
540
541 //Set y
542 $p->SetY('-64.9', true);
543
544 //Save location pos
545 $posLocation = $p->getY();
546
547 //Add creation location
548 $p->Cell(0, 4, utf8_decode('Fait à :'), 0, 1, 'L');
549
550 //Set y
551 $p->SetY('-56.9', true);
552
553 //Save date pos
554 $posDate = $p->getY();
555
556 //Add creation date
557 $p->Cell(60.1, 4, utf8_decode('Le :'), 0, 0, 'L');
558 $p->Cell(0, 4, utf8_decode('à :'), 0, 1, 'L');
559
560 //Set y
561 $p->SetY('-51', true);
562
563 //Set font
564 $p->setFont('MicrosoftSansSerif', '', 10);
565
566 //Add creation mentions
567 $p->Cell(0, 4, utf8_decode('(Date et heure de début de sortie à mentionner obligatoirement)'), 0, 1, 'L');
568
569 //Set font
570 $p->setFont('MicrosoftSansSerif', '', 10.5);
571
572 //Set y
573 $p->SetY('-45.3', true);
574
575 //Add signature
576 $p->Cell(12, 4, utf8_decode('Signature :'), 0, 0, 'L');
577 $p->Ln($lineHeight);
578
579 //Place footer
580 $p->SetY('-33.25', true);
581
582 //Set font
583 $p->setFont('MicrosoftSansSerif', '', 8);
584
585 //Add notice
586 $p->Cell(12.5, 3.5, utf8_decode('¹'), 0, 0, 'C');
587 $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');
588 $p->Ln(0);
589 $p->Cell(12.5, 3.5, utf8_decode('²'), 0, 0, 'C');
590 $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');
591 $p->Ln(0);
592 $p->Cell(12.5, 3.5, utf8_decode('³'), 0, 0, 'C');
593 $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');
594 $p->Ln(0);
595
596 //Set font
597 $p->setFont('Helvetica', '', 11);
598
599 //Set y
600 $p->setXY(41, $posName);
601
602 //Add name
603 $p->Cell(0, 8, utf8_decode($firstname.' '.$lastname), 0, 0, 'L');
604
605 //Set y
606 $p->setXY(41, $posBirth);
607
608 //Fix birthdate
609 $birthdate = self::fixDate($birthdate);
610
611 //Add birth
612 $p->Cell(63, 8, utf8_decode(date('d/m/Y', strtotime($birthdate))), 0, 0, 'L');
613 $p->Cell(0, 8, utf8_decode($birthplace), 0, 0, 'L');
614
615 //Set y
616 $p->setXY(46, $posAddress);
617
618 //Add address
619 $p->Cell(0, 7, utf8_decode($address), 0, 0, 'L');
620
621 //Set xy
622 $p->setXY(27.75, $pos[$reason]);
623
624 //Set y
625 $p->setXY(36, $posLocation);
626
627 //Add location
628 $p->Cell(0, 4, utf8_decode($location), 0, 0, 'L');
629
630 //Set y
631 $p->setXY(31, $posDate);
632
633 //Fix date
634 $date = self::fixDate($date);
635
636 //Fix time
637 $time = self::fixTime($time);
638
639 //Add date
640 $p->Cell(58, 4, utf8_decode(date('d/m/Y', strtotime($date))), 0, 0, 'L');
641 $p->Cell(0, 4, utf8_decode($time), 0, 0, 'L');
642
643 //Set xy
644 $p->setXY(27.75, $pos[$reason]);
645
646 //Set font
647 $p->setFont('Helvetica', '', 16);
648
649 //Add cross
650 $p->Cell(0, 6.5, 'X', 0, 0, 'L');
651
652 //Set delay
653 $delay = rand(30, 60);
654
655 //Set qrdata
656 $qrData = [
657 'Cree le: '.date('d/m/Y \a H\hi', strtotime('-'.$delay.' minutes', strtotime($date.' '.$time))),
658 'Nom: '.$lastname,
659 'Prenom: '.$firstname,
660 'Naissance: '.date('d/m/Y', strtotime($birthdate)).' a '.$birthplace,
661 'Adresse: '.$address,
662 'Sortie: '.date('d/m/Y \a H:i', strtotime($date.' '.$time)),
663 'Motifs: '.$reason
664 ];
665
666 //Set qr text
667 $qrText = implode(";\n ", $qrData);
668
669 //Set qr file
670 $qrFile = tmpfile();
671
672 //Set qr path
673 $qrPath = stream_get_meta_data($qrFile)['uri'];
674
675 //Output in png
676 #ob_start();
677 QRcode::png($qrText, $qrPath, QR_ECLEVEL_M, 6, 4, false);
678 #$qrPng = ob_get_contents();
679 #ob_end_clean();
680
681 //Add qrPng
682 $p->Image($qrPath, 146, 221, 40, 40, 'PNG');
683
684 //Add page
685 //XXX: add the attestation de déplacement dérogatoire page
686 $p->AddPage();
687
688 //Add qrPng
689 $p->Image($qrPath, 12.5, 12.5, 117, 0, 'PNG');
690 $p->Ln();
691 }
692
693 /**
694 * Add ausweis quittance
695 */
696 static function addQuittance($p, $firstname, $lastname, $address, $titleowner, $firstowner, $lastowner, $addressowner, $sign, $loyer, $charge) {
697 //Add employer page
698 $p->AddPage();
699
700 //Set label length
701 $labelLength = 80;
702
703 //Set line height
704 $lineHeight = 15;
705
706 //Set margins
707 $p->SetMargins(30, 0);
708
709 //Disable auto page break
710 $p->SetAutoPageBreak(false, 0);
711
712 //Jump line
713 $p->SetY($lineHeight);
714
715 //Set font
716 $p->setFont('Helvetica', 'B', 18);
717
718 //Addd title
719 $p->Cell(0, 20, utf8_decode('QUITTANCE DE LOYER'), 0, 0, 'C');
720
721 //Jump line
722 $p->Ln($titleHeight);
723
724 //Set font
725 $p->setFont('Times', '', 9);
726
727 //Add legal mention
728 $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');
729 $p->Ln();
730
731 //Jump line
732 $p->Ln($lineHeight);
733
734 //Set font
735 $p->setFont('Times', 'BU', 10);
736
737 //Add formal
738 $p->Cell($labelLength, 5, utf8_decode('Bailleur :'), 0, 0, 'L');
739 $p->Cell(0, 5, utf8_decode('Colocataire :'), 0, 0, 'L');
740
741 //Jump line
742 $p->Ln();
743
744 //Set font
745 $p->setFont('Times', '', 9);
746
747 //Add names
748 $p->Cell($labelLength, 5, utf8_decode($titleowner.' '.$firstowner.' '.$lastowner), 0, 0, 'L');
749 $p->Cell(0, 5, utf8_decode($firstname.' '.$lastname), 0, 0, 'L');
750 $p->Ln();
751 $p->Cell($labelLength, 5, utf8_decode($addressowner), 0, 0, 'L');
752 $p->Cell(0, 5, utf8_decode($address), 0, 0, 'L');
753
754 //Add formal
755 $p->Ln($lineHeight*1.5);
756
757 //Add date
758 $p->Cell(0, 5, utf8_decode('Angers le '.date('07/m/Y', strtotime('-1 month'))), 0, 0, 'R');
759
760 //Jump line
761 $p->Ln($lineHeight);
762
763 //Set font
764 $p->setFont('Times', 'BU', 10);
765
766 //Add formal
767 $p->Cell(0, 5, utf8_decode('Adresse de location :'), 0, 0, 'L');
768 $p->Ln();
769
770 //Set font
771 $p->setFont('Times', 'B', 9);
772
773 //Add address
774 $p->Cell(0, 5, utf8_decode($address), 0, 0, 'L');
775
776 //Add formal
777 $p->Ln($lineHeight);
778
779 //Set font
780 $p->setFont('Times', '', 10);
781
782 //Set total
783 $total = $loyer + $charge;
784
785 //Add mention
786 $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');
787
788 //Add formal
789 $p->Ln($lineHeight);
790
791 //Add formal
792 $p->Cell(0, 5, utf8_decode('Loyer hors charge :'), 0, 0, 'L');
793 $p->Ln();
794
795 //Set font
796 $p->setFont('Times', '', 9);
797
798 $p->Cell(0, 5, utf8_decode(str_replace('.', ',', sprintf('%.2f', $loyer)).' euros'), 0, 0, 'L');
799
800 //Add formal
801 $p->Ln($lineHeight);
802
803 //Set font
804 $p->setFont('Times', '', 10);
805
806 //Add formal
807 $p->Cell(0, 5, utf8_decode('Provision pour charges :'), 0, 0, 'L');
808 $p->Ln();
809
810 //Set font
811 $p->setFont('Times', '', 9);
812
813 $p->Cell(0, 5, utf8_decode(str_replace('.', ',', sprintf('%.2f', $charge)).' euros'), 0, 0, 'L');
814
815 //Add formal
816 $p->Ln($lineHeight);
817
818 //Set font
819 $p->setFont('Times', 'BU', 10);
820
821 //Add formal
822 $p->Cell(0, 5, utf8_decode('Somme totale reçue :'), 0, 0, 'L');
823 $p->Ln();
824
825 //Set font
826 $p->setFont('Times', 'B', 9);
827
828 $p->Cell(0, 5, utf8_decode(str_replace('.', ',', sprintf('%.2f', $total)).' euros'), 0, 0, 'L');
829
830 //Add formal
831 $p->Ln($lineHeight);
832
833 //Set font
834 $p->setFont('Times', '', 10);
835
836 //Add formal
837 $p->Cell(0, 5, utf8_decode('Date du paiement :'), 0, 0, 'L');
838 $p->Ln();
839
840 //Set font
841 $p->setFont('Times', '', 9);
842 $p->Cell(0, 5, utf8_decode(date('05/m/Y', strtotime('-1 month')).' par virement'), 0, 0, 'L');
843
844 //Add formal
845 $p->Ln($lineHeight);
846
847 //Set Y
848 $p->setY(-60);
849
850 //Set font
851 $p->setFont('Times', '', 10);
852
853 //Add creation location
854 $p->Cell(0, 5, utf8_decode('Fait à Angers le '.date('07/m/Y', strtotime('-1 month'))), 0, 0, 'L');
855 $p->Ln();
856
857 //Add signature
858 $p->Cell(12, 5, utf8_decode('Signature :'), 0, 0, 'L');
859 $p->Ln();
860
861 //Add sign
862 $p->Image($sign, 45, 245, 30, 0, 'PNG');
863
864 //Set font
865 $p->setFont('Times', '', 10);
866
867 //Set Y
868 $p->setY(-30);
869
870 //Add legal
871 $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');
872 }
873
874 /**
875 * Add ausweis employer
876 */
877 static function addEmployer($p, $employerTitle, $employerFunction, $employerCompany, $employerCity, $logo, $stamp, $sign, $workplaces, $firstname, $lastname, $birthdate, $birthplace, $address, $function) {
878 //Add conveyances
879 $conveyances = [
880 'Bicyclette',
881 'Cyclomoteur',
882 'Marche',
883 'Transport en commun',
884 'Voiture'
885 ];
886
887 //Add employer page
888 $p->AddPage();
889
890 //Set label length
891 $labelLength = 51.75;
892
893 //Set line height
894 $lineHeight = 7.5;
895
896 //Set title height
897 $titleHeight = 18.5;
898
899 //Set margins
900 $p->SetMargins(25, 0);
901
902 //Disable auto page break
903 $p->SetAutoPageBreak(false, 0);
904
905 //Jump line
906 #$p->Ln($titleHeight);
907 $p->SetY($titleHeight);
908
909 //Set font
910 $p->setFont('TrebuchetMS', 'B', 16);
911
912 //Addd title
913 $p->Cell(0, 20, utf8_decode('JUSTIFICATIF DE DÉPLACEMENT PROFESSIONNEL'), 0, 0, 'C');
914
915 //Jump line
916 $p->Ln();
917
918 //Set font
919 $p->setFont('Times', '', 10);
920
921 //Add legal mention
922 $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');
923 $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');
924
925 //Jump line
926 $p->Ln($lineHeight);
927
928 //Add formal
929 $p->Cell(0, 5, utf8_decode('Je soussigné(e),'), 0, 0, 'L');
930
931 //Jump line
932 $p->Ln($lineHeight);
933
934 //Add name
935 $p->Cell($labelLength, 5, utf8_decode('Nom et prénom de l\'employeur :'), 0, 0, 'L');
936 $p->Cell(0, 5, utf8_decode($employerTitle), 0, 0, 'L');
937
938 //Jump line
939 $p->Ln($lineHeight);
940
941 //Add functions
942 $p->Cell($labelLength, 5, utf8_decode('Fonctions :'), 0, 0, 'L');
943 $p->Cell(0, 5, utf8_decode($employerFunction), 0, 0, 'L');
944
945 //Jump line
946 $p->Ln($lineHeight);
947
948 //Add certification
949 $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');
950
951 //Jump line
952 $p->Ln($lineHeight-5);
953
954 //Add employee
955 $p->Cell($labelLength, 5, utf8_decode('Nom :'), 0, 0, 'L');
956 $p->Cell(0, 5, utf8_decode($lastname), 0, 0, 'L');
957 $p->Ln($lineHeight);
958 $p->Cell($labelLength, 5, utf8_decode('Prénom :'), 0, 0, 'L');
959 $p->Cell(0, 5, utf8_decode($firstname), 0, 0, 'L');
960 $p->Ln($lineHeight);
961 $p->Cell($labelLength, 5, utf8_decode('Date de naissance :'), 0, 0, 'L');
962 $p->Cell(0, 5, utf8_decode($birthdate), 0, 0, 'L');
963 $p->Ln($lineHeight);
964 $p->Cell($labelLength, 5, utf8_decode('Lieu de naissance :'), 0, 0, 'L');
965 $p->Cell(0, 5, utf8_decode($birthplace), 0, 0, 'L');
966 $p->Ln($lineHeight);
967 $p->Cell($labelLength, 5, utf8_decode('Adresse du domicile :'), 0, 0, 'L');
968 $p->Cell(0, 5, utf8_decode($address), 0, 0, 'L');
969 $p->Ln($lineHeight);
970 $p->Cell($labelLength, 5, utf8_decode('Nature de l\'activité professionnelle :'), 0, 0, 'L');
971 $p->Cell(0, 5, utf8_decode($function), 0, 0, 'L');
972 $p->Ln($lineHeight);
973
974 //Add conveyances
975 $p->Cell($labelLength, 5, utf8_decode('Moyens de déplacement :'), 0, 0, 'L');
976 $p->Cell(0, 5, /*' '.*/implode(', ', $conveyances), 0, 0, 'L');
977
978 //Jump line
979 $p->Ln($lineHeight);
980
981 //Add validity
982 $p->Cell($labelLength, 5, utf8_decode('Durée de validité :'), 0, 0, 'L');
983 $p->Cell(0, 5, utf8_decode('6 mois'), 0, 0, 'L');
984
985 //Jump line
986 $p->Ln($lineHeight);
987
988 //Add workplaces
989 $p->Cell(0, 5, utf8_decode('Lieux d\'exercice de l\'activité professionnelle :'), 0, 0, 'L');
990 foreach($workplaces as $siret => $location) {
991 $p->Ln(4);
992 #$p->cell($labelLength/1.5, 5, ' '.$siret.' :', 0, 0, 'l');
993 $p->cell(0, 5, ' '.utf8_decode($location), 0, 0, 'l');
994 }
995
996 //Jump line
997 #$p->Ln($lineHeight*2);
998
999 //Place footer
1000 $p->SetY('-65', true);
1001
1002 //Add employer name
1003 $p->Cell($labelLength, 5, utf8_decode('Nom et cachet de l\'employeur :'), 0, 0, 'L');
1004 $p->Cell(0, 5, utf8_decode($employerCompany), 0, 0, 'L');
1005
1006 //Jump line
1007 $p->Ln($lineHeight);
1008
1009 //Add sign location
1010 $p->Cell($labelLength, 5, utf8_decode('Fait à :'), 0, 0, 'L');
1011 $p->Cell(0, 5, utf8_decode($employerCity), 0, 0, 'L');
1012
1013 //Jump line
1014 $p->Ln($lineHeight);
1015
1016 //Add sign date
1017 $p->Cell($labelLength, 5, utf8_decode('Le :'), 0, 0, 'L');
1018 $p->Cell(0, 5, utf8_decode('02 novembre 2020'), 0, 0, 'L');
1019
1020 //Jump line
1021 $p->Ln($lineHeight);
1022
1023 //Place footer
1024 $p->SetY('-40', true);
1025
1026 //Set font
1027 $p->setFont('MicrosoftSansSerif', '', 7);
1028
1029 //Add notice
1030 $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');
1031 $p->Ln($lineHeight/2);
1032 $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');
1033 $p->Ln($lineHeight/2);
1034 $p->Cell(0, 4, utf8_decode('de ses fonctions l\'exige'), 0, 0, 'L');
1035 $p->Ln($lineHeight/2);
1036 $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');
1037 $p->Ln($lineHeight/2);
1038 $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');
1039 $p->Ln($lineHeight/2);
1040 $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');
1041 $p->Ln($lineHeight/2);
1042 $p->Cell(0, 4, utf8_decode('dérogatoire en cochant le premier motif de déplacement'), 0, 0, 'L');
1043
1044 //Add pictures
1045 $p->Image($logo, 10, 8, 40, 0, 'PNG');
1046 $p->Image($stamp, 130, 210, 60, 0, 'PNG');
1047 $p->Image($sign, 110, 215, 25, 0, 'PNG');
1048 }
1049 }
1050
1051 /**
1052 * Prefilled data
1053 */
1054 $data = [];
1055
1056 /**
1057 * Bnp
1058 */
1059 if ($_REQUEST['type'] == 'bnp') {
1060 //Set employer
1061 $data['employer'] = [
1062 'title' => 'Jean-Laurent Bonnafé',
1063 'function' => 'Administrateur Directeur Général de BNP Paribas',
1064 'company' => 'BNP PARIBAS',
1065 'address' => '16 Boulevard des Italiens 75009 Paris',
1066 'city' => 'Paris',
1067 'vat' => 'FR76662042449'
1068 ];
1069
1070 //Set workplaces
1071 $data['workplaces'] = [
1072 //TODO: add others...
1073 66204244932405 => '37 place du Marché St Honoré 75001 Paris',
1074 66204244932355 => '36b avenue de l\'Opéra 75002 Paris',
1075 66204244920376 => '67 rue de Bretagne 75003 Paris',
1076 66204244919998 => '48 rue des Archives 75004 Paris',
1077 66204244915558 => '50 boulevard de Saint Marcel 75005 Paris',
1078 66204244920368 => '1 rue de Medicis 75006 Paris',
1079 66204244941596 => '64 rue de Sèvres 75007 Paris',
1080 66204244943238 => '10 boulevard Malesherbes 75008 Paris',
1081 66204244900014 => '16 boulevard des Italiens 75009 Paris',
1082 66204244932454 => '150 rue du fbg Poissonniere 75010 Paris',
1083 66204244941539 => '41 rue Basfroi 75011 Paris',
1084 66204244943733 => '47 boulevard Diderot 75012 Paris',
1085 66204244920897 => '109 rue de Tolbiac 75013 Paris',
1086 66204244941265 => '160 boulevard Macdonald 75019 Paris',
1087 66204244925110 => '4 place Saint Fargeau 75020 Paris',
1088 00000000000000 => 'Toute l\'Île-de-France',
1089 99999999999999 => 'Toute la France'
1090 ];
1091
1092 //Set pictures
1093 $data['sign'] = '../picture/ausweis/bnp/sign.png';
1094 $data['stamp'] = '../picture/ausweis/bnp/stamp.png';
1095 $data['logo'] = '../picture/ausweis/bnp/logo.png';
1096
1097 //Set reason
1098 $data['reason'] = 'travail';
1099 /**
1100 * Poltronesofa
1101 */
1102 } elseif ($_REQUEST['type'] == 'poltrone') {
1103 //Set employer
1104 $data['employer'] = [
1105 'title' => 'M Renzo Ricci',
1106 'function' => 'Président',
1107 'company' => 'POLTRONESOFA \'FRANCE',
1108 'address' => '6 Rue Jean Jaures 92800 Puteaux',
1109 'city' => 'Puteaux',
1110 'vat' => 'FR88422036905'
1111 ];
1112
1113 //Set workplaces
1114 $data['workplaces'] = [
1115 42203690500020 => 'Place du Marché St Honoré 75001 Paris',
1116 42203690500558 => '72 Boulevard de Sébastopol 75003 Paris',
1117 42203690500756 => 'Avenue de Fontainebleau 94320 Thiais',
1118 //42203690500749 => 'Cc Opensky Lot A03 78200 Buchelay',
1119 //42203690500681 => 'L\'oseraie 95520 Osny',
1120 42203690500533 => '1 rue de la Mare au Chanvre 91700 Sainte-Geneviève-des-Bois',
1121 42203690500483 => '23 rue Alexandre Chatrian 77410 Claye-Souilly',
1122 42203690500434 => 'Route Nationale 10 78210 Coignières',
1123 42203690500186 => 'Avenue Henri Barbusse 78340 Les Clayes-sous-Bois',
1124 42203690500152 => 'La Saussaie Beauclair 93110 Rosny-sous-Bois',
1125 42203690500095 => '234 Boulevard du Havre 95220 Pierrelaye',
1126 00000000000000 => 'Toute l\'Île-de-France',
1127 99999999999999 => 'Toute la France'
1128 ];
1129
1130 //Set pictures
1131 $data['sign'] = '../picture/ausweis/poltrone/sign.png';
1132 $data['stamp'] = '../picture/ausweis/poltrone/stamp.png';
1133 $data['logo'] = '../picture/ausweis/poltrone/logo.png';
1134
1135 //Set reason
1136 $data['reason'] = 'travail';
1137 /**
1138 * Sport
1139 */
1140 } elseif ($_REQUEST['type'] == 'sport_animaux') {
1141 //Set reason
1142 $data['reason'] = 'sport_animaux';
1143 $data['sign'] = '../picture/ausweis/bnp/sign.png';
1144 /**
1145 * Achats
1146 */
1147 } elseif ($_REQUEST['type'] == 'achats') {
1148 //Set reason
1149 $data['reason'] = 'achats';
1150 $data['sign'] = '../picture/ausweis/bnp/sign.png';
1151 /**
1152 * Others:
1153 * - travail: 578,
1154 * - achats: 533,
1155 * - sante: 477,
1156 * - famille: 435,
1157 * - handicap: 396,
1158 * - sport_animaux: 358,
1159 * - convocation: 295,
1160 * - missions: 255,
1161 * - enfants: 211,
1162 */
1163 } elseif (in_array($_REQUEST['type'], $reasons)) {
1164 //Set reason
1165 $data['reason'] = $_REQUEST['type'];
1166 /**
1167 * Unknown
1168 */
1169 } else {
1170 die('TODO');
1171 }
1172
1173 //Set filename
1174 //XXX: was Ausweis_ now we use Travail_firstname_lastname.pdf
1175 $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';
1176
1177 //Create pdf object
1178 $p = new FPDF('P', 'mm', 'A4');
1179
1180 //Add marianne bold
1181 #$p->AddFont('Marianne-Bold', '', 'marianne-bold.php');
1182 #$p->AddFont('Marianne-Bold', 'B', 'marianne-bold.php');
1183 #$p->AddFont('Marianne-Bold', 'BI', 'marianne-bold.php');
1184 #$p->AddFont('Marianne-Bold', 'I', 'marianne-bold.php');
1185
1186 //Add mariane regular
1187 #$p->AddFont('Marianne-Regular', '', 'marianne-regular.php');
1188 #$p->AddFont('Marianne-Regular', 'B', 'marianne-regular.php');
1189 #$p->AddFont('Marianne-Regular', 'BI', 'marianne-regular.php');
1190 #$p->AddFont('Marianne-Regular', 'I', 'marianne-regular.php');
1191
1192 //Add trebuchet ms
1193 $p->AddFont('TrebuchetMS', '', 'trebuc.php');
1194 $p->AddFont('TrebuchetMS', 'B', 'trebucb.php');
1195 $p->AddFont('TrebuchetMS', 'BI', 'trebucbi.php');
1196 $p->AddFont('TrebuchetMS', 'I', 'trebuci.php');
1197
1198 //Add liberation serif
1199 $p->AddFont('LiberationSerif', '', 'liberationserif.php');
1200 $p->AddFont('LiberationSerif', 'B', 'liberationserifb.php');
1201 $p->AddFont('LiberationSerif', 'BI', 'liberationserifbi.php');
1202 $p->AddFont('LiberationSerif', 'I', 'liberationserifi.php');
1203
1204 //Add microsoft sans serif
1205 $p->AddFont('MicrosoftSansSerif', '', 'micross.php');
1206 $p->AddFont('MicrosoftSansSerif', 'B', 'micross.php');
1207 $p->AddFont('MicrosoftSansSerif', 'BI', 'micross.php');
1208 $p->AddFont('MicrosoftSansSerif', 'I', 'micross.php');
1209
1210 //Set creator
1211 $p->SetTitle('Justificatif de déplacement professionnel', true);
1212 $p->SetCreator($_SERVER['PHP_SELF'], true);
1213 $p->SetAuthor('Französischer Kommandantur', true);
1214 $p->SetSubject('Verkehrsausweis', true);
1215
1216 /**
1217 * Add attestation
1218 */
1219 Ausweis::addAttestation(
1220 $p,
1221 $data['reason'],
1222 $_REQUEST['firstname'],
1223 $_REQUEST['lastname'],
1224 $_REQUEST['birthdate'],
1225 $_REQUEST['birthplace'],
1226 $_REQUEST['address'].' '.$_REQUEST['zipcode'].' '.$_REQUEST['city'],
1227 $_REQUEST['location'],
1228 $_REQUEST['date'],
1229 $_REQUEST['time']
1230 );
1231
1232 /**
1233 * Employer attestation type
1234 */
1235 //XXX: add the justificatif de déplacement professionnel page
1236 if (!empty($data['employer'])) {
1237 /**
1238 * Add employer attestation
1239 */
1240 Ausweis::addEmployer(
1241 $p,
1242 $data['employer']['title'],
1243 $data['employer']['function'],
1244 $data['employer']['company'],
1245 $data['employer']['city'],
1246 $data['logo'],
1247 $data['stamp'],
1248 $data['sign'],
1249 $data['workplaces'],
1250 $_REQUEST['firstname'],
1251 $_REQUEST['lastname'],
1252 $_REQUEST['birthdate'],
1253 $_REQUEST['birthplace'],
1254 $_REQUEST['address'].' '.$_REQUEST['zipcode'].' '.$_REQUEST['city'],
1255 $_REQUEST['function']
1256 );
1257 }
1258
1259 /**
1260 * Personnal sport and buy attestation type
1261 */
1262 if ($data['reason'] == 'sport_animaux' || $data['reason'] == 'achats') {
1263 /**
1264 * Add quittance attestation
1265 */
1266 Ausweis::addQuittance(
1267 $p,
1268 $_REQUEST['firstname'],
1269 $_REQUEST['lastname'],
1270 $_REQUEST['address'].' '.$_REQUEST['zipcode'].' '.$_REQUEST['city'],
1271 'M.',
1272 'Jean',
1273 'Larivière',
1274 '6 chemin Bas des Plaines 49000 Angers',
1275 '../picture/ausweis/bnp/sign.png',
1276 705.55,
1277 125.00,
1278 );
1279 }
1280
1281 //Close document
1282 $p->Close();
1283
1284 //Send common headers
1285 header('Content-Type: application/pdf');
1286
1287 //Send download headers
1288 if (!empty($_REQUEST['download'])) {
1289 if ($_REQUEST['download'] == 'iBug') {
1290 header('Content-Type: application/octet-stream');
1291 }
1292 header('Content-Disposition: attachment; filename="'.rawurlencode($fileName).'"');
1293 //Send display headers
1294 } else {
1295 header('Content-Disposition: inline; filename="'.rawurlencode($fileName).'"');
1296 }
1297
1298 //Send remaining headers
1299 header('Cache-Control: private, max-age=0, must-revalidate');
1300 header('Pragma: public');
1301
1302 //Save output
1303 $output = $p->Output('S');
1304
1305 //Send content-length
1306 header('Content-Length: '.strlen($output));
1307
1308 //Display the pdf
1309 echo $output;