summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2024-05-27 21:34:05 +0200
committerpolo <ordipolo@gmx.fr>2024-05-27 21:34:05 +0200
commit46591fffb0226b0fa87e68248b06182389825f80 (patch)
tree32ff8fa73253a1d405854a09d6378ad0bb5b8eab
parentd38caea1a79329c7c1c94245bde9712a6075df9d (diff)
downloadAppliGestionPHP-46591fffb0226b0fa87e68248b06182389825f80.zip
typeToClient() modifie $Client et ne touche la base que si nécessaire, nettoyage divers
-rw-r--r--data/dev.sqlitebin36864 -> 0 bytes
-rw-r--r--src/files.php2
-rwxr-xr-xsrc/main.php1
-rw-r--r--src/main_loop.php1
-rw-r--r--src/model/Clients.php12
-rw-r--r--src/model/Model.php37
-rw-r--r--src/sections/2_service.php25
-rw-r--r--src/sections/5_view_data.php9
-rw-r--r--à faire.txt36
9 files changed, 84 insertions, 39 deletions
diff --git a/data/dev.sqlite b/data/dev.sqlite
deleted file mode 100644
index 98f7b57..0000000
--- a/data/dev.sqlite
+++ /dev/null
Binary files differ
diff --git a/src/files.php b/src/files.php
index d8fcba7..e78cfba 100644
--- a/src/files.php
+++ b/src/files.php
@@ -51,7 +51,7 @@ function latexToPdf(string $latex_path, string $file_name, string $pdf_path)
51 unlink($pdf_path . $basename . '.log'); 51 unlink($pdf_path . $basename . '.log');
52} 52}
53 53
54function makeTexAndPdf(Object $Object) 54function makeTexAndPdf(Object $Object) // paramètre = enfant de Latex
55{ 55{
56 if(get_class($Object) !== 'EnveloppeVersoLatex') 56 if(get_class($Object) !== 'EnveloppeVersoLatex')
57 { 57 {
diff --git a/src/main.php b/src/main.php
index c5b1950..95e5627 100755
--- a/src/main.php
+++ b/src/main.php
@@ -53,4 +53,5 @@ require('sections/1_customer.php');
53require('sections/2_service.php'); 53require('sections/2_service.php');
54require('sections/3_modify_data.php'); 54require('sections/3_modify_data.php');
55require('sections/4_get_document.php'); 55require('sections/4_get_document.php');
56require('sections/5_view_data.php');
56require('main_loop.php'); // action !! 57require('main_loop.php'); // action !!
diff --git a/src/main_loop.php b/src/main_loop.php
index 23f6235..64eeccf 100644
--- a/src/main_loop.php
+++ b/src/main_loop.php
@@ -55,6 +55,7 @@ while($main_loop)
55 { 55 {
56 echo("choix: ". ZenitySetup::$menu_principal_entrees[4] . "\n"); 56 echo("choix: ". ZenitySetup::$menu_principal_entrees[4] . "\n");
57 // quel affichage? des tableaux avec zenity? LaTeX? une page web? un autre outil servant à faire des tableaux et graphiques 57 // quel affichage? des tableaux avec zenity? LaTeX? une page web? un autre outil servant à faire des tableaux et graphiques
58 $section = viewData();
58 } 59 }
59 60
60 // -- SECTION 6: Supports de communication -- 61 // -- SECTION 6: Supports de communication --
diff --git a/src/model/Clients.php b/src/model/Clients.php
index a5cc276..0f70eb6 100644
--- a/src/model/Clients.php
+++ b/src/model/Clients.php
@@ -124,6 +124,18 @@ class Clients extends Model
124 $this->type = (string) $value; 124 $this->type = (string) $value;
125 return $this; 125 return $this;
126 } 126 }
127 public function typeToClient(): bool
128 {
129 if($this->type != 'client')
130 {
131 $this->type = 'client';
132 return true;
133 }
134 else
135 {
136 return false;
137 }
138 }
127 139
128 140
129 public function findByKeywords(array $keywords, string $field): array // n'hydrate pas les variables, on doit choisir un client et hydrater ensuite 141 public function findByKeywords(array $keywords, string $field): array // n'hydrate pas les variables, on doit choisir un client et hydrater ensuite
diff --git a/src/model/Model.php b/src/model/Model.php
index 6c799c3..1fdab7d 100644
--- a/src/model/Model.php
+++ b/src/model/Model.php
@@ -5,13 +5,9 @@ abstract class Model extends DB
5{ 5{
6 protected $db; // instance de PDO 6 protected $db; // instance de PDO
7 protected $table; // <= enfant 7 protected $table; // <= enfant
8 //static protected $tableStructure;
9 8
10 //~ public function __construct() // à surcharger 9 //~ protected function __construct() // pour appel avec parent::__construct()
11 //~ { 10 //~ {}
12 //~ $this->table = strtolower(__CLASS__);
13 //~ echo "TABLE = " . $this->table . "\n";
14 //~ }
15 11
16 // getters 12 // getters
17 public function getTable(): string 13 public function getTable(): string
@@ -281,25 +277,28 @@ abstract class Model extends DB
281 } 277 }
282 278
283 279
284 // fonction appelée une seule fois au lancement du programme
285 // le tableau nécessaire n'est pas copié en mémoire à l'instanciation (pas de fuite de mémoire), mais uniquement à l'appel de cette fonction statique, à la fin de la fonction la mémoire est libérée
286 // DBStructure::${self::$tableStructure} permet de nommer une variable statique de classe
287 static public function createTables() 280 static public function createTables()
288 { 281 {
289 foreach(StructTablesDB::$structureOfTables as $tableName => $oneTable) 282 static $first_time = true;
283
284 if($first_time) // fonction normallement appelée qu'une seule fois
290 { 285 {
291 //var_dump(StructTablesDB::${self::$tableStructure}); => propriété statique de classe dans une variable 286 foreach(StructTablesDB::$structureOfTables as $tableName => $oneTable)
292 $fields_and_types = [];
293 $query = 'CREATE TABLE IF NOT EXISTS ' . $tableName . ' (';
294 foreach($oneTable as $key => $value)
295 { 287 {
296 $fields_and_types[] = $key . ' ' . $value; 288 $query = 'CREATE TABLE IF NOT EXISTS ' . $tableName . ' (';
289 foreach($oneTable as $key => $value)
290 {
291 $query .= $key . ' ' . $value . ', ';
292 }
293 $query .= 'PRIMARY KEY(ID AUTOINCREMENT));';
294 parent::getInstance()->exec($query);
297 } 295 }
298 $query .= implode(', ', $fields_and_types); // implode() convertit un tableau en une chaîne avec un séparateur entre chaque élément
299 $query .= ', PRIMARY KEY(ID AUTOINCREMENT));';
300 //echo($query . "\n\n");
301 296
302 parent::getInstance()->exec($query); // merci singleton! 297 $first_time = false;
298 }
299 else
300 {
301 echo "Model::createTables() a déjà été appelée et ne fera rien.\n";
303 } 302 }
304 } 303 }
305} 304}
diff --git a/src/sections/2_service.php b/src/sections/2_service.php
index 9683ef9..28fba3f 100644
--- a/src/sections/2_service.php
+++ b/src/sections/2_service.php
@@ -159,27 +159,15 @@ function newService($Client): array // $Client est un Client ou null
159 } 159 }
160 160
161 // si encore de type prospect, devient un type client 161 // si encore de type prospect, devient un type client
162 //$Client->setType('client'); // inutile? 162 if($Client->typeToClient()) // utile si $Client est renvoyé dans le "return"
163 $Client->updateOneValue('type', 'client'); // modifier le type prospect en client 163 {
164 $Client->updateOneValue('type', 'client'); // base synchronisée
165 }
164 166
165 167
166 // -- partie 3: LaTeX -- 168 // -- partie 3: LaTeX --
167 169
168 //makeLatexAndPdfDocuments($Client, $Presta, $PrestaDetails); 170 // fabrique d'objets enfants de Latex (sans connaître les noms des classes)
169 // factoriser tout ça
170 /* plusieurs parties:
171 * - une fonction ou on crée et manipule les objets (une classe par type de document)
172 * - manipulation des données
173 * - chemins et noms de fichiers
174 * - insertion des variables
175 * - écriture du fichier (+ dossier si nécessaire)
176 */
177 // et pour bien faire ajouter aussi une interface
178
179 //~ function makeLatexSubClass(string $type)
180 //~ {}
181
182 // fabrique d'objets (sans connaître les noms des classes)
183 $EnveloppeRecto = Latex::makeInstance('enveloppe_recto'); 171 $EnveloppeRecto = Latex::makeInstance('enveloppe_recto');
184 $EnveloppeVerso = Latex::makeInstance('enveloppe_verso'); 172 $EnveloppeVerso = Latex::makeInstance('enveloppe_verso');
185 $DocumentPresta = Latex::makeInstance($Presta->getTypePresta()); // retourne objet ou null 173 $DocumentPresta = Latex::makeInstance($Presta->getTypePresta()); // retourne objet ou null
@@ -194,9 +182,7 @@ function newService($Client): array // $Client est un Client ou null
194 $DocumentPresta->makeLatex(); 182 $DocumentPresta->makeLatex();
195 } 183 }
196 184
197
198 // création des fichiers 185 // création des fichiers
199 // paramètre = Objet enfant de Latex
200 makeTexAndPdf($EnveloppeRecto); 186 makeTexAndPdf($EnveloppeRecto);
201 makeTexAndPdf($EnveloppeVerso); 187 makeTexAndPdf($EnveloppeVerso);
202 188
@@ -217,6 +203,7 @@ function newService($Client): array // $Client est un Client ou null
217 203
218 // ? modifications avec le menu de la section 3 obtenu avec makeModifyCustomerWindow() 204 // ? modifications avec le menu de la section 3 obtenu avec makeModifyCustomerWindow()
219 205
206
220 // -- partie 5: on fait quoi maintenant -- 207 // -- partie 5: on fait quoi maintenant --
221 $choix_niv2 = exec($FinSection2->get()); 208 $choix_niv2 = exec($FinSection2->get());
222 if($choix_niv2 === ZenitySetup::$fin_section_2['entrees'][0]) // afficher le document 209 if($choix_niv2 === ZenitySetup::$fin_section_2['entrees'][0]) // afficher le document
diff --git a/src/sections/5_view_data.php b/src/sections/5_view_data.php
new file mode 100644
index 0000000..e38fb90
--- /dev/null
+++ b/src/sections/5_view_data.php
@@ -0,0 +1,9 @@
1<?php
2// src/sections/5_view_data.php
3//
4// -- SECTION 5: Traiter et afficher les données --
5
6function viewData(): array
7{
8 return [0, null]; // menu principal
9}
diff --git a/à faire.txt b/à faire.txt
new file mode 100644
index 0000000..d976496
--- /dev/null
+++ b/à faire.txt
@@ -0,0 +1,36 @@
1BUGS:
2
3dans le menu Modifier une prestation lorsqu'on utilise la chaine: "runtime Redist Visual C++ pour VS 2015", les espaces entre des guillemets doubles provoquent un saut de ligne
4
5
6À FAIRE:
7
8permettre de modifier le code prestation dans "Modifier une prestation"
9
10gérer les caractères spéciaux: "
11
12erreur de bash avec zenity: >
13
14modifier location, compter à la journée et non au mois
15
16taille des fenêtres zenity (avec gtk4)
17
18une classe CodePresta?
19
20pouvoir faire plusieurs modification d'une presta sans devoir la retrouver à chaque fois
21
22possibilité d'imprimer une facture vierge avec juste les coordonnées d'un client pour remplir sur-place
23
24
25SECTION consulter, imprimer les données:
26
27Livre des recettes / CA
28assemblage : date + code facture + client + type de presta + montant prestation (on ne compte pas les débours) + mode de paiement
291 livre par mois => total
30
31Registre des achats
32assemblage : date + référence + fournisseur + ce que c’est + montant + mode de paiement
331 livre par mois => total
34
35Bilan annuel
36Recettes – achats et débours