/**
  * @name convertFromArray($pArray)
  * @param array()
  * @desc Convertit le array en objet StockQuantiteVO
  */
 public static function convertFromArray($pArray)
 {
     $lValid = isset($pArray['id']) && isset($pArray['quantite']) && isset($pArray['quantiteSolidaire']);
     if ($lValid) {
         $lVo = new StockQuantiteVO();
         $lVo->setId($pArray['id']);
         $lVo->setQuantite($pArray['quantite']);
         $lVo->setQuantiteSolidaire($pArray['quantiteSolidaire']);
         return $lVo;
     }
     return NULL;
 }
 /**
  * @name update($pStock)
  * @param StockVO
  * @return integer
  * @desc Met à jour une opération
  */
 private function update($pStock)
 {
     // TODO les test : on update que les types 0/1/2/3/4/5/6
     $lStockActuel = $this->get($pStock->getId());
     $pStock->setDate(StringUtils::dateTimeAujourdhuiDb());
     $this->insertHistorique($pStock);
     // Ajout historique
     // TODO Mise à jour du stock selon le type
     switch ($pStock->getType()) {
         case 0:
             // Reservation
             $lLot = DetailCommandeManager::select($pStock->getIdDetailCommande());
             $lProduit = ProduitManager::select($lLot->getIdProduit());
             if ($pStock->getQuantite() > 0) {
                 // Reservation Producteur (commande)
                 // Maj Stock Reservation dans le produit
                 if ($lProduit->getStockInitial() == -1) {
                     // Si Pas de limite (Qte init = -1) il ne faut pas prendre en compte la qte init.
                     $lStockReservation = $lProduit->getStockReservation() + $pStock->getQuantite();
                 } else {
                     $lStockReservation = $lProduit->getStockReservation() - $lProduit->getStockInitial() + $pStock->getQuantite();
                 }
                 $lProduit->setStockReservation($lStockReservation);
                 $lProduit->setStockInitial($pStock->getQuantite());
                 ProduitManager::update($lProduit);
             } else {
                 // Reservation Adherent
                 // Maj Stock Reservation dans le produit
                 $lProduit->setStockReservation($lProduit->getStockReservation() + $pStock->getQuantite() - $lStockActuel->getQuantite());
                 ProduitManager::update($lProduit);
             }
             break;
         case 1:
             // Achat
             // Ajout ou Maj de la qté produit dans le stock
             $lStockQuantiteActuel = $this->selectQuantiteByIdNomProduitUnite($pStock->getIdNomProduit(), $pStock->getUnite());
             $lStockQuantiteActuel = $lStockQuantiteActuel[0];
             $lStockQuantite = new StockQuantiteVO();
             if (!is_null($lStockQuantiteActuel->getId())) {
                 $lStockQuantite->setId($lStockQuantiteActuel->getId());
                 $lStockQuantite->setQuantiteSolidaire($lStockQuantiteActuel->getQuantiteSolidaire());
             }
             $lStockQuantite->setQuantite($lStockQuantiteActuel->getQuantite() + $pStock->getQuantite() - $lStockActuel->getQuantite());
             $lStockQuantite->setIdNomProduit($pStock->getIdNomProduit());
             $lStockQuantite->setUnite($pStock->getUnite());
             $this->setStockQuantite($lStockQuantite);
             break;
         case 2:
             // Livraison/Achat Solidaire
             // Ajout ou Maj de la qté produit dans le stock
             $lStockQuantiteActuel = $this->selectQuantiteByIdNomProduitUnite($pStock->getIdNomProduit(), $pStock->getUnite());
             $lStockQuantiteActuel = $lStockQuantiteActuel[0];
             $lStockQuantite = new StockQuantiteVO();
             if (!is_null($lStockQuantiteActuel->getId())) {
                 $lStockQuantite->setId($lStockQuantiteActuel->getId());
                 $lStockQuantite->setQuantite($lStockQuantiteActuel->getQuantite());
             }
             $lStockQuantite->setQuantiteSolidaire($lStockQuantiteActuel->getQuantiteSolidaire() + $pStock->getQuantite() - $lStockActuel->getQuantite());
             $lStockQuantite->setIdNomProduit($pStock->getIdNomProduit());
             $lStockQuantite->setUnite($pStock->getUnite());
             $this->setStockQuantite($lStockQuantite);
             break;
         case 4:
             // Livraison
             /*$lLot = DetailCommandeManager::select($pStock->getIdDetailCommande());
             		$lProduit = ProduitManager::select($lLot->getIdProduit());
             		if($pStock->getQuantite() > 0) { // Livraison Producteur
             			// Maj Stock Reservation et qté initiale dans le produit
             			if($lProduit->getStockInitial() == -1) { // Si Pas de limite (Qte init = -1) il ne faut pas prendre en compte la qte init.
             				$lStockReservation = $lProduit->getStockReservation() + $pStock->getQuantite();
             			} else {
             				$lStockReservation = $lProduit->getStockReservation() - $lProduit->getStockInitial() + $pStock->getQuantite();
             			}
             			$lProduit->setStockReservation($lStockReservation);
             			$lProduit->setStockInitial($pStock->getQuantite());
             			ProduitManager::update($lProduit);
             		}*/
             // Ajout ou Maj de la qté produit dans le stock
             $lStockQuantiteActuel = $this->selectQuantiteByIdNomProduitUnite($pStock->getIdNomProduit(), $pStock->getUnite());
             $lStockQuantiteActuel = $lStockQuantiteActuel[0];
             $lStockQuantite = new StockQuantiteVO();
             if (!is_null($lStockQuantiteActuel->getId())) {
                 $lStockQuantite->setId($lStockQuantiteActuel->getId());
                 $lStockQuantite->setQuantiteSolidaire($lStockQuantiteActuel->getQuantiteSolidaire());
             }
             $lStockQuantite->setQuantite($lStockQuantiteActuel->getQuantite() + $pStock->getQuantite() - $lStockActuel->getQuantite());
             $lStockQuantite->setIdNomProduit($pStock->getIdNomProduit());
             $lStockQuantite->setUnite($pStock->getUnite());
             $this->setStockQuantite($lStockQuantite);
             break;
         case 6:
             // Reservation annulée
             // Maj Stock Reservation dans le produit
             $lLot = DetailCommandeManager::select($pStock->getIdDetailCommande());
             $lProduit = ProduitManager::select($lLot->getIdProduit());
             $lProduit->setStockReservation($lProduit->getStockReservation() - $lStockActuel->getQuantite());
             ProduitManager::update($lProduit);
             break;
         case 8:
             // Supression d'un achat
             // Ajout ou Maj de la qté produit dans le stock
             $lStockQuantiteActuel = $this->selectQuantiteByIdNomProduitUnite($pStock->getIdNomProduit(), $pStock->getUnite());
             $lStockQuantiteActuel = $lStockQuantiteActuel[0];
             $lStockQuantite = new StockQuantiteVO();
             if (!is_null($lStockQuantiteActuel->getId())) {
                 $lStockQuantite->setId($lStockQuantiteActuel->getId());
                 $lStockQuantite->setQuantiteSolidaire($lStockQuantiteActuel->getQuantiteSolidaire());
             }
             $lStockQuantite->setQuantite($lStockQuantiteActuel->getQuantite() - $lStockActuel->getQuantite());
             $lStockQuantite->setIdNomProduit($pStock->getIdNomProduit());
             $lStockQuantite->setUnite($pStock->getUnite());
             $this->setStockQuantite($lStockQuantite);
             break;
         case 9:
             // Supression d'une Livraison
             // Ajout ou Maj de la qté produit dans le stock
             $lStockQuantiteActuel = $this->selectQuantiteByIdNomProduitUnite($pStock->getIdNomProduit(), $pStock->getUnite());
             $lStockQuantiteActuel = $lStockQuantiteActuel[0];
             $lStockQuantite = new StockQuantiteVO();
             if (!is_null($lStockQuantiteActuel->getId())) {
                 $lStockQuantite->setId($lStockQuantiteActuel->getId());
                 $lStockQuantite->setQuantiteSolidaire($lStockQuantiteActuel->getQuantiteSolidaire());
             }
             $lStockQuantite->setQuantite($lStockQuantiteActuel->getQuantite() - $lStockActuel->getQuantite());
             $lStockQuantite->setIdNomProduit($pStock->getIdNomProduit());
             $lStockQuantite->setUnite($pStock->getUnite());
             $this->setStockQuantite($lStockQuantite);
             break;
         case 10:
             // Supression d'une Livraison Solidaire
             // Ajout ou Maj de la qté produit dans le stock
             $lStockQuantiteActuel = $this->selectQuantiteByIdNomProduitUnite($pStock->getIdNomProduit(), $pStock->getUnite());
             $lStockQuantiteActuel = $lStockQuantiteActuel[0];
             $lStockQuantite = new StockQuantiteVO();
             if (!is_null($lStockQuantiteActuel->getId())) {
                 $lStockQuantite->setId($lStockQuantiteActuel->getId());
                 $lStockQuantite->setQuantite($lStockQuantiteActuel->getQuantite());
             }
             $lStockQuantite->setQuantiteSolidaire($lStockQuantiteActuel->getQuantiteSolidaire() - $lStockActuel->getQuantite());
             $lStockQuantite->setIdNomProduit($pStock->getIdNomProduit());
             $lStockQuantite->setUnite($pStock->getUnite());
             $this->setStockQuantite($lStockQuantite);
             break;
     }
     return StockManager::update($pStock);
     // update
 }
 /**
  * @name remplirStockQuantite($pId, $pIdNomProduit, $pQuantite, $pQuantiteSolidaire, $pUnite, $pDateCreation, $pDateModification, $pIdLogin, $pEtat)
  * @param int(11)
  * @param int(11)
  * @param decimal(10,2)
  * @param decimal(10,2)
  * @param varchar(20)
  * @param datetime
  * @param datetime
  * @param int(11)
  * @param tinyint(1)
  * @return StockQuantiteVO
  * @desc Retourne une StockQuantiteVO remplie
  */
 private static function remplirStockQuantite($pId, $pIdNomProduit, $pQuantite, $pQuantiteSolidaire, $pUnite, $pDateCreation, $pDateModification, $pIdLogin, $pEtat)
 {
     $lStockQuantite = new StockQuantiteVO();
     $lStockQuantite->setId($pId);
     $lStockQuantite->setIdNomProduit($pIdNomProduit);
     $lStockQuantite->setQuantite($pQuantite);
     $lStockQuantite->setQuantiteSolidaire($pQuantiteSolidaire);
     $lStockQuantite->setUnite($pUnite);
     $lStockQuantite->setDateCreation($pDateCreation);
     $lStockQuantite->setDateModification($pDateModification);
     $lStockQuantite->setIdLogin($pIdLogin);
     $lStockQuantite->setEtat($pEtat);
     return $lStockQuantite;
 }