summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-12-19 02:51:03 +0100
committerpolo <ordipolo@gmx.fr>2022-12-19 02:51:03 +0100
commitdedbe2f5cee33431c1299c7f0dbef4e247dc2447 (patch)
tree4d2481ca044aae30886a9879acd53c4777c180bc
parentff14091476a35de16a9ea3208501040cfae93a06 (diff)
downloadAppliGestionPHP-dedbe2f5cee33431c1299c7f0dbef4e247dc2447.zip
nouveau client main.php en cours
-rw-r--r--config.php33
-rw-r--r--data/ordipolo.png (renamed from data/latex/ordipolo.png)bin46751 -> 46751 bytes
-rw-r--r--data/originaux_latex/devis.tex (renamed from data/latex/devis.tex)15
-rw-r--r--data/originaux_latex/enveloppe_recto.tex (renamed from data/latex/enveloppe_recto.tex)2
-rw-r--r--data/originaux_latex/enveloppe_verso.tex (renamed from data/latex/enveloppe_verso.tex)0
-rw-r--r--data/originaux_latex/facture.tex (renamed from data/latex/facture.tex)2
-rw-r--r--data/originaux_latex/location.tex (renamed from data/latex/location.tex)2
-rw-r--r--src/functions.php52
-rw-r--r--src/latex_templates/devis.php19
-rw-r--r--src/latex_templates/enveloppe_recto.php6
-rw-r--r--src/latex_templates/enveloppe_verso.php4
-rw-r--r--src/latex_templates/facture.php13
-rw-r--r--src/latex_templates/location.php51
-rwxr-xr-xsrc/main.php215
-rw-r--r--src/model/CESU.php5
-rw-r--r--src/model/Clients.php13
-rw-r--r--src/model/DevisFactures.php5
-rw-r--r--src/model/Locations.php5
-rw-r--r--src/model/Model.php14
-rw-r--r--src/model/Prestations.php5
-rw-r--r--src/model/StructTablesDB.php4
-rw-r--r--src/model/traits.php16
-rw-r--r--src/view/Zenity.php20
-rw-r--r--src/view/zenity_setup.php4
-rw-r--r--structure base de données.odsbin22823 -> 25146 bytes
25 files changed, 324 insertions, 181 deletions
diff --git a/config.php b/config.php
index b824df3..2fec5ad 100644
--- a/config.php
+++ b/config.php
@@ -15,20 +15,25 @@ $db_place = '../data/';
15 15
16 16
17// le dossier latex par défaut est celui "inclu" dans ce programme 17// le dossier latex par défaut est celui "inclu" dans ce programme
18// $receiptsLaTeX = '../data/latex/'; 18// $receipts_latex = '../data/latex/';
19$receiptsLaTeX = '../data/latex/'; 19$receipts_latex = '../data/latex/';
20// $receiptsPDF = '../data/pdf/'; 20// $receipts_pdf = '../data/pdf/';
21$receiptsPDF = '../data/pdf/'; 21$receipts_pdf = '../data/pdf/';
22 22
23// $quotationsLaTeX = '../data/latex/'; 23// $quotations_latex = '../data/latex/';
24$quotationsLaTeX = '../data/latex/'; 24$quotations_latex = '../data/latex/';
25// $quotationsPDF = '../data/pdf/'; 25// $quotations_pdf = '../data/pdf/';
26$quotationsPDF = '../data/pdf/'; 26$quotations_pdf = '../data/pdf/';
27 27
28// $envelopesLaTeX = '../data/latex/'; 28// $envelopes_latex = '../data/latex/';
29$envelopesLaTeX = '../data/latex/'; 29$envelopes_latex = '../data/latex/';
30// $envelopesPDF = '../data/pdf/'; 30// $envelopes_pdf = '../data/pdf/';
31$envelopesPDF = '../data/pdf/'; 31$envelopes_pdf = '../data/pdf/';
32
33// $rental_latex = '../data/latex/';
34$rental_latex = '../data/latex/';
35// $rental_pdf = '../data/pdf/';
36$rental_pdf = '../data/pdf/';
32 37
33 38
34// $pub = "~/ORDIPOLO/PUB/"; // dossier extérieur au choix 39// $pub = "~/ORDIPOLO/PUB/"; // dossier extérieur au choix
diff --git a/data/latex/ordipolo.png b/data/ordipolo.png
index 2acd67d..2acd67d 100644
--- a/data/latex/ordipolo.png
+++ b/data/ordipolo.png
Binary files differ
diff --git a/data/latex/devis.tex b/data/originaux_latex/devis.tex
index debcdc5..c5ae6e8 100644
--- a/data/latex/devis.tex
+++ b/data/originaux_latex/devis.tex
@@ -18,7 +18,7 @@
18 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert 18 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
19 19
20 \begin{center} 20 \begin{center}
21 \includegraphics{ordipolo.png}\\ 21 \includegraphics{../ordipolo.png}\\
22 \Large\textbf{Dépannage informatique - Assistance à domicile} 22 \Large\textbf{Dépannage informatique - Assistance à domicile}
23 \end{center} 23 \end{center}
24 24
@@ -73,7 +73,14 @@
73 \draw (0,0) rectangle (4,2); 73 \draw (0,0) rectangle (4,2);
74 \end{tikzpicture}\\ 74 \end{tikzpicture}\\
75 75
76 \small{}NOTA BENE\\ 76 \normalsize{}NOTA BENE\\
77
78 Si le délai de livraison n'est pas spécifié, un délai d'un mois est appliqué.
77 79
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. 80 Si Ordipolo garde votre ordinateur le temps nécessaire à la réparation, un reçu vous est remis.
79\end{document} \ No newline at end of file 81 Le client peut bénéficier gratuitement d'un ordinateur de prêt sur demande et selon disponibilité.
82
83 La réparation inclut l'intervention sur les logiciels et si nécessaire le démontage et remontage de la machine et le 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.
84
85 Les prestations d'Ordipolo sont régies par le code du commerce.
86\end{document}
diff --git a/data/latex/enveloppe_recto.tex b/data/originaux_latex/enveloppe_recto.tex
index d1f3f43..eab03f8 100644
--- a/data/latex/enveloppe_recto.tex
+++ b/data/originaux_latex/enveloppe_recto.tex
@@ -10,7 +10,7 @@
10 10
11\begin{document} 11\begin{document}
12 \setlength{\parindent}{0cm} 12 \setlength{\parindent}{0cm}
13 \includegraphics{ordipolo.png}\\ 13 \includegraphics{../ordipolo.png}\\
14 \large\textbf{Dépannage informatique - Assistance à domicile} 14 \large\textbf{Dépannage informatique - Assistance à domicile}
15 15
16 \setlength{\parindent}{7,9cm} 16 \setlength{\parindent}{7,9cm}
diff --git a/data/latex/enveloppe_verso.tex b/data/originaux_latex/enveloppe_verso.tex
index 24baa8a..24baa8a 100644
--- a/data/latex/enveloppe_verso.tex
+++ b/data/originaux_latex/enveloppe_verso.tex
diff --git a/data/latex/facture.tex b/data/originaux_latex/facture.tex
index babb2ab..5c849f5 100644
--- a/data/latex/facture.tex
+++ b/data/originaux_latex/facture.tex
@@ -17,7 +17,7 @@
17 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert 17 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
18 18
19 \begin{center} 19 \begin{center}
20 \includegraphics{ordipolo.png}\\ 20 \includegraphics{../ordipolo.png}\\
21 \Large\textbf{Dépannage informatique - Assistance à domicile} 21 \Large\textbf{Dépannage informatique - Assistance à domicile}
22 \end{center} 22 \end{center}
23 23
diff --git a/data/latex/location.tex b/data/originaux_latex/location.tex
index bcfb1e5..0d525fe 100644
--- a/data/latex/location.tex
+++ b/data/originaux_latex/location.tex
@@ -18,7 +18,7 @@
18 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert 18 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
19 19
20 \begin{center} 20 \begin{center}
21 \includegraphics{ordipolo.png}\\ 21 \includegraphics{../ordipolo.png}\\
22 \Large\textbf{Dépannage informatique - Assistance à domicile} 22 \Large\textbf{Dépannage informatique - Assistance à domicile}
23 \end{center} 23 \end{center}
24 24
diff --git a/src/functions.php b/src/functions.php
index d67a05e..6ddbae0 100644
--- a/src/functions.php
+++ b/src/functions.php
@@ -1,11 +1,11 @@
1<?php 1<?php
2// php/functions.php 2// src/functions.php
3// 3//
4// gros fourre-tout, il faudra le ranger plus tard 4// gros fourre-tout, à ranger plus tard
5 5
6 6
7// commande pour lancer une application graphique en ouvrant un fichier 7// commande pour lancer une application graphique en ouvrant un fichier
8function window_app_command(string $app, string $path = ''): string 8function windowAppCommand(string $app, string $path = ''): string
9{ 9{
10 // attention, la syntaxe utilisée est la plus simple: "app fichier" 10 // attention, la syntaxe utilisée est la plus simple: "app fichier"
11 // ça fonctionne avec les logiciels choisis: gimp, scribus 11 // ça fonctionne avec les logiciels choisis: gimp, scribus
@@ -22,7 +22,7 @@ function window_app_command(string $app, string $path = ''): string
22 return $command; 22 return $command;
23} 23}
24 24
25function recherche_client(string $saisie): array 25function rechercheClient(string $saisie): array
26{ 26{
27 $resultats = []; 27 $resultats = [];
28 28
@@ -32,8 +32,50 @@ function recherche_client(string $saisie): array
32 return($resultats); 32 return($resultats);
33} 33}
34 34
35// NOTE 1: les objets sont passés aux fonctions par référence par défaut, toutefois ce n'est pas entièrement vrai
36// NOTE 2: PHP n'a pas de pointeur mais des références, une référence est un alias qui ne contient pas l'objet lui-même
37// NOTE 3: la variable créée lors d'un "new" est elle-même une référence contenant un identifiant (= le pointeur?)
38// NOTE 4: l'objet est détruit lorsque la dernière référence est supprimée
39
40function enregistrementNouveauClient(Clients $Client, ZenityForms $NouveauClient)
41{
42 $entry = exec($NouveauClient->get());
43 if($entry !== '')
44 {
45 $tableau = explode('|', $entry);
46 if(count($tableau) === 4)
47 {
48 $Client->newRow($tableau);
49 return true;
50 }
51 else
52 {
53 echo "debug: mauvais tableau, il doit avoir 4 cases\n";
54 return false;
55 }
56 }
57 else
58 {
59 echo "debug: pas de données saisies\n";
60 return false;
61 }
62}
63
64function getLatexFromTemplate(string $template)
65{
66 // variables à injecter
67 $nom_client = "M. Duchmol";
68
69 // on obtient la variable $latex avec ob_get_clean()
70 include('latex_templates/' . $template . '.php');
71
72 // on retourne le buffer
73 // normallement le code PHP inséré avec include est nettoyé en quittant la fonction
74 return($latex);
75}
76
35// compilation à partir d'un fichier .tex 77// compilation à partir d'un fichier .tex
36function latexToPdf(string $fileName, string $latexPath, string $pdfPath) 78function latexToPdf(string $latexPath, string $fileName, string $pdfPath)
37{ 79{
38 $outputDir = ''; 80 $outputDir = '';
39 if($pdfPath !== '') 81 if($pdfPath !== '')
diff --git a/src/latex_templates/devis.php b/src/latex_templates/devis.php
index 7df98e8..8f5e640 100644
--- a/src/latex_templates/devis.php
+++ b/src/latex_templates/devis.php
@@ -1,4 +1,6 @@
1<?php 1<?php
2// latex_templates/devis.php
3
2ob_start(); 4ob_start();
3?> 5?>
4\documentclass{report} 6\documentclass{report}
@@ -21,7 +23,7 @@ ob_start();
21 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert 23 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
22 24
23 \begin{center} 25 \begin{center}
24 \includegraphics{ordipolo.png}\\ 26 \includegraphics{../ordipolo.png}\\
25 \Large\textbf{Dépannage informatique - Assistance à domicile} 27 \Large\textbf{Dépannage informatique - Assistance à domicile}
26 \end{center} 28 \end{center}
27 29
@@ -43,7 +45,7 @@ ob_start();
43 CLIENT\\ 45 CLIENT\\
44 46
45 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} 47 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}}
46 Mme, M : \textcolor{vert}{} & 48 Mme, M : \textcolor{vert}{<?= $nom_client ?>} &
47 Date du devis : \textcolor{vert}{}\\ 49 Date du devis : \textcolor{vert}{}\\
48 Adresse : \textcolor{vert}{} & 50 Adresse : \textcolor{vert}{} &
49 Delai de livraison : \textcolor{vert}{}\\ 51 Delai de livraison : \textcolor{vert}{}\\
@@ -76,9 +78,16 @@ ob_start();
76 \draw (0,0) rectangle (4,2); 78 \draw (0,0) rectangle (4,2);
77 \end{tikzpicture}\\ 79 \end{tikzpicture}\\
78 80
79 \small{}NOTA BENE\\ 81 \normalsize{}NOTA BENE\\
82
83 Si le délai de livraison n'est pas spécifié, un délai d'un mois est appliqué.
80 84
81 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. 85 Si Ordipolo garde votre ordinateur le temps nécessaire à la réparation, un reçu vous est remis.
86 Le client peut bénéficier gratuitement d'un ordinateur de prêt sur demande et selon disponibilité.
87
88 La réparation inclut l'intervention sur les logiciels et si nécessaire le démontage et remontage de la machine et le 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.
89
90 Les prestations d'Ordipolo sont régies par le code du commerce.
82\end{document} 91\end{document}
83<?php 92<?php
84$devisLatex = ob_get_clean(); 93$latex = ob_get_clean();
diff --git a/src/latex_templates/enveloppe_recto.php b/src/latex_templates/enveloppe_recto.php
index 38003a1..99d65a1 100644
--- a/src/latex_templates/enveloppe_recto.php
+++ b/src/latex_templates/enveloppe_recto.php
@@ -1,4 +1,6 @@
1<?php 1<?php
2// latex_templates/enveloppe_recto.php
3
2ob_start(); 4ob_start();
3?> 5?>
4\documentclass[]{report} 6\documentclass[]{report}
@@ -13,7 +15,7 @@ ob_start();
13 15
14\begin{document} 16\begin{document}
15 \setlength{\parindent}{0cm} 17 \setlength{\parindent}{0cm}
16 \includegraphics{ordipolo.png}\\ 18 \includegraphics{../ordipolo.png}\\
17 \large\textbf{Dépannage informatique - Assistance à domicile} 19 \large\textbf{Dépannage informatique - Assistance à domicile}
18 20
19 \setlength{\parindent}{7,9cm} 21 \setlength{\parindent}{7,9cm}
@@ -23,4 +25,4 @@ ob_start();
23 \end{minipage} 25 \end{minipage}
24\end{document} 26\end{document}
25<?php 27<?php
26$enveloppeRectoLatex = ob_get_clean(); 28$latex = ob_get_clean();
diff --git a/src/latex_templates/enveloppe_verso.php b/src/latex_templates/enveloppe_verso.php
index 51f5f4d..ae2e716 100644
--- a/src/latex_templates/enveloppe_verso.php
+++ b/src/latex_templates/enveloppe_verso.php
@@ -1,4 +1,6 @@
1<?php 1<?php
2// latex_templates/enveloppe_verso.php
3
2ob_start(); 4ob_start();
3?> 5?>
4\documentclass[]{report} 6\documentclass[]{report}
@@ -15,4 +17,4 @@ ob_start();
15 \Large{Paul Jusot\\2A, rue de l'île de Man\\29000 QUIMPER} 17 \Large{Paul Jusot\\2A, rue de l'île de Man\\29000 QUIMPER}
16\end{document} 18\end{document}
17<?php 19<?php
18$enveloppeVersoLatex = ob_get_clean(); 20$latex = ob_get_clean();
diff --git a/src/latex_templates/facture.php b/src/latex_templates/facture.php
index 409dd9a..5d62b91 100644
--- a/src/latex_templates/facture.php
+++ b/src/latex_templates/facture.php
@@ -1,4 +1,6 @@
1<?php 1<?php
2// latex_templates/facture.php
3
2ob_start(); 4ob_start();
3?> 5?>
4\documentclass{report} 6\documentclass{report}
@@ -20,7 +22,7 @@ ob_start();
20 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert 22 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
21 23
22 \begin{center} 24 \begin{center}
23 \includegraphics{ordipolo.png}\\ 25 \includegraphics{../ordipolo.png}\\
24 \Large\textbf{Dépannage informatique - Assistance à domicile} 26 \Large\textbf{Dépannage informatique - Assistance à domicile}
25 \end{center} 27 \end{center}
26 28
@@ -79,7 +81,12 @@ ob_start();
79 81
80 \small{}NOTA BENE\\ 82 \small{}NOTA BENE\\
81 83
82 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. 84 Si Ordipolo garde votre ordinateur le temps nécessaire à la réparation, un reçu vous est remis.
85 Le client peut bénéficier gratuitement d'un ordinateur de prêt sur demande et selon disponibilité.
86
87 La réparation inclut l'intervention sur les logiciels et si nécessaire le démontage et remontage de la machine et le 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.
88
89 Les prestations d'Ordipolo sont régies par le code du commerce.
83\end{document} 90\end{document}
84<?php 91<?php
85$factureLatex = ob_get_clean(); 92$latex = ob_get_clean();
diff --git a/src/latex_templates/location.php b/src/latex_templates/location.php
index dc4ea3e..dbffd0e 100644
--- a/src/latex_templates/location.php
+++ b/src/latex_templates/location.php
@@ -1,4 +1,6 @@
1<?php 1<?php
2// latex_templates/location.php
3
2ob_start(); 4ob_start();
3?> 5?>
4\documentclass{report} 6\documentclass{report}
@@ -21,7 +23,7 @@ ob_start();
21 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert 23 \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert
22 24
23 \begin{center} 25 \begin{center}
24 \includegraphics{ordipolo.png}\\ 26 \includegraphics{../ordipolo.png}\\
25 \Large\textbf{Dépannage informatique - Assistance à domicile} 27 \Large\textbf{Dépannage informatique - Assistance à domicile}
26 \end{center} 28 \end{center}
27 29
@@ -36,14 +38,49 @@ ob_start();
36 Plus d'infos sur le site web: https\string://ordipolo.fr\\ 38 Plus d'infos sur le site web: https\string://ordipolo.fr\\
37 % \string supprime l'espace devant les : 39 % \string supprime l'espace devant les :
38 40
39 CLIENT\\ 41 \begin{center}
42 \large\textbf{CONTRAT DE LOCATION}
43 \end{center}
44
45 PROPRIÉTAIRE\\
46
47 Mme, M : \textcolor{vert}{Paul Jusot}\\
48 Adresse : \textcolor{vert}{2A, rue de l'île de Man, 29000 Quimper}\\
49
50 LOCATAIRE\\
51
52 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}}
53 Mme, M : \textcolor{vert}{} & tel : \textcolor{vert}{}\\
54 Adresse : \textcolor{vert}{} & courriel : \textcolor{vert}{}
55 \end{tabularx}\\\\
56
57 BIEN LOUÉ\\
58
59 Désignation : \textcolor{vert}{}\\
60 Modèle, description : \textcolor{vert}{}\\
61
62 État des lieux initial : \textcolor{vert}{}\\\\
63
64 État des lieux final : \textcolor{vert}{}\\\\
65
66 CLAUSES\\
67
68 Durée du prêt : \textcolor{vert}{}\\
69 Loyer mensuel : \textcolor{vert}{}\\
70
71
72 \textbf{Le bénéficiaire de cette location s’engage à prendre soin du bien désigné et à en faire un usage strictement personnel.}\\
73
74 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}}
75 Fait en deux exemplaires à : \textcolor{vert}{} & le : \textcolor{vert}{} \\
76 \end{tabularx}\\
40 77
41 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} 78 \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}}
42 Mme, M : \textcolor{vert}{} & 79 Le bénéficiaire du prêt : \textcolor{vert}{} &
43 Date : \textcolor{vert}{}\\ 80 Le loueur : \textcolor{vert}{}\\
44 \end{tabularx}\\ 81 \end{tabularx}\\
45 Adresse : \textcolor{vert}{}\\ 82 \normalsize(précéder la signature de la mention « lu et approuvé »)
46 83
47\end{document} 84\end{document}
48<?php 85<?php
49$locationLatex = ob_get_clean(); 86$latex = ob_get_clean();
diff --git a/src/main.php b/src/main.php
index e890744..eacd3b3 100755
--- a/src/main.php
+++ b/src/main.php
@@ -4,8 +4,10 @@
4 4
5// configuration du programme par l'utilisateur 5// configuration du programme par l'utilisateur
6require('../config.php'); // fichier de l'utilisateur: à déplacer peut-être dans un dossier config 6require('../config.php'); // fichier de l'utilisateur: à déplacer peut-être dans un dossier config
7
8// à coder peut-être plus tard
9//require('config_check.php'); // contrôle de config.php, on ajoutera des / aux chemins quand ils manquent
7//require('config_window.php'); // configuration user-friendly et assistée avec des messages d'erreur et des indications 10//require('config_window.php'); // configuration user-friendly et assistée avec des messages d'erreur et des indications
8//require('config_check.php'); // contrôle de config.php
9 11
10// variables diverses, certaines utilisent les variables de config.php 12// variables diverses, certaines utilisent les variables de config.php
11$exec_mode = 'gui'; // les versions pure console (CLI) et serveur web (CGI) de ce programme ne sont pas prévues pour l'instant 13$exec_mode = 'gui'; // les versions pure console (CLI) et serveur web (CGI) de ce programme ne sont pas prévues pour l'instant
@@ -29,135 +31,154 @@ require('model/Model.php'); // class Model extends DB, requêtes SQL
29require('model/StructTablesDB.php'); 31require('model/StructTablesDB.php');
30Model::createTables(); 32Model::createTables();
31 33
34require('model/traits.php');
32require('model/Clients.php'); 35require('model/Clients.php');
33require('model/Prestations.php'); 36require('model/Prestations.php');
34require('model/DevisFactures.php'); 37require('model/DevisFactures.php');
35require('model/CESU.php'); 38require('model/CESU.php');
36require('model/Locations.php'); 39require('model/Locations.php');
37 40
38// instancier et supprimer à chaque fois quand nécessaire
39$Client = new Clients();
40$Client->setPrenom_nom('Jean Némar')->setAdresse('10, rue des douves')->setCode_client('464653476')->setCommentaires('un peu chiant');
41$Client->create();
42
43// même chose avec un tableau en entrée au lieu d'écrire toutes les méthodes
44$input = ['prenom_nom' => 'Eva Casquer', 'adresse' => "2, place d'Écosse", 'code_client' => '958465875', 'commentaires' => 'bonne vache à lait'];
45$Client->hydrate($input);
46$Client->create();
47
48$input = ['prenom_nom' => 'Eva Paparla', 'commentaires' => 'grosse nunuche'];
49$Client->hydrate($input);
50$Client->update(2);
51
52$Client->delete(3);
53
54//$Date = new Dates;
55
56
57require('view/Zenity.php'); // commande système zenity 41require('view/Zenity.php'); // commande système zenity
58require('view/zenity_setup.php'); // texte dans les fenêtres ET instanciation (un objet = une commande) 42require('view/zenity_setup.php'); // texte dans les fenêtres ET instanciation (un objet = une commande)
59require('Latex.php'); // générer le code LaTeX 43require('Latex.php'); // générer le code LaTeX
60 44
61// injection de variables dans le document 45/* SYNTAXE BDD */
62// problème à régler: et si je veux faire une deuxième facture? 46// chaînage de méthodes
63//~ include('latex_templates/devis.php'); 47//~ $Client->setPrenom_nom('Jean Némar')->setAdresse('10, rue des douves')->setCode_client('464653476')->setCommentaires('un peu chiant');
64//~ include('latex_templates/facture.php'); 48//~ $Client->create();
65//~ include('latex_templates/enveloppe_recto.php'); 49
66//~ include('latex_templates/enveloppe_verso.php'); 50// tableau en entrée
67//~ include('latex_templates/location.php'); 51//~ $input = ['prenom_nom' => 'Eva Casquer', 'adresse' => "2, place d'Écosse", 'code_client' => '958465875', 'commentaires' => 'bonne vache à lait'];
52//~ $Client->hydrate($input);
53//~ $Client->create();
54
55//~ $input = ['prenom_nom' => 'Eva Paparla', 'commentaires' => 'grosse nunuche'];
56//~ $Client->hydrate($input);
57//~ $Client->update(2);
58
59//~ $Client->delete(3);
68 60
69 61
70// boucle principale 62// boucle principale
71$boucle = true; 63$boucle = true;
72while($boucle) 64while($boucle)
73{ 65{
74 // menu principal 66 // niveau 1: menu principal
75 $choix_niv1 = exec($MenuPrincipal->get()); 67 $choix_niv1 = exec($MenuPrincipal->get());
76 68
77 // enregistrement 69 // Nouvelle prestation
78 if($choix_niv1 === $menu_principal_entrees[0]) // = Nouvelle prestation 70 if($choix_niv1 === $menu_principal_entrees[0])
79 { 71 {
80 // est ce que le client est déjà dans la base? 72 $Client = new Clients;
81 if(exec($QuestionNouveauClient->get()) === 0) // $? = 0 signifie oui 73 $id_client_connu = false;
74
75 // niveau 2: est ce que le client est déjà dans la base?
76 if(exec($QuestionNouveauClient->get()) == '0') // $? = 0 signifie oui, double égal == pour le transtypage
82 { 77 {
83 // saisie du nom du client et recherche 78 echo "debug: recherche souhaitée\n";
84 $client_saisie = exec($RechercheClient->get());
85 79
86 // sélection parmi les résultats 80 // niveau 3: saisie du nom du client
87 $ResultatsRechercheClient->setEntries(recherche_client($client_saisie)); 81 $client_saisie = exec($RechercheClient->get());
88 $choix_niv2 = exec($ResultatsRechercheClient->get()); 82 if($client_saisie !== '')
89 if($choix_niv2 !== '')
90 { 83 {
91 echo "client trouvé\n"; 84 echo "debug: recherche effectuée\n";
85
86 $ResultatsRechercheClient->setEntries(rechercheClient($client_saisie)); // recherche silencieuse
87
88 // niveau 4: sélection parmi les résultats
89 $choix_niv4 = exec($ResultatsRechercheClient->get());
90 if($choix_niv4 !== '')
91 {
92 echo "debug: client sélectionné\n";
93 $id_client_connu = true;
94 }
95 else
96 {
97 echo "debug: client pas trouvé ou pas sélectionné\n";
98 }
92 } 99 }
93 else // chaîne vide 100 else
94 { 101 {
95 echo "client pas trouvé\n"; 102 echo "debug: recherche annulée ou saisie vide\n";
96 exec($NouveauClient->get());
97
98 // enregistrement dans la BDD
99
100 } 103 }
101
102 // récupération des infos dans la BDD
103
104 } 104 }
105 else 105 else
106 { 106 {
107 echo "nouveau client\n"; 107 echo "debug: nouveau client\n";
108 exec($NouveauClient->get());
109
110 // enregistrement dans la BDD
111
112 } 108 }
113 109
114 // choix type comptable: devis, facture, cesu 110 // niveau 2: on n'a pas cherché OU on n'a pas trouvé
115 $choix_niv2 = exec($MenuEnregistrement->get()); 111 if(!$id_client_connu)
116 $continuer = true;
117 if($choix_niv2 === $menu_enregistrement_entrees[0])
118 {
119 //
120 }
121 elseif($choix_niv2 === $menu_enregistrement_entrees[1])
122 { 112 {
123 // 113 $id_client_connu = enregistrementNouveauClient($Client, $NouveauClient);
124 }
125 elseif($choix_niv2 === $menu_enregistrement_entrees[2])
126 {
127 //
128 }
129 elseif($choix_niv2 === $menu_enregistrement_entrees[3])
130 {
131 //
132 }
133 else
134 {
135 $continuer = false; // retour menu principal
136 } 114 }
137 115
138 // détail de la prestation 116 // niveau 2: type comptable d'enregistrement: devis, facture, cesu ou pas de prestation
139 if($continuer) 117 if($id_client_connu)
140 { 118 {
141 exec($Calendrier->get()); 119 $choix_niv2 = exec($MenuEnregistrement->get());
142 exec($FormulairePrestation->get()); 120 $continuer = true;
143 // enregistrement date et prestation en BDD 121 if($choix_niv2 === $menu_enregistrement_entrees[0])
144 exec($CommentairePrestation->get()); 122 {
145 // enregistrement commentaire en BDD 123 //
146 // vérification? 124 }
147 125 elseif($choix_niv2 === $menu_enregistrement_entrees[1])
148 // tableau récaptilatif et demande de confirmation des informations 126 {
149 // création fichiers LaTeX et PDF 127 //
150 128 }
151 // imprimer? 129 elseif($choix_niv2 === $menu_enregistrement_entrees[2])
152 //~ $imprimer_facture = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer la facture?"'); 130 {
153 //~ $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"'); 131 //
132 }
133 elseif($choix_niv2 === $menu_enregistrement_entrees[3])
134 {
135 //
136 }
137 else
138 {
139 $continuer = false; // retour menu principal
140 }
141
142 if($continuer)
143 {
144 //niveau 3: détail de la prestation
145 $Date = new Dates(exec($Calendrier->get()));
146 $Objet->setDate($Date->getTimestamp()); // enregistrement du timestamp en BDD
147
148 exec($FormulairePrestation->get());
149 // enregistrement date et prestation en BDD
150
151 exec($CommentairePrestation->get());
152 // enregistrement commentaire en BDD
153 // vérification?
154
155 // tableau récaptilatif et demande de confirmation des informations
156
157 // création fichiers LaTeX et PDF
158 //~ $latex_path = '../data/latex/'; // noms de variables dans le config.php
159 //~ $file_name = 'devis.tex';
160 //~ $template = 'devis'; // vaut 'devis' ou 'enveloppe_recto' ou 'enveloppe_verso' ou 'facture' ou 'location'
161 //~ $latex = getLatexFromTemplate($template);
162 //~ file_put_contents($latex_path . $file_name, $latex); // injection des variables & écriture du fichier
163 //~ $pdf_path = '../data/pdf/';
164 //~ latexToPdf($latex_path, $file_name, $pdf_path);
165
166 // imprimer?
167 //~ $imprimer_facture = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer la facture?"');
168 //~ $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"');
169 }
154 } 170 }
171 unset($Client); // suppression de la dernière référence (normallement)
155 } 172 }
156 173
157 elseif($choix_niv1 === $menu_principal_entrees[1]) // = Modifier un enregistrement 174 // Modifier un enregistrement
158 {} 175 elseif($choix_niv1 === $menu_principal_entrees[1])
176 {
177 // niveau 2:
178 }
159 179
160 elseif($choix_niv1 === $menu_principal_entrees[2]) // = Fichier clients 180 // Fichier clients
181 elseif($choix_niv1 === $menu_principal_entrees[2])
161 { 182 {
162 // quel affichage? un grand tableau avec zenity? une page web? un document LaTeX? 183 // quel affichage? un grand tableau avec zenity? une page web? un document LaTeX?
163 } 184 }
@@ -202,15 +223,15 @@ while($boucle)
202 $choix_niv2 = exec($MenuCommunication->get()); 223 $choix_niv2 = exec($MenuCommunication->get());
203 if($choix_niv2 === $menu_communication_entrees[0]) // = Flyer (nécessite gimp) 224 if($choix_niv2 === $menu_communication_entrees[0]) // = Flyer (nécessite gimp)
204 { 225 {
205 exec(window_app_command($image_editor, $flyer)); 226 exec(windowAppCommand($image_editor, $flyer));
206 } 227 }
207 elseif($choix_niv2 === $menu_communication_entrees[1]) // = Carte de visite (nécessite scribus) 228 elseif($choix_niv2 === $menu_communication_entrees[1]) // = Carte de visite (nécessite scribus)
208 { 229 {
209 exec(window_app_command($publishing, $business_card)); 230 exec(windowAppCommand($publishing, $business_card));
210 } 231 }
211 elseif($choix_niv2 === $menu_communication_entrees[2]) // = Explorateur de fichiers 232 elseif($choix_niv2 === $menu_communication_entrees[2]) // = Explorateur de fichiers
212 { 233 {
213 exec(window_app_command($file_explorer, $pub)); 234 exec(windowAppCommand($file_explorer, $pub));
214 } 235 }
215 else 236 else
216 { 237 {
@@ -223,7 +244,7 @@ while($boucle)
223 { 244 {
224 if($sqlitebrowser_enable) 245 if($sqlitebrowser_enable)
225 { 246 {
226 exec(window_app_command($sqlite_gui, $db_place)); 247 exec(windowAppCommand($sqlite_gui, $db_place));
227 } 248 }
228 else 249 else
229 { 250 {
diff --git a/src/model/CESU.php b/src/model/CESU.php
index 4679da2..28a54a8 100644
--- a/src/model/CESU.php
+++ b/src/model/CESU.php
@@ -12,10 +12,7 @@ class CESU extends Model
12 private $duree_travail; 12 private $duree_travail;
13 private $salaire; 13 private $salaire;
14 14
15 public function __construct() 15 use ModelChildren;
16 {
17 $this->table = self::TABLE; // => Model::$table
18 }
19 16
20 // setters 17 // setters
21 public function setID(int $value) 18 public function setID(int $value)
diff --git a/src/model/Clients.php b/src/model/Clients.php
index 1256458..816cff3 100644
--- a/src/model/Clients.php
+++ b/src/model/Clients.php
@@ -10,10 +10,7 @@ class Clients extends Model
10 public $code_client; 10 public $code_client;
11 public $commentaires; 11 public $commentaires;
12 12
13 public function __construct() 13 use ModelChildren; // renseigne parent::table
14 {
15 $this->table = strtolower(__CLASS__); // simple parce que la classe a le nom de la table
16 }
17 14
18 //~ public function set(string $variable, $value) 15 //~ public function set(string $variable, $value)
19 //~ { 16 //~ {
@@ -47,4 +44,12 @@ class Clients extends Model
47 $this->commentaires = $value; 44 $this->commentaires = $value;
48 return($this); 45 return($this);
49 } 46 }
47
48
49 public function newRow(array $entry)
50 {
51 $this->hydrate(['prenom_nom' => $entry[0], 'adresse' => $entry[1], 'code_client' => $entry[2], 'commentaires' => $entry[3]]);
52 $this->create();
53 $this->setIdFromLastInsertID();
54 }
50} 55}
diff --git a/src/model/DevisFactures.php b/src/model/DevisFactures.php
index be733dd..218ebfe 100644
--- a/src/model/DevisFactures.php
+++ b/src/model/DevisFactures.php
@@ -19,10 +19,7 @@ class DevisFactures extends Model
19 private $deplacement; 19 private $deplacement;
20 private $total_HT; 20 private $total_HT;
21 21
22 public function __construct() 22 use ModelChildren;
23 {
24 $this->table = strtolower(__CLASS__);
25 }
26 23
27 // setters 24 // setters
28 public function setID(int $value) 25 public function setID(int $value)
diff --git a/src/model/Locations.php b/src/model/Locations.php
index 2aa175a..b788d43 100644
--- a/src/model/Locations.php
+++ b/src/model/Locations.php
@@ -15,10 +15,7 @@ class Locations extends Model
15 private $loyer_mensuel; 15 private $loyer_mensuel;
16 private $total_HT; 16 private $total_HT;
17 17
18 public function __construct() 18 use ModelChildren;
19 {
20 $this->table = strtolower(__CLASS__);
21 }
22 19
23 // setters 20 // setters
24 public function setID(int $value) 21 public function setID(int $value)
diff --git a/src/model/Model.php b/src/model/Model.php
index ad9e6c7..9effbe7 100644
--- a/src/model/Model.php
+++ b/src/model/Model.php
@@ -3,7 +3,7 @@
3 3
4class Model extends DB 4class Model extends DB
5{ 5{
6 private $db; // instance de PDO 6 protected $db; // instance de PDO
7 protected $table; // <= enfant 7 protected $table; // <= enfant
8 //static protected $tableStructure; 8 //static protected $tableStructure;
9 9
@@ -12,7 +12,6 @@ class Model extends DB
12 $this->db = parent::getInstance(); // connexion 12 $this->db = parent::getInstance(); // connexion
13 } 13 }
14 14
15
16 // setters (plusieurs en même temps) 15 // setters (plusieurs en même temps)
17 public function hydrate(array $data) // $data = tableau associatif en entrée: nom_du_champ => valeur 16 public function hydrate(array $data) // $data = tableau associatif en entrée: nom_du_champ => valeur
18 { 17 {
@@ -51,7 +50,7 @@ class Model extends DB
51 } 50 }
52 51
53 52
54 // méthodes CRUD qui marchent (les spécifiques sont dans les classes enfant) 53 // méthodes CRUD
55 54
56 // create INSERT 55 // create INSERT
57 public function create() // = write 56 public function create() // = write
@@ -79,17 +78,17 @@ class Model extends DB
79 78
80 79
81 // read SELECT 80 // read SELECT
82 public function readAll() 81 public function readAll() // obtenir une table
83 { 82 {
84 $query = $this->execQuery('SELECT * FROM ' . $this->table . ';'); // fonctionne aussi sans le point virgule dans le SQL!! 83 $query = $this->execQuery('SELECT * FROM ' . $this->table . ';'); // fonctionne aussi sans le point virgule dans le SQL!!
85 return($query->fetchAll()); 84 return($query->fetchAll());
86 } 85 }
87 public function findById(int $id) 86 public function findById(int $id) // obtenir une entrée avec son ID
88 { 87 {
89 return($this->execQuery('SELECT * FROM ' . $this->table . ' WHERE id = ' . $id)->fetch()); 88 return($this->execQuery('SELECT * FROM ' . $this->table . ' WHERE id = ' . $id)->fetch());
90 } 89 }
91 90
92 public function find(array $criteria) 91 public function find(array $criteria) // obtenir une entrée avec un tableau associatif 'champ' => 'valeur'
93 { 92 {
94 $fields = []; 93 $fields = [];
95 $values = []; 94 $values = [];
@@ -140,7 +139,6 @@ class Model extends DB
140 // DBStructure::${self::$tableStructure} permet de nommer une variable statique de classe 139 // DBStructure::${self::$tableStructure} permet de nommer une variable statique de classe
141 static public function createTables() 140 static public function createTables()
142 { 141 {
143 //~ var_dump(StructTablesDB::$structureOfTables);
144 foreach(StructTablesDB::$structureOfTables as $tableName => $oneTable) 142 foreach(StructTablesDB::$structureOfTables as $tableName => $oneTable)
145 { 143 {
146 //var_dump(StructTablesDB::${self::$tableStructure}); => propriété statique de classe dans une variable 144 //var_dump(StructTablesDB::${self::$tableStructure}); => propriété statique de classe dans une variable
@@ -156,7 +154,5 @@ class Model extends DB
156 154
157 parent::getInstance()->exec($query); // merci singleton! 155 parent::getInstance()->exec($query); // merci singleton!
158 } 156 }
159
160
161 } 157 }
162} 158}
diff --git a/src/model/Prestations.php b/src/model/Prestations.php
index 4f58d70..32f9768 100644
--- a/src/model/Prestations.php
+++ b/src/model/Prestations.php
@@ -13,10 +13,7 @@ class Prestations extends Model
13 private $mode_paiement; 13 private $mode_paiement;
14 private $commentaires; 14 private $commentaires;
15 15
16 public function __construct() 16 use ModelChildren;
17 {
18 $this->table = strtolower(__CLASS__);
19 }
20 17
21 // setters 18 // setters
22 public function setID(int $value) 19 public function setID(int $value)
diff --git a/src/model/StructTablesDB.php b/src/model/StructTablesDB.php
index cf6de5d..ee4baf1 100644
--- a/src/model/StructTablesDB.php
+++ b/src/model/StructTablesDB.php
@@ -10,10 +10,10 @@ class StructTablesDB
10 // la table prestations est liée à la table clients 10 // la table prestations est liée à la table clients
11 // les tables devis_factures, cesu et locations sont liées à la table prestations 11 // les tables devis_factures, cesu et locations sont liées à la table prestations
12 'clients' => ['ID' => 'INTEGER', 'prenom_nom' => 'TEXT', 'adresse' => 'TEXT', 'code_client' => 'TEXT', 'commentaires' => 'TEXT'], 12 'clients' => ['ID' => 'INTEGER', 'prenom_nom' => 'TEXT', 'adresse' => 'TEXT', 'code_client' => 'TEXT', 'commentaires' => 'TEXT'],
13 'prestations' => ['ID' => 'INTEGER', 'ID_client' => 'INTEGER', 'combientieme_fois' => 'INTEGER', 'code_presta' => 'TEXT', 'date' => 'INTEGER', 'type' => 'TEXT', 'mode_paiement' => 'TEXT', 'commentaires' => 'TEXT'], 13 'prestations' => ['ID' => 'INTEGER', 'ID_client' => 'INTEGER', 'combientieme_fois' => 'INTEGER', 'code_presta' => 'TEXT', 'date' => 'INTEGER', 'type_presta' => 'TEXT', 'mode_paiement' => 'TEXT', 'commentaires' => 'TEXT'],
14 'devisfactures' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'validite_devis' => 'TEXT', 'signature_devis' => 'TEXT', 'taches' => 'TEXT', 'machine' => 'TEXT', 'OS' => 'TEXT', 'donnees' => 'TEXT', 'cles_licences' => 'TEXT', 'total_main_d_oeuvre' => 'REAL', 'pieces' => 'TEXT', 'total_pieces' => 'REAL', 'deplacement' => 'REAL', 'total_HT' => 'REAL'], 14 'devisfactures' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'validite_devis' => 'TEXT', 'signature_devis' => 'TEXT', 'taches' => 'TEXT', 'machine' => 'TEXT', 'OS' => 'TEXT', 'donnees' => 'TEXT', 'cles_licences' => 'TEXT', 'total_main_d_oeuvre' => 'REAL', 'pieces' => 'TEXT', 'total_pieces' => 'REAL', 'deplacement' => 'REAL', 'total_HT' => 'REAL'],
15 'cesu' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'taches' => 'TEXT', 'duree_travail' => 'TEXT', 'salaire' => 'REAL'], 15 'cesu' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'taches' => 'TEXT', 'duree_travail' => 'TEXT', 'salaire' => 'REAL'],
16 'locations' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'nature_bien' => 'TEXT', 'modele' => 'TEXT', 'valeur' => 'REAL', 'etat_des_lieux_debut' => 'TEXT', 'etat_des_lieux_fin' => 'TEXT', 'duree_location' => 'TEXT', 'loyer_mensuel' => 'REAL', 'total_HT' => 'REAL'] 16 'locations' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'designation' => 'TEXT', 'modele_description' => 'TEXT', 'valeur' => 'REAL', 'etat_des_lieux_debut' => 'TEXT', 'etat_des_lieux_fin' => 'TEXT', 'duree_location' => 'INTEGER', 'loyer_mensuel' => 'REAL', 'loyers_encaisse' => 'INTEGER', 'caution' => 'INTEGER']
17 ]; 17 ];
18 18
19 // les types de variables de sqlite sont peu nombreux et autorisent un typage automatique 19 // les types de variables de sqlite sont peu nombreux et autorisent un typage automatique
diff --git a/src/model/traits.php b/src/model/traits.php
new file mode 100644
index 0000000..43d9b7f
--- /dev/null
+++ b/src/model/traits.php
@@ -0,0 +1,16 @@
1<?php
2// model/traits.php
3
4trait ModelChildren // pour ne pas toucher au constructeur de la classe Model
5{
6 public function __construct()
7 {
8 $this->table = strtolower(__CLASS__);
9 }
10
11 public function setIdFromLastInsertID() // à faire juste après l'écriture d'une nouvelle entrée
12 {
13 $this->db = parent::getInstance();
14 $this->ID = $this->db->lastInsertId(); // méthode de PDO
15 }
16}
diff --git a/src/view/Zenity.php b/src/view/Zenity.php
index a04b794..04c9221 100644
--- a/src/view/Zenity.php
+++ b/src/view/Zenity.php
@@ -13,7 +13,7 @@ abstract class ZenityCmd
13 protected $width = 300; 13 protected $width = 300;
14 protected $height = 200; // recalculée en fonction du contenu, vaut au minimum 150 14 protected $height = 200; // recalculée en fonction du contenu, vaut au minimum 150
15 15
16 protected function __construct($text, array $rows = []) // $rows est optionnel 16 protected function __construct(string $text, array $rows = []) // $rows est optionnel
17 { 17 {
18 $this->text = $text; 18 $this->text = $text;
19 $this->rows= $rows; 19 $this->rows= $rows;
@@ -31,7 +31,7 @@ abstract class ZenityCmd
31 31
32class ZenityList extends ZenityCmd 32class ZenityList extends ZenityCmd
33{ 33{
34 public function __construct($text, array $rows) 34 public function __construct(string $text, array $rows)
35 { 35 {
36 $this->command_type = ' --list'; 36 $this->command_type = ' --list';
37 parent::__construct($text, $rows); 37 parent::__construct($text, $rows);
@@ -39,15 +39,17 @@ class ZenityList extends ZenityCmd
39 $this->command .= ' --width=' . $this->width; 39 $this->command .= ' --width=' . $this->width;
40 $this->command .= ' --height=' . $this->height; 40 $this->command .= ' --height=' . $this->height;
41 $this->command .= ' --hide-header'; // ligne inutile, il y a déjà le --text 41 $this->command .= ' --hide-header'; // ligne inutile, il y a déjà le --text
42 self::one_column_zenity_list($this->rows); 42 self::oneColumnZenityList($this->rows);
43 } 43 }
44 44
45 public function set_entries($rows_set) // variable renseignée après la construction 45 // cas ou $this->rows est renseignée après
46 public function setEntries(array $rows_set)
46 { 47 {
47 $this->rows = $rows_set; 48 $this->rows = $rows_set;
48 } 49 }
49 50
50 private function one_column_zenity_list($rows) 51 // cas où on veut une seule colonne
52 private function oneColumnZenityList(array $rows)
51 { 53 {
52 $output = ' --column=""'; 54 $output = ' --column=""';
53 foreach($rows as $entry) 55 foreach($rows as $entry)
@@ -56,6 +58,8 @@ class ZenityList extends ZenityCmd
56 } 58 }
57 $this->command .= $output; 59 $this->command .= $output;
58 } 60 }
61
62 // cas où on veut plusieurs colonnes, le remplissage est horizontal, oui c'est tordu!
59} 63}
60 64
61class ZenityQuestion extends ZenityCmd 65class ZenityQuestion extends ZenityCmd
@@ -70,6 +74,8 @@ class ZenityQuestion extends ZenityCmd
70 } 74 }
71} 75}
72 76
77// note: le formulaire renvoie une chaine avecdes pipes | entre les zones de texte (qui peuvent être vides)
78// si on clique sur 'Annuler', renvoie une chaine vide
73class ZenityForms extends ZenityCmd 79class ZenityForms extends ZenityCmd
74{ 80{
75 public function __construct($text, array $rows) 81 public function __construct($text, array $rows)
@@ -77,10 +83,10 @@ class ZenityForms extends ZenityCmd
77 $this->command_type = ' --forms'; 83 $this->command_type = ' --forms';
78 parent::__construct($text, $rows); 84 parent::__construct($text, $rows);
79 //$this->height = 80 + count($this->rows) * 25; // à tester, mais devrait produire le rendu attendu 85 //$this->height = 80 + count($this->rows) * 25; // à tester, mais devrait produire le rendu attendu
80 self::entries_zenity_forms($this->rows); 86 self::entriesZenityForms($this->rows);
81 } 87 }
82 88
83 private function entries_zenity_forms($entries) 89 private function entriesZenityForms($entries)
84 { 90 {
85 $output = ''; 91 $output = '';
86 foreach($entries as $one_entry) 92 foreach($entries as $one_entry)
diff --git a/src/view/zenity_setup.php b/src/view/zenity_setup.php
index 2f55cf2..503ae71 100644
--- a/src/view/zenity_setup.php
+++ b/src/view/zenity_setup.php
@@ -7,7 +7,7 @@ $menu_principal_text = "Gestion d'une micro-entreprise";
7$menu_principal_entrees = ["Nouvelle prestation", "Modifier enregistrement", "Fichier clients", "Créer/imprimer un document", "Communication", "Base de données"]; 7$menu_principal_entrees = ["Nouvelle prestation", "Modifier enregistrement", "Fichier clients", "Créer/imprimer un document", "Communication", "Base de données"];
8$question_nouveau_client_text = "Ce client figure t\'il déjà dans le fichier clients?"; 8$question_nouveau_client_text = "Ce client figure t\'il déjà dans le fichier clients?";
9$menu_enregistrement_text = "Type d\'enregistrement?"; 9$menu_enregistrement_text = "Type d\'enregistrement?";
10$menu_enregistrement_entrees = ["Devis", "Facture", "CESU", "Pas de prestation"]; 10$menu_enregistrement_entrees = ["Devis", "Facture", "CESU", "Prestation non vendue"];
11$menu_documents_text = "Création de documents LaTeX"; 11$menu_documents_text = "Création de documents LaTeX";
12$menu_documents_entrees = ["Devis", "Facture", "Lettre avec adresse", "Livre des recettes", "Registre des achats", "Bilan annuel"]; 12$menu_documents_entrees = ["Devis", "Facture", "Lettre avec adresse", "Livre des recettes", "Registre des achats", "Bilan annuel"];
13$menu_communication_text = "Imprimer un support de communication"; 13$menu_communication_text = "Imprimer un support de communication";
@@ -15,7 +15,7 @@ $menu_communication_entrees = ["Flyer (nécessite gimp)", "Carte de visite (néc
15$recherche_client_text = "Recherche d'un client avec son nom ou son code client"; 15$recherche_client_text = "Recherche d'un client avec son nom ou son code client";
16$resultats_recherche_client_text = "Résultats de la recherche, sélectionner un client"; 16$resultats_recherche_client_text = "Résultats de la recherche, sélectionner un client";
17$nouveau_client_text = "Nouveau client"; 17$nouveau_client_text = "Nouveau client";
18$nouveau_client_entrees = ["Prénom Nom:", "Adresse:", "Code client, type: J.P.Duchmol"]; 18$nouveau_client_entrees = ["Prénom Nom:", "Adresse:", "Code client, exemple: J.P.Duchmol", "Commentaires"];
19$calendar_text = 'Nouvelle prestation étape 1/3 - Choisir une date'; 19$calendar_text = 'Nouvelle prestation étape 1/3 - Choisir une date';
20$formulaire_text = 'Nouvelle prestation 2/3 - Détail des travaux'; 20$formulaire_text = 'Nouvelle prestation 2/3 - Détail des travaux';
21$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$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):",];
diff --git a/structure base de données.ods b/structure base de données.ods
index 12d7af6..703487c 100644
--- a/structure base de données.ods
+++ b/structure base de données.ods
Binary files differ