From 1894fc377e6b938ea34df9980567a1634ec6ef48 Mon Sep 17 00:00:00 2001 From: polo Date: Wed, 28 Dec 2022 05:19:55 +0100 Subject: =?UTF-8?q?r=C3=A9organisation=20+=20bient=C3=B4t=20finie=20la=20s?= =?UTF-8?q?ection=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/model/CESU.php | 23 ++++++++----- src/model/Clients.php | 56 ++++++++++++++++++++++++------ src/model/DevisFactures.php | 32 ++++++++++++++--- src/model/Locations.php | 21 +++++++----- src/model/Model.php | 12 ++++--- src/model/Prestations.php | 81 +++++++++++++++++++++++++++++++++++++------- src/model/StructTablesDB.php | 6 ++-- src/model/traits.php | 18 +++++----- 8 files changed, 187 insertions(+), 62 deletions(-) (limited to 'src/model') diff --git a/src/model/CESU.php b/src/model/CESU.php index 28a54a8..2be89c0 100644 --- a/src/model/CESU.php +++ b/src/model/CESU.php @@ -3,28 +3,33 @@ class CESU extends Model { - const TABLE = 'cesu'; + //~ const TABLE = 'cesu'; // lecture des données ou hydratation - private $ID; - private $ID_presta; + private $ID_cesu; private $taches; private $duree_travail; private $salaire; use ModelChildren; - // setters - public function setID(int $value) + public function __construct(int $client_ID) { - $this->ID = $value; - return($this); + parent::__construct($client_ID); + $this->type == 'cesu'; } - public function setIDPresta(int $value) + + // setters + public function setIDCesu(int $value) { - $this->ID_presta = $value; + $this->ID_cesu = $value; return($this); } + //~ public function setIDPresta(int $value) + //~ { + //~ $this->ID_presta = $value; + //~ return($this); + //~ } public function setTaches(string $value) { $this->taches = $value; diff --git a/src/model/Clients.php b/src/model/Clients.php index 92a4b31..aeb39c1 100644 --- a/src/model/Clients.php +++ b/src/model/Clients.php @@ -4,20 +4,37 @@ class Clients extends Model { // lecture des données ou hydratation - public $ID; - public $prenom_nom; - public $adresse; - public $code_client; - public $commentaires; + protected $ID; // auto-incrémentée + protected $prenom_nom = ''; + protected $code_client = ''; + protected $adresse = ''; + protected $telephone = ''; + protected $courriel = ''; + protected $commentaires = ''; use ModelChildren; // renseigne parent::table + public function __construct() + { + $this->table = 'clients'; + } + //~ public function set(string $variable, $value) //~ { //~ $this->$variable = $value; //~ return($this); //~ } + // getters + public function getID(): int + { + return $this->ID; + } + public function getCodeClient(): string + { + return $this->code_client; + } + // setters public function setID(int $value) // inutile? il s'autoincrémente { @@ -29,14 +46,27 @@ class Clients extends Model $this->prenom_nom = $value; return($this); } + public function setCode_client(string $value) + { + $this->code_client = $value; + return($this); + } public function setAdresse(string $value) { $this->adresse = $value; return($this); } - public function setCode_client(string $value) + public function setTelephone(string $value) // chaine parce que zenity renvoie une chaine et parce qu'on garde le 0 au début { - $this->code_client = $value; + if(is_numeric($value)) + { + $this->telephone = $value; + } + return($this); + } + public function setCourriel(string $value) + { + $this->courriel = $value; return($this); } public function setCommentaires(string $value) @@ -48,12 +78,18 @@ class Clients extends Model public function newRow(array $input) { - $this->hydrate(['prenom_nom' => $input[0], 'adresse' => $input[1], 'code_client' => $input[2], 'commentaires' => $input[3]]); + $this->hydrate(['prenom_nom' => $input[0], 'code_client' => $input[1], 'adresse' => $input[2], 'telephone' => $input[3], 'courriel' => $input[4], 'commentaires' => $input[5]]); $this->create(); - $this->setIdFromLastInsertID(); // dans ModelChildren, n'utilise pas Model::execQuery() + // ID obtenu par auto-incrémentation + $this->ID = $this->db->lastInsertId(); // méthode de PDO } + //~ public function setIdFromLastInsertID() // à faire juste après l'écriture d'une nouvelle entrée + //~ { + //~ $this->db = parent::getInstance(); // $db est créée dans Model::execQuery() + //~ $this->ID = $this->db->lastInsertId(); // méthode de PDO + //~ } - public function findByKeywords(array $keywords, string $field): array + public function findByKeywords(array $keywords, string $field): array // n'hydrate pas les variables, on doit choisir un client et hydrater ensuite { $result = []; for($i = 0; $i < count($keywords); $i++) diff --git a/src/model/DevisFactures.php b/src/model/DevisFactures.php index 218ebfe..1ed3a5c 100644 --- a/src/model/DevisFactures.php +++ b/src/model/DevisFactures.php @@ -4,8 +4,8 @@ class DevisFactures extends Model { // lecture des données ou hydratation - private $ID; - private $ID_presta; + private $ID_devis_facture; // auto-incrémentée + private $ID_presta = 0; private $validite_devis; private $signature_devis; private $taches; @@ -19,12 +19,25 @@ class DevisFactures extends Model private $deplacement; private $total_HT; - use ModelChildren; + //~ use ModelChildren; + + public function __construct(int $ID_presta) + { + $this->table = 'devisfactures'; + $this->ID_presta = $ID_presta; + } // setters - public function setID(int $value) + public function setIDDevisFacture(int $value = 0) { - $this->ID = $value; + if($value === 0) + { + $this->ID_devis_facture = $this->db->lastInsertId(); // méthode de PDO + } + else + { + $this->ID_devis_facture = $value; + } return($this); } public function setIDPresta(int $value) @@ -92,4 +105,13 @@ class DevisFactures extends Model $this->total_HT = $value; return($this); } + + public function newRow(array $input, array $quotations_input = []) + { + if(!empty($quotations_input)) // cas d'un devis + { + $this->hydrate(['validite_devis' => $quotations_input[0], 'signature_devis' => $quotations_input[1]]); + } + $this->hydrate([]); + } } diff --git a/src/model/Locations.php b/src/model/Locations.php index b788d43..21e9b09 100644 --- a/src/model/Locations.php +++ b/src/model/Locations.php @@ -4,8 +4,7 @@ class Locations extends Model { // lecture des données ou hydratation - private $ID; - private $ID_presta; + private $ID_location; private $nature_bien; private $modele; private $valeur; @@ -17,17 +16,23 @@ class Locations extends Model use ModelChildren; - // setters - public function setID(int $value) + public function __construct(int $client_ID) { - $this->ID = $value; - return($this); + parent::__construct($client_ID); + $this->type == 'location'; } - public function setIDPresta(int $value) + + // setters + public function setIDLocation(int $value) { - $this->ID_presta = $value; + $this->ID_location = $value; return($this); } + //~ public function setIDPresta(int $value) + //~ { + //~ $this->ID_presta = $value; + //~ return($this); + //~ } public function setNatureBien(string $value) { $this->nature_bien = $value; diff --git a/src/model/Model.php b/src/model/Model.php index 8cbf056..938e3dd 100644 --- a/src/model/Model.php +++ b/src/model/Model.php @@ -9,7 +9,8 @@ class Model extends DB public function __construct() { - $this->db = parent::getInstance(); // connexion + //~ $this->db = parent::getInstance(); // connexion + //~ $this->table = strtolower(__CLASS__); } // getters @@ -26,8 +27,9 @@ class Model extends DB // nom d'un setter, forme "setMachin()" $setterName = 'set' . ucfirst($key); // ucfirst met la première lettre en majuscule // détection - if(method_exists($this, $setterName)) // on trouve aussi la méthode is_callable() + if(method_exists($this, $setterName) && $value != NULL) // on trouve aussi la méthode is_callable() { + //~ var_dump($value); // on renseigne les propriétés des l'instance $this->$setterName($value); // nom d'une méthode dans une variable } @@ -84,7 +86,7 @@ class Model extends DB // read SELECT - public function readAll(): array // obtenir une table + protected function readAll(): array // obtenir une table { return($this->execQuery('SELECT * FROM ' . $this->table)->fetchAll()); // fonctionne aussi sans le point virgule dans le SQL!! } @@ -94,7 +96,7 @@ class Model extends DB return($this->execQuery('SELECT * FROM ' . $this->table . ' WHERE id = ' . $id)->fetch()); } - public function find(array $criteria): array // obtenir une entrée avec un tableau associatif 'champ' => 'valeur' + protected function find(array $criteria): array // obtenir une entrée avec un tableau associatif 'champ' => 'valeur' { $fields = []; $values = []; @@ -134,7 +136,7 @@ class Model extends DB // delete DELETE - public function delete(int $id) + protected function delete(int $id) { return($this->execQuery("DELETE FROM {$this->table} WHERE id = ?", [$id])); // double quotes "" pour insertion de variable, paramètre [$id] parce qu'on veut un tableau } diff --git a/src/model/Prestations.php b/src/model/Prestations.php index 32f9768..cbe8e6c 100644 --- a/src/model/Prestations.php +++ b/src/model/Prestations.php @@ -4,23 +4,56 @@ class Prestations extends Model { // lecture des données ou hydratation - private $ID; - private $IDClient; - private $combientieme_fois; - private $code_presta; - private $date; - private $type; - private $mode_paiement; - private $commentaires; + protected $ID_presta; // auto-incrémentée + protected $ID_client = 0; + protected $combientieme_fois = 0; + protected $code_presta = ''; + protected $date = 0; // timestamp unix + protected $type_presta = ''; + protected $mode_paiement = ''; + protected $commentaires = ''; - use ModelChildren; + //~ use ModelChildren; + + public function __construct(int $ID_client) + { + $this->table = 'prestations'; + $this->ID_client = $ID_client; + $this->combientiemeFois(); + } + + // getters + public function getIDPresta(): int + { + return $this->ID_presta; + } + public function getIDClient(): int + { + return $this->ID_client; + } + public function getCombientiemeFois(): int + { + return $this->combientieme_fois; + } + public function getDate(): int + { + return $this->date; + } // setters - public function setID(int $value) + public function setIDPresta(int $value = 0) { - $this->ID = $value; + if($value === 0) + { + $this->ID_presta = $this->db->lastInsertId(); // méthode de PDO + } + else + { + $this->ID_presta = $value; + } return($this); } + public function setIDClient(int $value) { $this->ID_client = $value; @@ -41,9 +74,9 @@ class Prestations extends Model $this->date = $value; return($this); } - public function setType(string $value) + public function setTypePresta(string $value) { - $this->type = $value; + $this->type_presta = $value; return($this); } public function setModePaiement(string $value) @@ -56,4 +89,26 @@ class Prestations extends Model $this->commentaires = $value; return($this); } + + protected function combientiemeFois() + { + // on récupère un tableau contenant toutes les prestations d'un client tous types confondus (devis, facture, cesu, location, enregistrement sans vente) + $array = $this->find(['ID_client' => $this->ID_client]); + $this->combientieme_fois = count($array) + 1; + } + + // code client = année-mois-jour-codeclient-combientièmefois + public function makeCodePresta(Dates $Date, string $code_client) + { + $array_code = [$Date->getYear(), $Date->getMonth(), $Date->getDay(), $code_client, $this->combientieme_fois]; + $this->code_presta = implode('-', $array_code); + } + + //~ public function newRow(array $input) + //~ { + //~ $this->hydrate(['ID_client' => $input[0], 'code_presta' => $input[1], 'date' => $input[2], 'type_presta' => $input[3], 'mode_paiement' => $input[4], 'commentaires' => $input[5]]); + //~ $this->create(); + //~ // ID obtenu par auto-incrémentation + //~ $this->ID_presta = $this->db->lastInsertId(); // méthode de PDO + //~ } } diff --git a/src/model/StructTablesDB.php b/src/model/StructTablesDB.php index ee4baf1..0f13b80 100644 --- a/src/model/StructTablesDB.php +++ b/src/model/StructTablesDB.php @@ -9,11 +9,11 @@ class StructTablesDB static public $structureOfTables = [ // la table prestations est liée à la table clients // les tables devis_factures, cesu et locations sont liées à la table prestations - 'clients' => ['ID' => 'INTEGER', 'prenom_nom' => 'TEXT', 'adresse' => 'TEXT', 'code_client' => 'TEXT', 'commentaires' => 'TEXT'], - 'prestations' => ['ID' => 'INTEGER', 'ID_client' => 'INTEGER', 'combientieme_fois' => 'INTEGER', 'code_presta' => 'TEXT', 'date' => 'INTEGER', 'type_presta' => 'TEXT', 'mode_paiement' => 'TEXT', 'commentaires' => 'TEXT'], + 'clients' => ['ID' => 'INTEGER', 'prenom_nom' => 'TEXT', 'code_client' => 'TEXT', 'adresse' => 'TEXT', 'telephone' => 'TEXT', 'courriel' => 'TEXT', 'commentaires' => 'TEXT'], + 'prestations' => ['ID' => 'INTEGER', 'ID_client' => 'INTEGER', 'code_presta' => 'TEXT', 'date' => 'INTEGER', 'type_presta' => 'TEXT', 'mode_paiement' => 'TEXT', 'commentaires' => 'TEXT'], 'devisfactures' => ['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' => 'REAL', 'pieces' => 'TEXT', 'total_pieces' => 'REAL', 'deplacement' => 'REAL', 'total_HT' => 'REAL'], 'cesu' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'taches' => 'TEXT', 'duree_travail' => 'TEXT', 'salaire' => 'REAL'], - 'locations' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'designation' => 'TEXT', 'modele_description' => 'TEXT', 'valeur' => 'REAL', 'etat_des_lieux_debut' => 'TEXT', 'etat_des_lieux_fin' => 'TEXT', 'duree_location' => 'INTEGER', 'loyer_mensuel' => 'REAL', 'loyers_encaisse' => 'INTEGER', 'caution' => 'INTEGER'] + 'locations' => ['ID' => 'INTEGER', 'ID_presta' => 'INTEGER', 'designation' => 'TEXT', 'modele_description' => 'TEXT', 'valeur' => 'REAL', 'etat_des_lieux_debut' => 'TEXT', 'etat_des_lieux_fin' => 'TEXT', 'duree_location' => 'INTEGER', 'loyer_mensuel' => 'REAL', 'loyers_payes' => 'INTEGER', 'caution' => 'INTEGER'] ]; // les types de variables de sqlite sont peu nombreux et autorisent un typage automatique diff --git a/src/model/traits.php b/src/model/traits.php index 43d9b7f..3d446c1 100644 --- a/src/model/traits.php +++ b/src/model/traits.php @@ -3,14 +3,14 @@ trait ModelChildren // pour ne pas toucher au constructeur de la classe Model { - public function __construct() - { - $this->table = strtolower(__CLASS__); - } + //~ public function __construct() + //~ { + //~ $this->table = strtolower(__CLASS__); + //~ } - public function setIdFromLastInsertID() // à faire juste après l'écriture d'une nouvelle entrée - { - $this->db = parent::getInstance(); - $this->ID = $this->db->lastInsertId(); // méthode de PDO - } + //~ public function setIdFromLastInsertID() // à faire juste après l'écriture d'une nouvelle entrée + //~ { + //~ $this->db = parent::getInstance(); + //~ $this->ID = $this->db->lastInsertId(); // méthode de PDO + //~ } } -- cgit v1.2.3