summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2022-11-27 02:34:34 +0100
committerpolo <ordipolo@gmx.fr>2022-11-27 02:34:34 +0100
commita2fdd37ffb5a3cc80b6fedb332024057553148f8 (patch)
treecb28a5ddb1a2dd520ba1c2e41dfea942b15dc17e
parentefe371fd6e883dde99ca6d90a7aae99eb4aeadea (diff)
downloadAppliGestionPHP-a2fdd37ffb5a3cc80b6fedb332024057553148f8.zip
connexion BDD orientée objet
-rw-r--r--README.txt9
-rwxr-xr-xindex.php25
-rwxr-xr-xlogiciel compta.desktop4
-rw-r--r--ordipolo.sqlite0
-rw-r--r--php/ConnectionDatabase.php35
-rw-r--r--php/Database.php26
-rw-r--r--php/Model.php42
-rw-r--r--php/ZenityClasses.php1
-rw-r--r--php/saisie.php43
-rw-r--r--php/zenity_setup.php (renamed from php/zenity_text.php)18
-rw-r--r--structure base de données.odsbin0 -> 22823 bytes
11 files changed, 111 insertions, 92 deletions
diff --git a/README.txt b/README.txt
index b3f5904..07e1529 100644
--- a/README.txt
+++ b/README.txt
@@ -16,6 +16,15 @@ dépendances optionnelles:
16si absent, le script essaie de lancer "sqlite3" dans "xterm" 16si absent, le script essaie de lancer "sqlite3" dans "xterm"
17 17
18 18
19installation:
20- placer ce dossier où vous le souhaitez
21- ouvrir le fichier "logiciel compta.desktop" avec un éditeur de texte et adapter les chemins
22- copier le fichier"logiciel compta.desktop" dans le dossier système des entrées du menu ou/et sur le bureau
23- ouvrir le fichier config.php et corriger si nécessaire: $business_name, $db_name, $flyer, $business_card
24- $db_name renvoit au fichier de données! ne pas écrire l'extension .sqlite qui est implicité,
25son emplacement est par défaut à la racine de ce programme, tout comme ce fichier README.txt
26
27
19configuration: 28configuration:
20- veuillez modifier les variables dans config.php 29- veuillez modifier les variables dans config.php
21ATTENTION, si vous ne savez pas ce que vous faîtes, ne faites rien. 30ATTENTION, si vous ne savez pas ce que vous faîtes, ne faites rien.
diff --git a/index.php b/index.php
index cf54199..7bcb87c 100755
--- a/index.php
+++ b/index.php
@@ -19,30 +19,17 @@ $x_term_command = ''; // commande terminal en mode graphique
19require('php/dependances.php'); // vérification des dépendances 19require('php/dependances.php'); // vérification des dépendances
20require('php/functions.php'); 20require('php/functions.php');
21 21
22require('php/ZenityClasses.php'); // créer les commandes 22require('php/ConnectionDatabase.php'); // class DB extends PDO, connexion à la base et création de la base et des tables si elles n'existent pas déjà
23require('php/zenity_text.php'); // texte dans les fenêtres 23require('php/Model.php'); // class Model extends DB, requêtes SQL
24Connection::$dsn = 'sqlite:' . $db_name . '.sqlite'; // Data Source Name = 1er paramètre du constructeur de PDO: $bdd = new PDO($dsn);
25$Database = new Model(); // connexion et méthodes pour manipuler la base de données
24 26
25require('php/Database.php'); // connexion à la base et création de la base et des tables si elles n'existent pas déjà 27require('php/ZenityClasses.php'); // méthodes pour créer les commandes
26$Database = new SQL; 28require('php/zenity_setup.php'); // texte dans les fenêtres ET instanciation (un objet = une commande)
27SQL::create_tables();
28 29
29// require('php/latex.php'); 30// require('php/latex.php');
30// require('php/compileLatex.php'); 31// require('php/compileLatex.php');
31 32
32// commandes système qui ouvrent les fenêtres zenity
33// s'utilisent comme ceci: exec($Objet->get());
34$MenuPrincipal = new Zenity_list($menu_principal_text, $menu_principal_entrees);
35$QuestionNouveauClient = new Zenity_question($question_nouveau_client_text);
36$MenuEnregistrement = new Zenity_list($menu_enregistrement_text, $menu_enregistrement_entrees);
37$MenuDocuments = new Zenity_list($menu_documents_text, $menu_documents_entrees);
38$MenuCommunication = new Zenity_list($menu_communication_text, $menu_communication_entrees);
39$RechercheClient = new zenity_entry($recherche_client_text);
40$ResultatsRechercheClient = new zenity_list($resultats_recherche_client_text, []);
41$NouveauClient = new Zenity_forms($nouveau_client_text, $nouveau_client_entrees);
42$Calendrier = new Zenity_calendar($calendar_text);
43$FormulairePrestation = new Zenity_forms($formulaire_text, $formulaire_entrees);
44$CommentairePrestation = new Zenity_entry($commentaire_prestation_text);
45
46// boucle principale 33// boucle principale
47$boucle = true; 34$boucle = true;
48while($boucle) 35while($boucle)
diff --git a/logiciel compta.desktop b/logiciel compta.desktop
index 37ac1f3..16b7366 100755
--- a/logiciel compta.desktop
+++ b/logiciel compta.desktop
@@ -3,8 +3,8 @@ Version=1.0
3Type=Application 3Type=Application
4Name=logiciel compta 4Name=logiciel compta
5Comment= 5Comment=
6Exec=/home/paulo/ORDIPOLO/Appli_PHP/index.php 6Exec=/home/paulo/ORDIPOLO/AppliGestionPHP/index.php
7Icon=/home/paulo/ORDIPOLO/PUB/logo.png 7Icon=/home/paulo/ORDIPOLO/PUB/logo.png
8Path=/home/paulo/ORDIPOLO/Appli_PHP 8Path=/home/paulo/ORDIPOLO/AppliGestionPHP
9Terminal=false 9Terminal=false
10StartupNotify=false 10StartupNotify=false
diff --git a/ordipolo.sqlite b/ordipolo.sqlite
deleted file mode 100644
index e69de29..0000000
--- a/ordipolo.sqlite
+++ /dev/null
diff --git a/php/ConnectionDatabase.php b/php/ConnectionDatabase.php
new file mode 100644
index 0000000..b26d0bd
--- /dev/null
+++ b/php/ConnectionDatabase.php
@@ -0,0 +1,35 @@
1<?php
2// php/ConnectionDatabase.php
3
4class Connection extends PDO
5{
6 // paramètres du constructeur de PDO, avec sqlite seul le premier est nécessaire
7 public static $dsn = ''; // Data Source Name = 1er paramètre
8 public static $user = '';
9 public static $password = '';
10 public static $options = '';
11 private static $Instance;
12
13 public function __construct()
14 {
15 try
16 {
17 parent::__construct(self::$dsn); // renseigne la variable $dsn de la classe PDO
18 $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // $this pour la méthode du parent PDO
19 }
20 catch(PDOException $e)
21 {
22 die('Erreur : '.$e->getMessage());
23 }
24 }
25
26 // créer son objet avec: $bdd = Connection::getInstance();
27 public static function getInstance(): self
28 {
29 if(self::$Instance === null)
30 {
31 self::$Instance = new self();
32 }
33 return self::$Instance;
34 }
35}
diff --git a/php/Database.php b/php/Database.php
deleted file mode 100644
index 81ce669..0000000
--- a/php/Database.php
+++ /dev/null
@@ -1,26 +0,0 @@
1<?php
2// php/Database.php
3
4// connexion avec PDO_sqlite
5try
6{
7 $db = new PDO('sqlite:' . $db_name . '.sqlite');
8 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
9}
10catch (Exception $e)
11{
12 die('Erreur : '.$e->getMessage());
13}
14
15
16// requêtes SQL
17class SQL
18{
19 // créer les tables si elles n'existent pas encore
20 static function create_tables()
21 {
22 //$db->exec("CREATE TABLE IF NOT EXISTS matable (ID INTEGER PRIMARY KEY, champ1 INTEGER, champ2 TEXT);");
23 //
24 //
25 }
26}
diff --git a/php/Model.php b/php/Model.php
new file mode 100644
index 0000000..9d0f80f
--- /dev/null
+++ b/php/Model.php
@@ -0,0 +1,42 @@
1<?php
2// php/Model.php
3
4class Model extends Connection
5{
6 private $db; // instance de connexion
7
8 public function __construct()
9 {
10 $this->db = parent::getInstance();
11 self::create_tables();
12 }
13
14 // code SQL
15 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/ZenityClasses.php b/php/ZenityClasses.php
index c286d14..7965012 100644
--- a/php/ZenityClasses.php
+++ b/php/ZenityClasses.php
@@ -13,7 +13,6 @@ abstract class Zenity_cmd
13 protected $width = 300; 13 protected $width = 300;
14 protected $height = 200; // recalculée en fonction du contenu, vaut au minimum 150 14 protected $height = 200; // recalculée en fonction du contenu, vaut au minimum 150
15 15
16
17 protected function __construct($text, array $rows = []) // $rows est optionnel 16 protected function __construct($text, array $rows = []) // $rows est optionnel
18 { 17 {
19 $this->text = $text; 18 $this->text = $text;
diff --git a/php/saisie.php b/php/saisie.php
index 4b41fbf..1c6563a 100644
--- a/php/saisie.php
+++ b/php/saisie.php
@@ -1,49 +1,6 @@
1<?php 1<?php
2// saisie.php 2// saisie.php
3 3
4$date = exec('zenity --calendar --width=320 --title="Enregistrer une prestation avec un nouveau client 1/2" --text="Choisir une date."');
5var_dump($date);
6
7$start_command = 'zenity --forms';
8$title = ' --title="Enregistrer une prestation avec un nouveau client 2/2"';
9$text = ' --text="Nouveau client"';
10$name = ' --add-entry="Prénom Nom:"';
11$adresse = ' --add-entry="Adresse:"';
12$prestation_type = ' --add-entry="Type de prestation:"';
13$tasks = ' --add-entry="Tâches effectuées:"';
14$computer_model = ' --add-entry="Modèle du PC:"';
15$system = ' --add-entry="OS:"';
16$computer_data = ' --add-entry="Données sauvegardées:"';
17$activation_keys = ' --add-entry="Clés d\'activation:"';
18$labour_time = ' --add-entry="Temps main d\'oeuvre (heures):"';
19$total_labour = ' --add-entry="Total main d\'oeuvre (euros):"';
20$total_parts = ' --add-entry="Total pièces (euros):"';
21$trip = ' --add-entry="Déplacement (euros)"';
22$total = ' --add-entry="Total HT (euros):"';
23$comments = ' --add-entry="Commentaires:"';
24
25$command = $start_command . $title . $text . $name . $adresse . $prestation_type . $tasks. $computer_model . $system . $computer_data . $activation_keys . $labour_time . $total_labour . $total_parts . $trip . $total . $comments;
26//$result = explode('|', "alain dubois|2 rue foch, rennes|assistance|boum le PC !!|tour acer|win 10|sur DD externe|dans le BIOS|2h, 80€|15,80€|10€|105,80€|client chiant");
27$result = explode('|', exec($command));
28var_dump($result);
29//exit();
30
31// nouveau client
32#$choix = exec('zenity --forms --title="Enregistrer une prestation 1/4" --text="Nouveau client" --add-entry="Prénom, nom:" --add-entry="Adresse:" --add-calendar="Date: (ici ou fenêtre suivante?)" --add-entry="Type de prestation:" --add-entry="Prix prestation:" --add-entry="Prix déplacement:" --add-entry="Total HT:"');
33
34// date
35#$date = exec('zenity --calendar --width=320 --title="Enregistrer une prestation 2/4" --text="Choisir une date."');
36// date sous la forme jj/mm/aaaa
37// utiliser ensuite cette option: --forms-date-format=MODÈLE Définit le format de la date retournée
38
39// détail prestation
40#$prestation = exec('zenity --forms --title="Enregistrer une prestation 3/4" --text="Tâches effectuées" --add-entry="Détails:" --add-entry="Modèle de l\'ordinateur:" --add-entry="OS:" --add-entry="Sauvegarde:" --add-entry="Clé d\'activation"');
41// infos saisies sous la forme aaa|bbb|ccc|ddd|eee
42
43// Prix total calculé automatiquement
44
45// référence de la facture avec format automatique par concaténation
46
47// commentaire personnel enregistré à part 4// commentaire personnel enregistré à part
48$commentaire = exec('zenity --entry --width=400 --title="Enregistrer une prestation 4/4" --text="Commentaire sur le déroulement de la prestation."'); 5$commentaire = exec('zenity --entry --width=400 --title="Enregistrer une prestation 4/4" --text="Commentaire sur le déroulement de la prestation."');
49var_dump($result); 6var_dump($result);
diff --git a/php/zenity_text.php b/php/zenity_setup.php
index 2246463..a16e0a4 100644
--- a/php/zenity_text.php
+++ b/php/zenity_setup.php
@@ -1,5 +1,6 @@
1<?php 1<?php
2// php/zenity_text.php 2// php/zenity_setup.php
3
3 4
4// contenu des fenêtres zenity 5// contenu des fenêtres zenity
5$menu_principal_text = "Gestion d'une micro-entreprise"; 6$menu_principal_text = "Gestion d'une micro-entreprise";
@@ -19,3 +20,18 @@ $calendar_text = 'Nouvelle prestation étape 1/3 - Choisir une date';
19$formulaire_text = 'Nouvelle prestation 2/3 - Détail des travaux'; 20$formulaire_text = 'Nouvelle prestation 2/3 - Détail des travaux';
20$formulaire_entrees = ["Tâches effectuées:", "Modèle du PC:", "OS:", "Données sauvegardées:", "Clés d\'activation:", "Temps main d\'oeuvre (heures):", "Total main d\'oeuvre (euros):", "Total pièces (euros):", "Déplacement (euros)", "Total HT (euros):",]; 21$formulaire_entrees = ["Tâches effectuées:", "Modèle du PC:", "OS:", "Données sauvegardées:", "Clés d\'activation:", "Temps main d\'oeuvre (heures):", "Total main d\'oeuvre (euros):", "Total pièces (euros):", "Déplacement (euros)", "Total HT (euros):",];
21$commentaire_prestation_text = 'Nouvelle prestation 3/3 - Commentaires'; 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 Zenity_list($menu_principal_text, $menu_principal_entrees);
28$QuestionNouveauClient = new Zenity_question($question_nouveau_client_text);
29$MenuEnregistrement = new Zenity_list($menu_enregistrement_text, $menu_enregistrement_entrees);
30$MenuDocuments = new Zenity_list($menu_documents_text, $menu_documents_entrees);
31$MenuCommunication = new Zenity_list($menu_communication_text, $menu_communication_entrees);
32$RechercheClient = new zenity_entry($recherche_client_text);
33$ResultatsRechercheClient = new zenity_list($resultats_recherche_client_text, []);
34$NouveauClient = new Zenity_forms($nouveau_client_text, $nouveau_client_entrees);
35$Calendrier = new Zenity_calendar($calendar_text);
36$FormulairePrestation = new Zenity_forms($formulaire_text, $formulaire_entrees);
37$CommentairePrestation = new Zenity_entry($commentaire_prestation_text);
diff --git a/structure base de données.ods b/structure base de données.ods
new file mode 100644
index 0000000..12d7af6
--- /dev/null
+++ b/structure base de données.ods
Binary files differ