Comment trouviez vous ce cours ?

0(0%)
0
0(0%)

Appéciations du lecteurs :

Visualisations : 804
Appreciations : 0

A propos de l'auteur :

R@chid
Email: victrachild@yahoo.com
Validation du cour :

Php Mvc- Tp

Peut on créer une application Php Mvc sans utiliser un farmwork?

Partie précédentePartie Suivante

Tp: Géstions des Stocks

    Une société voulait automatisé son sytème d'information, en développant une application web (Intranet) qui gére les ventes, les fournisseurs, et les stocks.

    Pré-requis

    Pour réaliser ce Tp, vous devez avoir une bonne connaissance en langage Php et Poo programmation orienté objet.

   Outils

    Avoir le serveur d'application Apache(Ou autre conteneur Php), serveur de base de données Mysql(Ou autre SGBDR).

    Partie de Modélisation

    La modélisation consiste à créer une représentation simplifiée d'un problème, pour facilité de le comprendre.

        Diagramme de Cas d'utilisation

Ce diagramme présente les services, un service sera présenté sous forme d'un contrôleur.
Diagramme de cas d'utilisation.

        Diagramme de Classe

Ce qui concerne le développement, nous se concentrons que sur les services de Géstion de produits et stocks
Diagramme de classe.

        Diagramme de Séquence

    Nous voulons développer que la partie qui concerne la gésion des Produits et leurs Stocks, voilà le diagramme de séquence qui présente les défférentes actions.

Un diagramme de séquence pour le cas d'utilisation "Gérer Les Produits".
Diagramme de séquence.

    La partie de conception et Modélisation étant fini, Maintenant le web designer(Généralement un inforgraphiste) va présenté le projet sous forme des maquettes(Images), et on confirme par la suite avec le client. Aprés la confirmation le programmeur et l'integrateur web peuvent commencer la partie des programmation.

Voilà les maquettes qu'on va utiliser.

Home : L'accueil.
Stock : liste des produits et leurs géstions.
Stock : L'ajout d'un produit.
Stock : modification d'un produit.
Stock : suppression d'un produit.
Stock : géstion de stock d'un produit.

    Partie de programmation

        1 - Création de la base de données.

    Commençant par la création de la base de données. on se basant sur la partie encadré en orange du diagramme de classe. Le modèle physique de données (MPD) correspondant à partir de diagramme de classe.

Modèle Physique de Données(MPD).
j'ai utilisé la ligne de commande pour la création, vous pouvez utiliser l'assitant phpMyAdmin si vous utiliserez le SGBDR mysql
Ligne de Commande : création de base de données.

        2 - L'architecture de l'application.

    Créant Maintenant un dossiers "GestionStockProduit" dans le root www ou dans le dossier ou vous avez spécifié le DocumentRoot lors de l'instalation. voilà l'archetecture de l'application .

L'architecture de l'application(MVC).

Le design pattern se base sur l'archetecture 3 tiers en séparant les codes dans les dossiers models views et controllers

Chaque contrôleur correspond à un dossier porte le même nom dans le dossier views, et contenant des vues, chacune de ces vues correspond elle aussi à une action de contrôleur.

        3 - Création de Models.

    La présentation de la base de données au niveau de l'application se fait à travers des models, Ce sont eux qui vont interroger la base de données.

Dans le dossiers de models, on crée les fichiers (~.Model.php).

  • Model.Model.php : fichier contenant la classe abstraite Model, regroupe des attributs et méthodes communs
  • FamilleProduit.Model.php : fichier contenant la classe FamilleProduit présente la table famillesproduit.
  • Produit.Model.php : fichier contenant la classe Produit présente la table produits.
  • Stock.Model.php : fichier contenant la classe Stock présente la table stocks.

Model : Model.Model.php

<?php

/* Models : Model une classe abstraite, classe mère de toutes les modèle */
abstract class Model{
	//Tableau sera rempli par les nom des attributs no valide.
	protected $ErrorAttribut = array();
	//Tableau contiendra les attributs no valide et les messages d'erreur.
	protected $listError = array();
		
	//Méthodes de Validation des Attributs
		
	/**
		* @desc  Spécifie le message d'erreur pour 
					les éventuels attributs no valide.
		* @param   str $attribut   Nom de l'attribut
		* @param   str $messageError    Message d'erreur
	*/
	public function AddModelError($attribut, $messageError){
		global $ErrorAttribut;
		global $listError;
		for($i=0; $i<count($ErrorAttribut); $i++)
			if($ErrorAttribut[$i] === $attribut)
				$listError[$attribut] = $messageError;
	}
		
	/**
		* @desc  Retourne le message d'erreur de l'attribut no valide.
		* @param   str $attribut      Nom de l'attribut
		* @return   $listError  or ""         Retourne un tableau ou vide      
	*/
	public function ValidationMessage($attribut){
		global $listError;
		if(sizeof($listError)>0);
			return $listError[$attribut];
			
		return "";
	}
	/**
		* @desc  Vérifie s'il y des attributs no valides pour empêcher une 
				action sur la base de données.
		* @return   1 or 0          validé ou no validé
	*/
	public function IsValid(){
		global $ErrorAttribut;
		if(count($ErrorAttribut)==0)
			return 1;
		else
			return 0;
	}
}

