From 9d8133643773912d54fb0c7d86ef04e6acffa8c9 Mon Sep 17 00:00:00 2001 From: polo Date: Sat, 25 Feb 2023 02:27:22 +0100 Subject: =?UTF-8?q?lire=20tables,=20modifications=20BDD,=20cr=C3=A9ation?= =?UTF-8?q?=20documents=20et=20enveloppes=20latex,=20suppression=20de=20tr?= =?UTF-8?q?aits.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt | 28 ++++-- config.ini | 12 ++- data/dev.sqlite | Bin 0 -> 36864 bytes data/latex/ordipolo.png | Bin 0 -> 46751 bytes data/ordipolo.png | Bin 46751 -> 0 bytes data/ordipolo.sqlite | Bin 32768 -> 0 bytes data/originaux pas toucher/devis.tex | 86 ------------------- data/originaux pas toucher/enveloppe_recto.tex | 21 ----- data/originaux pas toucher/enveloppe_verso.tex | 13 --- data/originaux pas toucher/facture.tex | 80 ----------------- data/originaux pas toucher/location.tex | 44 ---------- data/templates/devis.php | 93 -------------------- data/templates/enveloppe_recto.php | 28 ------ data/templates/enveloppe_verso.php | 20 ----- data/templates/facture.php | 92 -------------------- data/templates/location.php | 86 ------------------- src/Config.php | 6 +- src/Dates.php | 87 ++++++++++--------- src/functions.php | 82 +++++++++++++++--- src/latex_templates/devis.php | 95 +++++++++++++++++++++ src/latex_templates/enveloppe_recto.php | 30 +++++++ src/latex_templates/enveloppe_verso.pdf | Bin 0 -> 26388 bytes src/latex_templates/enveloppe_verso.php | 25 ++++++ src/latex_templates/facture.php | 92 ++++++++++++++++++++ src/latex_templates/location.php | 86 +++++++++++++++++++ src/latex_templates/ordipolo.png | Bin 0 -> 46751 bytes .../originaux_pas_toucher/devis.tex | 88 +++++++++++++++++++ .../originaux_pas_toucher/enveloppe_recto.tex | 21 +++++ .../originaux_pas_toucher/enveloppe_verso.tex | 15 ++++ .../originaux_pas_toucher/facture.tex | 80 +++++++++++++++++ .../originaux_pas_toucher/location.tex | 44 ++++++++++ src/main.php | 4 +- src/model/CESU.php | 29 +++---- src/model/Clients.php | 31 ++++--- src/model/DB.php | 2 +- src/model/DevisFactures.php | 44 +++++----- src/model/Locations.php | 69 ++++++++------- src/model/Model.php | 95 +++++++++++++++++++-- src/model/Prestations.php | 14 ++- src/model/StructTablesDB.php | 6 +- src/model/traits.php | 86 +------------------ src/sections/1_new_service.php | 68 ++++++++------- src/view/ZenitySetup.php | 8 +- 43 files changed, 962 insertions(+), 848 deletions(-) create mode 100644 data/dev.sqlite create mode 100644 data/latex/ordipolo.png delete mode 100644 data/ordipolo.png delete mode 100644 data/ordipolo.sqlite delete mode 100644 data/originaux pas toucher/devis.tex delete mode 100644 data/originaux pas toucher/enveloppe_recto.tex delete mode 100644 data/originaux pas toucher/enveloppe_verso.tex delete mode 100644 data/originaux pas toucher/facture.tex delete mode 100644 data/originaux pas toucher/location.tex delete mode 100644 data/templates/devis.php delete mode 100644 data/templates/enveloppe_recto.php delete mode 100644 data/templates/enveloppe_verso.php delete mode 100644 data/templates/facture.php delete mode 100644 data/templates/location.php create mode 100644 src/latex_templates/devis.php create mode 100644 src/latex_templates/enveloppe_recto.php create mode 100644 src/latex_templates/enveloppe_verso.pdf create mode 100644 src/latex_templates/enveloppe_verso.php create mode 100644 src/latex_templates/facture.php create mode 100644 src/latex_templates/location.php create mode 100644 src/latex_templates/ordipolo.png create mode 100644 src/latex_templates/originaux_pas_toucher/devis.tex create mode 100644 src/latex_templates/originaux_pas_toucher/enveloppe_recto.tex create mode 100644 src/latex_templates/originaux_pas_toucher/enveloppe_verso.tex create mode 100644 src/latex_templates/originaux_pas_toucher/facture.tex create mode 100644 src/latex_templates/originaux_pas_toucher/location.tex diff --git a/README.txt b/README.txt index 07e1529..8845c5e 100644 --- a/README.txt +++ b/README.txt @@ -1,23 +1,37 @@ +ATTENTION +Ce programme est destiné à un usage privé et hors-ligne, +il ne nécessite pas de déclaration à la CNIL. +Il ne comporte aucune fonctionnalité réseau, ni aucune sécurité. +L'utilisateur est responsable des informations enregistrées, +lesquelles ne sont destinées sortir de son ordinteur. + + OS compatible: linux! bsd et mac sont probablement compatibles si les dépendances requises sont disponibles pas de version windows prévue dépendances obligatoires: -- php-cli (si votre distribution sépare php serveur web de php ligne de commande, installer le paquet php-cli) +- php-cli (certaines distributions (= debian) séparent php serveur web de php ligne de commande, installer le paquet php-cli) version minimale de php = - php-sqlite (moteur de base de données, activer si nécessaire le module pdo-sqlite dans le php.ini) +- un environnement graphique - zenity (fenêtres GTK pour scripts console) -- une distribution LaTeX pour le compiler en fichiers PDF à l'aide de la commande pdflatex (j'utilise TeX Live) -- interpréteurs sh, bash, ksh, csh, tcsh +- une distribution LaTeX permettant la compilation en PDF à l'aide de la commande pdflatex (j'utilise TeX Live) +- interpréteurs supportés: sh, bash, ksh, csh, tcsh + +dépendances recommandées: +- sqlite (tellement d'applications en ont besoin qu'il serait surprenant qu'il soit absent dépendances optionnelles: - sqlitebrowser (interface graphique pour sqlite) -si absent, le script essaie de lancer "sqlite3" dans "xterm" +si absence de sqlitebrowser, le programme essaiera de lancer "sqlite3" dans le terminal "xterm" + installation: - placer ce dossier où vous le souhaitez +- vérifier les autorisations du dossier "data" et de tout son contenu (normallement il n'y a rien à faire) - ouvrir le fichier "logiciel compta.desktop" avec un éditeur de texte et adapter les chemins - copier le fichier"logiciel compta.desktop" dans le dossier système des entrées du menu ou/et sur le bureau - ouvrir le fichier config.php et corriger si nécessaire: $business_name, $db_name, $flyer, $business_card @@ -26,10 +40,10 @@ son emplacement est par défaut à la racine de ce programme, tout comme ce fich configuration: -- veuillez modifier les variables dans config.php +- ça se passe dans le fichier config.ini ATTENTION, si vous ne savez pas ce que vous faîtes, ne faites rien. Pour réparer la configuration, saisissez une chaîne vide ou la valeur par défaut comme dans les exemples ci-dessous. chaîne vide: -$receipts = ''; +receipts = '' valeur par défaut: -$receipts = '~/ORDIPOLO/factures/'; +receipts = '~/ORDIPOLO/factures/' diff --git a/config.ini b/config.ini index 89c6118..903a1c1 100644 --- a/config.ini +++ b/config.ini @@ -6,14 +6,22 @@ ; ils sont relatifs par rapport au dossier 'src' où s'exécute le programme business_name = ORDIPOLO +business_guy = 'Paul Jusot' +business_address = "2A rue de l'île de Man" +business_postcode = '29000' +business_city = 'Quimper' -db_name = ordipolo +;db_name = ordipolo +db_name = dev ; défaut = racine de l'appli = dossier parent de celui du code source db_path = '../data/' -; le dossier latex par défaut est celui "inclu" dans ce programme +; emplacement où seront mis les documents créés +; note: en revanche modifier les "templates" n'est pas possible +;latex_path = '../data/latex/' latex_path = '../data/latex/' +;pdf_path = '../data/pdf/' pdf_path = '../data/pdf/' ;receipts_latex = '../data/latex/' diff --git a/data/dev.sqlite b/data/dev.sqlite new file mode 100644 index 0000000..f74d69d Binary files /dev/null and b/data/dev.sqlite differ diff --git a/data/latex/ordipolo.png b/data/latex/ordipolo.png new file mode 100644 index 0000000..2acd67d Binary files /dev/null and b/data/latex/ordipolo.png differ diff --git a/data/ordipolo.png b/data/ordipolo.png deleted file mode 100644 index 2acd67d..0000000 Binary files a/data/ordipolo.png and /dev/null differ diff --git a/data/ordipolo.sqlite b/data/ordipolo.sqlite deleted file mode 100644 index 29474b5..0000000 Binary files a/data/ordipolo.sqlite and /dev/null differ diff --git a/data/originaux pas toucher/devis.tex b/data/originaux pas toucher/devis.tex deleted file mode 100644 index c5ae6e8..0000000 --- a/data/originaux pas toucher/devis.tex +++ /dev/null @@ -1,86 +0,0 @@ -\documentclass{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges -\usepackage{graphicx} % insertions d'images -\usepackage{textcomp} % pour N° -\usepackage{xcolor} % texte en couleur -\usepackage{tabularx} % dimensions des tableaux automatique -\usepackage{tikz} % le rectangle - -\begin{document} - \setlength{\parindent}{0cm} % supprimer les alinéas - \large{} - \pagestyle{empty} % en-tête et pied de page vides - \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert - - \begin{center} - \includegraphics{../ordipolo.png}\\ - \Large\textbf{Dépannage informatique - Assistance à domicile} - \end{center} - - 2 A rue de l'île de Man, 29000 Quimper - - SIRET : 814 320 610 00011 - - \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} - Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr - \end{tabularx} - - Plus d'infos sur le site web: https\string://ordipolo.fr\\ - % \string supprime l'espace devant les : - - \begin{center} - \large\textbf{DEVIS} - \end{center} - - CLIENT\\ - - \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} - Mme, M : \textcolor{vert}{} & - Date du devis : \textcolor{vert}{}\\ - Adresse : \textcolor{vert}{} & - Delai de livraison : \textcolor{vert}{}\\ - \end{tabularx}\\\\ - - PRESTATION\\ - - \textcolor{vert}{} - - Total main d'oeuvre : \textcolor{vert}{}\\ - - PIÈCES\\ - - \textcolor{vert}{} - - Total pièces : \textcolor{vert}{}\\ - - TOTAL\\ - - Déplacement : \textcolor{vert}{} - - Total HT : \textcolor{vert}{} - - \textit{(TVA non applicable, article 293B du code général des impôts)} - - Référence du devis : \textcolor{vert}{}\\ - - Devis reçu avant l'exécution des travaux, signature du client :\\ - \begin{tikzpicture} - \draw (0,0) rectangle (4,2); - \end{tikzpicture}\\ - - \normalsize{}NOTA BENE\\ - - Si le délai de livraison n'est pas spécifié, un délai d'un mois est appliqué. - - Si Ordipolo garde votre ordinateur le temps nécessaire à la réparation, un reçu vous est remis. - Le client peut bénéficier gratuitement d'un ordinateur de prêt sur demande et selon disponibilité. - - 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. - - Les prestations d'Ordipolo sont régies par le code du commerce. -\end{document} diff --git a/data/originaux pas toucher/enveloppe_recto.tex b/data/originaux pas toucher/enveloppe_recto.tex deleted file mode 100644 index eab03f8..0000000 --- a/data/originaux pas toucher/enveloppe_recto.tex +++ /dev/null @@ -1,21 +0,0 @@ -\documentclass[]{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage{graphicx} % insertions d'images -\usepackage[papersize={22cm, 11cm}, top=1cm, left=1cm, bottom=1cm]{geometry} -\pagestyle{empty} - -\begin{document} - \setlength{\parindent}{0cm} - \includegraphics{../ordipolo.png}\\ - \large\textbf{Dépannage informatique - Assistance à domicile} - - \setlength{\parindent}{7,9cm} - \begin{minipage}[b][5,8cm]{12cm} - \LARGE{M. Truc\\3, rue Machin\\\\\\} - \LARGE{2 \ 9 \ 0 \ 0 \ 0 \ \ \ \ QUIMPER} - \end{minipage} -\end{document} \ No newline at end of file diff --git a/data/originaux pas toucher/enveloppe_verso.tex b/data/originaux pas toucher/enveloppe_verso.tex deleted file mode 100644 index 24baa8a..0000000 --- a/data/originaux pas toucher/enveloppe_verso.tex +++ /dev/null @@ -1,13 +0,0 @@ -\documentclass[]{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage[papersize={22cm, 11cm}, top=0.6cm, left=4.5cm]{geometry} -\pagestyle{empty} - -\begin{document} - \setlength{\parindent}{0cm} - \Large{Paul Jusot\\2A, rue de l'île de Man\\29000 QUIMPER} -\end{document} \ No newline at end of file diff --git a/data/originaux pas toucher/facture.tex b/data/originaux pas toucher/facture.tex deleted file mode 100644 index 5c849f5..0000000 --- a/data/originaux pas toucher/facture.tex +++ /dev/null @@ -1,80 +0,0 @@ -\documentclass{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges -\usepackage{graphicx} % insertions d'images -\usepackage{textcomp} % pour N° -\usepackage{xcolor} % texte en couleur -\usepackage{tabularx} % dimensions des tableaux automatique - -\begin{document} - \setlength{\parindent}{0cm} % supprimer les alinéas - \large{} - \pagestyle{empty} % en-tête et pied de page vides - \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert - - \begin{center} - \includegraphics{../ordipolo.png}\\ - \Large\textbf{Dépannage informatique - Assistance à domicile} - \end{center} - - 2 A rue de l'île de Man, 29000 Quimper - - SIRET : 814 320 610 00011 - - \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} - Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr - \end{tabularx} - - Plus d'infos sur le site web: https\string://ordipolo.fr\\ - % \string supprime l'espace devant les : - - \begin{center} - \large\textbf{FACTURE} - \end{center} - - CLIENT\\ - - \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} - Mme, M : \textcolor{vert}{} & - Date : \textcolor{vert}{}\\ - \end{tabularx}\\ - Adresse : \textcolor{vert}{}\\ - - PRESTATION\\ - - \textcolor{vert}{} - - Modèle de l'ordinateur : \textcolor{vert}{} - - Système d'exploitation : \textcolor{vert}{} - - Données à conserver : \textcolor{vert}{} - - Clé d'activation : \textcolor{vert}{}\\ - - Total main d'oeuvre : \textcolor{vert}{}\\ - - PIÈCES\\ - - \textcolor{vert}{} - - Total pièces : \textcolor{vert}{}\\ - - TOTAL\\ - - Déplacement : \textcolor{vert}{} - - Total HT : \textcolor{vert}{} - - \textit{(TVA non applicable, article 293B du code général des impôts)} - - Référence de la facture : \textcolor{vert}{}\\ - - \small{}NOTA BENE\\ - - 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. -\end{document} \ No newline at end of file diff --git a/data/originaux pas toucher/location.tex b/data/originaux pas toucher/location.tex deleted file mode 100644 index 0d525fe..0000000 --- a/data/originaux pas toucher/location.tex +++ /dev/null @@ -1,44 +0,0 @@ -\documentclass{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges -\usepackage{graphicx} % insertions d'images -\usepackage{textcomp} % pour N° -\usepackage{xcolor} % texte en couleur -%\usepackage{wrapfig} % placer texte et image côte-à-côte -\usepackage{tabularx} % dimensions des tableaux automatique - -\begin{document} - \setlength{\parindent}{0cm} % supprimer les alinéas - \large{} - \pagestyle{empty} % en-tête et pied de page vides - \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert - - \begin{center} - \includegraphics{../ordipolo.png}\\ - \Large\textbf{Dépannage informatique - Assistance à domicile} - \end{center} - - 2 A rue de l'île de Man, 29000 Quimper - - SIRET : 814 320 610 00011 - - \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} - Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr - \end{tabularx} - - Plus d'infos sur le site web: https\string://ordipolo.fr\\ - % \string supprime l'espace devant les : - - CLIENT\\ - - \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} - Mme, M : \textcolor{vert}{} & - Date : \textcolor{vert}{}\\ - \end{tabularx}\\ - Adresse : \textcolor{vert}{}\\ - -\end{document} \ No newline at end of file diff --git a/data/templates/devis.php b/data/templates/devis.php deleted file mode 100644 index 8f5e640..0000000 --- a/data/templates/devis.php +++ /dev/null @@ -1,93 +0,0 @@ - -\documentclass{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges -\usepackage{graphicx} % insertions d'images -\usepackage{textcomp} % pour N° -\usepackage{xcolor} % texte en couleur -\usepackage{tabularx} % dimensions des tableaux automatique -\usepackage{tikz} % le rectangle - -\begin{document} - \setlength{\parindent}{0cm} % supprimer les alinéas - \large{} - \pagestyle{empty} % en-tête et pied de page vides - \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert - - \begin{center} - \includegraphics{../ordipolo.png}\\ - \Large\textbf{Dépannage informatique - Assistance à domicile} - \end{center} - - 2 A rue de l'île de Man, 29000 Quimper - - SIRET : 814 320 610 00011 - - \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} - Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr - \end{tabularx} - - Plus d'infos sur le site web: https\string://ordipolo.fr\\ - % \string supprime l'espace devant les : - - \begin{center} - \large\textbf{DEVIS} - \end{center} - - CLIENT\\ - - \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} - Mme, M : \textcolor{vert}{} & - Date du devis : \textcolor{vert}{}\\ - Adresse : \textcolor{vert}{} & - Delai de livraison : \textcolor{vert}{}\\ - \end{tabularx}\\\\ - - PRESTATION\\ - - \textcolor{vert}{} - - Total main d'oeuvre : \textcolor{vert}{}\\ - - PIÈCES\\ - - \textcolor{vert}{} - - Total pièces : \textcolor{vert}{}\\ - - TOTAL\\ - - Déplacement : \textcolor{vert}{} - - Total HT : \textcolor{vert}{} - - \textit{(TVA non applicable, article 293B du code général des impôts)} - - Référence du devis : \textcolor{vert}{}\\ - - Devis reçu avant l'exécution des travaux, signature du client :\\ - \begin{tikzpicture} - \draw (0,0) rectangle (4,2); - \end{tikzpicture}\\ - - \normalsize{}NOTA BENE\\ - - Si le délai de livraison n'est pas spécifié, un délai d'un mois est appliqué. - - Si Ordipolo garde votre ordinateur le temps nécessaire à la réparation, un reçu vous est remis. - Le client peut bénéficier gratuitement d'un ordinateur de prêt sur demande et selon disponibilité. - - 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. - - Les prestations d'Ordipolo sont régies par le code du commerce. -\end{document} - -\documentclass[]{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage{graphicx} % insertions d'images -\usepackage[papersize={22cm, 11cm}, top=1cm, left=1cm, bottom=1cm]{geometry} -\pagestyle{empty} - -\begin{document} - \setlength{\parindent}{0cm} - \includegraphics{../ordipolo.png}\\ - \large\textbf{Dépannage informatique - Assistance à domicile} - - \setlength{\parindent}{7,9cm} - \begin{minipage}[b][5,8cm]{12cm} - \LARGE{M. Truc\\3, rue Machin\\\\\\} - \LARGE{2 \ 9 \ 0 \ 0 \ 0 \ \ \ \ QUIMPER} - \end{minipage} -\end{document} - -\documentclass[]{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage[papersize={22cm, 11cm}, top=0.6cm, left=4.5cm]{geometry} -\pagestyle{empty} - -\begin{document} - \setlength{\parindent}{0cm} - \Large{Paul Jusot\\2A, rue de l'île de Man\\29000 QUIMPER} -\end{document} - -\documentclass{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges -\usepackage{graphicx} % insertions d'images -\usepackage{textcomp} % pour N° -\usepackage{xcolor} % texte en couleur -\usepackage{tabularx} % dimensions des tableaux automatique - -\begin{document} - \setlength{\parindent}{0cm} % supprimer les alinéas - \large{} - \pagestyle{empty} % en-tête et pied de page vides - \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert - - \begin{center} - \includegraphics{../ordipolo.png}\\ - \Large\textbf{Dépannage informatique - Assistance à domicile} - \end{center} - - 2 A rue de l'île de Man, 29000 Quimper - - SIRET : 814 320 610 00011 - - \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} - Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr - \end{tabularx} - - Plus d'infos sur le site web: https\string://ordipolo.fr\\ - % \string supprime l'espace devant les : - - \begin{center} - \large\textbf{FACTURE} - \end{center} - - CLIENT\\ - - \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} - Mme, M : \textcolor{vert}{} & - Date : \textcolor{vert}{}\\ - \end{tabularx}\\ - Adresse : \textcolor{vert}{}\\ - - PRESTATION\\ - - \textcolor{vert}{} - - Modèle de l'ordinateur : \textcolor{vert}{} - - Système d'exploitation : \textcolor{vert}{} - - Données à conserver : \textcolor{vert}{} - - Clé d'activation : \textcolor{vert}{}\\ - - Total main d'oeuvre : \textcolor{vert}{}\\ - - PIÈCES\\ - - \textcolor{vert}{} - - Total pièces : \textcolor{vert}{}\\ - - TOTAL\\ - - Déplacement : \textcolor{vert}{} - - Total HT : \textcolor{vert}{} - - \textit{(TVA non applicable, article 293B du code général des impôts)} - - Référence de la facture : \textcolor{vert}{}\\ - - \small{}NOTA BENE\\ - - Si Ordipolo garde votre ordinateur le temps nécessaire à la réparation, un reçu vous est remis. - Le client peut bénéficier gratuitement d'un ordinateur de prêt sur demande et selon disponibilité. - - 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. - - Les prestations d'Ordipolo sont régies par le code du commerce. -\end{document} - -\documentclass{report} - -\usepackage[french]{babel} -\usepackage{lmodern} % police latin modern -\usepackage[utf8]{inputenc} % encodage d'entrée (document) -\usepackage[T1]{fontenc} % encodage de sortie (rendu) -\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges -\usepackage{graphicx} % insertions d'images -\usepackage{textcomp} % pour N° -\usepackage{xcolor} % texte en couleur -%\usepackage{wrapfig} % placer texte et image côte-à-côte -\usepackage{tabularx} % dimensions des tableaux automatique - -\begin{document} - \setlength{\parindent}{0cm} % supprimer les alinéas - \large{} - \pagestyle{empty} % en-tête et pied de page vides - \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert - - \begin{center} - \includegraphics{../ordipolo.png}\\ - \Large\textbf{Dépannage informatique - Assistance à domicile} - \end{center} - - 2 A rue de l'île de Man, 29000 Quimper - - SIRET : 814 320 610 00011 - - \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} - Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr - \end{tabularx} - - Plus d'infos sur le site web: https\string://ordipolo.fr\\ - % \string supprime l'espace devant les : - - \begin{center} - \large\textbf{CONTRAT DE LOCATION} - \end{center} - - PROPRIÉTAIRE\\ - - Mme, M : \textcolor{vert}{Paul Jusot}\\ - Adresse : \textcolor{vert}{2A, rue de l'île de Man, 29000 Quimper}\\ - - LOCATAIRE\\ - - \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} - Mme, M : \textcolor{vert}{} & tel : \textcolor{vert}{}\\ - Adresse : \textcolor{vert}{} & courriel : \textcolor{vert}{} - \end{tabularx}\\\\ - - BIEN LOUÉ\\ - - Désignation : \textcolor{vert}{}\\ - Modèle, description : \textcolor{vert}{}\\ - - État des lieux initial : \textcolor{vert}{}\\\\ - - État des lieux final : \textcolor{vert}{}\\\\ - - CLAUSES\\ - - Durée du prêt : \textcolor{vert}{}\\ - Loyer mensuel : \textcolor{vert}{}\\ - - - \textbf{Le bénéficiaire de cette location s’engage à prendre soin du bien désigné et à en faire un usage strictement personnel.}\\ - - \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} - Fait en deux exemplaires à : \textcolor{vert}{} & le : \textcolor{vert}{} \\ - \end{tabularx}\\ - - \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} - Le bénéficiaire du prêt : \textcolor{vert}{} & - Le loueur : \textcolor{vert}{}\\ - \end{tabularx}\\ - \normalsize(précéder la signature de la mention « lu et approuvé ») - -\end{document} -setTimestamp($input); + $this->setDayMonthYear($this->date); } } + // getters + public function getDate(): string + { + return($this->date); + } + public function getDay(): string + { + return($this->day); + } + public function getMonth(): string + { + return($this->month); + } + public function getYear(): string + { + return($this->year); + } + + public function getTimestamp(): int + { + return($this->timestamp); + } + + + // setters public function setDate(string $input) { - $input = $this->dashOrSlash($input); // pour strtotime() - - $splitedDate = preg_split('#\D#', $input); // \D = tout sauf chiffre - $this->year = $splitedDate[2]; - - if(self::$date_format === 'euro') - { - $this->day = $splitedDate[1]; - $this->month = $splitedDate[0]; - } - else - { - $this->day = $splitedDate[0]; - $this->month = $splitedDate[1]; - } + $input = $this->dashOrSlash($input); // formate pour strtotime() + $this->setDayMonthYear($input); //~ if(checkdate($splitedDate[0], $splitedDate[1], $splitedDate[2])) if(checkdate($this->day, $this->month, $this->year)) @@ -62,33 +78,26 @@ class Dates public function setTimestamp(int $input) { $this->timestamp = $input; - $this->date = $this->timestamp_to_date($input); // timestamp (int) -> date (string) + $this->date = $this->timestampToDate($input); // timestamp (int) -> date (string) } - - public function getDate(): string - { - return($this->date); - } - public function getDay(): string - { - return($this->day); - } - public function getMonth(): string + public function setDayMonthYear(string $input) { - return($this->month); - } - public function getYear(): string - { - return($this->year); - } - - public function getTimestamp(): int - { - return($this->timestamp); + $splitedDate = preg_split('#\D#', $input); // \D = tout sauf chiffre + + if(self::$date_format === 'euro') + { + $this->day = $splitedDate[1]; + $this->month = $splitedDate[0]; + } + else + { + $this->day = $splitedDate[0]; + $this->month = $splitedDate[1]; + } + $this->year = $splitedDate[2]; } - private function dashOrSlash(string $date): string { if(self::$date_format === 'euro') @@ -108,11 +117,11 @@ class Dates } } - private function timestamp_to_date(int $timestamp): string + private function timestampToDate(int $timestamp): string { if(self::$date_format === 'euro') { - return(date("j-m-Y", $timestamp)); + return(date("d-m-Y", $timestamp)); } elseif(self::$date_format === 'usa') { diff --git a/src/functions.php b/src/functions.php index b8779e8..89bfbc9 100644 --- a/src/functions.php +++ b/src/functions.php @@ -1,7 +1,7 @@ getAll(); + + if($Presta == null) // recto d'une enveloppe + { + $latex_path .= 'enveloppes_recto/'; + $pdf_path .= 'enveloppes_recto/'; + $data['code_postal'] = implode(' \ ', str_split($data['code_postal'])); // code postal avec 2 espaces entre chaque chiffre: 2 \ 9 \ 0 \ 0 \ 0 + $latex = makeLatex($documentType, $data); // injection des variables + $file_name = $Client->getCodeClient() . '.tex'; + } + else // facture, devis, location + { + $data = array_merge($data, $Presta->getAll()); + $Date = new Dates($Presta->getDate()); // entrée = timestamp (doit être un "int"!!) + $year = $Date->getYear(); + + // créer un sous-dossier pour la nouvelle année + $latex_path .= $year . '/'; + $pdf_path .= $year . '/'; + + if($Details != null) + { + $data = array_merge($data, $Details->getAll()); + } + + $latex = makeLatex($documentType, $data, $Date); // injection des variables + $file_name = $Presta->getCodePresta() . '.tex'; + } + } + + // création des fichiers + makeFolder($latex_path); + makeFolder($pdf_path); + file_put_contents($latex_path. $file_name, $latex); // écriture du fichier latexToPdf($latex_path, $file_name, $pdf_path); } -function getLatexFromTemplate(string $template, $data) +function makeLatex(string $documentType, array $data, Dates $Date = null) { - // variables à injecter - $nom_client = "M. Duchmol"; + $date = ''; + if($Date != null) + { + $date = $Date->getDate(); + $date = preg_replace('#\D#', '/', $date); // date avec des slashs / parce que j'aime bien + } // on obtient la variable $latex avec ob_get_clean() - include('latex_templates/' . $template . '.php'); + // le include() ici, c'est du génie ou c'est moche ou les deux? + // un nouveau fichier php est inséré à chaque itération + include('latex_templates/' . $documentType . '.php'); // on retourne le buffer // normallement le code PHP inséré avec include est nettoyé en quittant la fonction @@ -76,7 +136,7 @@ function latexToPdf(string $latexPath, string $fileName, string $pdfPath) // compilation exec('pdflatex ' . $outputDir . $latexPath . $fileName); - + // nettoyage $basename = basename($fileName, '.tex'); unlink($pdfPath . $basename . '.aux'); diff --git a/src/latex_templates/devis.php b/src/latex_templates/devis.php new file mode 100644 index 0000000..bd9c89d --- /dev/null +++ b/src/latex_templates/devis.php @@ -0,0 +1,95 @@ + +\documentclass{report} + +\usepackage[french]{babel} +\usepackage{lmodern} % police latin modern +\usepackage[utf8]{inputenc} % encodage d'entrée (document) +\usepackage[T1]{fontenc} % encodage de sortie (rendu) +\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges +\usepackage{graphicx} % insertions d'images +\usepackage{textcomp} % pour N° +\usepackage{xcolor} % texte en couleur +\usepackage{tabularx} % dimensions des tableaux automatique +\usepackage{tikz} % le rectangle + +\begin{document} + \setlength{\parindent}{0cm} % supprimer les alinéas + \large{} + \pagestyle{empty} % en-tête et pied de page vides + \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert + + \begin{center} + \includegraphics{latex_templates/ordipolo.png}\\ + \Large\textbf{Dépannage informatique - Assistance à domicile} + \end{center} + + 2 A rue de l'île de Man, 29000 Quimper + + SIRET : 814 320 610 00011 + + \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} + Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr + \end{tabularx} + + Plus d'infos sur le site web: https\string://ordipolo.fr\\ + % \string supprime l'espace devant les : + + \begin{center} + \large\textbf{DEVIS} + \end{center} + + CLIENT\\ + + \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} + Mme, M : \textcolor{vert}{} & + Date du devis : \textcolor{vert}{}\\ + Adresse : \textcolor{vert}{} & + Delai de livraison : \textcolor{vert}{}\\ + & + Durée de validité : \textcolor{vert}{}\\ + \end{tabularx}\\\\ + + PRESTATION\\ + + \textcolor{vert}{} + + Total main d'oeuvre : \textcolor{vert}{}\\ + + PIÈCES\\ + + \textcolor{vert}{} + + Total pièces : \textcolor{vert}{}\\ + + TOTAL\\ + + Déplacement : \textcolor{vert}{} + + Total HT : \textcolor{vert}{} + + \textit{(TVA non applicable, article 293B du code général des impôts)} + + Référence du devis : \textcolor{vert}{}\\ + + Devis reçu avant l'exécution des travaux, signature du client :\\ + \begin{tikzpicture} + \draw (0,0) rectangle (4,2); + \end{tikzpicture}\\ + + \normalsize{}NOTA BENE\\ + + Si le délai de livraison n'est pas spécifié, un délai d'un mois est appliqué. + + Si Ordipolo garde votre ordinateur le temps nécessaire à la réparation, un reçu vous est remis. + Le client peut bénéficier gratuitement d'un ordinateur de prêt sur demande et selon disponibilité. + + 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. + + Les prestations d'Ordipolo sont régies par le code du commerce. +\end{document} + +\documentclass[]{report} + +\usepackage[french]{babel} +\usepackage{lmodern} % police latin modern +\usepackage[utf8]{inputenc} % encodage d'entrée (document) +\usepackage[T1]{fontenc} % encodage de sortie (rendu) +\usepackage{graphicx} % insertions d'images +\usepackage[papersize={22cm, 11cm}, top=1cm, left=1cm, bottom=1cm]{geometry} +\pagestyle{empty} + +\begin{document} + \setlength{\parindent}{0cm} + \includegraphics{latex_templates/ordipolo.png}\\ + \large\textbf{Dépannage informatique - Assistance à domicile} + + \setlength{\parindent}{7,9cm} + \begin{minipage}[b][5,8cm]{12cm} + \LARGE{\\\\\\\\} + \LARGE{ \ \ \ \ } + \end{minipage} +\end{document} + +\documentclass[]{report} + +\usepackage[french]{babel} +\usepackage{lmodern} % police latin modern +\usepackage[utf8]{inputenc} % encodage d'entrée (document) +\usepackage[T1]{fontenc} % encodage de sortie (rendu) +\usepackage[papersize={22cm, 11cm}, top=0.6cm, left=4.5cm]{geometry} +\pagestyle{empty} + +\begin{document} + \setlength{\parindent}{0cm} + \Large{\\\\ } +\end{document} + +\documentclass{report} + +\usepackage[french]{babel} +\usepackage{lmodern} % police latin modern +\usepackage[utf8]{inputenc} % encodage d'entrée (document) +\usepackage[T1]{fontenc} % encodage de sortie (rendu) +\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges +\usepackage{graphicx} % insertions d'images +\usepackage{textcomp} % pour N° +\usepackage{xcolor} % texte en couleur +\usepackage{tabularx} % dimensions des tableaux automatique + +\begin{document} + \setlength{\parindent}{0cm} % supprimer les alinéas + \large{} + \pagestyle{empty} % en-tête et pied de page vides + \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert + + \begin{center} + \includegraphics{latex_templates/ordipolo.png}\\ + \Large\textbf{Dépannage informatique - Assistance à domicile} + \end{center} + + 2 A rue de l'île de Man, 29000 Quimper + + SIRET : 814 320 610 00011 + + \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} + Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr + \end{tabularx} + + Plus d'infos sur le site web: https\string://ordipolo.fr\\ + % \string supprime l'espace devant les : + + \begin{center} + \large\textbf{FACTURE} + \end{center} + + CLIENT\\ + + \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} + Mme, M : \textcolor{vert}{} & + Date : \textcolor{vert}{}\\ + \end{tabularx}\\ + Adresse : \textcolor{vert}{}\\ + + PRESTATION\\ + + \textcolor{vert}{} + + Modèle de l'ordinateur : \textcolor{vert}{} + + Système d'exploitation : \textcolor{vert}{} + + Données à conserver : \textcolor{vert}{} + + Clé d'activation : \textcolor{vert}{}\\ + + Total main d'oeuvre : \textcolor{vert}{}\\ + + PIÈCES\\ + + \textcolor{vert}{} + + Total pièces : \textcolor{vert}{}\\ + + TOTAL\\ + + Déplacement : \textcolor{vert}{} + + Total HT : \textcolor{vert}{} + + \textit{(TVA non applicable, article 293B du code général des impôts)} + + Référence de la facture : \textcolor{vert}{}\\ + + \small{}NOTA BENE\\ + + Si Ordipolo garde votre ordinateur le temps nécessaire à la réparation, un reçu vous est remis. + Le client peut bénéficier gratuitement d'un ordinateur de prêt sur demande et selon disponibilité. + + 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. + + Les prestations d'Ordipolo sont régies par le code du commerce. +\end{document} + +\documentclass{report} + +\usepackage[french]{babel} +\usepackage{lmodern} % police latin modern +\usepackage[utf8]{inputenc} % encodage d'entrée (document) +\usepackage[T1]{fontenc} % encodage de sortie (rendu) +\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry} % marges +\usepackage{graphicx} % insertions d'images +\usepackage{textcomp} % pour N° +\usepackage{xcolor} % texte en couleur +%\usepackage{wrapfig} % placer texte et image côte-à-côte +\usepackage{tabularx} % dimensions des tableaux automatique + +\begin{document} + \setlength{\parindent}{0cm} % supprimer les alinéas + \large{} + \pagestyle{empty} % en-tête et pied de page vides + \definecolor{vert}{rgb}{0.07, 0.46, 0.13} % saisie en vert + + \begin{center} + \includegraphics{latex_templates/ordipolo.png}\\ + \Large\textbf{Dépannage informatique - Assistance à domicile} + \end{center} + + 2 A rue de l'île de Man, 29000 Quimper + + SIRET : 814 320 610 00011 + + \begin{tabularx}{0.67\linewidth}{@{}X@{}@{}X@{}} + Tel : 06.63.85.48.82 & Courriel : ordipolo@gmx.fr + \end{tabularx} + + Plus d'infos sur le site web: https\string://ordipolo.fr\\ + % \string supprime l'espace devant les : + + \begin{center} + \large\textbf{CONTRAT DE LOCATION} + \end{center} + + PROPRIÉTAIRE\\ + + Mme, M : \textcolor{vert}{Paul Jusot}\\ + Adresse : \textcolor{vert}{2A, rue de l'île de Man, 29000 Quimper}\\ + + LOCATAIRE\\ + + \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} + Mme, M : \textcolor{vert}{} & tel : \textcolor{vert}{}\\ + Adresse : \textcolor{vert}{} & courriel : \textcolor{vert}{} + \end{tabularx}\\\\ + + BIEN LOUÉ\\ + + Désignation : \textcolor{vert}{}\\ + Modèle, description : \textcolor{vert}{}\\ + + État des lieux initial : \textcolor{vert}{}\\\\ + + État des lieux final : \textcolor{vert}{}\\\\ + + CLAUSES\\ + + Durée du prêt : \textcolor{vert}{}\\ + Loyer mensuel : \textcolor{vert}{}\\ + + + \textbf{Le bénéficiaire de cette location s’engage à prendre soin du bien désigné et à en faire un usage strictement personnel.}\\ + + \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} + Fait en deux exemplaires à : \textcolor{vert}{} & le : \textcolor{vert}{} \\ + \end{tabularx}\\ + + \begin{tabularx}{\linewidth}{@{}X@{}@{}X@{}} + Le bénéficiaire du prêt : \textcolor{vert}{} & + Le loueur : \textcolor{vert}{}\\ + \end{tabularx}\\ + \normalsize(précéder la signature de la mention « lu et approuvé ») + +\end{document} +type == 'cesu'; + $this->table = strtolower(__CLASS__); // cesu } // setters - public function setIDCesu(int $value) + public function setIDPresta(int $value) { - $this->ID_cesu = $value; + $this->ID_presta = $value; return($this); } - //~ public function setIDPresta(int $value) - //~ { - //~ $this->ID_presta = $value; - //~ return($this); - //~ } public function setTaches(string $value) { $this->taches = $value; @@ -40,9 +34,10 @@ class CESU extends Model $this->duree_travail = $value; return($this); } - public function setSalaire(float $value) + public function setSalaire($value) { - $this->salaire = $value; + $value = str_replace(',', '.', $value); + $this->salaire = (float) $value; return($this); } } diff --git a/src/model/Clients.php b/src/model/Clients.php index 9661562..d841451 100644 --- a/src/model/Clients.php +++ b/src/model/Clients.php @@ -8,23 +8,19 @@ class Clients extends Model protected $prenom_nom; protected $code_client; protected $adresse; + protected $code_postal; + protected $ville; protected $telephone; protected $courriel; - protected $commentaires; + protected $apropos; - use ModelChildren; // pour hydrateFromForm() + //~ use ModelChildren; public function __construct() { - $this->table = 'clients'; // à mettre dans ModelChildren + $this->table = strtolower(__CLASS__); // clients } - //~ public function set(string $variable, $value) - //~ { - //~ $this->$variable = $value; - //~ return($this); - //~ } - // getters public function getID(): int { @@ -36,8 +32,6 @@ class Clients extends Model } // setters - //~ public function setID() -> dans le trait ModelChildren - public function setPrenomNom($value) { $this->prenom_nom = (string) $value; @@ -53,6 +47,17 @@ class Clients extends Model $this->adresse = (string) $value; return($this); } + public function setCodePostal($value) + { + $this->code_postal = (string) $value; + return($this); + } + public function setVille($value) + { + $this->ville = (string) $value; + return($this); + } + public function setTelephone($value) // chaine parce que zenity renvoie une chaine et parce qu'on garde le 0 au début { if(is_numeric($value)) @@ -71,9 +76,9 @@ class Clients extends Model $this->courriel = (string) $value; return($this); } - public function setCommentaires($value) + public function setApropos($value) { - $this->commentaires = (string) $value; + $this->apropos = (string) $value; return($this); } diff --git a/src/model/DB.php b/src/model/DB.php index 381623b..52d6479 100644 --- a/src/model/DB.php +++ b/src/model/DB.php @@ -1,7 +1,7 @@ ID_presta = $ID_presta; $this->table = $table; // deux tables séparées devis et factures } // setters - //~ public function setID() -> dans le trait ModelChildren - public function setIDPresta(int $value) { $this->ID_presta = $value; return($this); } - public function setValiditedevis(string $value) - { - $this->validite_devis = $value; - return($this); - } - public function setSignatureDevis(string $value) - { - $this->signature_devis = $value; - return($this); - } public function setTaches(string $value) { $this->taches = $value; @@ -73,11 +60,11 @@ class DevisFactures extends Model $this->cles_licences = $value; return($this); } - public function setTemps(string $value) - { - $this->temps = $value; - return($this); - } + //~ public function setTemps(string $value) + //~ { + //~ $this->temps = $value; + //~ return($this); + //~ } public function setTotalMainDOeuvre($value) { $value = str_replace(',', '.', $value); @@ -107,6 +94,21 @@ class DevisFactures extends Model $this->total_HT = (float) $value; return($this); } + public function setDelaiLivraison(string $value) + { + $this->delai_livraison = $value; + return($this); + } + public function setValiditedevis(string $value) + { + $this->validite_devis = $value; + return($this); + } + public function setSignatureDevis(string $value) + { + $this->signature_devis = $value; + return($this); + } //~ public function newRow(array $input) //~ { diff --git a/src/model/Locations.php b/src/model/Locations.php index 21e9b09..8ebf757 100644 --- a/src/model/Locations.php +++ b/src/model/Locations.php @@ -4,48 +4,44 @@ class Locations extends Model { // lecture des données ou hydratation - private $ID_location; - private $nature_bien; - private $modele; - private $valeur; - private $etat_des_lieux_debut; - private $etat_des_lieux_fin; - private $duree_location; - private $loyer_mensuel; - private $total_HT; + protected $ID_presta; + protected $designation; + protected $modele_description; + protected $valeur; + protected $etat_des_lieux_debut; + protected $etat_des_lieux_fin; + protected $duree_location; + protected $loyer_mensuel; + protected $loyers_payes; + protected $caution; - use ModelChildren; + //~ use ModelChildren; - public function __construct(int $client_ID) + public function __construct() { - parent::__construct($client_ID); - $this->type == 'location'; + $this->table = strtolower(__CLASS__); // locations } // setters - public function setIDLocation(int $value) + public function setIDPresta(int $value) { - $this->ID_location = $value; + $this->ID_presta = $value; return($this); } - //~ public function setIDPresta(int $value) - //~ { - //~ $this->ID_presta = $value; - //~ return($this); - //~ } - public function setNatureBien(string $value) + public function setDesignation(string $value) { - $this->nature_bien = $value; + $this->designation = $value; return($this); } - public function setModele(string $value) + public function setModeleDescription(string $value) { - $this->modele = $value; + $this->modele_description = $value; return($this); } - public function setValeur(float $value) + public function setValeur($value) { - $this->valeur = $value; + $value = str_replace(',', '.', $value); + $this->valeur = (float) $value; return($this); } public function setEtatDesLieuxDebut(string $value) @@ -58,19 +54,28 @@ class Locations extends Model $this->etat_des_lieux_fin = $value; return($this); } - public function setDureeLocation(string $value) + public function setDureeLocation($value) { - $this->duree_location = $value; + $value = str_replace(',', '.', $value); + $this->duree_location = (float) $value; return($this); } - public function setlLyerMensuel(float $value) + public function setLoyerMensuel($value) { - $this->loyer_mensuel = $value; + $value = str_replace(',', '.', $value); + $this->loyer_mensuel = (float) $value; return($this); } - public function setTotalHT(float $value) + public function setLoyersPayes($value) { - $this->total_HT = $value; + $value = str_replace(',', '.', $value); + $this->loyers_payes = (float) $value; + return($this); + } + public function setCaution($value) + { + $value = str_replace(',', '.', $value); + $this->caution = (float) $value; return($this); } } diff --git a/src/model/Model.php b/src/model/Model.php index 4c1fb4d..6a7907c 100644 --- a/src/model/Model.php +++ b/src/model/Model.php @@ -1,16 +1,16 @@ db = parent::getInstance(); // connexion //~ $this->table = strtolower(__CLASS__); + //~ echo "TABLE = " . $this->table . "\n"; } // getters @@ -19,7 +19,25 @@ class Model extends DB return($this->table); } + public function getAll(): array + { + return get_object_vars($this); // retourne les propriétés de l'objet + } + // setters + public function setID(int $value = 0) + { + if($value === 0) + { + $this->ID = $this->db->lastInsertId(); // méthode de PDO (attention ne gère pas la concurence) + } + else + { + $this->ID = $value; + } + return($this); + } + public function hydrate(array $data): bool // $data = tableau associatif en entrée: nom_du_champ => valeur { foreach($data as $key => $value) @@ -41,6 +59,71 @@ class Model extends DB return true; } + // cette fonction reçoit des données d'un tableau simple, permettant d'associer des champs de formulaires aux noms différents des champs de la BDD + function hydrateFromForm(string $data_string, Object $Presta = NULL): bool // quand l'objet est $Details, on hydrate aussi $Presta + { + //~ $tableSize = count(StructTablesDB::$structureOfTables[$this->getTable()]); // int + + if($data_string !== '') + { + $data_array = explode('|', $data_string); // array + $check = false; + switch($this->getTable()) + { + case 'clients'; + if($data_array[0] == '') + { + echo "debug: données insuffisantes, le nom du client doit au minimum être renseigné\n"; + return false; + } + else + { + $check = $this->hydrate(['prenom_nom' => $data_array[0], 'code_client' => $data_array[1], 'adresse' => $data_array[2], 'code_postal' => $data_array[3], 'ville' => $data_array[4], 'telephone' => $data_array[5], 'courriel' => $data_array[6], 'apropos' => $data_array[7]]); + } + break; + case 'prestations'; // inutilisé + break; + case 'devis'; + $check = $Presta->hydrate(['mode_paiement' => $data_array[6]]); + if($check) + { + $check = $this->hydrate(['taches' => $data_array[0], 'total_main_d_oeuvre' => $data_array[1], 'pieces' => $data_array[2], 'total_pieces' => $data_array[3], 'deplacement' => $data_array[4], 'total_HT' => $data_array[5], 'delai_livraison' => $data_array[7], 'validite_devis' => $data_array[8], 'signature_devis' => $data_array[9]]); + } + break; + case 'factures'; + $check = $Presta->hydrate(['mode_paiement' => $data_array[10]]); + if($check) + { + $check = $this->hydrate(['taches' => $data_array[0], 'machine' => $data_array[1], 'OS' => $data_array[2], 'donnees' => $data_array[3], 'cles_licences' => $data_array[4], 'total_main_d_oeuvre' => $data_array[5], 'pieces' => $data_array[6], 'total_pieces' => $data_array[7], 'deplacement' => $data_array[8], 'total_HT' => $data_array[9]]); + } + break; + case 'cesu'; + $check = $Presta->hydrate(['mode_paiement' => $data_array[3]]); + if($check) + { + $check = $this->hydrate(['taches' => $data_array[0], 'duree_travail' => $data_array[1], 'salaire' => $data_array[2]]); + } + break; + case 'locations'; + //~ $check = $Presta->hydrate(['mode_paiement' => $data_array[11]]); + //~ if($check) + //~ { + $check = $this->hydrate(['designation' => $data_array[0], 'modele_description' => $data_array[1], 'valeur' => $data_array[2], 'etat_des_lieux_debut' => $data_array[3], 'etat_des_lieux_fin' => $data_array[4], 'duree_location' => $data_array[5], 'loyer_mensuel' => $data_array[6], 'loyers_payes' => $data_array[7], 'caution' => $data_array[8]]); + //~ } + break; + default: // inutilisé + echo "debug: table inconnue hydrateFromForm()"; + return false; + } + return $check; + } + else + { + echo "debug: annulation lors du formulaire\n"; + return false; + } + } + // exécuter le SQL // les attributs correspondent aux ? dans les requêtes préparées @@ -51,8 +134,8 @@ class Model extends DB if($attributes !== null) // requête préparée { - var_dump($sql); - var_dump($attributes); + //~ var_dump($sql); + //~ var_dump($attributes); $query = $this->db->prepare($sql); $query->execute($attributes); return $query; @@ -75,7 +158,7 @@ class Model extends DB //~ var_dump($this); foreach($this as $field => $value) { - var_dump($field); var_dump($value); + //~ var_dump($field); var_dump($value); // champs non renseignées et variables de l'objet qui ne sont pas des champs // note: avec le !== (au lieu de !=) une valeur 0 est différente de null if($value !== null && $field != 'db' && $field != 'table') diff --git a/src/model/Prestations.php b/src/model/Prestations.php index 2f84daa..ddd785b 100644 --- a/src/model/Prestations.php +++ b/src/model/Prestations.php @@ -6,20 +6,18 @@ class Prestations extends Model // lecture des données ou hydratation protected $ID; // auto-incrémentée protected $ID_client = 0; - //~ protected $combientieme_fois = 0; protected $code_presta = ''; protected $date = 0; // timestamp unix protected $type_presta = ''; protected $mode_paiement = ''; protected $commentaires = ''; - use ModelChildren; + //~ use ModelChildren; public function __construct(int $ID_client) { - $this->table = 'prestations'; $this->ID_client = $ID_client; - //~ $this->combientiemeFois(); + $this->table = strtolower(__CLASS__); // prestations } // getters @@ -31,10 +29,10 @@ class Prestations extends Model { return $this->ID_client; } - //~ public function getCombientiemeFois(): int - //~ { - //~ return $this->combientieme_fois; - //~ } + public function getCodePresta(): string + { + return $this->code_presta; + } public function getDate(): int { return $this->date; diff --git a/src/model/StructTablesDB.php b/src/model/StructTablesDB.php index 00c5321..32ae92d 100644 --- a/src/model/StructTablesDB.php +++ b/src/model/StructTablesDB.php @@ -9,10 +9,10 @@ class StructTablesDB static public $structureOfTables = [ // la table prestations est liée à la table clients // les tables devis_factures, cesu et locations sont liées à la table prestations - 'clients' => ['ID' => 'INTEGER', 'prenom_nom' => 'TEXT', 'code_client' => 'TEXT', 'adresse' => 'TEXT', 'telephone' => 'TEXT', 'courriel' => 'TEXT', 'commentaires' => 'TEXT'], + 'clients' => ['ID' => 'INTEGER', 'prenom_nom' => 'TEXT', 'code_client' => 'TEXT', 'adresse' => 'TEXT', 'code_postal' => 'TEXT', 'ville' => 'TEXT', 'telephone' => 'TEXT', 'courriel' => 'TEXT', 'apropos' => 'TEXT'], 'prestations' => ['ID' => 'INTEGER', 'ID_client' => 'INTEGER', 'code_presta' => 'TEXT', 'date' => 'INTEGER', 'type_presta' => 'TEXT', 'mode_paiement' => 'TEXT', 'commentaires' => 'TEXT'], - 'devis' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'taches' => 'TEXT', 'machine' => 'TEXT', 'OS' => 'TEXT', 'donnees' => 'TEXT', 'cles_licences' => 'TEXT', 'temps' => 'TEXT', 'total_main_d_oeuvre' => 'REAL', 'pieces' => 'TEXT', 'total_pieces' => 'REAL', 'deplacement' => 'REAL', 'total_HT' => 'REAL', 'validite_devis' => 'TEXT', 'signature_devis' => 'TEXT'], - 'factures' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'taches' => 'TEXT', 'machine' => 'TEXT', 'OS' => 'TEXT', 'donnees' => 'TEXT', 'cles_licences' => 'TEXT', 'temps' => 'TEXT', 'total_main_d_oeuvre' => 'REAL', 'pieces' => 'TEXT', 'total_pieces' => 'REAL', 'deplacement' => 'REAL', 'total_HT' => 'REAL'], + 'devis' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'taches' => 'TEXT', 'total_main_d_oeuvre' => 'REAL', 'pieces' => 'TEXT', 'total_pieces' => 'REAL', 'deplacement' => 'REAL', 'total_HT' => 'REAL', 'delai_livraison' => 'TEXT', 'validite_devis' => 'TEXT', 'signature_devis' => 'TEXT'], + 'factures' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', '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'], 'cesu' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'taches' => 'TEXT', 'duree_travail' => 'TEXT', 'salaire' => 'REAL'], '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_payes' => 'INTEGER', 'caution' => 'INTEGER'] ]; diff --git a/src/model/traits.php b/src/model/traits.php index 41f1c35..a00032e 100644 --- a/src/model/traits.php +++ b/src/model/traits.php @@ -8,90 +8,6 @@ trait ModelChildren //~ public function __construct() //~ { //~ $this->table = strtolower(__CLASS__); + //~ echo "TABLE = " . $this->table . "\n"; //~ } - - //~ public function setIdFromLastInsertID() // à faire juste après l'écriture d'une nouvelle entrée - //~ { - //~ $this->db = parent::getInstance(); - //~ $this->ID = $this->db->lastInsertId(); // méthode de PDO - //~ } - - public function setID(int $value = 0) - { - if($value === 0) - { - $this->ID = $this->db->lastInsertId(); // méthode de PDO - } - else - { - $this->ID = $value; - } - return($this); - } - - function hydrateFromForm(string $data_string, Object $Presta = NULL): bool // quand l'objet est $DetailsPresta, on hydrate aussi $Presta - { - //~ $tableSize = count(StructTablesDB::$structureOfTables[$this->getTable()]); // int - - if($data_string !== '') - { - $data_array = explode('|', $data_string); // array - //~ var_dump($data_array); - //~ if(count($data_array) === $tableSize - 1) // nombre de champs sauf ID qui est auto-incrémenté automatiquement - //~ { - //~ var_dump($this->getTable()); - //~ var_dump($data_array); - $check = false; - switch($this->getTable()) - { - case 'clients'; - if($data_array[0] == '') - { - echo "debug: données insuffisantes, le nom du client doit au minimum être renseigné\n"; - return false; - } - else - { - $check = $this->hydrate(['prenom_nom' => $data_array[0], 'code_client' => $data_array[1], 'adresse' => $data_array[2], 'telephone' => $data_array[3], 'courriel' => $data_array[4], 'commentaires' => $data_array[5]]); - } - break; - case 'prestations'; // inutilisé - break; - case 'devis'; - $check = $Presta->hydrate(['mode_paiement' => $data_array[11]]); - if($check) - { - $check = $this->hydrate(['taches' => $data_array[0], 'machine' => $data_array[1], 'OS' => $data_array[2], 'donnees' => $data_array[3], 'cles_licences' => $data_array[4], 'temps' => $data_array[5], 'total_main_d_oeuvre' => $data_array[6], 'pieces' => $data_array[7], 'total_pieces' => $data_array[8], 'deplacement' => $data_array[9], 'total_HT' => $data_array[10], - 'validite_devis' => $data_array[12], 'signature_devis' => $data_array[13]]); - } - break; - case 'factures'; - $check = $Presta->hydrate(['mode_paiement' => $data_array[11]]); - if($check) - { - $check = $this->hydrate(['taches' => $data_array[0], 'machine' => $data_array[1], 'OS' => $data_array[2], 'donnees' => $data_array[3], 'cles_licences' => $data_array[4], 'temps' => $data_array[5], 'total_main_d_oeuvre' => $data_array[6], 'pieces' => $data_array[7], 'total_pieces' => $data_array[8], 'deplacement' => $data_array[9], 'total_HT' => $data_array[10]]); - } - break; - case 'cesu'; - break; - case 'locations'; - break; - default: // inutilisé - echo "debug: table inconnue hydrateFromForm()"; - return false; - } - return $check; - //~ } - //~ else - //~ { - //~ echo "debug: mauvais tableau, il doit avoir " . $tableSize - 1 . " cases\n"; // ou -3 pour les factures - //~ return false; - //~ } - } - else - { - echo "debug: annulation lors du formulaire\n"; - return false; - } - } } diff --git a/src/sections/1_new_service.php b/src/sections/1_new_service.php index 656b45f..d516329 100644 --- a/src/sections/1_new_service.php +++ b/src/sections/1_new_service.php @@ -12,7 +12,7 @@ function newService(): int // code de retour, si 0 retour menu principal, si 2 a $NouveauClient = new ZenityForms(ZenitySetup::$nouveau_client_text, ZenitySetup::$nouveau_client_entrees); $MenuEnregistrement = new ZenityList(ZenitySetup::$menu_enregistrement_text, ZenitySetup::$menu_enregistrement_entrees); $Calendrier = new ZenityCalendar(ZenitySetup::$calendar_text); - $FormulaireDevis = new ZenityForms(ZenitySetup::$formulaire_text, array_merge(ZenitySetup::$formulaire_facture_entrees, ZenitySetup::$formulaire_devis_entrees)); + $FormulaireDevis = new ZenityForms(ZenitySetup::$formulaire_text, ZenitySetup::$formulaire_devis_entrees); $FormulaireFacture = new ZenityForms(ZenitySetup::$formulaire_text, ZenitySetup::$formulaire_facture_entrees); $FormulaireCesu = new ZenityForms(ZenitySetup::$formulaire_text, ZenitySetup::$formulaire_cesu_entrees); $FormulaireLocation = new ZenityForms(ZenitySetup::$formulaire_text, ZenitySetup::$formulaire_location_entrees); @@ -29,7 +29,7 @@ function newService(): int // code de retour, si 0 retour menu principal, si 2 a $client_inconnu = true; if(exec($QuestionNouveauClient->get()) == '0') // $? = 0 signifie oui, double égal == pour le transtypage { - echo "debug: recherche souhaitée\n"; + echo "choix: recherche d'une client\n"; $input = exec($RechercheClient->get()); if($input == '') { @@ -57,7 +57,7 @@ function newService(): int // code de retour, si 0 retour menu principal, si 2 a } else { - echo "debug: nouveau client\n"; + echo "choix: nouveau client\n"; } // on n'a pas cherché OU on n'a pas trouvé @@ -108,22 +108,22 @@ function newService(): int // code de retour, si 0 retour menu principal, si 2 a { // formulaire - étape 2/3 case ZenitySetup::$menu_enregistrement_entrees[0]: // "Devis" - $Details = new DevisFactures($Client->getID(), 'devis'); + $Details = new DevisFactures('devis'); $Presta->setTypePresta('devis'); $input = exec($FormulaireDevis->get()); break; case ZenitySetup::$menu_enregistrement_entrees[1]: // "Facture" - $Details = new DevisFactures($Client->getID(), 'factures'); // 'factures' est le nom de la table, pas le type de presta + $Details = new DevisFactures('factures'); // 'factures' est le nom de la table, pas le type de presta $Presta->setTypePresta('facture'); $input =exec($FormulaireFacture->get()); break; case ZenitySetup::$menu_enregistrement_entrees[2]: // "CESU" - $Details = new CESU($Client->getID()); + $Details = new CESU(); $Presta->setTypePresta('cesu'); $input = exec($FormulaireCesu->get()); break; case ZenitySetup::$menu_enregistrement_entrees[3]: // "Location" - $Details = new Locations($Client->getID()); + $Details = new Locations(); $Presta->setTypePresta('location'); $input = exec($FormulaireLocation->get()); break; @@ -140,16 +140,27 @@ function newService(): int // code de retour, si 0 retour menu principal, si 2 a echo "debug: annulation lors de l'enregistrement des détails de la prestation\n"; return(0); } - elseif(isset($Details) && !$Details->hydrateFromForm($input, $Presta)) + elseif(isset($Details) && !$Details->hydrateFromForm($input, $Presta)) // echec de l'hydratation { - // messages d'erreur dans hydrateFromForm() + echo "debug: erreur de hydrateFromForm()\n"; // messages d'erreur à mettre ici ou dans hydrateFromForm()? return(0); } unset($input); // commentaire - étape 3/3 $input = exec($CommentairePrestation->get()); - //~ if($input == '') + if($input == '') + { + echo "debug: pas de commentaire saisi\n"; + // on n'interrompt pas le script et on enregistre dans tous les cas (annulatation, chaîne vide) + } + // Cliquer sur annuler (ou appuyer sur échap) revient dont à valider avec une chaîne vide et enregistrer la prestation + // la commande 'echo $?' ($? est le code de sortie de la commande précédente) renvoit 1 si on annule avec la touche échap () + // elle renvoit 0 si la fenêtre est fermée correctement, qu'on valide une chaîne vide ou qu'on clique sur Annuler (on ne peut pas savoir) + // malheureusement, si les deux commandes sont liées par un '&&' et qu'on annule la saisie, la 2è commande n'est pas exécutée + // solution partielle si echo $? ne renvoit rien, c'est qu'echo n'a pas été exécuté parce qu'on a appuyé sur échap (ou que le programme) + // 2>&1 semble inutile, pas de sortie d'erreur de zenity --entry + //~ if(exec('echo $?') != 1) //~ { //~ echo "debug: annulation à la saisie d'un commentaire\n"; //~ return(0); @@ -167,33 +178,23 @@ function newService(): int // code de retour, si 0 retour menu principal, si 2 a // -- partie 3: LaTeX -- - // créer le chemin et un sous-dossier avec l'année en cours - $latex_year_folder = Config::$latex_path . date('Y') . '/'; - makeFolder($latex_year_folder); - - $pdf_year_folder = Config::$pdf_path . date('Y') . '/'; - makeFolder($pdf_year_folder); - // document de la prestation switch($choix_niv2) { case ZenitySetup::$menu_enregistrement_entrees[0]: // "Devis" - $file_name = 'devis.tex'; - $template = 'devis'; - makeLatexAndPdfDocument($file_name, $template, $Client, $Presta, $Details); + $type = 'devis'; + makeLatexAndPdfDocument($type, $Client, $Presta, $Details); break; case ZenitySetup::$menu_enregistrement_entrees[1]: // "Facture" - $file_name = 'facture.tex'; - $template = 'facture'; - makeLatexAndPdfDocument($file_name, $template, $Client, $Presta, $Details); + $type = 'facture'; + makeLatexAndPdfDocument($type, $Client, $Presta, $Details); break; case ZenitySetup::$menu_enregistrement_entrees[2]: // "CESU" // pas de facture break; case ZenitySetup::$menu_enregistrement_entrees[3]: // "Location" - $file_name = 'location.tex'; - $template = 'location'; - makeLatexAndPdfDocument($file_name, $template, $Client, $Presta, $Details); + $type = 'location'; + makeLatexAndPdfDocument($type, $Client, $Presta, $Details); break; case ZenitySetup::$menu_enregistrement_entrees[4]: // "Prestation non vendue" // pas de facture @@ -203,13 +204,13 @@ function newService(): int // code de retour, si 0 retour menu principal, si 2 a return(0); } - // enveloppe - $file_name = 'enveloppe_recto.tex'; - $template = 'enveloppe_recto'; - makeLatexAndPdfDocument($file_name, $template, $Client); - $file_name = 'enveloppe_verso.tex'; - $template = 'enveloppe_verso'; - makeLatexAndPdfDocument($file_name, $template, $Client); + // enveloppe recto + $type = 'enveloppe_recto'; + makeLatexAndPdfDocument($type, $Client); + + // le verso ne dépend pas du client mais de l'entreprise + $type = 'enveloppe_verso'; + makeLatexAndPdfDocument($type); // -- partie 4: récapitulatif -- @@ -221,6 +222,7 @@ function newService(): int // code de retour, si 0 retour menu principal, si 2 a //~ $imprimer_facture = exec('zenity --question --width=250 --title="Base de données mise à jour" --text="Imprimer la facture?"'); //~ $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"'); + // possibilité de modification // zenityQuestion if(exec($QuestionModifierPrestation->get()) == '0') diff --git a/src/view/ZenitySetup.php b/src/view/ZenitySetup.php index 518cfbb..b03f2bd 100644 --- a/src/view/ZenitySetup.php +++ b/src/view/ZenitySetup.php @@ -19,12 +19,12 @@ class ZenitySetup static public $recherche_client_text = "Recherche d'un client avec son nom ou son code client"; static public $resultats_recherche_client_text = "Résultats de la recherche, sélectionner un client"; static public $nouveau_client_text = "Nouveau client"; - static public $nouveau_client_entrees = ["Prénom Nom:", "Code client, exemple: J.P.Duchmol", "Adresse::", "Telephone:", "Courriel:", "Commentaires:"]; + static public $nouveau_client_entrees = ["Prénom Nom:", "Code client, exemple: J.P.Duchmol:", "Adresse:", "Code postal:", "Ville:", "Telephone:", "Courriel:", "À propos:"]; static public $calendar_text = 'Nouvelle prestation étape 1/3 - Choisir une date'; static public $formulaire_text = 'Nouvelle prestation 2/3 - Détail des travaux'; - static public $formulaire_devis_entrees = ["Durée de validite du devis:", "Devis signé (oui ou non):"]; - static public $formulaire_facture_entrees = ["Tâches effectuées:", "Modèle du PC:", "OS:", "Données sauvegardées:", "Clés d\'activation:", "Nombre d'heures:", "Total main d\'oeuvre (euros):", "Détail des pièces:", "Total pièces (euros):", "Déplacement (euros)", "Total HT (euros):", "Mode de paiement"]; - static public $formulaire_cesu_entrees = ["Tâches effectuées:", "Duree de travail:", "Salaire net"]; + static public $formulaire_devis_entrees = ["Tâches effectuées:", "Total main d\'oeuvre (euros):", "Détail des pièces:", "Total pièces (euros):", "Déplacement (euros)", "Total HT (euros):", "Mode de paiement", "Delai de livraison", "Durée de validite du devis:", "Devis signé (oui ou non):"]; + static public $formulaire_facture_entrees = ["Tâches effectuées:", "Modèle du PC:", "OS:", "Données sauvegardées:", "Clés d\'activation:", "Total main d\'oeuvre (euros):", "Détail des pièces:", "Total pièces (euros):", "Déplacement (euros)", "Total HT (euros):", "Mode de paiement"]; + static public $formulaire_cesu_entrees = ["Tâches effectuées:", "Duree de travail:", "Salaire net", "Mode de paiement"]; // en fait je pourrais ajouter plein d'autres trucs static public $formulaire_location_entrees = ["Désignation du bien", "Modèle, numéro de série, description:", "Valeur", "État des lieux du début:", "État des lieux de fin:", "Durée de la location en mois:", "Loyer mensuel:", "Nombre de loyers déjà payés:", "Montant du chèque de caution:"]; static public $commentaire_prestation_text = 'Nouvelle prestation 3/3 - Commentaires'; static public $recapitulatif_text = "voici toutes les informations enregistrées"; -- cgit v1.2.3