diff options
-rw-r--r-- | config.php | 31 | ||||
-rw-r--r-- | data/ordipolo.sqlite | bin | 28672 -> 0 bytes | |||
-rwxr-xr-x | index.php | 3 | ||||
-rw-r--r-- | latex/devis.tex | 79 | ||||
-rw-r--r-- | latex/enveloppe_recto.tex | 21 | ||||
-rw-r--r-- | latex/enveloppe_verso.tex | 13 | ||||
-rw-r--r-- | latex/facture.tex | 80 | ||||
-rw-r--r-- | latex/location.tex | 44 | ||||
-rw-r--r-- | latex/ordipolo.png | bin | 46751 -> 0 bytes | |||
-rw-r--r-- | php/Connection.php | 45 | ||||
-rw-r--r-- | php/Dates.php | 105 | ||||
-rw-r--r-- | php/Latex.php | 84 | ||||
-rw-r--r-- | php/Model.php | 42 | ||||
-rw-r--r-- | php/Zenity.php | 110 | ||||
-rw-r--r-- | php/dependances.php | 100 | ||||
-rw-r--r-- | php/functions.php | 26 | ||||
-rw-r--r-- | php/latexToPdf.php | 38 | ||||
-rw-r--r-- | php/latex_templates/devis.php | 84 | ||||
-rw-r--r-- | php/latex_templates/enveloppe_recto.php | 26 | ||||
-rw-r--r-- | php/latex_templates/enveloppe_verso.php | 18 | ||||
-rw-r--r-- | php/latex_templates/facture.php | 85 | ||||
-rw-r--r-- | php/latex_templates/location.php | 49 | ||||
-rwxr-xr-x | php/main.php | 205 | ||||
-rw-r--r-- | php/zenity_setup.php | 37 |
24 files changed, 19 insertions, 1306 deletions
@@ -15,20 +15,20 @@ $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 | // $receipts = '../latex/'; | 18 | // $receiptsLaTeX = '../data/latex/'; |
19 | $receipts = '../latex/'; | 19 | $receiptsLaTeX = '../data/latex/'; |
20 | $receiptsStorageLaTeX = '~ORDIPOLO/factures/latex/'; | 20 | // $receiptsPDF = '../data/pdf/'; |
21 | $receiptsStoragePDF = '~ORDIPOLO/factures/PDF/'; | 21 | $receiptsPDF = '../data/pdf/'; |
22 | 22 | ||
23 | // $quotations = '../latex/'; | 23 | // $quotationsLaTeX = '../data/latex/'; |
24 | $quotations = '../latex/'; | 24 | $quotationsLaTeX = '../data/latex/'; |
25 | $quotationsStorageLaTeX = '~ORDIPOLO/devis/latex/'; | 25 | // $quotationsPDF = '../data/pdf/'; |
26 | $quotationsStoragePDF = '~ORDIPOLO/devis/PDF/'; | 26 | $quotationsPDF = '../data/pdf/'; |
27 | 27 | ||
28 | // $envelopes = '../latex/'; | 28 | // $envelopesLaTeX = '../data/latex/'; |
29 | $envelopes = '../latex/'; | 29 | $envelopesLaTeX = '../data/latex/'; |
30 | $envelopesStorageLaTeX = '~ORDIPOLO/enveloppes/latex/'; | 30 | // $envelopesPDF = '../data/pdf/'; |
31 | $envelopesStoragePDF = '~ORDIPOLO/enveloppes/PDF/'; | 31 | $envelopesPDF = '../data/pdf/'; |
32 | 32 | ||
33 | 33 | ||
34 | // $pub = "~/ORDIPOLO/PUB/"; // dossier extérieur au choix | 34 | // $pub = "~/ORDIPOLO/PUB/"; // dossier extérieur au choix |
@@ -47,12 +47,15 @@ $image_editor = 'gimp'; | |||
47 | // $publishing = 'scribus'; | 47 | // $publishing = 'scribus'; |
48 | $publishing = 'scribus'; | 48 | $publishing = 'scribus'; |
49 | 49 | ||
50 | // format des dates: EU = européenne 28-11-2022, US = américaine 11/28/2022 | 50 | // $sqliteGUI = 'sqlitebrowser'; |
51 | $sqlite_gui = 'sqlitebrowser'; | ||
52 | |||
53 | // format des dates: EU exemple européenne 28-11-2022, US exemple américaine 11/28/2022 | ||
51 | // $date_format = 'EU'; | 54 | // $date_format = 'EU'; |
52 | $date_format = 'EU'; | 55 | $date_format = 'EU'; |
53 | 56 | ||
54 | 57 | ||
55 | //$x_terminal = 'xterm'; | 58 | // $x_terminal = 'xterm'; |
56 | // -- état actuel du programme -- | 59 | // -- état actuel du programme -- |
57 | // les terminaux gérés sont: xterm, urxvt, lxterminal, xfce4-terminal, gnome-terminal, konsole, Terminal (MAC, désactivé tant que non testé) | 60 | // les terminaux gérés sont: xterm, urxvt, lxterminal, xfce4-terminal, gnome-terminal, konsole, Terminal (MAC, désactivé tant que non testé) |
58 | // ajouter à l'accaz: i3-sensible-terminal (pour i3), lxterminal-qt (pour LXQT, et donc lubuntu) | 61 | // ajouter à l'accaz: i3-sensible-terminal (pour i3), lxterminal-qt (pour LXQT, et donc lubuntu) |
diff --git a/data/ordipolo.sqlite b/data/ordipolo.sqlite deleted file mode 100644 index 6138c54..0000000 --- a/data/ordipolo.sqlite +++ /dev/null | |||
Binary files differ | |||
@@ -3,7 +3,8 @@ | |||
3 | // index.php | 3 | // index.php |
4 | 4 | ||
5 | // le programme peut être lancé sans distinction par le lanceur, par un ./index.php ou par un ./main.php | 5 | // le programme peut être lancé sans distinction par le lanceur, par un ./index.php ou par un ./main.php |
6 | chdir('php'); // idée de merde? | 6 | // l'exécution a donc lieu dans le dossier "src", normallement on fait pas exactemet ça comme ça |
7 | chdir('src'); | ||
7 | require('main.php'); | 8 | require('main.php'); |
8 | 9 | ||
9 | 10 | ||
diff --git a/latex/devis.tex b/latex/devis.tex deleted file mode 100644 index debcdc5..0000000 --- a/latex/devis.tex +++ /dev/null | |||
@@ -1,79 +0,0 @@ | |||
1 | \documentclass{report} | ||
2 | |||
3 | \usepackage[french]{babel} | ||
4 | \usepackage{lmodern} % police latin modern | ||
5 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
6 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
7 | \usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges | ||
8 | \usepackage{graphicx} % insertions d'images | ||
9 | \usepackage{textcomp} % pour N° | ||
10 | \usepackage{xcolor} % texte en couleur | ||
11 | \usepackage{tabularx} % dimensions des tableaux automatique | ||
12 | \usepackage{tikz} % le rectangle | ||
13 | |||
14 | \begin{document} | ||
15 | \setlength{\parindent}{0cm} % supprimer les alinéas | ||
16 | \large{} | ||
17 | \pagestyle{empty} % en-tête et pied de page vides | ||
18 | \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert | ||
19 | |||
20 | \begin{center} | ||
21 | \includegraphics{ordipolo.png}\\ | ||
22 | \Large\textbf{Dépannage informatique - Assistance à domicile} | ||
23 | \end{center} | ||
24 | |||
25 | 2 A rue de l'île de Man, 29000 Quimper | ||
26 | |||
27 | SIRET : 814 320 610 00011 | ||
28 | |||
29 | \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} | ||
30 | Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr | ||
31 | \end{tabularx} | ||
32 | |||
33 | Plus d'infos sur le site web: https\string://ordipolo.fr\\ | ||
34 | % \string supprime l'espace devant les : | ||
35 | |||
36 | \begin{center} | ||
37 | \large\textbf{DEVIS} | ||
38 | \end{center} | ||
39 | |||
40 | CLIENT\\ | ||
41 | |||
42 | \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} | ||
43 | Mme, M : \textcolor{vert}{} & | ||
44 | Date du devis : \textcolor{vert}{}\\ | ||
45 | Adresse : \textcolor{vert}{} & | ||
46 | Delai de livraison : \textcolor{vert}{}\\ | ||
47 | \end{tabularx}\\\\ | ||
48 | |||
49 | PRESTATION\\ | ||
50 | |||
51 | \textcolor{vert}{} | ||
52 | |||
53 | Total main d'oeuvre : \textcolor{vert}{}\\ | ||
54 | |||
55 | PIÈCES\\ | ||
56 | |||
57 | \textcolor{vert}{} | ||
58 | |||
59 | Total pièces : \textcolor{vert}{}\\ | ||
60 | |||
61 | TOTAL\\ | ||
62 | |||
63 | Déplacement : \textcolor{vert}{} | ||
64 | |||
65 | Total HT : \textcolor{vert}{} | ||
66 | |||
67 | \textit{(TVA non applicable, article 293B du code général des impôts)} | ||
68 | |||
69 | Référence du devis : \textcolor{vert}{}\\ | ||
70 | |||
71 | Devis reçu avant l'exécution des travaux, signature du client :\\ | ||
72 | \begin{tikzpicture} | ||
73 | \draw (0,0) rectangle (4,2); | ||
74 | \end{tikzpicture}\\ | ||
75 | |||
76 | \small{}NOTA BENE\\ | ||
77 | |||
78 | Si le délai de livraison n’est pas précisé, c’est naturellement le délai légal de 30 jours qui est appliqué. Lorsqu'Ordi Polo garde (ou prête) un ordinateur le temps nécessaire à la réparation, le prêt peut être formalisé par un document signé par les deux parties. Le dépannage inclut principalement l'intervention sur les logiciels et si nécessaire le démontage et remontage de la machine nécessaires au nettoyage de la poussière ou au remplacement d'une pièce. Ordi Polo ne répare pas les composants électroniques défectueux et n'est pas responsable des dysfonctionnements de l'ordinateur dont l'origine est matérielle. Ordi Polo ne vend pas de matériel mais peut conseiller ou réaliser les démarches d’un achat. | ||
79 | \end{document} \ No newline at end of file | ||
diff --git a/latex/enveloppe_recto.tex b/latex/enveloppe_recto.tex deleted file mode 100644 index d1f3f43..0000000 --- a/latex/enveloppe_recto.tex +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | \documentclass[]{report} | ||
2 | |||
3 | \usepackage[french]{babel} | ||
4 | \usepackage{lmodern} % police latin modern | ||
5 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
6 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
7 | \usepackage{graphicx} % insertions d'images | ||
8 | \usepackage[papersize={22cm, 11cm}, top=1cm, left=1cm, bottom=1cm]{geometry} | ||
9 | \pagestyle{empty} | ||
10 | |||
11 | \begin{document} | ||
12 | \setlength{\parindent}{0cm} | ||
13 | \includegraphics{ordipolo.png}\\ | ||
14 | \large\textbf{Dépannage informatique - Assistance à domicile} | ||
15 | |||
16 | \setlength{\parindent}{7,9cm} | ||
17 | \begin{minipage}[b][5,8cm]{12cm} | ||
18 | \LARGE{M. Truc\\3, rue Machin\\\\\\} | ||
19 | \LARGE{2 \ 9 \ 0 \ 0 \ 0 \ \ \ \ QUIMPER} | ||
20 | \end{minipage} | ||
21 | \end{document} \ No newline at end of file | ||
diff --git a/latex/enveloppe_verso.tex b/latex/enveloppe_verso.tex deleted file mode 100644 index 24baa8a..0000000 --- a/latex/enveloppe_verso.tex +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | \documentclass[]{report} | ||
2 | |||
3 | \usepackage[french]{babel} | ||
4 | \usepackage{lmodern} % police latin modern | ||
5 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
6 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
7 | \usepackage[papersize={22cm, 11cm}, top=0.6cm, left=4.5cm]{geometry} | ||
8 | \pagestyle{empty} | ||
9 | |||
10 | \begin{document} | ||
11 | \setlength{\parindent}{0cm} | ||
12 | \Large{Paul Jusot\\2A, rue de l'île de Man\\29000 QUIMPER} | ||
13 | \end{document} \ No newline at end of file | ||
diff --git a/latex/facture.tex b/latex/facture.tex deleted file mode 100644 index babb2ab..0000000 --- a/latex/facture.tex +++ /dev/null | |||
@@ -1,80 +0,0 @@ | |||
1 | \documentclass{report} | ||
2 | |||
3 | \usepackage[french]{babel} | ||
4 | \usepackage{lmodern} % police latin modern | ||
5 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
6 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
7 | \usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges | ||
8 | \usepackage{graphicx} % insertions d'images | ||
9 | \usepackage{textcomp} % pour N° | ||
10 | \usepackage{xcolor} % texte en couleur | ||
11 | \usepackage{tabularx} % dimensions des tableaux automatique | ||
12 | |||
13 | \begin{document} | ||
14 | \setlength{\parindent}{0cm} % supprimer les alinéas | ||
15 | \large{} | ||
16 | \pagestyle{empty} % en-tête et pied de page vides | ||
17 | \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert | ||
18 | |||
19 | \begin{center} | ||
20 | \includegraphics{ordipolo.png}\\ | ||
21 | \Large\textbf{Dépannage informatique - Assistance à domicile} | ||
22 | \end{center} | ||
23 | |||
24 | 2 A rue de l'île de Man, 29000 Quimper | ||
25 | |||
26 | SIRET : 814 320 610 00011 | ||
27 | |||
28 | \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} | ||
29 | Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr | ||
30 | \end{tabularx} | ||
31 | |||
32 | Plus d'infos sur le site web: https\string://ordipolo.fr\\ | ||
33 | % \string supprime l'espace devant les : | ||
34 | |||
35 | \begin{center} | ||
36 | \large\textbf{FACTURE} | ||
37 | \end{center} | ||
38 | |||
39 | CLIENT\\ | ||
40 | |||
41 | \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} | ||
42 | Mme, M : \textcolor{vert}{} & | ||
43 | Date : \textcolor{vert}{}\\ | ||
44 | \end{tabularx}\\ | ||
45 | Adresse : \textcolor{vert}{}\\ | ||
46 | |||
47 | PRESTATION\\ | ||
48 | |||
49 | \textcolor{vert}{} | ||
50 | |||
51 | Modèle de l'ordinateur : \textcolor{vert}{} | ||
52 | |||
53 | Système d'exploitation : \textcolor{vert}{} | ||
54 | |||
55 | Données à conserver : \textcolor{vert}{} | ||
56 | |||
57 | Clé d'activation : \textcolor{vert}{}\\ | ||
58 | |||
59 | Total main d'oeuvre : \textcolor{vert}{}\\ | ||
60 | |||
61 | PIÈCES\\ | ||
62 | |||
63 | \textcolor{vert}{} | ||
64 | |||
65 | Total pièces : \textcolor{vert}{}\\ | ||
66 | |||
67 | TOTAL\\ | ||
68 | |||
69 | Déplacement : \textcolor{vert}{} | ||
70 | |||
71 | Total HT : \textcolor{vert}{} | ||
72 | |||
73 | \textit{(TVA non applicable, article 293B du code général des impôts)} | ||
74 | |||
75 | Référence de la facture : \textcolor{vert}{}\\ | ||
76 | |||
77 | \small{}NOTA BENE\\ | ||
78 | |||
79 | Lorsqu'Ordi Polo garde (ou prête) un ordinateur le temps nécessaire à la réparation, le prêt peut être formalisé par un document signé par les deux parties. Le dépannage inclut principalement l'intervention sur les logiciels et si nécessaire le démontage et remontage de la machine nécessaires au nettoyage de la poussière ou au remplacement d'une pièce. Ordi Polo ne répare pas les composants électroniques défectueux et n'est pas responsable des dysfonctionnements de l'ordinateur dont l'origine est matérielle. Ordi Polo ne vend pas de matériel mais peut conseiller ou réaliser les démarches d’un achat. | ||
80 | \end{document} \ No newline at end of file | ||
diff --git a/latex/location.tex b/latex/location.tex deleted file mode 100644 index bcfb1e5..0000000 --- a/latex/location.tex +++ /dev/null | |||
@@ -1,44 +0,0 @@ | |||
1 | \documentclass{report} | ||
2 | |||
3 | \usepackage[french]{babel} | ||
4 | \usepackage{lmodern} % police latin modern | ||
5 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
6 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
7 | \usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges | ||
8 | \usepackage{graphicx} % insertions d'images | ||
9 | \usepackage{textcomp} % pour N° | ||
10 | \usepackage{xcolor} % texte en couleur | ||
11 | %\usepackage{wrapfig} % placer texte et image côte-à-côte | ||
12 | \usepackage{tabularx} % dimensions des tableaux automatique | ||
13 | |||
14 | \begin{document} | ||
15 | \setlength{\parindent}{0cm} % supprimer les alinéas | ||
16 | \large{} | ||
17 | \pagestyle{empty} % en-tête et pied de page vides | ||
18 | \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert | ||
19 | |||
20 | \begin{center} | ||
21 | \includegraphics{ordipolo.png}\\ | ||
22 | \Large\textbf{Dépannage informatique - Assistance à domicile} | ||
23 | \end{center} | ||
24 | |||
25 | 2 A rue de l'île de Man, 29000 Quimper | ||
26 | |||
27 | SIRET : 814 320 610 00011 | ||
28 | |||
29 | \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} | ||
30 | Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr | ||
31 | \end{tabularx} | ||
32 | |||
33 | Plus d'infos sur le site web: https\string://ordipolo.fr\\ | ||
34 | % \string supprime l'espace devant les : | ||
35 | |||
36 | CLIENT\\ | ||
37 | |||
38 | \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} | ||
39 | Mme, M : \textcolor{vert}{} & | ||
40 | Date : \textcolor{vert}{}\\ | ||
41 | \end{tabularx}\\ | ||
42 | Adresse : \textcolor{vert}{}\\ | ||
43 | |||
44 | \end{document} \ No newline at end of file | ||
diff --git a/latex/ordipolo.png b/latex/ordipolo.png deleted file mode 100644 index 2acd67d..0000000 --- a/latex/ordipolo.png +++ /dev/null | |||
Binary files differ | |||
diff --git a/php/Connection.php b/php/Connection.php deleted file mode 100644 index e944f69..0000000 --- a/php/Connection.php +++ /dev/null | |||
@@ -1,45 +0,0 @@ | |||
1 | <?php | ||
2 | // php/Connection.php | ||
3 | |||
4 | // cette classe suit le pattern "singleton" | ||
5 | // but: ne permettre qu'une seule instance de la classe (laquelle sera éventuellement globale) | ||
6 | |||
7 | // comment? | ||
8 | // - Un attribut privé et statique qui conservera l'instance unique de la classe | ||
9 | // ainsi si un enfant de la classe "connection" est instancié plusieurs fois, il n'y aura toujours qu'une seule instance de PDO | ||
10 | // - Un constructeur privé afin d'empêcher la création d'objet depuis l'extérieur de la classe | ||
11 | // - Une méthode statique qui permet soit d'instancier la classe soit de retourner l'unique instance créée. | ||
12 | // impossible de créer deux instances (ici de PDO) | ||
13 | |||
14 | class Connection extends PDO | ||
15 | { | ||
16 | // paramètres du constructeur de PDO, avec sqlite seul le premier est nécessaire | ||
17 | public static $dsn = ''; // Data Source Name = 1er paramètre | ||
18 | //~ public static $user = ''; | ||
19 | //~ public static $password = ''; | ||
20 | //~ public static $options = ''; | ||
21 | private static $Instance; | ||
22 | |||
23 | private function __construct() | ||
24 | { | ||
25 | try | ||
26 | { | ||
27 | parent::__construct(self::$dsn); // renseigne la variable $dsn de la classe PDO | ||
28 | $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // $this pour la méthode du parent PDO | ||
29 | } | ||
30 | catch(PDOException $e) | ||
31 | { | ||
32 | die('Erreur : '.$e->getMessage()); | ||
33 | } | ||
34 | } | ||
35 | |||
36 | // créer son objet avec: $bdd = Connection::getInstance(); | ||
37 | public static function getInstance(): self | ||
38 | { | ||
39 | if(self::$Instance === null) | ||
40 | { | ||
41 | self::$Instance = new self(); | ||
42 | } | ||
43 | return self::$Instance; | ||
44 | } | ||
45 | } | ||
diff --git a/php/Dates.php b/php/Dates.php deleted file mode 100644 index 264166f..0000000 --- a/php/Dates.php +++ /dev/null | |||
@@ -1,105 +0,0 @@ | |||
1 | <?php | ||
2 | // php/DateTimestamp.php | ||
3 | |||
4 | class Dates | ||
5 | { | ||
6 | private $date; | ||
7 | private $timestamp; // valeurs négatives autorisées => dates avant 1970 | ||
8 | static public $date_format = 'EU'; // dates européennes jj-mm-aaaa (EU) ou américaines mm/dd/yyyy (US) | ||
9 | |||
10 | |||
11 | public function __construct($entry) | ||
12 | { | ||
13 | if(gettype($entry) === 'string') // une date est attendue | ||
14 | { | ||
15 | $this->setDate($entry); | ||
16 | } | ||
17 | elseif(gettype($entry) === 'integer') | ||
18 | { | ||
19 | $this->setTimestamp($entry); | ||
20 | } | ||
21 | } | ||
22 | |||
23 | |||
24 | public function setDate(string $entry) | ||
25 | { | ||
26 | $entry = $this->dashOrSlash($entry); // pour strtotime() | ||
27 | |||
28 | $splitedDate = preg_split('#\D#', $entry); // \D = tout sauf chiffre | ||
29 | |||
30 | if(self::$date_format === 'EU') | ||
31 | { | ||
32 | $tmp = $splitedDate[0]; | ||
33 | $splitedDate[0] = $splitedDate[1]; | ||
34 | $splitedDate[1] = $tmp; | ||
35 | } | ||
36 | |||
37 | if(checkdate($splitedDate[0], $splitedDate[1], $splitedDate[2])) | ||
38 | { | ||
39 | $this->date = $entry; | ||
40 | $this->timestamp = strtotime($entry); // date (string) -> timestamp (int) | ||
41 | // strtotime() devine le format en analysant la chaîne en entrée, on l'aide un peu | ||
42 | // avec des /, php considère que la date est américaine | ||
43 | // avec des - ou des ., php considère que la date est européenne | ||
44 | } | ||
45 | else | ||
46 | { | ||
47 | echo("Date incorrecte, le format de la date dans le fichier config.php est " . self::$date_format . ".\nLes choix possibles sont EU pour Europe et US pour États-Unis."); | ||
48 | die(); | ||
49 | } | ||
50 | } | ||
51 | |||
52 | public function setTimestamp(int $entry) | ||
53 | { | ||
54 | $this->timestamp = $entry; | ||
55 | $this->date = $this->timestamp_to_date($entry); // timestamp (int) -> date (string) | ||
56 | } | ||
57 | |||
58 | |||
59 | public function getDate(): string | ||
60 | { | ||
61 | return($this->date); | ||
62 | } | ||
63 | |||
64 | public function getTimestamp(): int | ||
65 | { | ||
66 | return($this->timestamp); | ||
67 | } | ||
68 | |||
69 | |||
70 | private function dashOrSlash(string $date): string | ||
71 | { | ||
72 | if(self::$date_format === 'EU') | ||
73 | { | ||
74 | // change jj/mm/aaaa en jj-mm-aaaa | ||
75 | return(preg_replace('#\D#', '-', $date)); // \D = tout sauf chiffre | ||
76 | } | ||
77 | elseif(self::$date_format === 'US') | ||
78 | { | ||
79 | // change mm-dd.yyyy en mm/dd/yyyy | ||
80 | return(preg_replace('#\D#', '/', $date)); | ||
81 | } | ||
82 | else | ||
83 | { | ||
84 | echo('Le fichier config.php comporte une erreur. La variable $date_format doit avoir pour valeur "EU" ou "US"'); | ||
85 | die(); // brutal | ||
86 | } | ||
87 | } | ||
88 | |||
89 | private function timestamp_to_date(int $timestamp): string | ||
90 | { | ||
91 | if(self::$date_format === 'EU') | ||
92 | { | ||
93 | return(date("j-m-Y", $timestamp)); | ||
94 | } | ||
95 | elseif(self::$date_format === 'US') | ||
96 | { | ||
97 | return(date("m/d/Y", $timestamp)); | ||
98 | } | ||
99 | else | ||
100 | { | ||
101 | echo('Le fichier config.php comporte une erreur. La variable $date_format doit avoir pour valeur "EU" ou "US"'); | ||
102 | die(); // brutal | ||
103 | } | ||
104 | } | ||
105 | } | ||
diff --git a/php/Latex.php b/php/Latex.php deleted file mode 100644 index c3d56af..0000000 --- a/php/Latex.php +++ /dev/null | |||
@@ -1,84 +0,0 @@ | |||
1 | <?php | ||
2 | // php/Latex.php | ||
3 | // | ||
4 | // génération du code LaTeX | ||
5 | |||
6 | abstract class Latex | ||
7 | { | ||
8 | protected $fileName = ''; | ||
9 | protected $latexPath = ''; | ||
10 | protected $pdfPath = ''; | ||
11 | |||
12 | protected function createFile(string $latex, string $fileName, string $latexPath) | ||
13 | { | ||
14 | // nom du fichier créé = nom.tex | ||
15 | // pour les devis, factures et enveloppes, le nom est le code la prestation | ||
16 | // pour les livre de recettes et registres des achats mensuels: | ||
17 | // le nom du fichier suit cet exemple: "Recettes-2022-06-Juin.tex" | ||
18 | // pour le livre de recette ou le registre des achats annuel, même principe: "Achats-2022.tex" | ||
19 | // pour le bilan comptable annuel, ça donne: "Bilan-2022.tex" | ||
20 | $fichier = fopen($latexPath . $fileName, "w+"); | ||
21 | fputs($fichier, $latex); | ||
22 | fclose($fichier); | ||
23 | } | ||
24 | } | ||
25 | |||
26 | |||
27 | abstract class PrestaLatex extends Latex | ||
28 | { | ||
29 | public function __construct(string $quoi, string $codePresta) | ||
30 | { | ||
31 | nameTheFile($quoi, $codePresta); | ||
32 | } | ||
33 | |||
34 | // forme = code-presta.tex | ||
35 | protected function nameTheFile(string $quoi, string $codePresta) | ||
36 | { | ||
37 | $this->fileName = $quoi . '-' . $codePresta . '.tex'; | ||
38 | } | ||
39 | } | ||
40 | |||
41 | class DevisLatex extends PrestaLatex | ||
42 | {} | ||
43 | |||
44 | class FactureLatex extends PrestaLatex | ||
45 | {} | ||
46 | |||
47 | class LocationLatex extends PrestaLatex | ||
48 | {} | ||
49 | |||
50 | class EnveloppeRectoLatex extends PrestaLatex | ||
51 | {} | ||
52 | class EnveloppeVersoLatex extends PrestaLatex | ||
53 | {} | ||
54 | |||
55 | |||
56 | abstract class ComptaLatex extends Latex | ||
57 | { | ||
58 | public function __construct(string $quoi, string $annee, int $numeroMois = 0) | ||
59 | { | ||
60 | nameTheFile($quoi, $annee, $numeroMois); | ||
61 | } | ||
62 | |||
63 | // forme = Recettes-2022-06-Juin.tex ou Recettes-2022.tex | ||
64 | // type de 'annee'? | ||
65 | protected function nameTheFile(string $quoi, string $annee, int $numeroMois = 0) | ||
66 | { | ||
67 | $this->fileName = $quoi . '-' . $annee; | ||
68 | $mois = ['', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']; | ||
69 | if($numeroMois > 0 && $numeroMois <= 12) | ||
70 | { | ||
71 | $this->fileName .= '-' . $numeroMois . '-' . $mois[$numeroMois]; | ||
72 | } | ||
73 | $this->fileName .= '.tex'; | ||
74 | } | ||
75 | } | ||
76 | |||
77 | class LivreRecettesLatex extends ComptaLatex | ||
78 | {} | ||
79 | |||
80 | class RegistreAchatsLatex extends ComptaLatex | ||
81 | {} | ||
82 | |||
83 | class BilanLatex extends ComptaLatex | ||
84 | {} | ||
diff --git a/php/Model.php b/php/Model.php deleted file mode 100644 index d26b081..0000000 --- a/php/Model.php +++ /dev/null | |||
@@ -1,42 +0,0 @@ | |||
1 | <?php | ||
2 | // php/Model.php | ||
3 | |||
4 | class Model extends Connection | ||
5 | { | ||
6 | private $db; // instance de connexion | ||
7 | public $date; | ||
8 | |||
9 | public function __construct() | ||
10 | { | ||
11 | $this->db = parent::getInstance(); // connexion | ||
12 | } | ||
13 | |||
14 | // code SQL | ||
15 | public function create_tables() | ||
16 | { | ||
17 | // la table prestations est liée à la table clients | ||
18 | // les tables devis_factures, cesu et locations sont liées à la table prestations | ||
19 | $this->db->exec("CREATE TABLE IF NOT EXISTS clients (ID INTEGER, prenom_nom TEXT, adresse TEXT, code_client TEXT, commentaires TEXT, PRIMARY KEY(ID AUTOINCREMENT));"); | ||
20 | $this->db->exec("CREATE TABLE IF NOT EXISTS prestations (ID INTEGER, ID_client INTEGER, combientieme_fois INTEGER, code_presta TEXT, date INTEGER, type TEXT, mode_paiement TEXT, commentaires TEXT, PRIMARY KEY(ID AUTOINCREMENT));"); | ||
21 | $this->db->exec("CREATE TABLE IF NOT EXISTS devis_factures (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 INTEGER, pieces TEXT, total_pieces INTEGER, deplacement INTEGER, total_HT INTEGER, PRIMARY KEY(ID AUTOINCREMENT));"); | ||
22 | $this->db->exec("CREATE TABLE IF NOT EXISTS cesu (ID INTEGER, ID_presta INTEGER, taches TEXT, duree_travail TEXT, salaire INTEGER, PRIMARY KEY(ID AUTOINCREMENT));"); | ||
23 | $this->db->exec("CREATE TABLE IF NOT EXISTS locations (ID INTEGER, ID_presta INTEGER, nature_bien TEXT, valeur INTEGER, etat_des_lieux_debut TEXT, etat_des_lieux_fin TEXT, total_HT INTEGER, PRIMARY KEY(ID AUTOINCREMENT));"); | ||
24 | |||
25 | // les types de variables de sqlite sont peu nombreux et autorisent un typage automatique | ||
26 | // le "type indiqué" est indiqué dans l'instruction CREATE TABLE | ||
27 | // https://www.leppf.com/site/spip.php?article89 | ||
28 | |||
29 | // || type indiqué || type choisi automatiquement || autre types possibles || | ||
30 | // --------------------------------------------------------------------------- | ||
31 | // || TEXT || TEXT || BLOB, NULL || | ||
32 | // || INTEGER || INTEGER (de 1 à 8 octets) || REAL, TEXT, BLOB, NULL || | ||
33 | // || REAL || REAL (flottant sur 9 octets) || TEXT, BLOB, NULL || | ||
34 | // || NUMERIC || INTEGER ou REAL || TEXT, BLOB, NULL || | ||
35 | // || NONE || indéfini || dépend des données || | ||
36 | |||
37 | // du code SQL écrit pour d'autres SGBD devrait fonctionner, | ||
38 | // sqlite fera des conversions dans ses propres types avec les problèmes qu'on peut imaginer | ||
39 | |||
40 | // pour les dates, on stockera à priori le timestamp | ||
41 | } | ||
42 | } | ||
diff --git a/php/Zenity.php b/php/Zenity.php deleted file mode 100644 index a04b794..0000000 --- a/php/Zenity.php +++ /dev/null | |||
@@ -1,110 +0,0 @@ | |||
1 | <?php | ||
2 | // php/Zenity.php | ||
3 | // | ||
4 | // commande système zenity | ||
5 | |||
6 | abstract class ZenityCmd | ||
7 | { | ||
8 | protected $command = 'zenity'; | ||
9 | protected $command_type = ''; | ||
10 | protected $rows = []; | ||
11 | private $title = 'ORDIPOLO'; | ||
12 | private $text = ''; | ||
13 | protected $width = 300; | ||
14 | protected $height = 200; // recalculée en fonction du contenu, vaut au minimum 150 | ||
15 | |||
16 | protected function __construct($text, array $rows = []) // $rows est optionnel | ||
17 | { | ||
18 | $this->text = $text; | ||
19 | $this->rows= $rows; | ||
20 | $this->command .= $this->command_type; | ||
21 | $this->command .= ' --title="' . $this->title . '"'; | ||
22 | $this->command .= ' --text="' . $this->text . '"'; | ||
23 | } | ||
24 | |||
25 | public function get() | ||
26 | { | ||
27 | return($this->command); | ||
28 | } | ||
29 | } | ||
30 | |||
31 | |||
32 | class ZenityList extends ZenityCmd | ||
33 | { | ||
34 | public function __construct($text, array $rows) | ||
35 | { | ||
36 | $this->command_type = ' --list'; | ||
37 | parent::__construct($text, $rows); | ||
38 | $this->height = 80 + count($this->rows) * 25; | ||
39 | $this->command .= ' --width=' . $this->width; | ||
40 | $this->command .= ' --height=' . $this->height; | ||
41 | $this->command .= ' --hide-header'; // ligne inutile, il y a déjà le --text | ||
42 | self::one_column_zenity_list($this->rows); | ||
43 | } | ||
44 | |||
45 | public function set_entries($rows_set) // variable renseignée après la construction | ||
46 | { | ||
47 | $this->rows = $rows_set; | ||
48 | } | ||
49 | |||
50 | private function one_column_zenity_list($rows) | ||
51 | { | ||
52 | $output = ' --column=""'; | ||
53 | foreach($rows as $entry) | ||
54 | { | ||
55 | $output .= ' "' . $entry . '"'; // forme: ' "choix 1" "choix 2"' | ||
56 | } | ||
57 | $this->command .= $output; | ||
58 | } | ||
59 | } | ||
60 | |||
61 | class ZenityQuestion extends ZenityCmd | ||
62 | { | ||
63 | public function __construct($text) | ||
64 | { | ||
65 | $this->command_type = ' --question'; | ||
66 | parent::__construct($text); | ||
67 | $this->command .= ' && echo $?'; | ||
68 | // la sortie de "zenity --question" est le statut de sortie "$?" | ||
69 | // $? vaut 0 pour oui, 1 pour non, à ceci près que pour non zenity ne renvoie rien | ||
70 | } | ||
71 | } | ||
72 | |||
73 | class ZenityForms extends ZenityCmd | ||
74 | { | ||
75 | public function __construct($text, array $rows) | ||
76 | { | ||
77 | $this->command_type = ' --forms'; | ||
78 | parent::__construct($text, $rows); | ||
79 | //$this->height = 80 + count($this->rows) * 25; // à tester, mais devrait produire le rendu attendu | ||
80 | self::entries_zenity_forms($this->rows); | ||
81 | } | ||
82 | |||
83 | private function entries_zenity_forms($entries) | ||
84 | { | ||
85 | $output = ''; | ||
86 | foreach($entries as $one_entry) | ||
87 | { | ||
88 | $output .= ' --add-entry="' . $one_entry . '"'; // forme: ' "choix 1" "choix 2"' | ||
89 | } | ||
90 | $this->command .= $output; | ||
91 | } | ||
92 | } | ||
93 | |||
94 | class ZenityCalendar extends ZenityCmd | ||
95 | { | ||
96 | public function __construct($text) | ||
97 | { | ||
98 | $this->command_type = ' --calendar'; | ||
99 | parent::__construct($text); | ||
100 | } | ||
101 | } | ||
102 | |||
103 | class ZenityEntry extends ZenityCmd | ||
104 | { | ||
105 | public function __construct($text) | ||
106 | { | ||
107 | $this->command_type = ' --entry'; | ||
108 | parent::__construct($text); | ||
109 | } | ||
110 | } | ||
diff --git a/php/dependances.php b/php/dependances.php deleted file mode 100644 index 66ce414..0000000 --- a/php/dependances.php +++ /dev/null | |||
@@ -1,100 +0,0 @@ | |||
1 | <?php | ||
2 | // php/dependances.php | ||
3 | // Vérification des dépendances nécessaires au fonctionnement de ce programmes. | ||
4 | |||
5 | // Environnement dans lequel ce programmes a été créé: | ||
6 | // - système archlinux avec l'interpréteur bash | ||
7 | // - PHP 8.1 + paquet php-sqlite | ||
8 | // - module pdo_sqlite activé dans le fichier php.ini | ||
9 | // - sqlitebrowser (interface graphique pour sqlite) | ||
10 | // - distribution LaTeX texlive | ||
11 | // - zenity | ||
12 | |||
13 | // zenity disponible | ||
14 | if(exec("zenity --version 2> /dev/null") === '') // commande qui n'ouvre pas de fenêtre, erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null | ||
15 | { | ||
16 | printf("Impossible de lancer zenity. Veuillez installer le paquet zenity\n"); | ||
17 | exit(); | ||
18 | } | ||
19 | |||
20 | // compilateur pdflatex disponible | ||
21 | if(exec("pdflatex -version 2> /dev/null") === '') // erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null | ||
22 | { | ||
23 | printf("Impossible de lancer pdflatex. Veuillez installer une distribution LaTeX.\n"); | ||
24 | exit(); | ||
25 | } | ||
26 | |||
27 | // test de la présence du paquet php-sqlite | ||
28 | // compliqué? dépend de l'OS? | ||
29 | // note: l'erreur se produit dès le démarrage de PHP si le php.ini est bon mais qu'il manque le paquet | ||
30 | |||
31 | // module pdo_sqlite de PHP activé? | ||
32 | if(!extension_loaded("pdo_sqlite")) | ||
33 | { | ||
34 | printf("Impossible d'utiliser la base de données. Veuillez installer le paquet php-sqlite ET activer l'extension pdo_sqlite dans le fichier php.ini.\n"); | ||
35 | exit(); | ||
36 | } | ||
37 | |||
38 | |||
39 | // client sqlite | ||
40 | if($exec_mode === 'gui') | ||
41 | { | ||
42 | // sqlitebrowser disponible | ||
43 | if(exec("which sqlitebrowser 2> /dev/null") !== '') // which parcourt les dossiers du PATH et affiche les chemins trouvés, erreur si la chaine est vide parce que la sortie d'erreur va dans /dev/null | ||
44 | { | ||
45 | $sqlitebrowser_enable = true; | ||
46 | } | ||
47 | // terminal en mode graphique disponible, permettra d'y utiliser sqlite dans la console | ||
48 | else | ||
49 | { | ||
50 | printf("Sqlitebrowser n'est pas disponible. J'espère que vous maîtrisez le SQL.\n"); | ||
51 | |||
52 | if(exec("which xterm 2> /dev/null") !== '' && exec("xterm -v 2> /dev/null") !== '') | ||
53 | { | ||
54 | $x_term_ccommand = 'xterm -e'; | ||
55 | } | ||
56 | elseif(exec("which urxvt 2> /dev/null") !== '') | ||
57 | { | ||
58 | $x_term_ccommand = 'urxvt -e'; | ||
59 | } | ||
60 | elseif(exec("which lxterminal 2> /dev/null") !== '' && exec("lxterminal -v 2> /dev/null") !== '') | ||
61 | { | ||
62 | $x_term_ccommand = 'lxterminal -e'; | ||
63 | } | ||
64 | elseif(exec("which xfce4-terminal 2> /dev/null") !== '' && exec("xfce4-terminal -V 2> /dev/null") !== '') | ||
65 | { | ||
66 | $x_term_ccommand = 'xfce4-terminal -x'; | ||
67 | } | ||
68 | elseif(exec("which gnome-terminal 2> /dev/null") !== '') | ||
69 | { | ||
70 | $x_term_ccommand = 'gnome-terminal --'; | ||
71 | } | ||
72 | elseif(exec("which konsole 2> /dev/null") !== '' && exec("konsole -v 2> /dev/null") !== '') | ||
73 | { | ||
74 | $x_term_ccommand = 'konsole -e'; | ||
75 | } | ||
76 | // pour MAC - NON TESTÉ !! (possibilité de détecter le système avec uname?) | ||
77 | //~ elseif(exec("which Terminal 2> /dev/null") !== '') | ||
78 | //~ { | ||
79 | //~ $x_term_ccommand = 'open -a Terminal -e'; // ne marche probablement pas | ||
80 | //~ } | ||
81 | else | ||
82 | { | ||
83 | printf("Impossible d'ouvrir un terminal pour y lancer sqlite. Veuillez installer un terminal en mode graphique (par exemple xterm).\n"); | ||
84 | } | ||
85 | } | ||
86 | } | ||
87 | |||
88 | // sqlite CLI disponible | ||
89 | if(exec("which sqlite 2> /dev/null") !== '' && exec("sqlite --version 2> /dev/null") !== '') | ||
90 | { | ||
91 | $sqlite_cli = 'sqlite'; | ||
92 | } | ||
93 | elseif(exec("which sqlite3 2> /dev/null") !== '' && exec("sqlite3 --version 2> /dev/null") !== '') | ||
94 | { | ||
95 | $sqlite_cli = 'sqlite3'; | ||
96 | } | ||
97 | else | ||
98 | { | ||
99 | printf("Impossible de lancer sqlite dans le terminal en utilisant la commande ' . $sqlite_cli . '\n"); | ||
100 | } | ||
diff --git a/php/functions.php b/php/functions.php deleted file mode 100644 index 83ebead..0000000 --- a/php/functions.php +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | <?php | ||
2 | // php/functions.php | ||
3 | |||
4 | // commande pour lancer une application graphique en ouvrant un fichier | ||
5 | function window_app_command(string $app, string $path = ''): string | ||
6 | { | ||
7 | $command = 'nohup ' . $app; // détache l'appli du script PHP | ||
8 | if($path !== '') | ||
9 | { | ||
10 | $command .= ' ' . $path; | ||
11 | } | ||
12 | $command .= ' > /dev/null 2>&1 &'; | ||
13 | // stdout > /dev/null et & permettent de rendre la main à PHP | ||
14 | // stderr > stdout pour cacher un message inutile | ||
15 | return $command; | ||
16 | } | ||
17 | |||
18 | function recherche_client(string $saisie): array | ||
19 | { | ||
20 | $resultats = []; | ||
21 | |||
22 | // recherche dans la BDD | ||
23 | |||
24 | |||
25 | return($resultats); | ||
26 | } | ||
diff --git a/php/latexToPdf.php b/php/latexToPdf.php deleted file mode 100644 index 18ff452..0000000 --- a/php/latexToPdf.php +++ /dev/null | |||
@@ -1,38 +0,0 @@ | |||
1 | <?php | ||
2 | // php/latexToPdf.php | ||
3 | |||
4 | // contenu | ||
5 | $latex = '\documentclass{article} | ||
6 | |||
7 | \usepackage[french]{babel} | ||
8 | \usepackage[utf8]{inputenc} | ||
9 | \usepackage[T1]{fontenc} | ||
10 | |||
11 | \begin{document} | ||
12 | Bravo, ça compile !! | ||
13 | \end{document}'; | ||
14 | |||
15 | $fileName = 'latex.tex'; | ||
16 | $latexPath = ''; | ||
17 | $pdfPath = ''; | ||
18 | |||
19 | //~ writeLatex($latex, $fileName, $latexPath); | ||
20 | |||
21 | function latexToPdf(string $fileName, string $latexPath, string $pdfPath) | ||
22 | { | ||
23 | $outputDir = ''; | ||
24 | if($pdfPath !== '') | ||
25 | { | ||
26 | $outputDir = '-output-directory=' . $pdfPath . ' '; | ||
27 | } | ||
28 | |||
29 | // compilation | ||
30 | exec('pdflatex ' . $outputDir . $latexPath . $fileName); | ||
31 | |||
32 | // nettoyage | ||
33 | $basename = basename($fileName, '.tex'); | ||
34 | unlink($pdfPath . $basename . '.aux'); | ||
35 | unlink($pdfPath . $basename . '.log'); | ||
36 | } | ||
37 | |||
38 | //~ latexToPdf($fileName, $latexPath, $pdfPath); | ||
diff --git a/php/latex_templates/devis.php b/php/latex_templates/devis.php deleted file mode 100644 index 7df98e8..0000000 --- a/php/latex_templates/devis.php +++ /dev/null | |||
@@ -1,84 +0,0 @@ | |||
1 | <?php | ||
2 | ob_start(); | ||
3 | ?> | ||
4 | \documentclass{report} | ||
5 | |||
6 | \usepackage[french]{babel} | ||
7 | \usepackage{lmodern} % police latin modern | ||
8 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
9 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
10 | \usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges | ||
11 | \usepackage{graphicx} % insertions d'images | ||
12 | \usepackage{textcomp} % pour N° | ||
13 | \usepackage{xcolor} % texte en couleur | ||
14 | \usepackage{tabularx} % dimensions des tableaux automatique | ||
15 | \usepackage{tikz} % le rectangle | ||
16 | |||
17 | \begin{document} | ||
18 | \setlength{\parindent}{0cm} % supprimer les alinéas | ||
19 | \large{} | ||
20 | \pagestyle{empty} % en-tête et pied de page vides | ||
21 | \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert | ||
22 | |||
23 | \begin{center} | ||
24 | \includegraphics{ordipolo.png}\\ | ||
25 | \Large\textbf{Dépannage informatique - Assistance à domicile} | ||
26 | \end{center} | ||
27 | |||
28 | 2 A rue de l'île de Man, 29000 Quimper | ||
29 | |||
30 | SIRET : 814 320 610 00011 | ||
31 | |||
32 | \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} | ||
33 | Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr | ||
34 | \end{tabularx} | ||
35 | |||
36 | Plus d'infos sur le site web: https\string://ordipolo.fr\\ | ||
37 | % \string supprime l'espace devant les : | ||
38 | |||
39 | \begin{center} | ||
40 | \large\textbf{DEVIS} | ||
41 | \end{center} | ||
42 | |||
43 | CLIENT\\ | ||
44 | |||
45 | \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} | ||
46 | Mme, M : \textcolor{vert}{} & | ||
47 | Date du devis : \textcolor{vert}{}\\ | ||
48 | Adresse : \textcolor{vert}{} & | ||
49 | Delai de livraison : \textcolor{vert}{}\\ | ||
50 | \end{tabularx}\\\\ | ||
51 | |||
52 | PRESTATION\\ | ||
53 | |||
54 | \textcolor{vert}{} | ||
55 | |||
56 | Total main d'oeuvre : \textcolor{vert}{}\\ | ||
57 | |||
58 | PIÈCES\\ | ||
59 | |||
60 | \textcolor{vert}{} | ||
61 | |||
62 | Total pièces : \textcolor{vert}{}\\ | ||
63 | |||
64 | TOTAL\\ | ||
65 | |||
66 | Déplacement : \textcolor{vert}{} | ||
67 | |||
68 | Total HT : \textcolor{vert}{} | ||
69 | |||
70 | \textit{(TVA non applicable, article 293B du code général des impôts)} | ||
71 | |||
72 | Référence du devis : \textcolor{vert}{}\\ | ||
73 | |||
74 | Devis reçu avant l'exécution des travaux, signature du client :\\ | ||
75 | \begin{tikzpicture} | ||
76 | \draw (0,0) rectangle (4,2); | ||
77 | \end{tikzpicture}\\ | ||
78 | |||
79 | \small{}NOTA BENE\\ | ||
80 | |||
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. | ||
82 | \end{document} | ||
83 | <?php | ||
84 | $devisLatex = ob_get_clean(); | ||
diff --git a/php/latex_templates/enveloppe_recto.php b/php/latex_templates/enveloppe_recto.php deleted file mode 100644 index 38003a1..0000000 --- a/php/latex_templates/enveloppe_recto.php +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | <?php | ||
2 | ob_start(); | ||
3 | ?> | ||
4 | \documentclass[]{report} | ||
5 | |||
6 | \usepackage[french]{babel} | ||
7 | \usepackage{lmodern} % police latin modern | ||
8 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
9 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
10 | \usepackage{graphicx} % insertions d'images | ||
11 | \usepackage[papersize={22cm, 11cm}, top=1cm, left=1cm, bottom=1cm]{geometry} | ||
12 | \pagestyle{empty} | ||
13 | |||
14 | \begin{document} | ||
15 | \setlength{\parindent}{0cm} | ||
16 | \includegraphics{ordipolo.png}\\ | ||
17 | \large\textbf{Dépannage informatique - Assistance à domicile} | ||
18 | |||
19 | \setlength{\parindent}{7,9cm} | ||
20 | \begin{minipage}[b][5,8cm]{12cm} | ||
21 | \LARGE{M. Truc\\3, rue Machin\\\\\\} | ||
22 | \LARGE{2 \ 9 \ 0 \ 0 \ 0 \ \ \ \ QUIMPER} | ||
23 | \end{minipage} | ||
24 | \end{document} | ||
25 | <?php | ||
26 | $enveloppeRectoLatex = ob_get_clean(); | ||
diff --git a/php/latex_templates/enveloppe_verso.php b/php/latex_templates/enveloppe_verso.php deleted file mode 100644 index 51f5f4d..0000000 --- a/php/latex_templates/enveloppe_verso.php +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | <?php | ||
2 | ob_start(); | ||
3 | ?> | ||
4 | \documentclass[]{report} | ||
5 | |||
6 | \usepackage[french]{babel} | ||
7 | \usepackage{lmodern} % police latin modern | ||
8 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
9 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
10 | \usepackage[papersize={22cm, 11cm}, top=0.6cm, left=4.5cm]{geometry} | ||
11 | \pagestyle{empty} | ||
12 | |||
13 | \begin{document} | ||
14 | \setlength{\parindent}{0cm} | ||
15 | \Large{Paul Jusot\\2A, rue de l'île de Man\\29000 QUIMPER} | ||
16 | \end{document} | ||
17 | <?php | ||
18 | $enveloppeVersoLatex = ob_get_clean(); | ||
diff --git a/php/latex_templates/facture.php b/php/latex_templates/facture.php deleted file mode 100644 index 409dd9a..0000000 --- a/php/latex_templates/facture.php +++ /dev/null | |||
@@ -1,85 +0,0 @@ | |||
1 | <?php | ||
2 | ob_start(); | ||
3 | ?> | ||
4 | \documentclass{report} | ||
5 | |||
6 | \usepackage[french]{babel} | ||
7 | \usepackage{lmodern} % police latin modern | ||
8 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
9 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
10 | \usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges | ||
11 | \usepackage{graphicx} % insertions d'images | ||
12 | \usepackage{textcomp} % pour N° | ||
13 | \usepackage{xcolor} % texte en couleur | ||
14 | \usepackage{tabularx} % dimensions des tableaux automatique | ||
15 | |||
16 | \begin{document} | ||
17 | \setlength{\parindent}{0cm} % supprimer les alinéas | ||
18 | \large{} | ||
19 | \pagestyle{empty} % en-tête et pied de page vides | ||
20 | \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert | ||
21 | |||
22 | \begin{center} | ||
23 | \includegraphics{ordipolo.png}\\ | ||
24 | \Large\textbf{Dépannage informatique - Assistance à domicile} | ||
25 | \end{center} | ||
26 | |||
27 | 2 A rue de l'île de Man, 29000 Quimper | ||
28 | |||
29 | SIRET : 814 320 610 00011 | ||
30 | |||
31 | \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} | ||
32 | Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr | ||
33 | \end{tabularx} | ||
34 | |||
35 | Plus d'infos sur le site web: https\string://ordipolo.fr\\ | ||
36 | % \string supprime l'espace devant les : | ||
37 | |||
38 | \begin{center} | ||
39 | \large\textbf{FACTURE} | ||
40 | \end{center} | ||
41 | |||
42 | CLIENT\\ | ||
43 | |||
44 | \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} | ||
45 | Mme, M : \textcolor{vert}{} & | ||
46 | Date : \textcolor{vert}{}\\ | ||
47 | \end{tabularx}\\ | ||
48 | Adresse : \textcolor{vert}{}\\ | ||
49 | |||
50 | PRESTATION\\ | ||
51 | |||
52 | \textcolor{vert}{} | ||
53 | |||
54 | Modèle de l'ordinateur : \textcolor{vert}{} | ||
55 | |||
56 | Système d'exploitation : \textcolor{vert}{} | ||
57 | |||
58 | Données à conserver : \textcolor{vert}{} | ||
59 | |||
60 | Clé d'activation : \textcolor{vert}{}\\ | ||
61 | |||
62 | Total main d'oeuvre : \textcolor{vert}{}\\ | ||
63 | |||
64 | PIÈCES\\ | ||
65 | |||
66 | \textcolor{vert}{} | ||
67 | |||
68 | Total pièces : \textcolor{vert}{}\\ | ||
69 | |||
70 | TOTAL\\ | ||
71 | |||
72 | Déplacement : \textcolor{vert}{} | ||
73 | |||
74 | Total HT : \textcolor{vert}{} | ||
75 | |||
76 | \textit{(TVA non applicable, article 293B du code général des impôts)} | ||
77 | |||
78 | Référence de la facture : \textcolor{vert}{}\\ | ||
79 | |||
80 | \small{}NOTA BENE\\ | ||
81 | |||
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. | ||
83 | \end{document} | ||
84 | <?php | ||
85 | $factureLatex = ob_get_clean(); | ||
diff --git a/php/latex_templates/location.php b/php/latex_templates/location.php deleted file mode 100644 index dc4ea3e..0000000 --- a/php/latex_templates/location.php +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | <?php | ||
2 | ob_start(); | ||
3 | ?> | ||
4 | \documentclass{report} | ||
5 | |||
6 | \usepackage[french]{babel} | ||
7 | \usepackage{lmodern} % police latin modern | ||
8 | \usepackage[utf8]{inputenc} % encodage d'entrée (document) | ||
9 | \usepackage[T1]{fontenc} % encodage de sortie (rendu) | ||
10 | \usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges | ||
11 | \usepackage{graphicx} % insertions d'images | ||
12 | \usepackage{textcomp} % pour N° | ||
13 | \usepackage{xcolor} % texte en couleur | ||
14 | %\usepackage{wrapfig} % placer texte et image côte-à-côte | ||
15 | \usepackage{tabularx} % dimensions des tableaux automatique | ||
16 | |||
17 | \begin{document} | ||
18 | \setlength{\parindent}{0cm} % supprimer les alinéas | ||
19 | \large{} | ||
20 | \pagestyle{empty} % en-tête et pied de page vides | ||
21 | \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert | ||
22 | |||
23 | \begin{center} | ||
24 | \includegraphics{ordipolo.png}\\ | ||
25 | \Large\textbf{Dépannage informatique - Assistance à domicile} | ||
26 | \end{center} | ||
27 | |||
28 | 2 A rue de l'île de Man, 29000 Quimper | ||
29 | |||
30 | SIRET : 814 320 610 00011 | ||
31 | |||
32 | \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} | ||
33 | Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr | ||
34 | \end{tabularx} | ||
35 | |||
36 | Plus d'infos sur le site web: https\string://ordipolo.fr\\ | ||
37 | % \string supprime l'espace devant les : | ||
38 | |||
39 | CLIENT\\ | ||
40 | |||
41 | \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} | ||
42 | Mme, M : \textcolor{vert}{} & | ||
43 | Date : \textcolor{vert}{}\\ | ||
44 | \end{tabularx}\\ | ||
45 | Adresse : \textcolor{vert}{}\\ | ||
46 | |||
47 | \end{document} | ||
48 | <?php | ||
49 | $locationLatex = ob_get_clean(); | ||
diff --git a/php/main.php b/php/main.php deleted file mode 100755 index a60a920..0000000 --- a/php/main.php +++ /dev/null | |||
@@ -1,205 +0,0 @@ | |||
1 | #!/bin/php | ||
2 | <?php | ||
3 | // php/main.php | ||
4 | |||
5 | // configuration du programme par l'utilisateur | ||
6 | require('../config.php'); // fichier de l'utilisateur: à déplacer peut-être dans un dossier config | ||
7 | //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 | |||
10 | // 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 | ||
12 | $file_explorer = 'xdg-open'; // ouvre l'explorateur de fichiers par défaut quand suivi d'un chemin en paramètre | ||
13 | $flyer = $pub . $flyer; | ||
14 | $business_card = $pub . $business_card; | ||
15 | $db_place .= $db_name . '.sqlite'; | ||
16 | $sqlitebrowser_enable = false; | ||
17 | $sqlite_cli = ''; // commande sqlite ou sqlite3 | ||
18 | $x_term_command = ''; // commande terminal en mode graphique | ||
19 | |||
20 | require('dependances.php'); // vérification des dépendances | ||
21 | require('functions.php'); | ||
22 | require('Dates.php'); // gère dates et timestamps | ||
23 | Dates::$date_format = $date_format; // dates européennes ou américaines | ||
24 | |||
25 | require('Connection.php'); // class DB extends PDO, connexion à la base et création de la base et des tables si elles n'existent pas déjà | ||
26 | require('Model.php'); // class Model extends DB, requêtes SQL | ||
27 | Connection::$dsn = 'sqlite:' . $db_place; // Data Source Name = 1er paramètre du constructeur de PDO: $bdd = new PDO($dsn); | ||
28 | |||
29 | $Database = new Model; // connexion et méthodes pour manipuler la base de données | ||
30 | $Database->create_tables(); | ||
31 | |||
32 | require('Zenity.php'); // commande système zenity | ||
33 | require('zenity_setup.php'); // texte dans les fenêtres ET instanciation (un objet = une commande) | ||
34 | |||
35 | require('Latex.php'); // générer le code LaTeX | ||
36 | require('latexToPdf.php'); // compilation | ||
37 | |||
38 | |||
39 | // boucle principale | ||
40 | $boucle = true; | ||
41 | while($boucle) | ||
42 | { | ||
43 | // menu principal | ||
44 | $choix_niv1 = exec($MenuPrincipal->get()); | ||
45 | |||
46 | // enregistrement | ||
47 | if($choix_niv1 === 'Nouvelle prestation') | ||
48 | { | ||
49 | // est ce que le client est déjà dans la base? | ||
50 | if(exec($QuestionNouveauClient->get()) === 0) // $? = 0 signifie oui | ||
51 | { | ||
52 | // saisie du nom du client et recherche | ||
53 | $client_saisie = exec($RechercheClient->get()); | ||
54 | |||
55 | // sélection parmi les résultats | ||
56 | $ResultatsRechercheClient->set_entries(recherche_client($client_saisie)); | ||
57 | $choix_niv2 = exec($ResultatsRechercheClient->get()); | ||
58 | if($choix_niv2 !== '') | ||
59 | { | ||
60 | echo "client trouvé\n"; | ||
61 | } | ||
62 | else // chaîne vide | ||
63 | { | ||
64 | echo "client pas trouvé\n"; | ||
65 | exec($NouveauClient->get()); | ||
66 | |||
67 | // enregistrement dans la BDD | ||
68 | |||
69 | } | ||
70 | |||
71 | // récupération des infos dans la BDD | ||
72 | |||
73 | } | ||
74 | else | ||
75 | { | ||
76 | echo "nouveau client\n"; | ||
77 | exec($NouveauClient->get()); | ||
78 | |||
79 | // enregistrement dans la BDD | ||
80 | |||
81 | } | ||
82 | |||
83 | // type comptable de prestation | ||
84 | $choix_niv2 = exec($MenuEnregistrement->get()); | ||
85 | $continuer = true; | ||
86 | if($choix_niv2 === "Devis") | ||
87 | { | ||
88 | $type = 'DEVIS'; | ||
89 | } | ||
90 | elseif($choix_niv2 === "Facture") | ||
91 | { | ||
92 | $type = 'FACTURE'; | ||
93 | } | ||
94 | elseif($choix_niv2 === "CESU") | ||
95 | { | ||
96 | $type = 'CESU'; | ||
97 | } | ||
98 | elseif($choix_niv2 === "Pas de prestation") | ||
99 | { | ||
100 | $type = ''; | ||
101 | } | ||
102 | else | ||
103 | { | ||
104 | $continuer = false; // retour menu principal | ||
105 | } | ||
106 | |||
107 | // détail de la prestation | ||
108 | if($continuer) | ||
109 | { | ||
110 | exec($Calendrier->get()); | ||
111 | exec($FormulairePrestation->get()); | ||
112 | // enregistrement date et prestation en BDD | ||
113 | exec($CommentairePrestation->get()); | ||
114 | // enregistrement commentaire en BDD | ||
115 | // vérification? | ||
116 | |||
117 | // tableau récaptilatif et demande de confirmation des informations | ||
118 | // création fichiers LaTeX et PDF | ||
119 | |||
120 | // imprimer? | ||
121 | //~ $imprimer_facture = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer la facture?"'); | ||
122 | //~ $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"'); | ||
123 | } | ||
124 | } | ||
125 | |||
126 | elseif($choix_niv1 === 'Fichier clients') | ||
127 | { | ||
128 | // quel affichage? un grand tableau avec zenity? une page web? un document LaTeX? | ||
129 | } | ||
130 | |||
131 | // documents à imprimer | ||
132 | elseif($choix_niv1 === 'Créer/imprimer un document') | ||
133 | { | ||
134 | $choix_niv2 = exec($MenuDocuments->get()); | ||
135 | if($choix_niv2 === 'Devis') | ||
136 | { | ||
137 | |||
138 | } | ||
139 | elseif($choix_niv2 === 'Facture') | ||
140 | { | ||
141 | |||
142 | } | ||
143 | elseif($choix_niv2 === 'Lettre avec adresse') | ||
144 | { | ||
145 | |||
146 | } | ||
147 | elseif($choix_niv2 === 'Livre des recettes') | ||
148 | { | ||
149 | |||
150 | } | ||
151 | elseif($choix_niv2 === "Registre des achats") | ||
152 | { | ||
153 | |||
154 | } | ||
155 | elseif($choix_niv2 === "Bilan annuel") | ||
156 | { | ||
157 | |||
158 | } | ||
159 | else | ||
160 | { | ||
161 | // retour menu principal | ||
162 | } | ||
163 | } | ||
164 | |||
165 | // Supports de communication | ||
166 | elseif($choix_niv1 === 'Communication') | ||
167 | { | ||
168 | $choix_niv2 = exec($MenuCommunication->get()); | ||
169 | if($choix_niv2 === 'Flyer (nécessite gimp)') | ||
170 | { | ||
171 | exec(window_app_command('gimp', $flyer)); | ||
172 | } | ||
173 | elseif($choix_niv2 === 'Carte de visite (nécessite scribus)') | ||
174 | { | ||
175 | exec(window_app_command('scribus', $business_card)); | ||
176 | } | ||
177 | elseif($choix_niv2 === 'Explorateur de fichiers') | ||
178 | { | ||
179 | exec(window_app_command($file_explorer, $pub)); | ||
180 | } | ||
181 | else | ||
182 | { | ||
183 | // retour menu principal | ||
184 | } | ||
185 | } | ||
186 | |||
187 | // BDD | ||
188 | elseif($choix_niv1 === 'Base de données') | ||
189 | { | ||
190 | if($sqlitebrowser_enable) | ||
191 | { | ||
192 | exec(window_app_command('sqlitebrowser', $db_place)); | ||
193 | } | ||
194 | else | ||
195 | { | ||
196 | exec($x_term_command . ' ' . $sqlite_cli . ' ' . $db_place); // correpond à priori à: xterm -e sqlite3 ~/ORDIPOLO/Appli_PHP/ordipolo.sqlite | ||
197 | } | ||
198 | } | ||
199 | else | ||
200 | { | ||
201 | $boucle = false; // byebye | ||
202 | } | ||
203 | } | ||
204 | |||
205 | // sauvegarder la base de données | ||
diff --git a/php/zenity_setup.php b/php/zenity_setup.php deleted file mode 100644 index b060c32..0000000 --- a/php/zenity_setup.php +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | <?php | ||
2 | // php/zenity_setup.php | ||
3 | |||
4 | |||
5 | // contenu des fenêtres zenity | ||
6 | $menu_principal_text = "Gestion d'une micro-entreprise"; | ||
7 | $menu_principal_entrees = ["Nouvelle prestation", "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?"; | ||
9 | $menu_enregistrement_text = "Type d\'enregistrement?"; | ||
10 | $menu_enregistrement_entrees = ["Devis", "Facture", "CESU", "Pas de prestation"]; | ||
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"]; | ||
13 | $menu_communication_text = "Imprimer un support de communication"; | ||
14 | $menu_communication_entrees = ["Flyer (nécessite gimp)", "Carte de visite (nécessite scribus)", "Explorateur de fichiers"]; | ||
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"; | ||
17 | $nouveau_client_text = "Nouveau client"; | ||
18 | $nouveau_client_entrees = ["Prénom Nom:", "Adresse:", "Code client, type: J.P.Duchmol"]; | ||
19 | $calendar_text = 'Nouvelle prestation étape 1/3 - Choisir une date'; | ||
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):",]; | ||
22 | $commentaire_prestation_text = 'Nouvelle prestation 3/3 - Commentaires'; | ||
23 | |||
24 | |||
25 | // commandes système qui ouvrent les fenêtres zenity, un objet = une commande | ||
26 | // s'utilisent comme ceci: exec($Objet->get()); | ||
27 | $MenuPrincipal = new ZenityList($menu_principal_text, $menu_principal_entrees); | ||
28 | $QuestionNouveauClient = new ZenityQuestion($question_nouveau_client_text); | ||
29 | $MenuEnregistrement = new ZenityList($menu_enregistrement_text, $menu_enregistrement_entrees); | ||
30 | $MenuDocuments = new ZenityList($menu_documents_text, $menu_documents_entrees); | ||
31 | $MenuCommunication = new ZenityList($menu_communication_text, $menu_communication_entrees); | ||
32 | $RechercheClient = new zenityEntry($recherche_client_text); | ||
33 | $ResultatsRechercheClient = new zenityList($resultats_recherche_client_text, []); | ||
34 | $NouveauClient = new ZenityForms($nouveau_client_text, $nouveau_client_entrees); | ||
35 | $Calendrier = new ZenityCalendar($calendar_text); | ||
36 | $FormulairePrestation = new ZenityForms($formulaire_text, $formulaire_entrees); | ||
37 | $CommentairePrestation = new ZenityEntry($commentaire_prestation_text); | ||