diff options
author | polo <ordipolo@gmx.fr> | 2022-12-19 02:51:03 +0100 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2022-12-19 02:51:03 +0100 |
commit | dedbe2f5cee33431c1299c7f0dbef4e247dc2447 (patch) | |
tree | 4d2481ca044aae30886a9879acd53c4777c180bc | |
parent | ff14091476a35de16a9ea3208501040cfae93a06 (diff) | |
download | AppliGestionPHP-dedbe2f5cee33431c1299c7f0dbef4e247dc2447.zip |
nouveau client main.php en cours
25 files changed, 324 insertions, 181 deletions
@@ -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 |
8 | function window_app_command(string $app, string $path = ''): string | 8 | function 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 | ||
25 | function recherche_client(string $saisie): array | 25 | function 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 | |||
40 | function 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 | |||
64 | function 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 |
36 | function latexToPdf(string $fileName, string $latexPath, string $pdfPath) | 78 | function 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 | |||
2 | ob_start(); | 4 | ob_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 | |||
2 | ob_start(); | 4 | ob_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 | |||
2 | ob_start(); | 4 | ob_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 | |||
2 | ob_start(); | 4 | ob_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 | |||
2 | ob_start(); | 4 | ob_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 |
6 | require('../config.php'); // fichier de l'utilisateur: à déplacer peut-être dans un dossier config | 6 | require('../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 | |||
29 | require('model/StructTablesDB.php'); | 31 | require('model/StructTablesDB.php'); |
30 | Model::createTables(); | 32 | Model::createTables(); |
31 | 33 | ||
34 | require('model/traits.php'); | ||
32 | require('model/Clients.php'); | 35 | require('model/Clients.php'); |
33 | require('model/Prestations.php'); | 36 | require('model/Prestations.php'); |
34 | require('model/DevisFactures.php'); | 37 | require('model/DevisFactures.php'); |
35 | require('model/CESU.php'); | 38 | require('model/CESU.php'); |
36 | require('model/Locations.php'); | 39 | require('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 | |||
57 | require('view/Zenity.php'); // commande système zenity | 41 | require('view/Zenity.php'); // commande système zenity |
58 | require('view/zenity_setup.php'); // texte dans les fenêtres ET instanciation (un objet = une commande) | 42 | require('view/zenity_setup.php'); // texte dans les fenêtres ET instanciation (un objet = une commande) |
59 | require('Latex.php'); // générer le code LaTeX | 43 | require('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; |
72 | while($boucle) | 64 | while($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 | ||
4 | class Model extends DB | 4 | class 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 | |||
4 | trait 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 | ||
32 | class ZenityList extends ZenityCmd | 32 | class 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 | ||
61 | class ZenityQuestion extends ZenityCmd | 65 | class 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 | ||
73 | class ZenityForms extends ZenityCmd | 79 | class 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 | |||