/**
  * @name modifierReservation($pParam)
  * @return ListeReservationCommandeVR
  * @desc Met à jour une réservation
  */
 public function modifierReservation($pParam)
 {
     $lVr = CommandeReservationValid::validUpdate($pParam);
     if ($lVr->getValid()) {
         $lIdLot = $pParam["detailReservation"][0]["stoIdDetailCommande"];
         $lDetailMarche = DetailMarcheViewManager::selectByLot($lIdLot);
         $lReservationService = new ReservationService();
         $lReservation = new ReservationVO();
         $lReservation->getId()->setIdCompte($pParam["id_compte"]);
         $lReservation->getId()->setIdCommande($lDetailMarche[0]->getComId());
         foreach ($pParam["detailReservation"] as $lDetail) {
             $lDetailCommande = DetailCommandeManager::select($lDetail["stoIdDetailCommande"]);
             $lPrix = $lDetail["stoQuantite"] / $lDetailCommande->getTaille() * $lDetailCommande->getPrix();
             $lDetailReservation = new DetailReservationVO();
             $lDetailReservation->setIdDetailCommande($lDetail["stoIdDetailCommande"]);
             $lDetailReservation->setQuantite($lDetail["stoQuantite"]);
             $lDetailReservation->setMontant($lPrix);
             /*$lDetailProduit = DetailMarcheViewManager::selectByLot($lDetail["stoIdDetailCommande"]);
             		$lDetailReservation->setIdNomProduit($lDetailProduit[0]->getNproId());*/
             $lReservation->addDetailReservation($lDetailReservation);
         }
         $lReservationService = new ReservationService();
         $lIdOperation = $lReservationService->set($lReservation);
     }
     return $lVr;
 }
 /**
  * @name ajoutReservation($pIdCompte,$pIdMarche)
  * @param integer
  * @param integer
  * @return bool
  * @desc Positionne les réservations pour les abonnements du compte sur le maché
  */
 public function ajoutReservation($pIdCompte, $pIdMarche)
 {
     $lProduits = $this->getProduitsAbonne($pIdCompte);
     $lMarcheService = new MarcheService();
     $lMarche = $lMarcheService->get($pIdMarche);
     $lReservationAbonnement = array("idCompte" => $pIdCompte, "produits" => array());
     foreach ($lMarche->getProduits() as $lNouveauProduit) {
         // Ajout des réservations pour abonnement
         if ($lNouveauProduit->getType() == 2) {
             $lIdNomProduit = $lNouveauProduit->getIdNom();
             foreach ($lProduits as $lProduit) {
                 if ($lIdNomProduit == $lProduit->getNproId()) {
                     // Pas de suspension de l'abonnement et stock dispo pour positionner cette réservation (ou pas de limite de stock)
                     if (!(TestFonction::dateTimeEstPLusGrandeEgale($lMarche->getDateMarcheDebut(), $lProduit->getCptAboDateDebutSuspension(), 'db') && TestFonction::dateTimeEstPLusGrandeEgale($lProduit->getCptAboDateFinSuspension(), $lMarche->getDateMarcheDebut(), 'db')) && !(TestFonction::dateTimeEstPLusGrandeEgale($lMarche->getDateMarcheFin(), $lProduit->getCptAboDateDebutSuspension(), 'db') && TestFonction::dateTimeEstPLusGrandeEgale($lProduit->getCptAboDateFinSuspension(), $lMarche->getDateMarcheFin(), 'db')) && ($lNouveauProduit->getStockReservation() >= $lProduit->getCptAboQuantite() || $lNouveauProduit->getStockInitial() == -1)) {
                         foreach ($lNouveauProduit->getLots() as $lLot) {
                             $lDcomId = $lLot->getId();
                         }
                         $lReservationAbonnement["produits"][$lIdNomProduit] = array("id" => $lIdNomProduit, "idLot" => $lDcomId, "quantite" => $lProduit->getCptAboQuantite());
                     }
                 }
             }
         }
     }
     // Positionnement des réservations
     $lReservationService = new ReservationService();
     $lReservationVO = new ReservationVO();
     $lReservationVO->getId()->setIdCompte($pIdCompte);
     $lReservationVO->getId()->setIdCommande($pIdMarche);
     $lEnregistrer = false;
     foreach ($lReservationAbonnement["produits"] as $lDetail) {
         $lDetailCommande = DetailCommandeManager::select($lDetail["idLot"]);
         $lPrix = $lDetail["quantite"] / $lDetailCommande->getTaille() * $lDetailCommande->getPrix();
         $lDetailReservation = new DetailReservationVO();
         $lDetailReservation->setIdDetailCommande($lDetail["idLot"]);
         $lDetailReservation->setQuantite($lDetail["quantite"] * -1);
         $lDetailReservation->setMontant($lPrix * -1);
         $lReservationVO->addDetailReservation($lDetailReservation);
         $lEnregistrer = true;
     }
     if ($lEnregistrer) {
         $lReservationService->set($lReservationVO);
     }
 }
 /**
  * @name updateStockProduit($pStock)
  * @param StockVO
  * @return integer
  * @desc Met à jour une opération
  */
 public function updateStockProduit($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());
     // 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() != -1 && $lProduit->getStockInitial() == -1) {
                 // Maj Stock Reservation dans le produit
                 $lProduit->setStockReservation($lProduit->getStockReservation() + $pStock->getQuantite());
                 $lProduit->setStockInitial($pStock->getQuantite());
                 ProduitManager::update($lProduit);
             } else {
                 if ($pStock->getQuantite() == -1 && $lProduit->getStockInitial() != -1) {
                     //echo 2;
                     // Maj Stock Reservation dans le produit
                     $lProduit->setStockReservation($lProduit->getStockReservation() - $lProduit->getStockInitial());
                     $lProduit->setStockInitial(-1);
                     ProduitManager::update($lProduit);
                 } else {
                     if ($pStock->getQuantite() != -1 && $lProduit->getStockInitial() != -1) {
                         //echo 3;
                         // Maj Stock Reservation dans le produit
                         $lProduit->setStockReservation($lProduit->getStockReservation() - $lProduit->getStockInitial() + $pStock->getQuantite());
                         $lProduit->setStockInitial($pStock->getQuantite());
                         ProduitManager::update($lProduit);
                     }
                 }
             }
             break;
     }
     $this->insertHistorique($pStock);
     // Ajout historique
     return StockManager::update($pStock);
     // update
 }
 /**
  * @name validUpdate($pData)
  * @returnCommandeDetailReservationVR
  * @desc Test la validite de l'élément
  */
 public static function validUpdate($pData)
 {
     $lVr = new CommandeDetailReservationVR();
     //Tests inputs
     if (!isset($pData['stoQuantite'])) {
         $lVr->setValid(false);
         $lVr->getStoQuantite()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getStoQuantite()->addErreur($lErreur);
     }
     if (!isset($pData['stoIdDetailCommande'])) {
         $lVr->setValid(false);
         $lVr->getStoIdDetailCommande()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getStoIdDetailCommande()->addErreur($lErreur);
     }
     if (!isset($pData['idOperation'])) {
         $lVr->setValid(false);
         $lVr->getLog()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getLog()->addErreur($lErreur);
     }
     if ($lVr->getValid()) {
         //Tests Techniques
         if (!TestFonction::checkLength($pData['stoQuantite'], 0, 12) || $pData['stoQuantite'] > 999999999.99) {
             $lVr->setValid(false);
             $lVr->getStoQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getStoQuantite()->addErreur($lErreur);
         }
         if (!is_float((double) $pData['stoQuantite'])) {
             $lVr->setValid(false);
             $lVr->getStoQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_108_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_108_MSG);
             $lVr->getStoQuantite()->addErreur($lErreur);
         }
         if (!TestFonction::checkLength($pData['stoIdDetailCommande'], 0, 11)) {
             $lVr->setValid(false);
             $lVr->getStoIdDetailCommande()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getStoIdDetailCommande()->addErreur($lErreur);
         }
         if (!is_float((double) $pData['stoIdDetailCommande'])) {
             $lVr->setValid(false);
             $lVr->getStoIdDetailCommande()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_108_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_108_MSG);
             $lVr->getStoIdDetailCommande()->addErreur($lErreur);
         }
         if (!is_int((int) $pData['idOperation'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_104_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_104_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         //Tests Fonctionnels
         if (empty($pData['stoQuantite'])) {
             $lVr->setValid(false);
             $lVr->getStoQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getStoQuantite()->addErreur($lErreur);
         }
         if (empty($pData['stoIdDetailCommande'])) {
             $lVr->setValid(false);
             $lVr->getStoIdDetailCommande()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getStoIdDetailCommande()->addErreur($lErreur);
         }
         if (empty($pData['idOperation'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         if ($pData['stoQuantite'] >= 0) {
             $lVr->setValid(false);
             $lVr->getStoQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getStoQuantite()->addErreur($lErreur);
         }
         $lDcom = DetailCommandeManager::select($pData['stoIdDetailCommande']);
         if ($lDcom->getId() == null) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_216_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_216_MSG);
             $lVr->getLog()->addErreur($lErreur);
         } else {
             $lPdt = ProduitManager::select($lDcom->getIdProduit());
             if ($lPdt->getId() == null) {
                 $lVr->setValid(false);
                 $lVr->getLog()->setValid(false);
                 $lErreur = new VRerreur();
                 $lErreur->setCode(MessagesErreurs::ERR_216_CODE);
                 $lErreur->setMessage(MessagesErreurs::ERR_216_MSG);
                 $lVr->getLog()->addErreur($lErreur);
             } else {
                 $lQte = $pData['stoQuantite'] * -1;
                 if ($lPdt->getMaxProduitCommande() != -1 && $lQte > $lPdt->getMaxProduitCommande()) {
                     $lVr->setValid(false);
                     $lVr->getStoIdProduit()->setValid(false);
                     $lErreur = new VRerreur();
                     $lErreur->setCode(MessagesErreurs::ERR_217_CODE);
                     $lErreur->setMessage(MessagesErreurs::ERR_217_MSG);
                     $lVr->getStoIdProduit()->addErreur($lErreur);
                 }
                 $StockService = new StockService();
                 $lStocks = $StockService->getDetailReservation($pData['idOperation']);
                 $lStock = $lStocks[0];
                 $lQuantiteReservation = $lStock->getQuantite();
                 if ($lPdt->getStockInitial() != -1 && $lQte > $lPdt->getStockReservation() - $lQuantiteReservation) {
                     $lVr->setValid(false);
                     $lVr->getStoIdProduit()->setValid(false);
                     $lErreur = new VRerreur();
                     $lErreur->setCode(MessagesErreurs::ERR_218_CODE);
                     $lErreur->setMessage(MessagesErreurs::ERR_218_MSG);
                     $lVr->getStoIdProduit()->addErreur($lErreur);
                 }
             }
         }
     }
     return $lVr;
 }
 /**
  * @name validAjout($pData)
  * @return ProduitBonDeCommandeVR
  * @desc Test la validite de l'élément
  */
 public static function validAjout($pData)
 {
     $lVr = new ProduitBonDeCommandeVR();
     //Tests inputs
     if (!isset($pData['id'])) {
         $lVr->setValid(false);
         $lVr->getId()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getId()->addErreur($lErreur);
     }
     if (!isset($pData['dcomId'])) {
         $lVr->setValid(false);
         $lVr->getDcomId()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getDcomId()->addErreur($lErreur);
     }
     if (!isset($pData['quantite'])) {
         $lVr->setValid(false);
         $lVr->getQuantite()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getQuantite()->addErreur($lErreur);
     }
     if (!isset($pData['prix'])) {
         $lVr->setValid(false);
         $lVr->getPrix()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getPrix()->addErreur($lErreur);
     }
     if ($lVr->getValid()) {
         //Tests Techniques
         if (!TestFonction::checkLength($pData['id'], 0, 11)) {
             $lVr->setValid(false);
             $lVr->getId()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getId()->addErreur($lErreur);
         }
         if (!is_int((int) $pData['id'])) {
             $lVr->setValid(false);
             $lVr->getId()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_104_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_104_MSG);
             $lVr->getId()->addErreur($lErreur);
         }
         if (!TestFonction::checkLength($pData['dcomId'], 0, 11)) {
             $lVr->setValid(false);
             $lVr->getDcomId()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getDcomId()->addErreur($lErreur);
         }
         if (!is_int((int) $pData['dcomId'])) {
             $lVr->setValid(false);
             $lVr->getDcomId()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_104_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_104_MSG);
             $lVr->getDcomId()->addErreur($lErreur);
         }
         if ($pData['quantite'] != '' && (!TestFonction::checkLength($pData['quantite'], 0, 12) || $pData['quantite'] > 999999999.99)) {
             $lVr->setValid(false);
             $lVr->getQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getQuantite()->addErreur($lErreur);
         }
         if ($pData['quantite'] != '' && !is_float((double) $pData['quantite'])) {
             $lVr->setValid(false);
             $lVr->getQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_109_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_109_MSG);
             $lVr->getQuantite()->addErreur($lErreur);
         }
         if ($pData['prix'] != '' && (!TestFonction::checkLength($pData['prix'], 0, 12) || $pData['prix'] > 999999999.99)) {
             $lVr->setValid(false);
             $lVr->getPrix()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getPrix()->addErreur($lErreur);
         }
         if ($pData['prix'] != '' && !is_float((double) $pData['prix'])) {
             $lVr->setValid(false);
             $lVr->getPrix()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_109_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_109_MSG);
             $lVr->getPrix()->addErreur($lErreur);
         }
         //Tests Fonctionnels
         if (empty($pData['id'])) {
             $lVr->setValid(false);
             $lVr->getId()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getId()->addErreur($lErreur);
         }
         if (empty($pData['dcomId'])) {
             $lVr->setValid(false);
             $lVr->getDcomId()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getDcomId()->addErreur($lErreur);
         }
         if ($pData['prix'] != '' && empty($pData['quantite'])) {
             $lVr->setValid(false);
             $lVr->getQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getQuantite()->addErreur($lErreur);
         }
         if ($pData['quantite'] != '' && empty($pData['prix'])) {
             $lVr->setValid(false);
             $lVr->getPrix()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getPrix()->addErreur($lErreur);
         }
         if ($pData['quantite'] != '' && $pData['quantite'] < 0) {
             $lVr->setValid(false);
             $lVr->getQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_215_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_215_MSG);
             $lVr->getQuantite()->addErreur($lErreur);
         }
         if ($pData['prix'] != '' && $pData['prix'] < 0) {
             $lVr->setValid(false);
             $lVr->getPrix()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_215_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_215_MSG);
             $lVr->getPrix()->addErreur($lErreur);
         }
         $lDcom = DetailCommandeManager::selectByIdProduit($pData["id"]);
         if ($lDcom[0]->getIdProduit() != $pData["id"]) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_216_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_216_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         $lDcom = DetailCommandeManager::select($pData["dcomId"]);
         if ($lDcom->getId() != $pData["dcomId"]) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_216_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_216_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
     }
     return $lVr;
 }
 /**
  * @name updateProduit($pProduit)
  * @param ProduitVO
  * @desc Met à jour le produit du marché
  */
 public function updateProduit($pProduit, $pLotRemplacement = array())
 {
     $lProduitActuel = $this->selectProduit($pProduit->getId());
     //Les lots
     $lLotModif = array();
     $lLotSupp = array();
     foreach ($lProduitActuel->getLots() as $lLotActuel) {
         $lMajLot = true;
         foreach ($pProduit->getLots() as $lLotNv) {
             // Maj Lot
             if ($lLotActuel->getId() == $lLotNv->getId()) {
                 $lDcomId = $lLotActuel->getId();
                 $lMajLot = false;
                 $lDetailCommande = new DetailCommandeVO();
                 $lDetailCommande->setId($lLotActuel->getId());
                 $lDetailCommande->setIdProduit($lProduitActuel->getId());
                 $lDetailCommande->setTaille($lLotNv->getTaille());
                 $lDetailCommande->setPrix($lLotNv->getPrix());
                 DetailCommandeManager::update($lDetailCommande);
                 // Maj des réservations associées
                 DetailOperationManager::majTotalReservation($lLotActuel->getId());
                 array_push($lLotModif, $lDetailCommande);
             }
         }
         // Supprimer Lot
         if ($lMajLot) {
             array_push($lLotSupp, $lLotActuel->getId());
         }
     }
     // Nouveau Lot
     $lLotAdd = array();
     foreach ($pProduit->getLots() as $lLotNv) {
         $lAjout = true;
         foreach ($lProduitActuel->getLots() as $lLotActuel) {
             if ($lLotActuel->getId() == $lLotNv->getId()) {
                 $lAjout = false;
             }
         }
         if ($lAjout) {
             $lDetailCommande = new DetailCommandeVO();
             $lDetailCommande->setIdProduit($lProduitActuel->getId());
             $lDetailCommande->setTaille($lLotNv->getTaille());
             $lDetailCommande->setPrix($lLotNv->getPrix());
             $lDcomId = DetailCommandeManager::insert($lDetailCommande);
             $lLotAdd[$lLotNv->getId()] = $lDcomId;
             // Si supression d'un lot et positionnement de ce nouveau lot permet de récupérer l'ID
         }
     }
     $lStockService = new StockService();
     $lResaActuel = GestionCommandeReservationProducteurViewManager::getStockReservationProducteur($lProduitActuel->getIdCompteFerme(), $lProduitActuel->getId());
     $lStockActuel = $lStockService->get($lResaActuel[0]->getStoId());
     // Maj du stock
     $lStockActuel->setQuantite($pProduit->getQteRestante());
     $lStockActuel->setIdDetailCommande($lDcomId);
     $lStockService->updateStockProduit($lStockActuel);
     $lProduit = ProduitManager::select($lProduitActuel->getId());
     $lProduit->setUniteMesure($pProduit->getUnite());
     if ($pProduit->getQteMaxCommande() == "" || $pProduit->getQteMaxCommande() == -1) {
         $lProduit->setMaxProduitCommande(-1);
     } else {
         $lProduit->setMaxProduitCommande($pProduit->getQteMaxCommande());
     }
     $lProduit->setType($pProduit->getType());
     ProduitManager::update($lProduit);
     // Modif des réservations
     $lReservationService = new ReservationService();
     $lIdMarche = $lProduitActuel->getIdMarche();
     foreach ($lLotSupp as $lIdLot) {
         // Chaque lot supprimé => La réservation est positionnée sur un autre lot
         if (isset($pLotRemplacement[$lIdLot])) {
             $lIdLotRemplacement = $pLotRemplacement[$lIdLot];
             if ($lIdLotRemplacement < 0) {
                 $lIdLotRemplacement = $lLotAdd[$lIdLotRemplacement];
             }
             $lListeDetailReservation = $lReservationService->getReservationSurLot($lIdLot);
             if (!is_null($lListeDetailReservation[0]->getDopeIdCompte())) {
                 // Si il y a des réservations
                 foreach ($lListeDetailReservation as $lDetailReservation) {
                     // Chaque réservation de lot modifié
                     $lIdReservationVO = new IdReservationVO();
                     $lIdReservationVO->setIdCompte($lDetailReservation->getDopeIdCompte());
                     $lIdReservationVO->setIdCommande($lIdMarche);
                     $lReservationVO = $lReservationService->get($lIdReservationVO);
                     $lNvDetailReservation = array();
                     foreach ($lReservationVO->getDetailReservation() as $lDetailReservationActuelle) {
                         if ($lDetailReservationActuelle->getIdDetailCommande() == $lIdLot) {
                             // Maj de la reservation pour ce produit
                             $lDetailCommande = DetailCommandeManager::select($lIdLotRemplacement);
                             $lPrix = $lDetailReservation->getStoQuantite() / $lDetailCommande->getTaille() * $lDetailCommande->getPrix();
                             $lDetailReservationVO = new DetailReservationVO();
                             $lDetailReservationVO->setIdDetailCommande($lIdLotRemplacement);
                             $lDetailReservationVO->setQuantite($lDetailReservation->getStoQuantite());
                             $lDetailReservationVO->setMontant($lPrix);
                             array_push($lNvDetailReservation, $lDetailReservationVO);
                         } else {
                             // Ajout des autres produits
                             array_push($lNvDetailReservation, $lDetailReservationActuelle);
                         }
                     }
                     $lReservationVO->setDetailReservation($lNvDetailReservation);
                     $lReservationService->set($lReservationVO);
                     // Maj de la reservation
                 }
             }
         }
         $lDeleteLot = DetailCommandeManager::select($lIdLot);
         $lDeleteLot->setEtat(1);
         DetailCommandeManager::update($lDeleteLot);
     }
 }
 /**
  * @name validUpdate($pData)
  * @return DetailReservationMarcheVR
  * @desc Test la validite de l'élément
  */
 public static function validUpdate($pData)
 {
     $lVr = new DetailReservationMarcheVR();
     //Tests inputs
     if (!isset($pData['stoQuantite'])) {
         $lVr->setValid(false);
         $lVr->getStoQuantite()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getStoQuantite()->addErreur($lErreur);
     }
     if (!isset($pData['stoIdDetailCommande'])) {
         $lVr->setValid(false);
         $lVr->getStoIdDetailCommande()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getStoIdDetailCommande()->addErreur($lErreur);
     }
     if (!isset($pData['idOperation'])) {
         $lVr->setValid(false);
         $lVr->getLog()->setValid(false);
         $lErreur = new VRerreur();
         $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
         $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
         $lVr->getLog()->addErreur($lErreur);
     }
     if ($lVr->getValid()) {
         //Tests Techniques
         if (!TestFonction::checkLength($pData['stoQuantite'], 0, 12) || $pData['stoQuantite'] > 999999999.99) {
             $lVr->setValid(false);
             $lVr->getStoQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getStoQuantite()->addErreur($lErreur);
         }
         if (!is_float((double) $pData['stoQuantite'])) {
             $lVr->setValid(false);
             $lVr->getStoQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_108_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_108_MSG);
             $lVr->getStoQuantite()->addErreur($lErreur);
         }
         if (!TestFonction::checkLength($pData['stoIdDetailCommande'], 0, 11)) {
             $lVr->setValid(false);
             $lVr->getStoIdDetailCommande()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getStoIdDetailCommande()->addErreur($lErreur);
         }
         if (!is_float((double) $pData['stoIdDetailCommande'])) {
             $lVr->setValid(false);
             $lVr->getStoIdDetailCommande()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_108_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_108_MSG);
             $lVr->getStoIdDetailCommande()->addErreur($lErreur);
         }
         if (!is_int((int) $pData['idOperation'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_104_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_104_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         //Tests Fonctionnels
         if (empty($pData['stoQuantite'])) {
             $lVr->setValid(false);
             $lVr->getStoQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getStoQuantite()->addErreur($lErreur);
         }
         if (empty($pData['stoIdDetailCommande'])) {
             $lVr->setValid(false);
             $lVr->getStoIdDetailCommande()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getStoIdDetailCommande()->addErreur($lErreur);
         }
         if (empty($pData['idOperation'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         if ($pData['stoQuantite'] >= 0) {
             $lVr->setValid(false);
             $lVr->getStoQuantite()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_201_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_201_MSG);
             $lVr->getStoQuantite()->addErreur($lErreur);
         }
         $lDcom = DetailCommandeManager::select($pData['stoIdDetailCommande']);
         if ($lDcom->getId() == null) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_216_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_216_MSG);
             $lVr->getLog()->addErreur($lErreur);
         } else {
             $lPdt = ProduitManager::select($lDcom->getIdProduit());
             if ($lPdt->getId() == null) {
                 $lVr->setValid(false);
                 $lVr->getLog()->setValid(false);
                 $lErreur = new VRerreur();
                 $lErreur->setCode(MessagesErreurs::ERR_216_CODE);
                 $lErreur->setMessage(MessagesErreurs::ERR_216_MSG);
                 $lVr->getLog()->addErreur($lErreur);
             } else {
                 $lQte = $pData['stoQuantite'] * -1;
                 if ($lPdt->getMaxProduitCommande() != -1 && $lQte > $lPdt->getMaxProduitCommande()) {
                     $lVr->setValid(false);
                     $lVr->getStoQuantite()->setValid(false);
                     $lErreur = new VRerreur();
                     $lErreur->setCode(MessagesErreurs::ERR_217_CODE);
                     $lErreur->setMessage(MessagesErreurs::ERR_217_MSG);
                     $lVr->getStoQuantite()->addErreur($lErreur);
                 }
                 /*$StockService = new StockService();
                 		$lStocks = $StockService->getDetailReservation($pData['idOperation']);
                 		
                 		$lContinu = true;
                 		$lQuantiteReservation = 0;
                 		$i = 0;
                 		while($lContinu && isset($lStocks[$i])) {
                 			if(	$lStocks[$i]->getIdDetailCommande() == $pData['stoIdDetailCommande']) {
                 				$lQuantiteReservation = $lStocks[$i]->getQuantite();
                 				$lContinu = false;
                 			}
                 			$i++;
                 		}
                 		*/
                 $lQteMax = $lPdt->getStockReservation();
                 if ($pData['idOperation'] != -1) {
                     $StockService = new StockService();
                     $lStocks = $StockService->getDetailReservation($pData['idOperation']);
                     $lContinu = true;
                     $lQuantiteReservation = 0;
                     $i = 0;
                     while ($lContinu && isset($lStocks[$i])) {
                         if ($lStocks[$i]->getIdDetailCommande() == $pData['stoIdDetailCommande']) {
                             $lQuantiteReservation = $lStocks[$i]->getQuantite();
                             $lContinu = false;
                         }
                         $i++;
                     }
                     $lQteMax -= $lQuantiteReservation;
                     // Qté réservation est négative -- = +
                 }
                 if ($lPdt->getStockInitial() != -1 && $lQte > $lQteMax) {
                     $lVr->setValid(false);
                     $lVr->getStoQuantite()->setValid(false);
                     $lErreur = new VRerreur();
                     $lErreur->setCode(MessagesErreurs::ERR_218_CODE);
                     $lErreur->setMessage(MessagesErreurs::ERR_218_MSG);
                     $lVr->getStoQuantite()->addErreur($lErreur);
                 }
                 // La quantité doit être un multiple du lot
                 if (fmod($lQte, $lDcom->getTaille()) != 0) {
                     $lVr->setValid(false);
                     $lVr->getStoQuantite()->setValid(false);
                     $lErreur = new VRerreur();
                     $lErreur->setCode(MessagesErreurs::ERR_245_CODE);
                     $lErreur->setMessage(MessagesErreurs::ERR_245_MSG);
                     $lVr->getStoQuantite()->addErreur($lErreur);
                 }
             }
         }
     }
     return $lVr;
 }
 /**
  * @name modifierReservation($pParam)
  * @return ListeReservationCommandeVR
  * @desc Met à jour une réservation
  */
 public function modifierReservation($pParam)
 {
     $pParam['idCompte'] = $_SESSION[ID_COMPTE];
     $lVr = ReservationMarcheValid::validUpdate($pParam);
     if ($lVr->getValid()) {
         $lReservationService = new ReservationService();
         $lIdLot = $pParam["detailReservation"][0]["stoIdDetailCommande"];
         $lDetailMarche = DetailMarcheViewManager::selectByLot($lIdLot);
         $lReservation = new ReservationVO();
         $lReservation->getId()->setIdCompte($_SESSION[ID_COMPTE]);
         $lReservation->getId()->setIdCommande($lDetailMarche[0]->getComId());
         $lReservationAbonnement = array();
         $lReservationsActuelle = $lReservationService->get($lReservation->getId());
         $lProduitsAbonnementMarche = ProduitManager::selectbyIdMarcheProduitAbonnement($lDetailMarche[0]->getComId());
         foreach ($lReservationsActuelle->getDetailReservation() as $lReservationActuelle) {
             foreach ($lProduitsAbonnementMarche as $lProduitAboMarche) {
                 if ($lReservationActuelle->getIdProduit() == $lProduitAboMarche->getId()) {
                     $lReservationAbonnement[$lProduitAboMarche->getId()] = $lReservationActuelle;
                 }
             }
         }
         foreach ($pParam["detailReservation"] as $lDetail) {
             $lDetailCommande = DetailCommandeManager::select($lDetail["stoIdDetailCommande"]);
             $lPrix = $lDetail["stoQuantite"] / $lDetailCommande->getTaille() * $lDetailCommande->getPrix();
             $lDetailReservation = new DetailReservationVO();
             $lDetailReservation->setIdDetailCommande($lDetail["stoIdDetailCommande"]);
             $lDetailReservation->setQuantite($lDetail["stoQuantite"]);
             $lDetailReservation->setMontant($lPrix);
             $lAjout = true;
             foreach ($lProduitsAbonnementMarche as $lProduitAboMarche) {
                 if ($lDetailCommande->getIdProduit() == $lProduitAboMarche->getId()) {
                     if (!isset($lReservationAbonnement[$lProduitAboMarche->getId()])) {
                         $lReservationAbonnement[$lProduitAboMarche->getId()] = $lDetailReservation;
                     }
                     $lAjout = false;
                 }
             }
             if ($lAjout) {
                 $lReservation->addDetailReservation($lDetailReservation);
             }
         }
         foreach ($lReservationAbonnement as $lReservationAbo) {
             $lReservation->addDetailReservation($lReservationAbo);
         }
         $lIdOperation = $lReservationService->set($lReservation);
     }
     return $lVr;
 }