From a2fdd37ffb5a3cc80b6fedb332024057553148f8 Mon Sep 17 00:00:00 2001 From: polo Date: Sun, 27 Nov 2022 02:34:34 +0100 Subject: =?UTF-8?q?connexion=20BDD=20orient=C3=A9e=20objet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt | 9 +++++++ index.php | 25 +++++-------------- logiciel compta.desktop | 4 +-- ordipolo.sqlite | 0 php/ConnectionDatabase.php | 35 +++++++++++++++++++++++++++ php/Database.php | 26 -------------------- php/Model.php | 42 ++++++++++++++++++++++++++++++++ php/ZenityClasses.php | 1 - php/saisie.php | 43 --------------------------------- php/zenity_setup.php | 37 ++++++++++++++++++++++++++++ php/zenity_text.php | 21 ---------------- "structure base de donn\303\251es.ods" | Bin 0 -> 22823 bytes 12 files changed, 131 insertions(+), 112 deletions(-) delete mode 100644 ordipolo.sqlite create mode 100644 php/ConnectionDatabase.php delete mode 100644 php/Database.php create mode 100644 php/Model.php create mode 100644 php/zenity_setup.php delete mode 100644 php/zenity_text.php create mode 100644 "structure base de donn\303\251es.ods" 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: si absent, le script essaie de lancer "sqlite3" dans "xterm" +installation: +- placer ce dossier où vous le souhaitez +- 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 +- $db_name renvoit au fichier de données! ne pas écrire l'extension .sqlite qui est implicité, +son emplacement est par défaut à la racine de ce programme, tout comme ce fichier README.txt + + configuration: - veuillez modifier les variables dans config.php ATTENTION, 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 require('php/dependances.php'); // vérification des dépendances require('php/functions.php'); -require('php/ZenityClasses.php'); // créer les commandes -require('php/zenity_text.php'); // texte dans les fenêtres +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à +require('php/Model.php'); // class Model extends DB, requêtes SQL +Connection::$dsn = 'sqlite:' . $db_name . '.sqlite'; // Data Source Name = 1er paramètre du constructeur de PDO: $bdd = new PDO($dsn); +$Database = new Model(); // connexion et méthodes pour manipuler la base de données -require('php/Database.php'); // connexion à la base et création de la base et des tables si elles n'existent pas déjà -$Database = new SQL; -SQL::create_tables(); +require('php/ZenityClasses.php'); // méthodes pour créer les commandes +require('php/zenity_setup.php'); // texte dans les fenêtres ET instanciation (un objet = une commande) // require('php/latex.php'); // require('php/compileLatex.php'); -// commandes système qui ouvrent les fenêtres zenity -// s'utilisent comme ceci: exec($Objet->get()); -$MenuPrincipal = new Zenity_list($menu_principal_text, $menu_principal_entrees); -$QuestionNouveauClient = new Zenity_question($question_nouveau_client_text); -$MenuEnregistrement = new Zenity_list($menu_enregistrement_text, $menu_enregistrement_entrees); -$MenuDocuments = new Zenity_list($menu_documents_text, $menu_documents_entrees); -$MenuCommunication = new Zenity_list($menu_communication_text, $menu_communication_entrees); -$RechercheClient = new zenity_entry($recherche_client_text); -$ResultatsRechercheClient = new zenity_list($resultats_recherche_client_text, []); -$NouveauClient = new Zenity_forms($nouveau_client_text, $nouveau_client_entrees); -$Calendrier = new Zenity_calendar($calendar_text); -$FormulairePrestation = new Zenity_forms($formulaire_text, $formulaire_entrees); -$CommentairePrestation = new Zenity_entry($commentaire_prestation_text); - // boucle principale $boucle = true; 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 Type=Application Name=logiciel compta Comment= -Exec=/home/paulo/ORDIPOLO/Appli_PHP/index.php +Exec=/home/paulo/ORDIPOLO/AppliGestionPHP/index.php Icon=/home/paulo/ORDIPOLO/PUB/logo.png -Path=/home/paulo/ORDIPOLO/Appli_PHP +Path=/home/paulo/ORDIPOLO/AppliGestionPHP Terminal=false StartupNotify=false diff --git a/ordipolo.sqlite b/ordipolo.sqlite deleted file mode 100644 index e69de29..0000000 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 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // $this pour la méthode du parent PDO + } + catch(PDOException $e) + { + die('Erreur : '.$e->getMessage()); + } + } + + // créer son objet avec: $bdd = Connection::getInstance(); + public static function getInstance(): self + { + if(self::$Instance === null) + { + self::$Instance = new self(); + } + return self::$Instance; + } +} 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 @@ -setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); -} -catch (Exception $e) -{ - die('Erreur : '.$e->getMessage()); -} - - -// requêtes SQL -class SQL -{ - // créer les tables si elles n'existent pas encore - static function create_tables() - { - //$db->exec("CREATE TABLE IF NOT EXISTS matable (ID INTEGER PRIMARY KEY, champ1 INTEGER, champ2 TEXT);"); - // - // - } -} 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 @@ +db = parent::getInstance(); + self::create_tables(); + } + + // code SQL + function create_tables() + { + // la table prestations est liée à la table clients + // les tables devis_factures, cesu et locations sont liées à la table prestations + $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));"); + $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));"); + $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));"); + $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));"); + $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));"); + + // les types de variables de sqlite sont peu nombreux et autorisent un typage automatique + // le "type indiqué" est indiqué dans l'instruction CREATE TABLE + // https://www.leppf.com/site/spip.php?article89 + + // || type indiqué || type choisi automatiquement || autre types possibles || + // --------------------------------------------------------------------------- + // || TEXT || TEXT || BLOB, NULL || + // || INTEGER || INTEGER (de 1 à 8 octets) || REAL, TEXT, BLOB, NULL || + // || REAL || REAL (flottant sur 9 octets) || TEXT, BLOB, NULL || + // || NUMERIC || INTEGER ou REAL || TEXT, BLOB, NULL || + // || NONE || indéfini || dépend des données || + + // du code SQL écrit pour d'autres SGBD devrait fonctionner, + // sqlite fera des conversions dans ses propres types avec les problèmes qu'on peut imaginer + + // pour les dates, on stockera à priori le timestamp + } +} 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 protected $width = 300; protected $height = 200; // recalculée en fonction du contenu, vaut au minimum 150 - protected function __construct($text, array $rows = []) // $rows est optionnel { $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 @@ get()); +$MenuPrincipal = new Zenity_list($menu_principal_text, $menu_principal_entrees); +$QuestionNouveauClient = new Zenity_question($question_nouveau_client_text); +$MenuEnregistrement = new Zenity_list($menu_enregistrement_text, $menu_enregistrement_entrees); +$MenuDocuments = new Zenity_list($menu_documents_text, $menu_documents_entrees); +$MenuCommunication = new Zenity_list($menu_communication_text, $menu_communication_entrees); +$RechercheClient = new zenity_entry($recherche_client_text); +$ResultatsRechercheClient = new zenity_list($resultats_recherche_client_text, []); +$NouveauClient = new Zenity_forms($nouveau_client_text, $nouveau_client_entrees); +$Calendrier = new Zenity_calendar($calendar_text); +$FormulairePrestation = new Zenity_forms($formulaire_text, $formulaire_entrees); +$CommentairePrestation = new Zenity_entry($commentaire_prestation_text); diff --git a/php/zenity_text.php b/php/zenity_text.php deleted file mode 100644 index 2246463..0000000 --- a/php/zenity_text.php +++ /dev/null @@ -1,21 +0,0 @@ -