diff options
| author | polo <ordipolo@gmx.fr> | 2024-05-27 21:34:05 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2024-05-27 21:34:05 +0200 |
| commit | 46591fffb0226b0fa87e68248b06182389825f80 (patch) | |
| tree | 32ff8fa73253a1d405854a09d6378ad0bb5b8eab | |
| parent | d38caea1a79329c7c1c94245bde9712a6075df9d (diff) | |
| download | AppliGestionPHP-46591fffb0226b0fa87e68248b06182389825f80.tar.gz AppliGestionPHP-46591fffb0226b0fa87e68248b06182389825f80.tar.bz2 AppliGestionPHP-46591fffb0226b0fa87e68248b06182389825f80.zip | |
typeToClient() modifie $Client et ne touche la base que si nécessaire, nettoyage divers
| -rw-r--r-- | data/dev.sqlite | bin | 36864 -> 0 bytes | |||
| -rw-r--r-- | src/files.php | 2 | ||||
| -rwxr-xr-x | src/main.php | 1 | ||||
| -rw-r--r-- | src/main_loop.php | 1 | ||||
| -rw-r--r-- | src/model/Clients.php | 12 | ||||
| -rw-r--r-- | src/model/Model.php | 37 | ||||
| -rw-r--r-- | src/sections/2_service.php | 25 | ||||
| -rw-r--r-- | src/sections/5_view_data.php | 9 | ||||
| -rw-r--r-- | à faire.txt | 36 |
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 | ||
| 54 | function makeTexAndPdf(Object $Object) | 54 | function 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'); | |||
| 53 | require('sections/2_service.php'); | 53 | require('sections/2_service.php'); |
| 54 | require('sections/3_modify_data.php'); | 54 | require('sections/3_modify_data.php'); |
| 55 | require('sections/4_get_document.php'); | 55 | require('sections/4_get_document.php'); |
| 56 | require('sections/5_view_data.php'); | ||
| 56 | require('main_loop.php'); // action !! | 57 | require('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 | |||
| 6 | function 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 @@ | |||
| 1 | BUGS: | ||
| 2 | |||
| 3 | dans 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 | |||
| 8 | permettre de modifier le code prestation dans "Modifier une prestation" | ||
| 9 | |||
| 10 | gérer les caractères spéciaux: " | ||
| 11 | |||
| 12 | erreur de bash avec zenity: > | ||
| 13 | |||
| 14 | modifier location, compter à la journée et non au mois | ||
| 15 | |||
| 16 | taille des fenêtres zenity (avec gtk4) | ||
| 17 | |||
| 18 | une classe CodePresta? | ||
| 19 | |||
| 20 | pouvoir faire plusieurs modification d'une presta sans devoir la retrouver à chaque fois | ||
| 21 | |||
| 22 | possibilité d'imprimer une facture vierge avec juste les coordonnées d'un client pour remplir sur-place | ||
| 23 | |||
| 24 | |||
| 25 | SECTION consulter, imprimer les données: | ||
| 26 | |||
| 27 | Livre des recettes / CA | ||
| 28 | assemblage : date + code facture + client + type de presta + montant prestation (on ne compte pas les débours) + mode de paiement | ||
| 29 | 1 livre par mois => total | ||
| 30 | |||
| 31 | Registre des achats | ||
| 32 | assemblage : date + référence + fournisseur + ce que c’est + montant + mode de paiement | ||
| 33 | 1 livre par mois => total | ||
| 34 | |||
| 35 | Bilan annuel | ||
| 36 | Recettes – achats et débours | ||