?>

Model : Produit.Model.php

<?php
	/* Models : classe Produit */
	//Inclusion de Classe Mére
	require_once('Model.Model.php');
	class ProduitModel extends Model{
	//Les Attributs  : chaque attribut correspond a une colonne de la table produit.
	private $id;
	private $designation; 
	private $prixUnitaire;
	private $tva;
	private $quantite;
	private $idFamille;
	
	//Accesseurs et modificateurs des attributs privé (getters et setters)
		
	/*
		* @desc retourne id de l'objet courant
		* @return   id 
	*/
	public function getId(){
		return $this->id;
	}
		
	/*
		* @desc   retourne designation de l'objet courant
		* @return   designation 
	*/
	public function getDesignation(){
		return $this->designation;
	}
	/*
		* @desc change la valeur de l'attribut designation aprés la validation
		* @param   str $value     valeur de l'attribut designation
	*/
	public function setDesignation($value){
		if(!empty($value))
			$this->designation = $value;
		else{
			global $ErrorAttribut;
			$ErrorAttribut[] = "designation";
		}
	}
		
	/*
		* @desc     retourne prixUnitaire de l'objet courant
		* @return    prixUnitaire 
	*/
	public function getPrixUnitaire(){
		return $this->prixUnitaire;
	}
	/*
		* @desc   change la valeur de l'attribut prixUnitaire aprés la validation
		* @param   	str $value     valeur de l'attribut prixUnitaire
	*/
	public function setPrixUnitaire($value){
		if(is_numeric($value))
			$this->prixUnitaire = $value;
		else{
			global $ErrorAttribut;
			$ErrorAttribut[] = "prixUnitaire";
		}
	}
		
	/*
		* @desc     retourne tva de l'objet courant
		* @return    tva 
	*/
	public function getTva(){
			return $this->tva;
	}
	/*
		* @desc	 change la valeur de l'attribut tva aprés la validation
		* @param   	str $value     valeur de l'attribut tva
	*/
	public function setTva($value){
		if(is_numeric($value))
			$this->tva = $value;
		else{
			global $ErrorAttribut;
			$ErrorAttribut[] = "tva";
		}
	}
		
	/*
		* @desc     retourne quantite de l'objet courant
		* @return    quantite 
	*/
	public function getQuantite(){
			return $this->quantite;
	}
	/*
		* @desc       change la valeur de l'attribut quantite aprés la validation
		* @param   	str $value     valeur de l'attribut quantite
	*/
	public function setQuantite($value){
		if(is_numeric($value))
			$this->quantite = $value;
		else{
			global $ErrorAttribut;
			$ErrorAttribut[] = "quantite";
		}
	}
		
	/*
		* @desc     retourne IdFamille de l'objet courant
		* @return    tva 
	*/
	public function getIdFamille(){
		return $this->idFamille;
	}
	/*
		* @desc   change la valeur de l'attribut IdFamille "Nous 
			n' avons pas besoin de validation puisque on
			va selecter la famille de produit à partir d'une liste"
		* @param	str $value   valeur de l'attribut IdFamille
	*/
	public function setIdFamille($value){
		$this->idFamille = $value;
	}
		
	//CRUD : Create   Red    Update  Delete
		
	//Ajouter
	public function addProduit(){
		$rqt = 'INSERT INTO produits (designation, prixUnitaire, tva, 
			quantite, idFamille) VALUES ("'.$this->designation.'", 
			'.$this->prixUnitaire.', '.$this->tva.', 
			'.$this->quantite.', '.$this->idFamille.')';
		mysql_query($rqt);
	}
	//Modifier
	public function updateProduit($idProduit){
		$rqt = 'UPDATE produits SET designation = "'.$this->designation.'", 
			prixUnitaire = '.$this->prixUnitaire.', tva = '.$this->tva.', 
			quantite = '.$this->quantite.', 
			idFamille = '.$this->idFamille. ' WHERE id = '.$idProduit;
		mysql_query($rqt);
	}
	//Supprimer
	public function deleteProduit($idProduit){
		$rqt = 'DELETE FROM produits WHERE id = '.$idProduit;
		mysql_query($rqt);
	}
	//Lecture
	//	Liste des Produits
	public function listProduit(){
		$tab = array();
		$rqt = mysql_query("SELECT * FROM produits");
		while($data = mysql_fetch_assoc($rqt))
			$tab[] = $data;
		return $tab;
	}
	//Recherche
	public function findProduit($idProduit){
		$rqt = mysql_query("SELECT * FROM produits WHERE id = ".$idProduit);
		$data = mysql_fetch_assoc($rqt);
		if(count($data)>0){
			$this->id = $data['id'];
			$this->designation = $data['designation'];
			$this->prixUnitaire = $data['prixUnitaire'];
			$this->tva = $data['tva'];
			$this->quantite = $data['quantite'];
			$this->idFamille = $data['idFamille'];
		}
		return $this;
	}
}
	
