diff options
author | polo <ordipolo@gmx.fr> | 2022-11-27 02:34:34 +0100 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2022-11-27 02:34:34 +0100 |
commit | a2fdd37ffb5a3cc80b6fedb332024057553148f8 (patch) | |
tree | cb28a5ddb1a2dd520ba1c2e41dfea942b15dc17e | |
parent | efe371fd6e883dde99ca6d90a7aae99eb4aeadea (diff) | |
download | AppliGestionPHP-a2fdd37ffb5a3cc80b6fedb332024057553148f8.zip |
connexion BDD orientée objet
-rw-r--r-- | README.txt | 9 | ||||
-rwxr-xr-x | index.php | 25 | ||||
-rwxr-xr-x | logiciel compta.desktop | 4 | ||||
-rw-r--r-- | ordipolo.sqlite | 0 | ||||
-rw-r--r-- | php/ConnectionDatabase.php | 35 | ||||
-rw-r--r-- | php/Database.php | 26 | ||||
-rw-r--r-- | php/Model.php | 42 | ||||
-rw-r--r-- | php/ZenityClasses.php | 1 | ||||
-rw-r--r-- | php/saisie.php | 43 | ||||
-rw-r--r-- | php/zenity_setup.php (renamed from php/zenity_text.php) | 18 | ||||
-rw-r--r-- | structure base de données.ods | bin | 0 -> 22823 bytes |
11 files changed, 111 insertions, 92 deletions
@@ -16,6 +16,15 @@ dépendances optionnelles: | |||
16 | si absent, le script essaie de lancer "sqlite3" dans "xterm" | 16 | si absent, le script essaie de lancer "sqlite3" dans "xterm" |
17 | 17 | ||
18 | 18 | ||
19 | installation: | ||
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é, | ||
25 | son emplacement est par défaut à la racine de ce programme, tout comme ce fichier README.txt | ||
26 | |||
27 | |||
19 | configuration: | 28 | configuration: |
20 | - veuillez modifier les variables dans config.php | 29 | - veuillez modifier les variables dans config.php |
21 | ATTENTION, si vous ne savez pas ce que vous faîtes, ne faites rien. | 30 | ATTENTION, si vous ne savez pas ce que vous faîtes, ne faites rien. |
@@ -19,30 +19,17 @@ $x_term_command = ''; // commande terminal en mode graphique | |||
19 | require('php/dependances.php'); // vérification des dépendances | 19 | require('php/dependances.php'); // vérification des dépendances |
20 | require('php/functions.php'); | 20 | require('php/functions.php'); |
21 | 21 | ||
22 | require('php/ZenityClasses.php'); // créer les commandes | 22 | require('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à |
23 | require('php/zenity_text.php'); // texte dans les fenêtres | 23 | require('php/Model.php'); // class Model extends DB, requêtes SQL |
24 | Connection::$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 | ||
25 | require('php/Database.php'); // connexion à la base et création de la base et des tables si elles n'existent pas déjà | 27 | require('php/ZenityClasses.php'); // méthodes pour créer les commandes |
26 | $Database = new SQL; | 28 | require('php/zenity_setup.php'); // texte dans les fenêtres ET instanciation (un objet = une commande) |
27 | SQL::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; |
48 | while($boucle) | 35 | while($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 | |||
3 | Type=Application | 3 | Type=Application |
4 | Name=logiciel compta | 4 | Name=logiciel compta |
5 | Comment= | 5 | Comment= |
6 | Exec=/home/paulo/ORDIPOLO/Appli_PHP/index.php | 6 | Exec=/home/paulo/ORDIPOLO/AppliGestionPHP/index.php |
7 | Icon=/home/paulo/ORDIPOLO/PUB/logo.png | 7 | Icon=/home/paulo/ORDIPOLO/PUB/logo.png |
8 | Path=/home/paulo/ORDIPOLO/Appli_PHP | 8 | Path=/home/paulo/ORDIPOLO/AppliGestionPHP |
9 | Terminal=false | 9 | Terminal=false |
10 | StartupNotify=false | 10 | StartupNotify=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 | |||
4 | class 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 | ||
5 | try | ||
6 | { | ||
7 | $db = new PDO('sqlite:' . $db_name . '.sqlite'); | ||
8 | $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | ||
9 | } | ||
10 | catch (Exception $e) | ||
11 | { | ||
12 | die('Erreur : '.$e->getMessage()); | ||
13 | } | ||
14 | |||
15 | |||
16 | // requêtes SQL | ||
17 | class 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 | |||
4 | class 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."'); | ||
5 | var_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)); | ||
28 | var_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."'); |
49 | var_dump($result); | 6 | var_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 | |||