summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-11-25 03:59:32 +0100
committerpolo <ordipolo@gmx.fr>2022-11-25 03:59:32 +0100
commitefe371fd6e883dde99ca6d90a7aae99eb4aeadea (patch)
tree54b342e58e4e3908abf5f42c85680d32540dd7f3
downloadAppliGestionPHP-efe371fd6e883dde99ca6d90a7aae99eb4aeadea.zip
première sauvegarde git
-rw-r--r--LaTeX/devis.tex79
-rw-r--r--LaTeX/enveloppe_recto.tex21
-rw-r--r--LaTeX/enveloppe_verso.tex13
-rw-r--r--LaTeX/facture.tex80
-rw-r--r--LaTeX/location.tex44
-rw-r--r--LaTeX/ordipolo.pngbin0 -> 46751 bytes
-rw-r--r--README.txt26
-rw-r--r--config.php44
-rwxr-xr-xindex.php203
-rwxr-xr-xlogiciel compta.desktop10
-rw-r--r--ordipolo.sqlite0
-rw-r--r--php/Database.php26
-rw-r--r--php/ZenityClasses.php111
-rw-r--r--php/compileLatex.php30
-rw-r--r--php/dependances.php100
-rw-r--r--php/functions.php26
-rw-r--r--php/saisie.php59
-rw-r--r--php/zenity_text.php21
-rw-r--r--pub/carte ordipolo.pngbin0 -> 2517728 bytes
-rw-r--r--pub/carte.sla107
-rw-r--r--pub/flyer.pdfbin0 -> 7977278 bytes
-rw-r--r--pub/flyer.xcfbin0 -> 15707907 bytes
22 files changed, 1000 insertions, 0 deletions
diff --git a/LaTeX/devis.tex b/LaTeX/devis.tex
new file mode 100644
index 0000000..debcdc5
--- /dev/null
+++ b/LaTeX/devis.tex
@@ -0,0 +1,79 @@
1\documentclass{report}
2
3\usepackage[french]{babel}
4\usepackage{lmodern} % police latin modern
5\usepackage[utf8]{inputenc} % encodage d'entrée (document)
6\usepackage[T1]{fontenc} % encodage de sortie (rendu)
7\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges
8\usepackage{graphicx} % insertions d'images
9\usepackage{textcomp} % pour N°
10\usepackage{xcolor} % texte en couleur
11\usepackage{tabularx} % dimensions des tableaux automatique
12\usepackage{tikz} % le rectangle
13
14\begin{document}
15 \setlength{\parindent}{0cm} % supprimer les alinéas
16 \large{}
17 \pagestyle{empty} % en-tête et pied de page vides
18 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
19
20 \begin{center}
21 \includegraphics{ordipolo.png}\\
22 \Large\textbf{Dépannage informatique - Assistance à domicile}
23 \end{center}
24
25 2 A rue de l'île de Man, 29000 Quimper
26
27 SIRET : 814 320 610 00011
28
29 \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}}
30 Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr
31 \end{tabularx}
32
33 Plus d'infos sur le site web: https\string://ordipolo.fr\\
34 % \string supprime l'espace devant les :
35
36 \begin{center}
37 \large\textbf{DEVIS}
38 \end{center}
39
40 CLIENT\\
41
42 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}}
43 Mme, M : \textcolor{vert}{} &
44 Date du devis : \textcolor{vert}{}\\
45 Adresse : \textcolor{vert}{} &
46 Delai de livraison : \textcolor{vert}{}\\
47 \end{tabularx}\\\\
48
49 PRESTATION\\
50
51 \textcolor{vert}{}
52
53 Total main d'oeuvre : \textcolor{vert}{}\\
54
55 PIÈCES\\
56
57 \textcolor{vert}{}
58
59 Total pièces : \textcolor{vert}{}\\
60
61 TOTAL\\
62
63 Déplacement : \textcolor{vert}{}
64
65 Total HT : \textcolor{vert}{}
66
67 \textit{(TVA non applicable, article 293B du code général des impôts)}
68
69 Référence du devis : \textcolor{vert}{}\\
70
71 Devis reçu avant l'exécution des travaux, signature du client :\\
72 \begin{tikzpicture}
73 \draw (0,0) rectangle (4,2);
74 \end{tikzpicture}\\
75
76 \small{}NOTA BENE\\
77
78 Si le délai de livraison n’est pas précisé, c’est naturellement le délai légal de 30 jours qui est appliqué. Lorsqu'Ordi Polo garde (ou prête) un ordinateur le temps nécessaire à la réparation, le prêt peut être formalisé par un document signé par les deux parties. Le dépannage inclut principalement l'intervention sur les logiciels et si nécessaire le démontage et remontage de la machine nécessaires au nettoyage de la poussière ou au remplacement d'une pièce. Ordi Polo ne répare pas les composants électroniques défectueux et n'est pas responsable des dysfonctionnements de l'ordinateur dont l'origine est matérielle. Ordi Polo ne vend pas de matériel mais peut conseiller ou réaliser les démarches d’un achat.
79\end{document} \ No newline at end of file
diff --git a/LaTeX/enveloppe_recto.tex b/LaTeX/enveloppe_recto.tex
new file mode 100644
index 0000000..d1f3f43
--- /dev/null
+++ b/LaTeX/enveloppe_recto.tex
@@ -0,0 +1,21 @@
1\documentclass[]{report}
2
3\usepackage[french]{babel}
4\usepackage{lmodern} % police latin modern
5\usepackage[utf8]{inputenc} % encodage d'entrée (document)
6\usepackage[T1]{fontenc} % encodage de sortie (rendu)
7\usepackage{graphicx} % insertions d'images
8\usepackage[papersize={22cm, 11cm}, top=1cm, left=1cm, bottom=1cm]{geometry}
9\pagestyle{empty}
10
11\begin{document}
12 \setlength{\parindent}{0cm}
13 \includegraphics{ordipolo.png}\\
14 \large\textbf{Dépannage informatique - Assistance à domicile}
15
16 \setlength{\parindent}{7,9cm}
17 \begin{minipage}[b][5,8cm]{12cm}
18 \LARGE{M. Truc\\3, rue Machin\\\\\\}
19 \LARGE{2 \ 9 \ 0 \ 0 \ 0 \ \ \ \ QUIMPER}
20 \end{minipage}
21\end{document} \ No newline at end of file
diff --git a/LaTeX/enveloppe_verso.tex b/LaTeX/enveloppe_verso.tex
new file mode 100644
index 0000000..24baa8a
--- /dev/null
+++ b/LaTeX/enveloppe_verso.tex
@@ -0,0 +1,13 @@
1\documentclass[]{report}
2
3\usepackage[french]{babel}
4\usepackage{lmodern} % police latin modern
5\usepackage[utf8]{inputenc} % encodage d'entrée (document)
6\usepackage[T1]{fontenc} % encodage de sortie (rendu)
7\usepackage[papersize={22cm, 11cm}, top=0.6cm, left=4.5cm]{geometry}
8\pagestyle{empty}
9
10\begin{document}
11 \setlength{\parindent}{0cm}
12 \Large{Paul Jusot\\2A, rue de l'île de Man\\29000 QUIMPER}
13\end{document} \ No newline at end of file
diff --git a/LaTeX/facture.tex b/LaTeX/facture.tex
new file mode 100644
index 0000000..babb2ab
--- /dev/null
+++ b/LaTeX/facture.tex
@@ -0,0 +1,80 @@
1\documentclass{report}
2
3\usepackage[french]{babel}
4\usepackage{lmodern} % police latin modern
5\usepackage[utf8]{inputenc} % encodage d'entrée (document)
6\usepackage[T1]{fontenc} % encodage de sortie (rendu)
7\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges
8\usepackage{graphicx} % insertions d'images
9\usepackage{textcomp} % pour N°
10\usepackage{xcolor} % texte en couleur
11\usepackage{tabularx} % dimensions des tableaux automatique
12
13\begin{document}
14 \setlength{\parindent}{0cm} % supprimer les alinéas
15 \large{}
16 \pagestyle{empty} % en-tête et pied de page vides
17 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
18
19 \begin{center}
20 \includegraphics{ordipolo.png}\\
21 \Large\textbf{Dépannage informatique - Assistance à domicile}
22 \end{center}
23
24 2 A rue de l'île de Man, 29000 Quimper
25
26 SIRET : 814 320 610 00011
27
28 \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}}
29 Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr
30 \end{tabularx}
31
32 Plus d'infos sur le site web: https\string://ordipolo.fr\\
33 % \string supprime l'espace devant les :
34
35 \begin{center}
36 \large\textbf{FACTURE}
37 \end{center}
38
39 CLIENT\\
40
41 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}}
42 Mme, M : \textcolor{vert}{} &
43 Date : \textcolor{vert}{}\\
44 \end{tabularx}\\
45 Adresse : \textcolor{vert}{}\\
46
47 PRESTATION\\
48
49 \textcolor{vert}{}
50
51 Modèle de l'ordinateur : \textcolor{vert}{}
52
53 Système d'exploitation : \textcolor{vert}{}
54
55 Données à conserver : \textcolor{vert}{}
56
57 Clé d'activation : \textcolor{vert}{}\\
58
59 Total main d'oeuvre : \textcolor{vert}{}\\
60
61 PIÈCES\\
62
63 \textcolor{vert}{}
64
65 Total pièces : \textcolor{vert}{}\\
66
67 TOTAL\\
68
69 Déplacement : \textcolor{vert}{}
70
71 Total HT : \textcolor{vert}{}
72
73 \textit{(TVA non applicable, article 293B du code général des impôts)}
74
75 Référence de la facture : \textcolor{vert}{}\\
76
77 \small{}NOTA BENE\\
78
79 Lorsqu'Ordi Polo garde (ou prête) un ordinateur le temps nécessaire à la réparation, le prêt peut être formalisé par un document signé par les deux parties. Le dépannage inclut principalement l'intervention sur les logiciels et si nécessaire le démontage et remontage de la machine nécessaires au nettoyage de la poussière ou au remplacement d'une pièce. Ordi Polo ne répare pas les composants électroniques défectueux et n'est pas responsable des dysfonctionnements de l'ordinateur dont l'origine est matérielle. Ordi Polo ne vend pas de matériel mais peut conseiller ou réaliser les démarches d’un achat.
80\end{document} \ No newline at end of file
diff --git a/LaTeX/location.tex b/LaTeX/location.tex
new file mode 100644
index 0000000..bcfb1e5
--- /dev/null
+++ b/LaTeX/location.tex
@@ -0,0 +1,44 @@
1\documentclass{report}
2
3\usepackage[french]{babel}
4\usepackage{lmodern} % police latin modern
5\usepackage[utf8]{inputenc} % encodage d'entrée (document)
6\usepackage[T1]{fontenc} % encodage de sortie (rendu)
7\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges
8\usepackage{graphicx} % insertions d'images
9\usepackage{textcomp} % pour N°
10\usepackage{xcolor} % texte en couleur
11%\usepackage{wrapfig} % placer texte et image côte-à-côte
12\usepackage{tabularx} % dimensions des tableaux automatique
13
14\begin{document}
15 \setlength{\parindent}{0cm} % supprimer les alinéas
16 \large{}
17 \pagestyle{empty} % en-tête et pied de page vides
18 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
19
20 \begin{center}
21 \includegraphics{ordipolo.png}\\
22 \Large\textbf{Dépannage informatique - Assistance à domicile}
23 \end{center}
24
25 2 A rue de l'île de Man, 29000 Quimper
26
27 SIRET : 814 320 610 00011
28
29 \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}}
30 Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr
31 \end{tabularx}
32
33 Plus d'infos sur le site web: https\string://ordipolo.fr\\
34 % \string supprime l'espace devant les :
35
36 CLIENT\\
37
38 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}}
39 Mme, M : \textcolor{vert}{} &
40 Date : \textcolor{vert}{}\\
41 \end{tabularx}\\
42 Adresse : \textcolor{vert}{}\\
43
44\end{document} \ No newline at end of file
diff --git a/LaTeX/ordipolo.png b/LaTeX/ordipolo.png
new file mode 100644
index 0000000..2acd67d
--- /dev/null
+++ b/LaTeX/ordipolo.png
Binary files differ
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..b3f5904
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,26 @@
1OS compatible:
2linux!
3bsd et mac sont probablement compatibles si les dépendances requises sont disponibles
4pas de version windows prévue
5
6dépendances obligatoires:
7- php-cli (si votre distribution sépare php serveur web de php ligne de commande, installer le paquet php-cli)
8version minimale de php =
9- php-sqlite (moteur de base de données, activer si nécessaire le module pdo-sqlite dans le php.ini)
10- zenity (fenêtres GTK pour scripts console)
11- une distribution LaTeX pour le compiler en fichiers PDF à l'aide de la commande pdflatex (j'utilise TeX Live)
12- interpréteurs sh, bash, ksh, csh, tcsh
13
14dépendances optionnelles:
15- sqlitebrowser (interface graphique pour sqlite)
16si absent, le script essaie de lancer "sqlite3" dans "xterm"
17
18
19configuration:
20- veuillez modifier les variables dans config.php
21ATTENTION, si vous ne savez pas ce que vous faîtes, ne faites rien.
22Pour réparer la configuration, saisissez une chaîne vide ou la valeur par défaut comme dans les exemples ci-dessous.
23 chaîne vide:
24$receipts = '';
25 valeur par défaut:
26$receipts = '~/ORDIPOLO/factures/';
diff --git a/config.php b/config.php
new file mode 100644
index 0000000..c34309d
--- /dev/null
+++ b/config.php
@@ -0,0 +1,44 @@
1<?php
2// config.php
3
4// fichier à modifier soi-même
5// les lignes commentées correspondent aux réglages par défaut
6
7$business_name = 'ORDIPOLO';
8
9// $receipts = '~/ORDIPOLO/Applis_PHP/LaTeX/';
10$receipts = 'LaTeX/';
11
12// $quotations = '~/ORDIPOLO/Applis_PHP/LaTeX/';
13$quotations = 'LaTeX/';
14
15// $pub = "~/ORDIPOLO/PUB/";
16$pub = "pub/";
17
18// $flyer = "flyer.xcf";
19$flyer = "flyer.xcf";
20
21// $business_card = "carte.sla";
22$business_card = "carte.sla";
23
24// $envelopes = '~/ORDIPOLO/Applis_PHP/LaTeX/';
25$envelopes = 'LaTeX/';
26
27// $db_name = "ordipolo";
28$db_name = "ordipolo";
29
30// $db_place = '~/ORDIPOLO/Appli_PHP/';
31$db_place = '';
32
33// $image_editor = 'gimp';
34$image_editor = 'gimp';
35
36// $publishing = 'scribus';
37$publishing = 'scribus';
38
39// $x_terminal = 'xterm';
40//$x_terminal = 'xterm';
41// les terminaux disponibles sont: xterm...
42
43// vérification des variables
44// dans config_check.php
diff --git a/index.php b/index.php
new file mode 100755
index 0000000..cf54199
--- /dev/null
+++ b/index.php
@@ -0,0 +1,203 @@
1#!/bin/php
2<?php
3// index.php
4
5// configuration du programme par l'utilisateur
6require('config.php'); // fichier de l'utilisateur
7//require('config_check.php'); // contrôle de config.php
8
9// variables diverses, certaines utilisent les variables de config.php
10$exec_mode = 'gui'; // les versions pure console (CLI) et serveur web (CGI) de ce programme ne sont pas prévues pour l'instant
11$file_explorer = 'xdg-open'; // ouvre l'explorateur de fichiers par défaut quand suivi d'un chemin en paramètre
12$flyer = $pub . $flyer;
13$business_card = $pub . $business_card;
14$db_place .= $db_name . '.sqlite';
15$sqlitebrowser_enable = false;
16$sqlite_cli = ''; // commande sqlite ou sqlite3
17$x_term_command = ''; // commande terminal en mode graphique
18
19require('php/dependances.php'); // vérification des dépendances
20require('php/functions.php');
21
22require('php/ZenityClasses.php'); // créer les commandes
23require('php/zenity_text.php'); // texte dans les fenêtres
24
25require('php/Database.php'); // connexion à la base et création de la base et des tables si elles n'existent pas déjà
26$Database = new SQL;
27SQL::create_tables();
28
29// require('php/latex.php');
30// require('php/compileLatex.php');
31
32// commandes système qui ouvrent les fenêtres zenity
33// s'utilisent comme ceci: exec($Objet->get());
34$MenuPrincipal = new Zenity_list($menu_principal_text, $menu_principal_entrees);
35$QuestionNouveauClient = new Zenity_question($question_nouveau_client_text);
36$MenuEnregistrement = new Zenity_list($menu_enregistrement_text, $menu_enregistrement_entrees);
37$MenuDocuments = new Zenity_list($menu_documents_text, $menu_documents_entrees);
38$MenuCommunication = new Zenity_list($menu_communication_text, $menu_communication_entrees);
39$RechercheClient = new zenity_entry($recherche_client_text);
40$ResultatsRechercheClient = new zenity_list($resultats_recherche_client_text, []);
41$NouveauClient = new Zenity_forms($nouveau_client_text, $nouveau_client_entrees);
42$Calendrier = new Zenity_calendar($calendar_text);
43$FormulairePrestation = new Zenity_forms($formulaire_text, $formulaire_entrees);
44$CommentairePrestation = new Zenity_entry($commentaire_prestation_text);
45
46// boucle principale
47$boucle = true;
48while($boucle)
49{
50 // menu principal
51 $choix_niv1 = exec($MenuPrincipal->get());
52
53 // enregistrement
54 if($choix_niv1 == 'Nouvelle prestation')
55 {
56 // est ce que le client est déjà dans la base?
57 if(exec($QuestionNouveauClient->get()) == 0) // $? = 0 signifie oui
58 {
59 // saisie du nom du client et recherche
60 $client_saisie = exec($RechercheClient->get());
61
62 // sélection parmi les résultats
63 $ResultatsRechercheClient->set_entries(recherche_client($client_saisie));
64 $choix_niv2 = exec($ResultatsRechercheClient->get());
65 if($choix_niv2 != '')
66 {
67 echo "client trouvé\n";
68 }
69 else // chaîne vide
70 {
71 echo "client pas trouvé\n";
72 exec($NouveauClient->get());
73
74 // enregistrement dans la BDD
75
76 }
77
78 // récupération des infos dans la BDD
79
80 }
81 else
82 {
83 echo "nouveau client\n";
84 exec($NouveauClient->get());
85
86 // enregistrement dans la BDD
87
88 }
89
90 // infos sur la prestation
91 $choix_niv2 = exec($MenuEnregistrement->get());
92 $continuer = true;
93 if($choix_niv2 == "Devis")
94 {
95 $type = 'DEVIS';
96 }
97 elseif($choix_niv2 == "Facture")
98 {
99 $type = 'FACTURE';
100 }
101 elseif($choix_niv2 == "CESU")
102 {
103 $type = 'CESU';
104 }
105 elseif($choix_niv2 == "Pas de prestation")
106 {
107 $type = '';
108 }
109 else
110 {
111 $continuer = false; // retour menu principal
112 }
113
114 if($continuer)
115 {
116 exec($Calendrier->get());
117 exec($FormulairePrestation->get());
118 // enregistrement date et prestation en BDD
119 exec($CommentairePrestation->get());
120 // enregistrement commentaire en BDD
121 }
122 }
123
124 elseif($choix_niv1 == 'Fichier clients')
125 {
126 // quel affichage? un grand tableau avec zenity? une page web? un document LaTeX?
127 }
128
129 // documents à imprimer
130 elseif($choix_niv1 == 'Créer/imprimer un document')
131 {
132 $choix_niv2 = exec($MenuDocuments->get());
133 if($choix_niv2 == 'Devis')
134 {
135
136 }
137 elseif($choix_niv2 == 'Facture')
138 {
139
140 }
141 elseif($choix_niv2 == 'Lettre avec adresse')
142 {
143
144 }
145 elseif($choix_niv2 == 'Livre des recettes')
146 {
147
148 }
149 elseif($choix_niv2 == "Registre des achats")
150 {
151
152 }
153 elseif($choix_niv2 == "Bilan annuel")
154 {
155
156 }
157 else
158 {
159 // retour menu principal
160 }
161 }
162
163 // Supports de communication
164 elseif($choix_niv1 == 'Communication')
165 {
166 $choix_niv2 = exec($MenuCommunication->get());
167 if($choix_niv2 == 'Flyer (nécessite gimp)')
168 {
169 exec(window_app_command('gimp', $flyer));
170 }
171 elseif($choix_niv2 == 'Carte de visite (nécessite scribus)')
172 {
173 exec(window_app_command('scribus', $business_card));
174 }
175 elseif($choix_niv2 == 'Explorateur de fichiers')
176 {
177 exec(window_app_command($file_explorer, $pub));
178 }
179 else
180 {
181 // retour menu principal
182 }
183 }
184
185 // BDD
186 elseif($choix_niv1 == 'Base de données')
187 {
188 if($sqlitebrowser_enable)
189 {
190 exec(window_app_command('sqlitebrowser', $db_place));
191 }
192 else
193 {
194 exec($x_term_command . ' ' . $sqlite_cli . ' ' . $db_place); // correpond à priori à: xterm -e sqlite3 ~/ORDIPOLO/Appli_PHP/ordipolo.sqlite
195 }
196 }
197 else
198 {
199 $boucle = false; // byebye
200 }
201}
202
203// sauvegarder la base de données
diff --git a/logiciel compta.desktop b/logiciel compta.desktop
new file mode 100755
index 0000000..37ac1f3
--- /dev/null
+++ b/logiciel compta.desktop
@@ -0,0 +1,10 @@
1[Desktop Entry]
2Version=1.0
3Type=Application
4Name=logiciel compta
5Comment=
6Exec=/home/paulo/ORDIPOLO/Appli_PHP/index.php
7Icon=/home/paulo/ORDIPOLO/PUB/logo.png
8Path=/home/paulo/ORDIPOLO/Appli_PHP
9Terminal=false
10StartupNotify=false
diff --git a/ordipolo.sqlite b/ordipolo.sqlite
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ordipolo.sqlite
diff --git a/php/Database.php b/php/Database.php
new file mode 100644
index 0000000..81ce669
--- /dev/null
+++ b/php/Database.php
@@ -0,0 +1,26 @@
1<?php
2// php/Database.php
3
4// connexion avec PDO_sqlite
5try
6{
7 $db = new PDO('sqlite:' . $db_name . '.sqlite');
8 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
9}
10catch (Exception $e)
11{
12 die('Erreur : '.$e->getMessage());
13}
14
15
16// requêtes SQL
17class SQL
18{
19 // créer les tables si elles n'existent pas encore
20 static function create_tables()
21 {
22 //$db->exec("CREATE TABLE IF NOT EXISTS matable (ID INTEGER PRIMARY KEY, champ1 INTEGER, champ2 TEXT);");
23 //
24 //
25 }
26}
diff --git a/php/ZenityClasses.php b/php/ZenityClasses.php
new file mode 100644
index 0000000..c286d14
--- /dev/null
+++ b/php/ZenityClasses.php
@@ -0,0 +1,111 @@
1<?php
2// php/ZenityClasses.php
3//
4// commande système zenity
5
6abstract class Zenity_cmd
7{
8 protected $command = 'zenity';
9 protected $command_type = '';
10 protected $rows = [];
11 private $title = 'ORDIPOLO';
12 private $text = '';
13 protected $width = 300;
14 protected $height = 200; // recalculée en fonction du contenu, vaut au minimum 150
15
16
17 protected function __construct($text, array $rows = []) // $rows est optionnel
18 {
19 $this->text = $text;
20 $this->rows= $rows;
21 $this->command .= $this->command_type;
22 $this->command .= ' --title="' . $this->title . '"';
23 $this->command .= ' --text="' . $this->text . '"';
24 }
25
26 public function get()
27 {
28 return($this->command);
29 }
30}
31
32
33class Zenity_list extends Zenity_cmd
34{
35 public function __construct($text, array $rows)
36 {
37 $this->command_type = ' --list';
38 parent::__construct($text, $rows);
39 $this->height = 80 + count($this->rows) * 25;
40 $this->command .= ' --width=' . $this->width;
41 $this->command .= ' --height=' . $this->height;
42 $this->command .= ' --hide-header'; // ligne inutile, il y a déjà le --text
43 self::one_column_zenity_list($this->rows);
44 }
45
46 public function set_entries($rows_set) // variable renseignée après la construction
47 {
48 $this->rows = $rows_set;
49 }
50
51 private function one_column_zenity_list($rows)
52 {
53 $output = ' --column=""';
54 foreach($rows as $entry)
55 {
56 $output .= ' "' . $entry . '"'; // forme: ' "choix 1" "choix 2"'
57 }
58 $this->command .= $output;
59 }
60}
61
62class Zenity_question extends Zenity_cmd
63{
64 public function __construct($text)
65 {
66 $this->command_type = ' --question';
67 parent::__construct($text);
68 $this->command .= ' && echo $?';
69 // la sortie de "zenity --question" est le statut de sortie "$?"
70 // $? vaut 0 pour oui, 1 pour non, à ceci près que pour non zenity ne renvoie rien
71 }
72}
73
74class Zenity_forms extends Zenity_cmd
75{
76 public function __construct($text, array $rows)
77 {
78 $this->command_type = ' --forms';
79 parent::__construct($text, $rows);
80 //$this->height = 80 + count($this->rows) * 25; // à tester, mais devrait produire le rendu attendu
81 self::entries_zenity_forms($this->rows);
82 }
83
84 private function entries_zenity_forms($entries)
85 {
86 $output = '';
87 foreach($entries as $one_entry)
88 {
89 $output .= ' --add-entry="' . $one_entry . '"'; // forme: ' "choix 1" "choix 2"'
90 }
91 $this->command .= $output;
92 }
93}
94
95class Zenity_calendar extends Zenity_cmd
96{
97 public function __construct($text)
98 {
99 $this->command_type = ' --calendar';
100 parent::__construct($text);
101 }
102}
103
104class Zenity_entry extends Zenity_cmd
105{
106 public function __construct($text)
107 {
108 $this->command_type = ' --entry';
109 parent::__construct($text);
110 }
111}
diff --git a/php/compileLatex.php b/php/compileLatex.php
new file mode 100644
index 0000000..ccd9dab
--- /dev/null
+++ b/php/compileLatex.php
@@ -0,0 +1,30 @@
1<?php
2// compileLatex.php
3
4// contenu
5$codeLaTeX = '\documentclass{article}
6
7\usepackage[francais]{babel}
8\usepackage[utf8]{inputenc}
9\usepackage[T1]{fontenc}
10
11\begin{document}
12 Bravo, ça compile !!
13\end{document}';
14
15
16// ficher tex
17// regarder la doc, php-cli permettrait de manipuler les fichiers directement comme le bash
18$fichier = fopen("latex.tex", "w+");
19fputs($fichier, $codeLaTeX);
20fclose($fichier);
21
22// compilation
23exec('pdflatex latex.tex');
24
25// nettoyage
26unlink("latex.aux");
27unlink("latex.log");
28unlink("latex.tex");
29
30exec('xdg-open latex.pdf');
diff --git a/php/dependances.php b/php/dependances.php
new file mode 100644
index 0000000..4a5667e
--- /dev/null
+++ b/php/dependances.php
@@ -0,0 +1,100 @@
1<?php
2// php/dependances.php
3// Vérification des dépendances nécessaires au fonctionnement de ce programmes.
4
5// Environnement dans lequel ce programmes a été créé:
6// - système archlinux avec l'interpréteur bash
7// - PHP 8.1 + paquet php-sqlite
8// - module pdo_sqlite activé dans le fichier php.ini
9// - sqlitebrowser (interface graphique pour sqlite)
10// - distribution LaTeX texlive
11// - zenity
12
13// zenity disponible
14if(exec("zenity --version 2> /dev/null") == '') // commande qui n'ouvre pas de fenêtre, erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null
15{
16 printf("Impossible de lancer zenity. Veuillez installer le paquet zenity\n");
17 exit();
18}
19
20// compilateur pdflatex disponible
21if(exec("pdflatex -version 2> /dev/null") == '') // erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null
22{
23 printf("Impossible de lancer pdflatex. Veuillez installer une distribution LaTeX.\n");
24 exit();
25}
26
27// test de la présence du paquet php-sqlite
28// compliqué? dépend de l'OS?
29// note: l'erreur se produit dès le démarrage de PHP si le php.ini est bon mais qu'il manque le paquet
30
31// module pdo_sqlite de PHP activé?
32if(!extension_loaded("pdo_sqlite"))
33{
34 printf("Impossible d'utiliser la base de données. Veuillez installer le paquet php-sqlite ET activer l'extension pdo_sqlite dans le fichier php.ini.\n");
35 exit();
36}
37
38
39// client sqlite
40if($exec_mode == 'gui')
41{
42 // sqlitebrowser disponible
43 if(exec("which sqlitebrowser 2> /dev/null") != '') // which parcourt les dossiers du PATH et affiche les chemins trouvés, erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null
44 {
45 $sqlitebrowser_enable = true;
46 }
47 // terminal en mode graphique disponible, permettra d'y utiliser sqlite dans la console
48 else
49 {
50 printf("Sqlitebrowser n'est pas disponible. J'espère que vous maîtrisez le SQL.\n");
51
52 if(exec("which xterm 2> /dev/null") != '' && exec("xterm -v 2> /dev/null") != '')
53 {
54 $x_term_ccommand = 'xterm -e';
55 }
56 elseif(exec("which urxvt 2> /dev/null") != '')
57 {
58 $x_term_ccommand = 'urxvt -e';
59 }
60 elseif(exec("which lxterminal 2> /dev/null") != '' && exec("lxterminal -v 2> /dev/null") != '')
61 {
62 $x_term_ccommand = 'lxterminal -e';
63 }
64 elseif(exec("which xfce4-terminal 2> /dev/null") != '' && exec("xfce4-terminal -V 2> /dev/null") != '')
65 {
66 $x_term_ccommand = 'xfce4-terminal -x';
67 }
68 elseif(exec("which gnome-terminal 2> /dev/null") != '')
69 {
70 $x_term_ccommand = 'gnome-terminal --';
71 }
72 elseif(exec("which konsole 2> /dev/null") != '' && exec("konsole -v 2> /dev/null") != '')
73 {
74 $x_term_ccommand = 'konsole -e';
75 }
76 // pour MAC - NON TESTÉ !! (possibilité de détecter le système avec uname?)
77 //~ elseif(exec("which Terminal 2> /dev/null") != '')
78 //~ {
79 //~ $x_term_ccommand = 'open -a Terminal -e'; // ne marche probablement pas
80 //~ }
81 else
82 {
83 printf("Impossible d'ouvrir un terminal pour y lancer sqlite. Veuillez installer un terminal en mode graphique (par exemple xterm).\n");
84 }
85 }
86}
87
88// sqlite CLI disponible
89if(exec("which sqlite 2> /dev/null") != '' && exec("sqlite --version 2> /dev/null") != '')
90{
91 $sqlite_cli = 'sqlite';
92}
93elseif(exec("which sqlite3 2> /dev/null") != '' && exec("sqlite3 --version 2> /dev/null") != '')
94{
95 $sqlite_cli = 'sqlite3';
96}
97else
98{
99 printf("Impossible de lancer sqlite dans le terminal en utilisant la commande ' . $sqlite_cli . '\n");
100}
diff --git a/php/functions.php b/php/functions.php
new file mode 100644
index 0000000..61bc13e
--- /dev/null
+++ b/php/functions.php
@@ -0,0 +1,26 @@
1<?php
2// php/functions.php
3
4// commande pour lancer une application graphique en ouvrant un fichier
5function window_app_command(string $app, string $path = ''): string
6{
7 $command = 'nohup ' . $app; // détache l'appli du script PHP
8 if($path != '')
9 {
10 $command .= ' ' . $path;
11 }
12 $command .= ' > /dev/null 2>&1 &';
13 // stdout > /dev/null et & permettent de rendre la main à PHP
14 // stderr > stdout pour cacher un message inutile
15 return $command;
16}
17
18function recherche_client(string $saisie): array
19{
20 $resultats = [];
21
22 // recherche dans la BDD
23
24
25 return($resultats);
26}
diff --git a/php/saisie.php b/php/saisie.php
new file mode 100644
index 0000000..4b41fbf
--- /dev/null
+++ b/php/saisie.php
@@ -0,0 +1,59 @@
1<?php
2// saisie.php
3
4$date = exec('zenity --calendar --width=320 --title="Enregistrer une prestation avec un nouveau client 1/2" --text="Choisir une date."');
5var_dump($date);
6
7$start_command = 'zenity --forms';
8$title = ' --title="Enregistrer une prestation avec un nouveau client 2/2"';
9$text = ' --text="Nouveau client"';
10$name = ' --add-entry="Prénom Nom:"';
11$adresse = ' --add-entry="Adresse:"';
12$prestation_type = ' --add-entry="Type de prestation:"';
13$tasks = ' --add-entry="Tâches effectuées:"';
14$computer_model = ' --add-entry="Modèle du PC:"';
15$system = ' --add-entry="OS:"';
16$computer_data = ' --add-entry="Données sauvegardées:"';
17$activation_keys = ' --add-entry="Clés d\'activation:"';
18$labour_time = ' --add-entry="Temps main d\'oeuvre (heures):"';
19$total_labour = ' --add-entry="Total main d\'oeuvre (euros):"';
20$total_parts = ' --add-entry="Total pièces (euros):"';
21$trip = ' --add-entry="Déplacement (euros)"';
22$total = ' --add-entry="Total HT (euros):"';
23$comments = ' --add-entry="Commentaires:"';
24
25$command = $start_command . $title . $text . $name . $adresse . $prestation_type . $tasks. $computer_model . $system . $computer_data . $activation_keys . $labour_time . $total_labour . $total_parts . $trip . $total . $comments;
26//$result = explode('|', "alain dubois|2 rue foch, rennes|assistance|boum le PC !!|tour acer|win 10|sur DD externe|dans le BIOS|2h, 80€|15,80€|10€|105,80€|client chiant");
27$result = explode('|', exec($command));
28var_dump($result);
29//exit();
30
31// nouveau client
32#$choix = exec('zenity --forms --title="Enregistrer une prestation 1/4" --text="Nouveau client" --add-entry="Prénom, nom:" --add-entry="Adresse:" --add-calendar="Date: (ici ou fenêtre suivante?)" --add-entry="Type de prestation:" --add-entry="Prix prestation:" --add-entry="Prix déplacement:" --add-entry="Total HT:"');
33
34// date
35#$date = exec('zenity --calendar --width=320 --title="Enregistrer une prestation 2/4" --text="Choisir une date."');
36// date sous la forme jj/mm/aaaa
37// utiliser ensuite cette option: --forms-date-format=MODÈLE Définit le format de la date retournée
38
39// détail prestation
40#$prestation = exec('zenity --forms --title="Enregistrer une prestation 3/4" --text="Tâches effectuées" --add-entry="Détails:" --add-entry="Modèle de l\'ordinateur:" --add-entry="OS:" --add-entry="Sauvegarde:" --add-entry="Clé d\'activation"');
41// infos saisies sous la forme aaa|bbb|ccc|ddd|eee
42
43// Prix total calculé automatiquement
44
45// référence de la facture avec format automatique par concaténation
46
47// commentaire personnel enregistré à part
48$commentaire = exec('zenity --entry --width=400 --title="Enregistrer une prestation 4/4" --text="Commentaire sur le déroulement de la prestation."');
49var_dump($result);
50// afficher le résultat en LaTeX et demande de confirmation
51// écrire du LaTeX avec PHP
52
53// mise à jour de la base de données
54
55// message de confirmation (si la base a bien été mise à jour), puis demande pour imprimer une facture
56$imprimer_facture = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer la facture?"');
57
58// imprimer une enveloppe
59$imprimer_enveloppe = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer l\'adresse sur une enveloppe? (insérer une enveloppe DL sans fenêtre dans l\'imprimante"');
diff --git a/php/zenity_text.php b/php/zenity_text.php
new file mode 100644
index 0000000..2246463
--- /dev/null
+++ b/php/zenity_text.php
@@ -0,0 +1,21 @@
1<?php
2// php/zenity_text.php
3
4// contenu des fenêtres zenity
5$menu_principal_text = "Gestion d'une micro-entreprise";
6$menu_principal_entrees = ["Nouvelle prestation", "Fichier clients", "Créer/imprimer un document", "Communication", "Base de données"];
7$question_nouveau_client_text = "Ce client figure t\'il déjà dans le fichier clients?";
8$menu_enregistrement_text = "Type d\'enregistrement?";
9$menu_enregistrement_entrees = ["Devis", "Facture", "CESU", "Pas de prestation"];
10$menu_documents_text = "Création de documents LaTeX";
11$menu_documents_entrees = ["Devis", "Facture", "Lettre avec adresse", "Livre des recettes", "Registre des achats", "Bilan annuel"];
12$menu_communication_text = "Imprimer un support de communication";
13$menu_communication_entrees = ["Flyer (nécessite gimp)", "Carte de visite (nécessite scribus)", "Explorateur de fichiers"];
14$recherche_client_text = "Recherche d'un client avec son nom ou son code client";
15$resultats_recherche_client_text = "Résultats de la recherche, sélectionner un client";
16$nouveau_client_text = "Nouveau client";
17$nouveau_client_entrees = ["Prénom Nom:", "Adresse:", "Code client, type: J.P.Duchmol"];
18$calendar_text = 'Nouvelle prestation étape 1/3 - Choisir une date';
19$formulaire_text = 'Nouvelle prestation 2/3 - Détail des travaux';
20$formulaire_entrees = ["Tâches effectuées:", "Modèle du PC:", "OS:", "Données sauvegardées:", "Clés d\'activation:", "Temps main d\'oeuvre (heures):", "Total main d\'oeuvre (euros):", "Total pièces (euros):", "Déplacement (euros)", "Total HT (euros):",];
21$commentaire_prestation_text = 'Nouvelle prestation 3/3 - Commentaires';
diff --git a/pub/carte ordipolo.png b/pub/carte ordipolo.png
new file mode 100644
index 0000000..3582ccf
--- /dev/null
+++ b/pub/carte ordipolo.png
Binary files differ
diff --git a/pub/carte.sla b/pub/carte.sla
new file mode 100644
index 0000000..98145e6
--- /dev/null
+++ b/pub/carte.sla
@@ -0,0 +1,107 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<SCRIBUSUTF8NEW Version="1.5.5">
3 <DOCUMENT ANZPAGES="1" PAGEWIDTH="595.28125984252" PAGEHEIGHT="841.889763779528" BORDERLEFT="42.5196850393701" BORDERRIGHT="42.5196850393701" BORDERTOP="65.1968503937008" BORDERBOTTOM="68.0314960629921" PRESET="0" BleedTop="0" BleedLeft="0" BleedRight="0" BleedBottom="0" ORIENTATION="0" PAGESIZE="A4" FIRSTNUM="1" BOOK="0" AUTOSPALTEN="1" ABSTSPALTEN="3.881" UNITS="1" DFONT="Arial Regular" DSIZE="12" DCOL="1" DGAP="0" TabFill="" TabWidth="36" TextDistLeft="0" TextDistRight="0" TextDistBottom="0" TextDistTop="0" AUTHOR="" COMMENTS="" KEYWORDS="" PUBLISHER="" DOCDATE="" DOCTYPE="" DOCFORMAT="" DOCIDENT="" DOCSOURCE="" DOCLANGINFO="" DOCRELATION="" DOCCOVER="" DOCRIGHTS="" DOCCONTRIB="" TITLE="" SUBJECT="" VHOCH="33" VHOCHSC="66" VTIEF="33" VTIEFSC="66" VKAPIT="75" BASEGRID="14.4" BASEO="0" AUTOL="100" UnderlinePos="-1" UnderlineWidth="-1" StrikeThruPos="-1" StrikeThruWidth="-1" GROUPC="1" HCMS="1" DPSo="0" DPSFo="0" DPuse="1" DPgam="0" DPbla="1" DPPr="Fogra27L CMYK Coated Press" DPIn="sRGB IEC61966-2.1" DPInCMYK="Fogra27L CMYK Coated Press" DPIn2="sRGB IEC61966-2.1" DPIn3="Fogra27L CMYK Coated Press" DISc="1" DIIm="0" ALAYER="0" LANGUAGE="fr" AUTOMATIC="1" AUTOCHECK="0" GUIDELOCK="0" SnapToGuides="0" SnapToGrid="0" SnapToElement="0" MINGRID="20" MAJGRID="100" SHOWGRID="0" SHOWGUIDES="1" showcolborders="1" SHOWFRAME="1" SHOWControl="0" SHOWLAYERM="0" SHOWMARGIN="1" SHOWBASE="0" SHOWPICT="1" SHOWLINK="0" rulerMode="1" showrulers="1" showBleed="1" rulerXoffset="0" rulerYoffset="0" GuideRad="10" GRAB="4" POLYC="4" POLYF="0.5" POLYR="0" POLYIR="0" POLYCUR="0" POLYOCUR="0" POLYS="0" arcStartAngle="30" arcSweepAngle="300" spiralStartAngle="0" spiralEndAngle="1080" spiralFactor="1.2" AutoSave="1" AutoSaveTime="600000" AutoSaveCount="1" AutoSaveKeep="0" AUtoSaveInDocDir="1" AutoSaveDir="" ScratchBottom="20" ScratchLeft="100" ScratchRight="100" ScratchTop="20" GapHorizontal="0" GapVertical="40" StartArrow="0" EndArrow="0" PEN="Black" BRUSH="None" PENLINE="d" PENTEXT="Black" StrokeText="Black" TextBackGround="None" TextLineColor="None" TextBackGroundShade="100" TextLineShade="100" TextPenShade="100" TextStrokeShade="100" STIL="1" STILLINE="1" WIDTH="1" WIDTHLINE="1" PENSHADE="100" LINESHADE="100" BRUSHSHADE="100" CPICT="None" PICTSHADE="100" CSPICT="None" PICTSSHADE="100" PICTSCX="1" PICTSCY="1" PSCALE="1" PASPECT="1" EmbeddedPath="0" HalfRes="1" dispX="10" dispY="10" constrain="15" MINORC="#00ff00" MAJORC="#00ff00" GuideC="#000080" BaseC="#c0c0c0" renderStack="0 1 2 3 4" GridType="0" PAGEC="#ffffff" MARGC="#0000ff" RANDF="0" currentProfile="PostScript" calligraphicPenFillColor="Black" calligraphicPenLineColor="Black" calligraphicPenFillColorShade="100" calligraphicPenLineColorShade="100" calligraphicPenLineWidth="1" calligraphicPenAngle="0" calligraphicPenWidth="10" calligraphicPenStyle="1">
4 <CheckProfile Name="PDF 1.3" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkPartFilledImageFrames="0" checkResolution="1" checkTransparency="1" minResolution="144" maxResolution="2400" checkAnnotations="0" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkNotCMYKOrSpot="0" checkDeviceColorsAndOutputIntent="0" checkFontNotEmbedded="0" checkFontIsOpenType="0" checkAppliedMasterDifferentSide="1" checkEmptyTextFrames="1"/>
5 <CheckProfile Name="PDF 1.4" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkPartFilledImageFrames="0" checkResolution="1" checkTransparency="0" minResolution="144" maxResolution="2400" checkAnnotations="0" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkNotCMYKOrSpot="0" checkDeviceColorsAndOutputIntent="0" checkFontNotEmbedded="0" checkFontIsOpenType="0" checkAppliedMasterDifferentSide="1" checkEmptyTextFrames="1"/>
6 <CheckProfile Name="PDF 1.5" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkPartFilledImageFrames="0" checkResolution="1" checkTransparency="0" minResolution="144" maxResolution="2400" checkAnnotations="0" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkNotCMYKOrSpot="0" checkDeviceColorsAndOutputIntent="0" checkFontNotEmbedded="0" checkFontIsOpenType="0" checkAppliedMasterDifferentSide="1" checkEmptyTextFrames="1"/>
7 <CheckProfile Name="PDF/X-1a" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkPartFilledImageFrames="0" checkResolution="1" checkTransparency="1" minResolution="144" maxResolution="2400" checkAnnotations="1" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkNotCMYKOrSpot="0" checkDeviceColorsAndOutputIntent="0" checkFontNotEmbedded="0" checkFontIsOpenType="0" checkAppliedMasterDifferentSide="1" checkEmptyTextFrames="1"/>
8 <CheckProfile Name="PDF/X-3" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkPartFilledImageFrames="0" checkResolution="1" checkTransparency="1" minResolution="144" maxResolution="2400" checkAnnotations="1" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkNotCMYKOrSpot="0" checkDeviceColorsAndOutputIntent="0" checkFontNotEmbedded="0" checkFontIsOpenType="0" checkAppliedMasterDifferentSide="1" checkEmptyTextFrames="1"/>
9 <CheckProfile Name="PDF/X-4" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkPartFilledImageFrames="0" checkResolution="1" checkTransparency="0" minResolution="144" maxResolution="2400" checkAnnotations="1" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkNotCMYKOrSpot="0" checkDeviceColorsAndOutputIntent="1" checkFontNotEmbedded="1" checkFontIsOpenType="0" checkAppliedMasterDifferentSide="1" checkEmptyTextFrames="1"/>
10 <CheckProfile Name="PostScript" ignoreErrors="0" autoCheck="1" checkGlyphs="1" checkOrphans="1" checkOverflow="1" checkPictures="1" checkPartFilledImageFrames="0" checkResolution="1" checkTransparency="1" minResolution="144" maxResolution="2400" checkAnnotations="0" checkRasterPDF="1" checkForGIF="1" ignoreOffLayers="0" checkNotCMYKOrSpot="0" checkDeviceColorsAndOutputIntent="0" checkFontNotEmbedded="0" checkFontIsOpenType="0" checkAppliedMasterDifferentSide="1" checkEmptyTextFrames="1"/>
11 <COLOR NAME="Black" SPACE="CMYK" C="0" M="0" Y="0" K="100"/>
12 <COLOR NAME="Blue" SPACE="RGB" R="0" G="0" B="255"/>
13 <COLOR NAME="Cool Black" SPACE="CMYK" C="60" M="0" Y="0" K="100"/>
14 <COLOR NAME="Cyan" SPACE="CMYK" C="100" M="0" Y="0" K="0"/>
15 <COLOR NAME="Green" SPACE="RGB" R="0" G="255" B="0"/>
16 <COLOR NAME="Magenta" SPACE="CMYK" C="0" M="100" Y="0" K="0"/>
17 <COLOR NAME="Red" SPACE="RGB" R="255" G="0" B="0"/>
18 <COLOR NAME="Registration" SPACE="CMYK" C="100" M="100" Y="100" K="100" Register="1"/>
19 <COLOR NAME="Rich Black" SPACE="CMYK" C="60" M="40" Y="40" K="100"/>
20 <COLOR NAME="Warm Black" SPACE="CMYK" C="0" M="60" Y="29.8039215686275" K="100"/>
21 <COLOR NAME="White" SPACE="CMYK" C="0" M="0" Y="0" K="0"/>
22 <COLOR NAME="Yellow" SPACE="CMYK" C="0" M="0" Y="100" K="0"/>
23 <HYPHEN/>
24 <STYLE NAME="Default Paragraph Style" DefaultStyle="1" ALIGN="0" LINESPMode="0" LINESP="15" INDENT="0" RMARGIN="0" FIRST="0" VOR="0" NACH="0" ParagraphEffectOffset="0" DROP="0" DROPLIN="2"/>
25 <CHARSTYLE CNAME="Default Character Style" DefaultStyle="1" FONT="DejaVu Sans Book" FONTSIZE="12" FEATURES="inherit" FCOLOR="Black" FSHADE="100" SCOLOR="Black" SSHADE="100" TXTSHX="5" TXTSHY="-5" TXTOUT="1" TXTULP="-0.1" TXTULW="-0.1" TXTSTP="-0.1" TXTSTW="-0.1" SCALEH="100" SCALEV="100" BASEO="0" KERN="0" LANGUAGE="fr"/>
26 <TableStyle NAME="Default Table Style" DefaultStyle="1" FillColor="None" FillShade="100">
27 <TableBorderLeft>
28 <TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
29 </TableBorderLeft>
30 <TableBorderRight>
31 <TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
32 </TableBorderRight>
33 <TableBorderTop>
34 <TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
35 </TableBorderTop>
36 <TableBorderBottom>
37 <TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
38 </TableBorderBottom>
39 </TableStyle>
40 <CellStyle NAME="Default Cell Style" DefaultStyle="1" FillColor="None" FillShade="100" LeftPadding="1" RightPadding="1" TopPadding="1" BottomPadding="1">
41 <TableBorderLeft>
42 <TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
43 </TableBorderLeft>
44 <TableBorderRight>
45 <TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
46 </TableBorderRight>
47 <TableBorderTop>
48 <TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
49 </TableBorderTop>
50 <TableBorderBottom>
51 <TableBorderLine Width="1" PenStyle="1" Color="Black" Shade="100"/>
52 </TableBorderBottom>
53 </CellStyle>
54 <LAYERS NUMMER="0" LEVEL="0" NAME="Fond de page" SICHTBAR="1" DRUCKEN="1" EDIT="1" SELECT="0" FLOW="1" TRANS="1" BLEND="0" OUTL="0" LAYERC="#000000"/>
55 <Printer firstUse="0" toFile="0" useAltPrintCommand="0" outputSeparations="0" useSpotColors="1" useColor="1" mirrorH="0" mirrorV="0" useICC="1" doGCR="0" doClip="0" setDevParam="0" useDocBleeds="1" cropMarks="0" bleedMarks="0" registrationMarks="0" colorMarks="0" includePDFMarks="0" PSLevel="3" PDLanguage="3" markLength="20.0012598425197" markOffset="0" BleedTop="0" BleedLeft="0" BleedRight="0" BleedBottom="0" printer="HP-Officejet-Pro-8600" filename="" separationName="All" printerCommand="">
56 <Separation Name="Cyan"/>
57 <Separation Name="Magenta"/>
58 <Separation Name="Jaune"/>
59 <Separation Name="Noir"/>
60 </Printer>
61 <PDF firstUse="1" Thumbnails="0" Articles="0" Bookmarks="0" Compress="1" CMethod="0" Quality="0" EmbedPDF="0" MirrorH="0" MirrorV="0" Clip="0" rangeSel="0" rangeTxt="" RotateDeg="0" PresentMode="0" RecalcPic="0" FontEmbedding="0" Grayscale="0" RGBMode="1" UseProfiles="0" UseProfiles2="0" Binding="0" PicRes="300" Resolution="300" Version="14" Intent="1" Intent2="0" SolidP="sRGB IEC61966-2.1" ImageP="sRGB IEC61966-2.1" PrintP="Fogra27L CMYK Coated Press" InfoString="" BTop="0" BLeft="0" BRight="0" BBottom="0" useDocBleeds="1" cropMarks="0" bleedMarks="0" registrationMarks="0" colorMarks="0" docInfoMarks="0" markLength="0" markOffset="0" ImagePr="0" PassOwner="" PassUser="" Permissions="-4" Encrypt="0" UseLayers="0" UseLpi="0" UseSpotColors="1" doMultiFile="0" displayBookmarks="0" displayFullscreen="0" displayLayers="0" displayThumbs="0" hideMenuBar="0" hideToolBar="0" fitWindow="0" openAfterExport="0" PageLayout="0" openAction="">
62 <LPI Color="Black" Frequency="133" Angle="45" SpotFunction="3"/>
63 <LPI Color="Cyan" Frequency="133" Angle="105" SpotFunction="3"/>
64 <LPI Color="Magenta" Frequency="133" Angle="75" SpotFunction="3"/>
65 <LPI Color="Yellow" Frequency="133" Angle="90" SpotFunction="3"/>
66 </PDF>
67 <DocItemAttributes/>
68 <TablesOfContents/>
69 <NotesStyles>
70 <notesStyle Name="Default" Start="1" Endnotes="0" Type="Type_1_2_3" Range="0" Prefix="" Suffix=")" AutoHeight="1" AutoWidth="1" AutoRemove="1" AutoWeld="1" SuperNote="1" SuperMaster="1" MarksStyle="" NotesStyle=""/>
71 </NotesStyles>
72 <NotesFrames/>
73 <PageSets>
74 <Set Name="Single Page" FirstPage="0" Rows="1" Columns="1"/>
75 <Set Name="Double Sided" FirstPage="1" Rows="1" Columns="2">
76 <PageNames Name="Left Page"/>
77 <PageNames Name="Right Page"/>
78 </Set>
79 <Set Name="3-Fold" FirstPage="0" Rows="1" Columns="3">
80 <PageNames Name="Left Page"/>
81 <PageNames Name="Middle"/>
82 <PageNames Name="Right Page"/>
83 </Set>
84 <Set Name="4-Fold" FirstPage="0" Rows="1" Columns="4">
85 <PageNames Name="Left Page"/>
86 <PageNames Name="Middle Left"/>
87 <PageNames Name="Middle Right"/>
88 <PageNames Name="Right Page"/>
89 </Set>
90 </PageSets>
91 <Sections>
92 <Section Number="0" Name="0" From="0" To="0" Type="Type_1_2_3" Start="1" Reversed="0" Active="1" FillChar="0" FieldWidth="0"/>
93 </Sections>
94 <MASTERPAGE PAGEXPOS="100" PAGEYPOS="20" PAGEWIDTH="595.28125984252" PAGEHEIGHT="841.889763779528" BORDERLEFT="42.5196850393701" BORDERRIGHT="42.5196850393701" BORDERTOP="65.1968503937008" BORDERBOTTOM="68.0314960629921" NUM="0" NAM="Normal" MNAM="" Size="Custom" Orientation="0" LEFT="0" PRESET="0" VerticalGuides="" HorizontalGuides="" AGhorizontalAutoGap="0" AGverticalAutoGap="0" AGhorizontalAutoCount="0" AGverticalAutoCount="0" AGhorizontalAutoRefer="0" AGverticalAutoRefer="0" AGSelection="0 0 0 0" pageEffectDuration="1" pageViewDuration="1" effectType="0" Dm="0" M="0" Di="0"/>
95 <PAGE PAGEXPOS="100" PAGEYPOS="20" PAGEWIDTH="595.28125984252" PAGEHEIGHT="841.889763779528" BORDERLEFT="42.5196850393701" BORDERRIGHT="42.5196850393701" BORDERTOP="65.1968503937008" BORDERBOTTOM="68.0314960629921" NUM="0" NAM="" MNAM="Normal" Size="Custom" Orientation="0" LEFT="0" PRESET="0" VerticalGuides="42.5197 552.756 " HorizontalGuides="206.929 773.858 65.1969 " AGhorizontalAutoGap="0" AGverticalAutoGap="0" AGhorizontalAutoCount="4" AGverticalAutoCount="1" AGhorizontalAutoRefer="1" AGverticalAutoRefer="1" AGSelection="0 0 0 0" pageEffectDuration="1" pageViewDuration="1" effectType="0" Dm="0" M="0" Di="0"/>
96 <PAGEOBJECT XPOS="142.787401574803" YPOS="84.8976377952755" OwnPage="0" ItemID="763541413" PTYPE="2" WIDTH="255.118110236221" HEIGHT="141.732283464567" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.239817738518726" LOCALSCY="0.239817738518726" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.26771653543307" gYpos="-0.29921259842519" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
97 <PAGEOBJECT XPOS="398.017716535433" YPOS="85.1259842519684" OwnPage="0" ItemID="763258741" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.26771653543307" gYpos="-0.29921259842519" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
98 <PAGEOBJECT XPOS="398.017716535433" YPOS="227.950787401575" OwnPage="0" ItemID="763533781" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.26771653543307" gYpos="0.70078740157481" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
99 <PAGEOBJECT XPOS="143.017716535433" YPOS="227.200787401575" OwnPage="0" ItemID="763299093" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.26771653543307" gYpos="-0.29921259842519" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
100 <PAGEOBJECT XPOS="397.517716535433" YPOS="369.450787401574" OwnPage="0" ItemID="769390165" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="-0.73228346456693" gYpos="0.70078740157481" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
101 <PAGEOBJECT XPOS="143.017716535433" YPOS="368.950787401574" OwnPage="0" ItemID="769428293" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.267716535433067" gYpos="-0.299212598425189" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
102 <PAGEOBJECT XPOS="397.834645669291" YPOS="511.11811023622" OwnPage="0" ItemID="763245205" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.26771653543307" gYpos="0.70078740157481" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
103 <PAGEOBJECT XPOS="142.517716535433" YPOS="510.700787401574" OwnPage="0" ItemID="763482469" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.26771653543307" gYpos="-0.29921259842519" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
104 <PAGEOBJECT XPOS="397.874015748031" YPOS="651.950787401574" OwnPage="0" ItemID="768344293" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.26771653543307" gYpos="-0.299212598425189" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
105 <PAGEOBJECT XPOS="142.602362204724" YPOS="651.700787401574" OwnPage="0" ItemID="763041925" PTYPE="2" WIDTH="255.1181102" HEIGHT="141.7322835" FRTYPE="0" CLIPEDIT="0" PWIDTH="1" PLINEART="1" LOCALSCX="0.23981773857868" LOCALSCY="0.23981773857868" LOCALX="0" LOCALY="0" LOCALROT="0" PICART="1" SCALETYPE="0" RATIO="1" Pagenumber="0" PFILE="carte ordipolo.png" PRFILE="sRGB IEC61966-2.1" IRENDER="0" EMBEDDED="0" path="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" copath="M0 0 L255.118 0 L255.118 141.732 L0 141.732 L0 0 Z" gXpos="0.26771653543307" gYpos="-0.299212598425189" gWidth="0" gHeight="0" LAYER="0" NEXTITEM="-1" BACKITEM="-1"/>
106 </DOCUMENT>
107</SCRIBUSUTF8NEW>
diff --git a/pub/flyer.pdf b/pub/flyer.pdf
new file mode 100644
index 0000000..87c4426
--- /dev/null
+++ b/pub/flyer.pdf
Binary files differ
diff --git a/pub/flyer.xcf b/pub/flyer.xcf
new file mode 100644
index 0000000..c8cb7f3
--- /dev/null
+++ b/pub/flyer.xcf
Binary files differ