?>

Model : FamilleProduit.Model.php

<?php
	
/* Models : classe FamilleProduit */
require_once('Model.Model.php');
class FamilleProduit extends Model{
	private $id;
	private $famille;
		
	//Accesseurs et modificateurs des attributs privé (getters et setters)
	public function getId(){
		return $this->id;
	}
	public function getFamille(){
		return $this->famille;
	}
	public function setFamille($value){
		if(!empty($value))
			$this->famille = $value;
		else{
			global $ErrorAttribut;
			$ErrorAttribut[] = "famille";
		}
	}
	//Ajouter 
	public function addFamilleProduit(){
		$rqt = 'INSERT INTO famillesProduit (famille) VALUES ('.$this->famille.')';
		mysql_query($rqt);
	}
	//Modifier
	public function updateFamilleProduit($idCategorie){
		$rqt = 'UPDATE famillesProduit SET famille = '.$this->famille.' 
			WHERE id = '.$idCategorie;
		mysql_query($rqt);
	}
	//Supprimer
	public function deleteFamilleProduit($idCategorie){
		$rqt = 'DELETE FROM famillesProduit 
			WHERE id = '.$idCategorie;
		mysql_query($rqt);
	}
	//Liste des Produits
	public function listFamilleProduit(){
		$tab = array();
		$rqt = mysql_query("SELECT * FROM famillesProduit");
		while($data = mysql_fetch_assoc($rqt))
			$tab[] = $data;
		return $tab;
	}
	//Recherche
	public function findFamilleProduit($idCategorie){
		$tab = array();
		$rqt = mysql_query("SELECT * FROM categories 
			WHERE id = ".$idCategorie);
		while($data = mysql_fetch_assoc($rqt))
			$tab[] = $data;
		return $tab;
	}
	//Liste Sous-ensemble
	public function listFamilleProduit_Produit(){
		$tab = array();
		$rqt = mysql_query("SELECT * FROM produits 
			WHERE idCategorie = ".$this->id);
		while($data = mysql_fetch_assoc($rqt))
			$tab[] = $data;
		return $tab;
	}
		
}

?>

Model : Stock.Model.php

<?php
	/* Models : classe Stocks */
	//Inclusion de Classe Mére
	require_once('Model.Model.php');
	class StockModel extends Model{
		private $id;
		private $date;
		private $quantite;
		private $idProduit;
		
		//Accesseur des attributs privé (getter et setter)
		public function getId(){
			return $this->id;
		}
		
		public function getDate(){
			return $this->date;
		}
		public function setDate($value){
			if(strpos($value, '/'))
				$dt = explode('/', $value);
			elseif(strpos($value, '-'))
				$dt = explode('-', $value);
			if(checkdate((int) $dt[1], (int) $dt[0], (int) $dt[2]))
				$this->date = $dt[2].'/'.$dt[1].'/'.$dt[0];
			else{
				global $ErrorAttribut;
				$ErrorAttribut[] = "date";
			}
		}
		
		public function getQuantite(){
			return $this->quantite;
		}
		public function setQuantite($value){
			if(is_numeric($value))
				$this->quantite = $value;
			else{
				global $ErrorAttribut;
				$ErrorAttribut[] = "quantite";
			}
		}
		public function getIdProduit(){
			return $this->idProduit;
		}
		public function setIdProduit($value){
			$this->idProduit = $value;
		}
		//Ajouter 
		public function addStock(){
			$rqt = 'INSERT INTO stocks (dateStock, quantite, idProduit) 
			VALUES ("'.$this->date.'", '.$this->quantite.', 
			'.$this->idProduit.')';
			mysql_query($rqt);
		}
		//Modifier
		public function updateStock($idStock){
			$rqt = 'UPDATE stocks SET dateStock = 
			DATE_FORMAT('.$this->date.',"%Y/%m/%d"), quantite = 
			'.$this->quantite.', idProduit = '.$this->idProduit.' 
			WHERE id = '.$idStock;
			mysql_query($rqt);
		}
		//Supprimer
		public function deleteStock($idStock){
			$rqt = 'DELETE FROM stocks WHERE id = '.$idStock;
			mysql_query($rqt);
		}
		//Liste des stocks
		public function listStock(){
			$rqt = "SELECT * FROM stocks";
			while($data = mysql_fetch_assoc($rqt))
				$tab[] = $data;
			return $tab;
		}
		//Recherche
		public function findStock($idStock){
			$rqt = "SELECT * FROM stocks WHERE id = ".$idStock;
			while($data = mysql_fetch_assoc($rqt))
				$tab[] = $data;
			return $tab;
		}
		//Liste de Stock (Sous-ensemble)
		public function listStockProduit(){
			$tab = array();
			$rqt = mysql_query("SELECT id, DATE_FORMAT(dateStock, '%d/%m/%Y') 
			as date, quantite FROM Stocks WHERE idProduit = " . $this->idProduit);
			while($data = mysql_fetch_assoc($rqt))
				$tab[] = $data;
			return $tab;
		}
		
	}
?>


Partie précédentePartie Suivante





Téléchargement ...