/**
  * @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 validAjout($pData)
  * @return ReservationMarcheVR
  * @desc Test la validite de l'élément
  */
 public static function validAjout($pData)
 {
     $lVr = new ReservationMarcheVR();
     //Tests inputs
     if (!isset($pData['detailReservation'])) {
         $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 (!isset($pData['idCompte'])) {
         $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 (!is_array($pData['detailReservation'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_115_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_115_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         if (!is_int((int) $pData['idCompte'])) {
             $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['detailReservation'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_207_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_207_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         if (empty($pData['idCompte'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_207_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_207_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         if (isset($pData["detailReservation"][0]["stoIdDetailCommande"])) {
             $lIdLot = $pData["detailReservation"][0]["stoIdDetailCommande"];
             $lDetailMarche = DetailMarcheViewManager::selectByLot($lIdLot);
             // Marché : réservation non terminée
             if (!TestFonction::dateTimeEstPLusGrandeEgale($lDetailMarche[0]->getComDateFinReservation(), StringUtils::dateTimeAujourdhuiDb())) {
                 $lVr->setValid(false);
                 $lVr->getLog()->setValid(false);
                 $lErreur = new VRerreur();
                 $lErreur->setCode(MessagesErreurs::ERR_221_CODE);
                 $lErreur->setMessage(MessagesErreurs::ERR_221_MSG);
                 $lVr->getLog()->addErreur($lErreur);
             } else {
                 $lIdReservation = new IdReservationVO();
                 $lIdReservation->setIdCompte($pData['idCompte']);
                 $lIdReservation->setIdCommande($lDetailMarche[0]->getComId());
                 $lReservationService = new ReservationService();
                 $lOperations = $lReservationService->selectOperationReservation($lIdReservation);
                 $lOperation = $lOperations[0];
                 if ($lReservationService->enCours($lIdReservation)) {
                     $lIdOperation = $lOperation->getId();
                 } else {
                     $lIdOperation = -1;
                 }
                 // Si il y a une réservation existante
                 /*$lTypeResa = array(0,7,15);
                 		if(!is_null($lIdOperation) && in_array($lOperation->getTypePaiement(), $lTypeResa)) {
                 			$lVr->setValid(false);
                 			$lVr->getLog()->setValid(false);
                 			$lErreur = new VRerreur();
                 			$lErreur->setCode(MessagesErreurs::ERR_220_CODE);
                 			$lErreur->setMessage(MessagesErreurs::ERR_220_MSG);
                 			$lVr->getLog()->addErreur($lErreur);
                 		}*/
                 if ($lVr->getValid()) {
                     foreach ($pData['detailReservation'] as $lReservation) {
                         $lDetailMarche = DetailMarcheViewManager::selectByLot($lReservation["stoIdDetailCommande"]);
                         $lIdProduit = $lDetailMarche[0]->getProId();
                         $lReservation["idOperation"] = $lIdOperation;
                         $lVrReservation = DetailReservationMarcheValid::validAjout($lReservation);
                         if (!$lVrReservation->getValid()) {
                             $lVr->setValid(false);
                         }
                         if (isset($lIdProduit)) {
                             $lCommandes = $lVr->getCommandes();
                             $lCommandes[$lIdProduit] = $lVrReservation;
                             $lVr->setCommandes($lCommandes);
                         }
                     }
                 }
             }
         } else {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_117_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_117_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
     }
     return $lVr;
 }
 /**
  * @name updateAbonnement($pCompteAbonnement)
  * @param CompteAbonnementVO
  * @return integer
  * @desc Met à jour un Abonnement
  */
 private function updateAbonnement($pCompteAbonnement)
 {
     // Récupère le produitAbonnement
     $lProduitAbonnement = $this->getProduit($pCompteAbonnement->getIdProduitAbonnement());
     // La liste des Produit identique en abonnement sur des marche en cours
     $lProduitsMarche = DetailMarcheViewManager::selectProduitAbonnementMarcheActifByIdNomProduit($lProduitAbonnement->getIdNomProduit());
     $lListeProduitsMarche = array();
     foreach ($lProduitsMarche as $lProduit) {
         if (isset($lListeProduitsMarche[$lProduit->getProId()])) {
             array_push($lListeProduitsMarche[$lProduit->getProId()]["lots"], $lProduit);
         } else {
             $lListeProduitsMarche[$lProduit->getProId()]["produit"] = $lProduit;
             $lListeProduitsMarche[$lProduit->getProId()]["lots"] = array();
             array_push($lListeProduitsMarche[$lProduit->getProId()]["lots"], $lProduit);
         }
     }
     $lReservationService = new ReservationService();
     $lStockService = new StockService();
     foreach ($lListeProduitsMarche as $lProduitMarche) {
         $lSuspendu = false;
         // Si il n'y a pas de suspension à la date du marché
         if (TestFonction::dateTimeEstPLusGrandeEgale($lProduitMarche["produit"]->getComDateMarcheDebut(), $pCompteAbonnement->getDateDebutSuspension(), 'db') && TestFonction::dateTimeEstPLusGrandeEgale($pCompteAbonnement->getDateFinSuspension(), $lProduitMarche["produit"]->getComDateMarcheFin(), 'db')) {
             $lSuspendu = true;
         }
         $lPoursuivre = true;
         // Si le marché n'est pas encore passé
         if (!TestFonction::dateTimeEstPLusGrandeEgale($lProduitMarche["produit"]->getComDateMarcheDebut(), StringUtils::dateTimeAujourdhuiDb(), 'db')) {
             $lPoursuivre = false;
         }
         if ($lPoursuivre) {
             // Recherche de l'Id du lot dans le marché pour le produit correspondant.
             $lIdLot = 0;
             foreach ($lProduitMarche["lots"] as $lLot) {
                 if (fmod($pCompteAbonnement->getQuantite(), $lLot->getDcomTaille()) == 0) {
                     $lIdLot = $lLot->getDcomId();
                     $lTailleLot = $lLot->getDcomTaille();
                     $lPrixLot = $lLot->getDcomPrix();
                 }
             }
             // Si un lot correspond
             $lPoursuivre = $lIdLot != 0;
             if ($lPoursuivre) {
                 $lReservation = new ReservationVO();
                 $lReservation->getId()->setIdCompte($pCompteAbonnement->getIdCompte());
                 $lReservation->getId()->setIdCommande($lProduitMarche["produit"]->getComId());
                 $lReservationsActuelle = $lReservationService->get($lReservation->getId());
                 $lTestDetailReservation = $lReservationsActuelle->getDetailReservation();
                 if (empty($lTestDetailReservation) && !$lSuspendu && $pCompteAbonnement->getEtat() == 0) {
                     // Ajoute une réservation
                     $lQuantite = $pCompteAbonnement->getQuantite();
                     if ($lProduitMarche["produit"]->getProStockInitial() != -1) {
                         $lStockProduit = $lStockService->selectByIdProduitStockProduitReservation($lProduitMarche["produit"]->getProId());
                         $lStockDispo = $lProduitMarche["produit"]->getProStockInitial() - $lStockProduit[0]->getStoQuantite();
                         if ($lStockDispo > 0) {
                             if ($lStockDispo < $lQuantite) {
                                 $lQuantite = $lStockDispo;
                             }
                         } else {
                             // Plus de stock
                             $lPoursuivre = false;
                         }
                     }
                     if ($lPoursuivre) {
                         if ($lProduitMarche["produit"]->getProMaxProduitCommande() != -1 && $lProduitMarche["produit"]->getProMaxProduitCommande() < $lQuantite) {
                             $lQuantite = $lProduitMarche["produit"]->getProMaxProduitCommande();
                         }
                         $lDetailReservation = new DetailReservationVO();
                         $lDetailReservation->setIdDetailCommande($lIdLot);
                         $lDetailReservation->setQuantite(-1 * $lQuantite);
                         $lDetailReservation->setMontant(-1 * $lQuantite / $lTailleLot * $lPrixLot);
                         $lReservationsActuelle->addDetailReservation($lDetailReservation);
                         $lReservationsActuelle->setId($lReservation->getId());
                         $lReservationService->set($lReservationsActuelle);
                     }
                 } else {
                     // Si il y a une réservation déjà sur ce produit on la met à jour
                     $lMaj = false;
                     $lQuantiteActuelle = 0;
                     foreach ($lReservationsActuelle->getDetailReservation() as $lDetailReservationActuelle) {
                         if ($lDetailReservationActuelle->getIdProduit() == $lProduitMarche["produit"]->getProId()) {
                             $lQuantiteActuelle = $lDetailReservationActuelle->getQuantite();
                             $lMaj = true;
                         } else {
                             $lReservation->addDetailReservation($lDetailReservationActuelle);
                         }
                     }
                     if ($lMaj || !$lMaj && !$lSuspendu && $pCompteAbonnement->getEtat() == 0) {
                         $lQuantite = $pCompteAbonnement->getQuantite();
                         if ($lProduitMarche["produit"]->getProStockInitial() != -1) {
                             $lStockProduit = $lStockService->selectByIdProduitStockProduitReservation($lProduitMarche["produit"]->getProId());
                             $lStockDispo = $lProduitMarche["produit"]->getProStockInitial() - $lStockProduit[0]->getStoQuantite() - $lQuantiteActuelle;
                             if ($lStockDispo > 0) {
                                 if ($lStockDispo < $lQuantite) {
                                     $lQuantite = $lStockDispo;
                                 }
                             } else {
                                 // Plus de stock
                                 $lPoursuivre = false;
                             }
                         }
                         if ($lPoursuivre) {
                             if ($lProduitMarche["produit"]->getProMaxProduitCommande() != -1 && $lProduitMarche["produit"]->getProMaxProduitCommande() < $lQuantite) {
                                 $lQuantite = $lProduitMarche["produit"]->getProMaxProduitCommande();
                             }
                             $lDetailReservation = new DetailReservationVO();
                             $lDetailReservation->setIdDetailCommande($lIdLot);
                             $lDetailReservation->setQuantite(-1 * $lQuantite);
                             $lDetailReservation->setMontant(-1 * $lQuantite / $lTailleLot * $lPrixLot);
                             if ($pCompteAbonnement->getEtat() == 0 && !$lSuspendu) {
                                 // Si l'abonnement est toujours actif et qu'il n'y a pas de suspension
                                 $lReservation->addDetailReservation($lDetailReservation);
                             }
                         }
                         $lReservationService->set($lReservation);
                     }
                 }
             }
         }
     }
     return CompteAbonnementManager::update($pCompteAbonnement);
 }
 /**
  * @name update($pReservation)
  * @param ReservationVO
  * @return integer
  * @desc Met à jour une réservation
  */
 private function update($pReservation)
 {
     $lTestDetailReservation = $pReservation->getDetailReservation();
     if (!empty($lTestDetailReservation)) {
         // Si il y a encore des produits dans la réservation
         $lReservationsActuelle = $this->get($pReservation->getId());
         $lOpeReservations = $this->selectOperationReservation($pReservation->getId());
         $lIdOperation = $lOpeReservations[0]->getId();
         /*$lOperation = $lOperations[0];
         		$lIdOperation = $lOperation->getId();*/
         $lOperationService = new OperationService();
         $lOperation = $lOperationService->getDetail($lIdOperation);
         $lTotal = 0;
         $lStockService = new StockService();
         $lDetailOperationService = new DetailOperationService();
         $lListeIdDetailCommande = array();
         foreach ($pReservation->getDetailReservation() as $lProduit) {
             array_push($lListeIdDetailCommande, $lProduit->getIdDetailCommande());
         }
         $lDetailMarche = DetailMarcheViewManager::selectByIdDetailCommande($lListeIdDetailCommande);
         foreach ($lReservationsActuelle->getDetailReservation() as $lReservationActuelle) {
             $lTestUpdate = false;
             foreach ($pReservation->getDetailReservation() as $lReservationNouvelle) {
                 if ($lReservationActuelle->getIdDetailCommande() == $lReservationNouvelle->getIdDetailCommande()) {
                     $lTotal += $lReservationNouvelle->getMontant();
                     // Maj du stock
                     $lStock = new StockVO();
                     $lStock->setId($lReservationActuelle->getId()->getIdStock());
                     $lStock->setQuantite($lReservationNouvelle->getQuantite());
                     $lStock->setType(0);
                     $lStock->setIdCompte($pReservation->getId()->getIdCompte());
                     $lStock->setIdDetailCommande($lReservationActuelle->getIdDetailCommande());
                     $lStock->setIdOperation($lIdOperation);
                     $lStock->setIdNomProduit($lDetailMarche[$lReservationActuelle->getIdDetailCommande()]->getProIdNomProduit());
                     $lStock->setUnite($lDetailMarche[$lReservationActuelle->getIdDetailCommande()]->getProUniteMesure());
                     $lStockService->set($lStock);
                     // Maj du détail Opération
                     $lDetailOperation = new DetailOperationVO();
                     $lDetailOperation->setId($lReservationActuelle->getId()->getIdDetailOperation());
                     $lDetailOperation->setIdOperation($lIdOperation);
                     $lDetailOperation->setIdCompte($pReservation->getId()->getIdCompte());
                     $lDetailOperation->setMontant($lReservationNouvelle->getMontant());
                     $lDetailOperation->setLibelle("Marché N°" . $pReservation->getId()->getIdCommande());
                     $lDetailOperation->setTypePaiement(0);
                     $lDetailOperation->setIdDetailCommande($lReservationActuelle->getIdDetailCommande());
                     $lDetailOperation->setIdNomProduit($lDetailMarche[$lReservationActuelle->getIdDetailCommande()]->getProIdNomProduit());
                     $lDetailOperationService->set($lDetailOperation);
                     $lTestUpdate = true;
                 }
             }
             if (!$lTestUpdate) {
                 // Suppression du stock et du detail operation
                 $lStockService->delete($lReservationActuelle->getId()->getIdStock());
                 $lDetailOperationService->delete($lReservationActuelle->getId()->getIdDetailOperation());
             }
         }
         foreach ($pReservation->getDetailReservation() as $lReservationNouvelle) {
             $lTestInsert = true;
             foreach ($lReservationsActuelle->getDetailReservation() as $lReservationActuelle) {
                 if ($lReservationActuelle->getIdDetailCommande() == $lReservationNouvelle->getIdDetailCommande()) {
                     $lTestInsert = false;
                 }
             }
             if ($lTestInsert) {
                 $lTotal += $lReservationNouvelle->getMontant();
                 // Ajout du stock
                 $lStock = new StockVO();
                 $lStock->setQuantite($lReservationNouvelle->getQuantite());
                 $lStock->setType(0);
                 $lStock->setIdCompte($pReservation->getId()->getIdCompte());
                 $lStock->setIdDetailCommande($lReservationNouvelle->getIdDetailCommande());
                 $lStock->setIdOperation($lIdOperation);
                 $lStock->setIdNomProduit($lDetailMarche[$lReservationNouvelle->getIdDetailCommande()]->getProIdNomProduit());
                 $lStock->setUnite($lDetailMarche[$lReservationNouvelle->getIdDetailCommande()]->getProUniteMesure());
                 $lStockService->set($lStock);
                 // Ajout du détail Opération
                 $lDetailOperation = new DetailOperationVO();
                 $lDetailOperation->setIdOperation($lIdOperation);
                 $lDetailOperation->setIdCompte($pReservation->getId()->getIdCompte());
                 $lDetailOperation->setMontant($lReservationNouvelle->getMontant());
                 $lDetailOperation->setLibelle("Marché N°" . $pReservation->getId()->getIdCommande());
                 $lDetailOperation->setTypePaiement(0);
                 $lDetailOperation->setIdDetailCommande($lReservationNouvelle->getIdDetailCommande());
                 $lDetailOperation->setIdNomProduit($lDetailMarche[$lReservationNouvelle->getIdDetailCommande()]->getProIdNomProduit());
                 $lDetailOperationService->set($lDetailOperation);
             }
         }
         // Maj de l'opération
         $lOperation->setMontant($lTotal);
         $lOperationService->set($lOperation);
     } else {
         // La réservation est vide on la supprime
         $this->delete($pReservation->getId());
     }
 }
 /**
  * @name recherche( $pTypeRecherche, $pTypeCritere, $pCritereRecherche, $pTypeTri, $pCritereTri )
  * @param string nom de la table
  * @param string Le type de critère de recherche
  * @param array(string) champs à récupérer dans la table
  * @param array(array(string, object)) Dictionnaire(champ, valeur)) contenant les champs à filtrer ainsi que la valeur du filtre
  * @param array(array(string, string)) Dictionnaire(champ, sens) contenant les tris à appliquer
  * @return array(DetailMarcheViewVO)
  * @desc Récupères les lignes de la table selon le critère de recherche puis trie et renvoie la liste de résultat sous forme d'une collection de DetailMarcheViewVO
  */
 public static function recherche($pTypeRecherche, $pTypeCritere, $pCritereRecherche, $pTypeTri, $pCritereTri)
 {
     // Initialisation du Logger
     $lLogger =& Log::singleton('file', CHEMIN_FICHIER_LOGS);
     $lLogger->setMask(Log::MAX(LOG_LEVEL));
     // Préparation de la requète
     $lChamps = array(CommandeManager::CHAMP_COMMANDE_ID . "," . CommandeManager::CHAMP_COMMANDE_NUMERO . "," . CommandeManager::CHAMP_COMMANDE_NOM . "," . CommandeManager::CHAMP_COMMANDE_DESCRIPTION . "," . CommandeManager::CHAMP_COMMANDE_DATE_MARCHE_DEBUT . "," . CommandeManager::CHAMP_COMMANDE_DATE_MARCHE_FIN . "," . CommandeManager::CHAMP_COMMANDE_DATE_DEBUT_RESERVATION . "," . CommandeManager::CHAMP_COMMANDE_DATE_FIN_RESERVATION . "," . CommandeManager::CHAMP_COMMANDE_ARCHIVE . "," . ProduitManager::CHAMP_PRODUIT_ID . "," . ProduitManager::CHAMP_PRODUIT_ID_COMMANDE . "," . ProduitManager::CHAMP_PRODUIT_ID_NOM_PRODUIT . "," . ProduitManager::CHAMP_PRODUIT_UNITE_MESURE . "," . ProduitManager::CHAMP_PRODUIT_MAX_PRODUIT_COMMANDE . "," . ProduitManager::CHAMP_PRODUIT_ID_COMPTE_FERME . "," . ProduitManager::CHAMP_PRODUIT_STOCK_RESERVATION . "," . ProduitManager::CHAMP_PRODUIT_STOCK_INITIAL . "," . ProduitManager::CHAMP_PRODUIT_TYPE . "," . NomProduitManager::CHAMP_NOMPRODUIT_ID . "," . NomProduitManager::CHAMP_NOMPRODUIT_NOM . "," . NomProduitManager::CHAMP_NOMPRODUIT_DESCRIPTION . "," . NomProduitManager::CHAMP_NOMPRODUIT_ID_CATEGORIE . "," . DetailCommandeManager::CHAMP_DETAILCOMMANDE_ID . "," . DetailCommandeManager::CHAMP_DETAILCOMMANDE_ID_PRODUIT . "," . DetailCommandeManager::CHAMP_DETAILCOMMANDE_TAILLE . "," . DetailCommandeManager::CHAMP_DETAILCOMMANDE_PRIX . "," . CategorieProduitManager::CHAMP_CATEGORIEPRODUIT_NOM . "," . FermeManager::CHAMP_FERME_ID . "," . FermeManager::CHAMP_FERME_NOM);
     /*
     		$lFiltres = array(array( 'champ' => StringUtils::securiser($pTypeRecherche), 'valeur' => StringUtils::securiser($pCritereRecherche) ));
     
     		$lTypeFiltre = array($pTypeCritere);
     		// Protection du critère de tri
     		if($pCritereTri != 'ASC' && $pCritereTri != 'DESC') {
     			$pCritereTri = 'ASC';
     		}
     
     		// Protection du type de tri
     		if($pTypeTri == '') {
     			$pTypeTri = CommandeManager::CHAMP_COMMANDE_ID;
     		}
     
     		$lTris = array( array('champ' => StringUtils::securiser($pTypeTri), 'sens'=> StringUtils::securiser($pCritereTri)) );
     
     		// Préparation de la requète de recherche
     		$lRequete = DbUtils::prepareRequeteRecherche(DetailMarcheViewManager::VUE_DETAILMARCHE, $lChamps, $lFiltres, $lTypeFiltre, $lTris);
     
     		$lLogger->log("Execution de la requete : " . $lRequete,PEAR_LOG_DEBUG); // Maj des logs
     		$lSql = Dbutils::executerRequete($lRequete);
     */
     // Préparation de la requète de recherche
     $lRequete = DbUtils::prepareRequeteRecherche(DetailMarcheViewManager::VUE_DETAILMARCHE, $lChamps, $pTypeRecherche, $pTypeCritere, $pCritereRecherche, $pTypeTri, $pCritereTri);
     $lListeDetailMarche = array();
     if ($lRequete !== false) {
         $lLogger->log("Execution de la requete : " . $lRequete, PEAR_LOG_DEBUG);
         // Maj des logs
         $lSql = Dbutils::executerRequete($lRequete);
         if (mysql_num_rows($lSql) > 0) {
             while ($lLigne = mysql_fetch_assoc($lSql)) {
                 array_push($lListeDetailMarche, DetailMarcheViewManager::remplir($lLigne[CommandeManager::CHAMP_COMMANDE_ID], $lLigne[CommandeManager::CHAMP_COMMANDE_NUMERO], $lLigne[CommandeManager::CHAMP_COMMANDE_NOM], $lLigne[CommandeManager::CHAMP_COMMANDE_DESCRIPTION], $lLigne[CommandeManager::CHAMP_COMMANDE_DATE_MARCHE_DEBUT], $lLigne[CommandeManager::CHAMP_COMMANDE_DATE_MARCHE_FIN], $lLigne[CommandeManager::CHAMP_COMMANDE_DATE_DEBUT_RESERVATION], $lLigne[CommandeManager::CHAMP_COMMANDE_DATE_FIN_RESERVATION], $lLigne[CommandeManager::CHAMP_COMMANDE_ARCHIVE], $lLigne[ProduitManager::CHAMP_PRODUIT_ID], $lLigne[ProduitManager::CHAMP_PRODUIT_ID_COMMANDE], $lLigne[ProduitManager::CHAMP_PRODUIT_ID_NOM_PRODUIT], $lLigne[ProduitManager::CHAMP_PRODUIT_UNITE_MESURE], $lLigne[ProduitManager::CHAMP_PRODUIT_MAX_PRODUIT_COMMANDE], $lLigne[ProduitManager::CHAMP_PRODUIT_ID_COMPTE_FERME], $lLigne[ProduitManager::CHAMP_PRODUIT_STOCK_RESERVATION], $lLigne[ProduitManager::CHAMP_PRODUIT_STOCK_INITIAL], $lLigne[ProduitManager::CHAMP_PRODUIT_TYPE], $lLigne[NomProduitManager::CHAMP_NOMPRODUIT_ID], $lLigne[NomProduitManager::CHAMP_NOMPRODUIT_NOM], $lLigne[NomProduitManager::CHAMP_NOMPRODUIT_DESCRIPTION], $lLigne[NomProduitManager::CHAMP_NOMPRODUIT_ID_CATEGORIE], $lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_ID], $lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_ID_PRODUIT], $lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_TAILLE], $lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_PRIX], $lLigne[CategorieProduitManager::CHAMP_CATEGORIEPRODUIT_NOM], $lLigne[FermeManager::CHAMP_FERME_ID], $lLigne[FermeManager::CHAMP_FERME_NOM]));
             }
         } else {
             $lListeDetailMarche[0] = new DetailMarcheViewVO();
         }
         return $lListeDetailMarche;
     }
     return $lListeDetailMarche;
 }
 /**
  * @name validAjout($pData)
  * @return CommandeReservationVR
  * @desc Test la validite de l'élément
  */
 public static function validAjout($pData)
 {
     $lVr = new CommandeReservationVR();
     //Tests inputs
     if (!isset($pData['detailReservation'])) {
         $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 (!isset($pData['id_compte'])) {
         $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 (!is_array($pData['detailReservation'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_115_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_115_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         if (!is_int((int) $pData['id_compte'])) {
             $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['detailReservation'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_207_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_207_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         if (empty($pData['id_compte'])) {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_207_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_207_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
         if (isset($pData["detailReservation"][0]["stoIdDetailCommande"])) {
             $lIdLot = $pData["detailReservation"][0]["stoIdDetailCommande"];
             $lDetailMarche = DetailMarcheViewManager::selectByLot($lIdLot);
             // Marché : réservation non terminée
             $lIdReservation = new IdReservationVO();
             $lIdReservation->setIdCompte($pData['id_compte']);
             $lIdReservation->setIdCommande($lDetailMarche[0]->getComId());
             $lReservationService = new ReservationService();
             $lOperations = $lReservationService->selectOperationReservation($lIdReservation);
             $lOperation = $lOperations[0];
             if ($lReservationService->enCours($lIdReservation)) {
                 $lIdOperation = $lOperation->getId();
             } else {
                 $lIdOperation = -1;
             }
             if ($lVr->getValid()) {
                 foreach ($pData['detailReservation'] as $lReservation) {
                     $lDetailMarche = DetailMarcheViewManager::selectByLot($lReservation["stoIdDetailCommande"]);
                     $lIdProduit = $lDetailMarche[0]->getProId();
                     $lReservation["idOperation"] = $lIdOperation;
                     $lVrReservation = CommandeDetailReservationValid::validAjout($lReservation);
                     if (!$lVrReservation->getValid()) {
                         $lVr->setValid(false);
                     }
                     if (isset($lIdProduit)) {
                         $lCommandes = $lVr->getCommandes();
                         $lCommandes[$lIdProduit] = $lVrReservation;
                         $lVr->setCommandes($lCommandes);
                     }
                 }
             }
         } else {
             $lVr->setValid(false);
             $lVr->getLog()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_117_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_117_MSG);
             $lVr->getLog()->addErreur($lErreur);
         }
     }
     return $lVr;
 }
 /**
  * @name selectProduit($pId)
  * @param integer
  * @return ProduitMarcheVO
  * @desc Retourne un Produit
  */
 public function selectProduit($pId)
 {
     $lDetailMarche = DetailMarcheViewManager::selectByIdProduit($pId);
     $lProduit = new ProduitMarcheVO();
     // Le Produit
     $lProduit->setId($lDetailMarche[0]->getProId());
     $lProduit->setIdMarche($lDetailMarche[0]->getComId());
     $lProduit->setIdCompteFerme($lDetailMarche[0]->getProIdCompteFerme());
     $lProduit->setIdNom($lDetailMarche[0]->getNproId());
     $lProduit->setNom($lDetailMarche[0]->getNproNom());
     $lProduit->setDescription($lDetailMarche[0]->getNproDescription());
     $lProduit->setIdCategorie($lDetailMarche[0]->getNproIdCategorie());
     $lProduit->setCproNom($lDetailMarche[0]->getCproNom());
     $lProduit->setUnite($lDetailMarche[0]->getProUniteMesure());
     $lProduit->setQteMaxCommande($lDetailMarche[0]->getProMaxProduitCommande());
     $lProduit->setStockReservation($lDetailMarche[0]->getProStockReservation());
     $lProduit->setStockInitial($lDetailMarche[0]->getProStockInitial());
     $lProduit->setType($lDetailMarche[0]->getProType());
     $lProduit->setFerId($lDetailMarche[0]->getFerId());
     $lProduit->setFerNom($lDetailMarche[0]->getFerNom());
     $lProduit->setFerNom($lDetailMarche[0]->getFerNom());
     foreach ($lDetailMarche as $lDetail) {
         // Le Lot
         $lLot = new DetailMarcheVO();
         $lLot->setId($lDetail->getDcomId());
         $lLot->setTaille($lDetail->getDcomTaille());
         $lLot->setPrix($lDetail->getDcomPrix());
         $lProduit->addLots($lLot);
     }
     return $lProduit;
 }
 /**
  * @name controleModifierReservation($pParam)
  * @return ListeReservationCommandeVR
  * @desc Vérifie si il est possible de modifier la réservation
  */
 public function controleModifierReservation($pParam)
 {
     $pParam['idCompte'] = $_SESSION[ID_COMPTE];
     $lVr = ReservationMarcheValid::validAjout($pParam);
     if ($lVr->getValid()) {
         $lIdLot = $pParam["detailReservation"][0]["stoIdDetailCommande"];
         $lDetailMarche = DetailMarcheViewManager::selectByLot($lIdLot);
         $lResponse = new ReservationMarcheResponse();
         $lMarcheService = new MarcheService();
         $lResponse->setMarche($lMarcheService->get($lDetailMarche[0]->getComId()));
         $lResponse->setAdherent(AdherentViewManager::select($_SESSION[DROIT_ID]));
         return $lResponse;
     }
     return $lVr;
 }