/**
  * @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 ProduitBonDeLivraisonVR
  * @desc Test la validite de l'élément
  */
 public static function validAjout($pData)
 {
     $lVr = new ProduitBonDeLivraisonVR();
     //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['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 (!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 ($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);
         }
         if ($pData['quantiteSolidaire'] != '' && (!TestFonction::checkLength($pData['quantiteSolidaire'], 0, 12) || $pData['quantiteSolidaire'] > 999999999.99)) {
             $lVr->setValid(false);
             $lVr->getQuantiteSolidaire()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_101_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_101_MSG);
             $lVr->getQuantiteSolidaire()->addErreur($lErreur);
         }
         if ($pData['quantiteSolidaire'] != '' && !is_float((double) $pData['quantiteSolidaire'])) {
             $lVr->setValid(false);
             $lVr->getQuantiteSolidaire()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_109_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_109_MSG);
             $lVr->getQuantiteSolidaire()->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 ($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['prix'] != '' && 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);
         }
         if ($pData['quantiteSolidaire'] != '' && $pData['quantiteSolidaire'] < 0) {
             $lVr->setValid(false);
             $lVr->getQuantiteSolidaire()->setValid(false);
             $lErreur = new VRerreur();
             $lErreur->setCode(MessagesErreurs::ERR_215_CODE);
             $lErreur->setMessage(MessagesErreurs::ERR_215_MSG);
             $lVr->getQuantiteSolidaire()->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);
         }
     }
     return $lVr;
 }
 /**
  * @name update($pAchat)
  * @param AchatVO
  * @return integer
  * @desc Met à jour un achat
  */
 private function update($pAchat)
 {
     $lOperationService = new OperationService();
     // Rechargement
     $lIdRechargement = $pAchat->getRechargement()->getId();
     $lCompteRechargement = $pAchat->getRechargement()->getIdCompte();
     $lMajRechargement = false;
     if (!empty($lIdRechargement) && !is_null($lIdRechargement)) {
         $lMontantRechargement = $pAchat->getRechargement()->getMontant();
         if (!empty($lMontantRechargement) && !is_null($lMontantRechargement)) {
             // Maj du rechargement
             $lMajRechargement = true;
             $lIdRechargement = $lOperationService->set($pAchat->getRechargement());
         } else {
             if ($lMontantRechargement == 0) {
                 // Suppression du rechargement
                 $lOperationService->delete($lIdRechargement);
                 $lIdRechargement = NULL;
             }
         }
     } else {
         if (!empty($lCompteRechargement) && !is_null($lCompteRechargement)) {
             // Ajout du rechargement
             $pAchat->getRechargement()->setLibelle('Rechargement');
             $lIdRechargement = $lOperationService->set($pAchat->getRechargement());
         }
     }
     //$lIdOperationAchat = 0;
     //$lIdOperationAchatSolidaire = 0;
     $lIdCompte = 0;
     $lIdMarche = 0;
     $lLibelleOperation = '';
     $lLibelleOperationSolidaire = '';
     $lAchatActuel = NULL;
     $lIdOperationAchatActuel = 0;
     $lIdOperationAchatSolidaireActuel = 0;
     // Achat
     $lIdOperationAchat = $pAchat->getOperationAchat()->getId();
     $lTestCompteAchat = $pAchat->getOperationAchat()->getIdCompte();
     $lMajAchat = false;
     if (!empty($lIdOperationAchat) && !is_null($lIdOperationAchat)) {
         $lAchatActuel = $this->select($lIdOperationAchat);
         $lIdOperationAchatActuel = $lIdOperationAchat;
         $lMontantAchat = $pAchat->getOperationAchat()->getMontant();
         $ltestChampComplementaire = $pAchat->getOperationAchat()->getChampComplementaire();
         $lIdOperationZeybu = $ltestChampComplementaire[8]->getValeur();
         $lLibelleOperation = $pAchat->getOperationAchat()->getLibelle();
         $lIdCompte = $pAchat->getOperationAchat()->getIdCompte();
         if (isset($ltestChampComplementaire[1])) {
             $lIdMarche = $ltestChampComplementaire[1]->getValeur();
         }
         if (!empty($lMontantAchat) && !is_null($lMontantAchat)) {
             // Maj de l'achat
             $lMajAchat = true;
             $lIdOperationAchat = $lOperationService->set($pAchat->getOperationAchat());
             $lOperationZeybu = $lOperationService->getDetail($lIdOperationZeybu);
             $lOperationZeybu->setMontant($pAchat->getOperationAchat()->getMontant() * -1);
             $lOperationService->set($lOperationZeybu);
         } else {
             if ($lMontantAchat == 0) {
                 // Suppression de l'achat
                 $lOperationService->delete($lIdOperationAchat);
                 $lOperationService->delete($lIdOperationZeybu);
                 $lIdOperationAchat = NULL;
             }
         }
     } else {
         if (!empty($lTestCompteAchat) && !is_null($lTestCompteAchat)) {
             // Ajout Achat
             $lIdCompte = $pAchat->getOperationAchat()->getIdCompte();
             $ltestChampComplementaire = $pAchat->getOperationAchat()->getChampComplementaire();
             if (isset($ltestChampComplementaire[1])) {
                 $lIdMarche = $ltestChampComplementaire[1]->getValeur();
                 $lMarcheService = new MarcheService();
                 $lMarche = $lMarcheService->getInfoMarche($lIdMarche);
                 $lLibelleOperation = "Marché N°" . $lMarche->getNumero();
             } else {
                 $lLibelleOperation = "Achat du " . StringUtils::dateAujourdhuiFr();
             }
             $pAchat->getOperationAchat()->setLibelle($lLibelleOperation);
             $lIdOperationAchat = $lOperationService->set($pAchat->getOperationAchat());
             // Operation d'achat
             $lOperationZeybu = new OperationDetailVO();
             $lOperationZeybu->setIdCompte(-1);
             $lOperationZeybu->setMontant($pAchat->getOperationAchat()->getMontant() * -1);
             $lOperationZeybu->setLibelle($lLibelleOperation);
             $lOperationZeybu->setTypePaiement($pAchat->getOperationAchat()->getTypePaiement());
             $lOperationZeybuChampComplementaire = $pAchat->getOperationAchat()->getChampComplementaire();
             $lOperationZeybuChampComplementaire[8] = new OperationChampComplementaireVO(null, 8, $lIdOperationAchat);
             $lOperationZeybu->setChampComplementaire($lOperationZeybuChampComplementaire);
             $lIdOperationZeybu = $lOperationService->set($lOperationZeybu);
             // Operation Zeybu
         }
     }
     // Achat Solidaire
     $lIdOperationAchatSolidaire = $pAchat->getOperationAchatSolidaire()->getId();
     $lTestCompteAchatSolidaire = $pAchat->getOperationAchatSolidaire()->getIdCompte();
     $lMajAchatSolidaire = false;
     if (!empty($lIdOperationAchatSolidaire) && !is_null($lIdOperationAchatSolidaire)) {
         if (is_null($lAchatActuel)) {
             $lAchatActuel = $this->select($lIdOperationAchatSolidaire);
         }
         $lIdOperationAchatSolidaireActuel = $lIdOperationAchatSolidaire;
         $lMontantAchatSolidaire = $pAchat->getOperationAchatSolidaire()->getMontant();
         $ltestChampComplementaire = $pAchat->getOperationAchatSolidaire()->getChampComplementaire();
         $lIdOperationZeybuSolidaire = $ltestChampComplementaire[8]->getValeur();
         $lLibelleOperationSolidaire = $pAchat->getOperationAchatSolidaire()->getLibelle();
         $lIdCompte = $pAchat->getOperationAchatSolidaire()->getIdCompte();
         if (isset($ltestChampComplementaire[1])) {
             $lIdMarche = $ltestChampComplementaire[1]->getValeur();
         }
         if (!empty($lMontantAchatSolidaire) && !is_null($lMontantAchatSolidaire)) {
             // Maj de l'achat
             $lMajAchatSolidaire = true;
             $lIdOperationAchatSolidaire = $lOperationService->set($pAchat->getOperationAchatSolidaire());
             $lOperationZeybuSolidaire = $lOperationService->getDetail($lIdOperationZeybuSolidaire);
             $lOperationZeybuSolidaire->setMontant($pAchat->getOperationAchatSolidaire()->getMontant() * -1);
             $lOperationService->set($lOperationZeybuSolidaire);
         } else {
             if ($lMontantAchatSolidaire == 0) {
                 // Suppression de l'achat
                 $lOperationService->delete($lIdOperationAchatSolidaire);
                 $lOperationService->delete($lIdOperationZeybuSolidaire);
                 $lIdOperationAchatSolidaire = NULL;
             }
         }
     } else {
         if (!empty($lTestCompteAchatSolidaire) && !is_null($lTestCompteAchatSolidaire)) {
             $lIdCompte = $pAchat->getOperationAchatSolidaire()->getIdCompte();
             $ltestChampComplementaire = $pAchat->getOperationAchatSolidaire()->getChampComplementaire();
             if (isset($ltestChampComplementaire[1])) {
                 if (!isset($lMarche)) {
                     // Pour éviter de lancer 2 fois la requête
                     $lIdMarche = $ltestChampComplementaire[1]->getValeur();
                     $lMarcheService = new MarcheService();
                     $lMarche = $lMarcheService->getInfoMarche($lIdMarche);
                 }
                 $lLibelleOperationSolidaire = "Marché Solidaire N°" . $lMarche->getNumero();
             } else {
                 $lLibelleOperationSolidaire = "Achat Solidaire du " . StringUtils::dateAujourdhuiFr();
             }
             $pAchat->getOperationAchatSolidaire()->setLibelle($lLibelleOperationSolidaire);
             $lIdOperationAchatSolidaire = $lOperationService->set($pAchat->getOperationAchatSolidaire());
             // Operation d'achat Solidaire
             $lOperationZeybuSolidaire = new OperationDetailVO();
             $lOperationZeybuSolidaire->setIdCompte(-1);
             $lOperationZeybuSolidaire->setMontant($pAchat->getOperationAchatSolidaire()->getMontant() * -1);
             $lOperationZeybuSolidaire->setLibelle($lLibelleOperationSolidaire);
             $lOperationZeybuSolidaire->setTypePaiement($pAchat->getOperationAchatSolidaire()->getTypePaiement());
             $lOperationZeybuSolidaireChampComplementaire = $pAchat->getOperationAchatSolidaire()->getChampComplementaire();
             $lOperationZeybuSolidaireChampComplementaire[8] = new OperationChampComplementaireVO(null, 8, $lIdOperationAchatSolidaire);
             $lOperationZeybuSolidaire->setChampComplementaire($lOperationZeybuSolidaireChampComplementaire);
             $lIdOperationZeybuSolidaire = $lOperationService->set($lOperationZeybuSolidaire);
             // Operation Zeybu solidaire
         }
     }
     // Liaison Rechargement
     if (!is_null($lIdRechargement)) {
         $lMaj = false;
         $lRechargementChampComplementaire = $pAchat->getRechargement()->getChampComplementaire();
         if (!is_null($lIdOperationAchat)) {
             $lMaj = true;
             $lRechargementChampComplementaire[12] = new OperationChampComplementaireVO(null, 12, $lIdOperationAchat);
         } else {
             if (is_null($lIdOperationAchat)) {
                 unset($lRechargementChampComplementaire[12]);
             }
         }
         if (!is_null($lIdOperationAchatSolidaire)) {
             $lMaj = true;
             $lRechargementChampComplementaire[13] = new OperationChampComplementaireVO(null, 13, $lIdOperationAchatSolidaire);
         } else {
             if (is_null($lIdOperationAchatSolidaire)) {
                 unset($lRechargementChampComplementaire[13]);
             }
         }
         if ($lMaj) {
             $pAchat->getRechargement()->setChampComplementaire($lRechargementChampComplementaire);
             $lOperationService->set($pAchat->getRechargement());
         }
     }
     // Liaison achat
     if (!is_null($lIdOperationAchat)) {
         $lChampComplementaire = $pAchat->getOperationAchat()->getChampComplementaire();
         $lChampComplementaire[8] = new OperationChampComplementaireVO(null, 8, $lIdOperationZeybu);
         if (!is_null($lIdRechargement)) {
             $lChampComplementaire[14] = new OperationChampComplementaireVO(null, 14, $lIdRechargement);
         } else {
             if (is_null($lIdRechargement)) {
                 unset($lChampComplementaire[14]);
             }
         }
         if (!is_null($lIdOperationAchatSolidaire)) {
             $lChampComplementaire[13] = new OperationChampComplementaireVO(null, 13, $lIdOperationAchatSolidaire);
         } else {
             if (is_null($lIdOperationAchatSolidaire)) {
                 unset($lChampComplementaire[13]);
             }
         }
         $pAchat->getOperationAchat()->setChampComplementaire($lChampComplementaire);
         $lOperationService->set($pAchat->getOperationAchat());
         // Operation d'achat avec lien operation zeybu
     }
     // Liaison Achat Solidaire
     if (!is_null($lIdOperationAchatSolidaire)) {
         $lChampComplementaireSolidaire = $pAchat->getOperationAchatSolidaire()->getChampComplementaire();
         $lChampComplementaireSolidaire[8] = new OperationChampComplementaireVO(null, 8, $lIdOperationZeybuSolidaire);
         if (!is_null($lIdRechargement)) {
             $lChampComplementaireSolidaire[14] = new OperationChampComplementaireVO(null, 14, $lIdRechargement);
         } else {
             if (is_null($lIdRechargement)) {
                 unset($lChampComplementaireSolidaire[14]);
             }
         }
         if (!is_null($lIdOperationAchat)) {
             $lChampComplementaireSolidaire[12] = new OperationChampComplementaireVO(null, 12, $lIdOperationAchat);
         } else {
             if (is_null($lIdOperationAchat)) {
                 unset($lChampComplementaireSolidaire[12]);
             }
         }
         $pAchat->getOperationAchatSolidaire()->setChampComplementaire($lChampComplementaireSolidaire);
         $lOperationService->set($pAchat->getOperationAchatSolidaire());
         // Operation d'achat solidaire avec lien operation zeybu
     }
     // Ajout des produits
     $lIdModeleLot = array();
     $lIdDetailCommande = array();
     foreach ($pAchat->getProduits() as $lProduit) {
         $lTestModeleLot = $lProduit->getIdModeleLot();
         $lTestDetailCommande = $lProduit->getIdDetailCommande();
         if (!empty($lTestModeleLot) && !is_null($lTestModeleLot)) {
             array_push($lIdModeleLot, $lTestModeleLot);
         } else {
             if (!empty($lTestDetailCommande) && !is_null($lTestDetailCommande)) {
                 array_push($lIdDetailCommande, $lTestDetailCommande);
             }
         }
         $lTestModeleLotSolidaire = $lProduit->getIdModeleLotSolidaire();
         $lTestDetailCommandeSolidaire = $lProduit->getIdDetailCommandeSolidaire();
         if (!empty($lTestModeleLotSolidaire) && !is_null($lTestModeleLotSolidaire)) {
             array_push($lIdModeleLot, $lTestModeleLotSolidaire);
         } else {
             if (!empty($lTestDetailCommandeSolidaire) && !is_null($lTestDetailCommandeSolidaire)) {
                 array_push($lIdDetailCommande, $lTestDetailCommandeSolidaire);
             }
         }
     }
     if (!empty($lIdModeleLot)) {
         $lListeModeleLot = ModeleLotManager::selectByArray($lIdModeleLot);
     }
     if (!empty($lIdDetailCommande)) {
         $lListeDetailCommande = DetailCommandeManager::selectByArrayClassByDcomId($lIdDetailCommande);
     }
     // Suppression de l'ensemble des lignes de produit qui seront à nouveau insérées
     DetailAchatManager::delete($lIdOperationAchatActuel, $lIdOperationAchatSolidaireActuel);
     $lDetailOperationService = new DetailOperationService();
     $lStockService = new StockService();
     foreach ($lAchatActuel->getProduits() as $lProduitInital) {
         $lMaj = false;
         foreach ($pAchat->getProduits() as $lProduitMaj) {
             if ($lProduitInital->getIdStock() == $lProduitMaj->getIdStock() && $lProduitInital->getIdDetailOperation() == $lProduitMaj->getIdDetailOperation() && $lProduitInital->getIdStockSolidaire() == $lProduitMaj->getIdStockSolidaire() && $lProduitInital->getIdDetailOperationSolidaire() == $lProduitMaj->getIdDetailOperationSolidaire()) {
                 // Modification
                 $lMaj = true;
                 // Stock
                 $lIdStock = 0;
                 $lIdDetailOperation = 0;
                 if ($lProduitInital->getIdStock() == 0 && $lProduitMaj->getQuantite() < 0) {
                     // Ajout
                     $lUnite = '';
                     $lTestModeleLot = $lProduitMaj->getIdModeleLot();
                     $lTestDetailCommande = $lProduitMaj->getIdDetailCommande();
                     if (!empty($lTestModeleLot) && !is_null($lTestModeleLot)) {
                         $lUnite = $lListeModeleLot[$lTestModeleLot]->getUnite();
                     } else {
                         if (!empty($lTestDetailCommande) && !is_null($lTestDetailCommande)) {
                             $lUnite = $lListeDetailCommande[$lTestDetailCommande]->getUnite();
                         }
                     }
                     $lIdStock = $lStockService->set(new StockVO(null, null, $lProduitMaj->getQuantite(), 1, $lIdCompte, $lProduitMaj->getIdDetailCommande(), $lProduitMaj->getIdModeleLot(), $lIdOperationAchat, $lProduitMaj->getIdNomProduit(), $lUnite));
                     // Prix
                     $lIdDetailOperation = $lDetailOperationService->set(new DetailOperationVO(null, $lIdOperationAchat, $lIdCompte, $lProduitMaj->getMontant(), $lLibelleOperation, null, 7, $lProduitMaj->getIdDetailCommande(), $lProduitMaj->getIdModeleLot(), $lProduitMaj->getIdNomProduit(), null));
                 } else {
                     if ($lProduitInital->getIdStock() != 0 && $lProduitMaj->getQuantite() < 0) {
                         // Modification
                         $lStockInitial = $lStockService->get($lProduitInital->getIdStock());
                         $lIdStock = $lStockInitial->getId();
                         $lStockInitial->setQuantite($lProduitMaj->getQuantite());
                         $lStockService->set($lStockInitial);
                         // Prix
                         $lDetailOperationInitial = $lDetailOperationService->get($lProduitInital->getIdDetailOperation());
                         $lIdDetailOperation = $lDetailOperationInitial->getId();
                         $lDetailOperationInitial->setMontant($lProduitMaj->getMontant());
                         $lDetailOperationService->set($lDetailOperationInitial);
                     } else {
                         // Suppression
                         $lStockService->delete($lProduitInital->getIdStock());
                         $lDetailOperationService->delete($lProduitInital->getIdDetailOperation());
                     }
                 }
                 // Stock Solidaire
                 $lIdStockSolidaire = 0;
                 $lIdDetailOperationSolidaire = 0;
                 if ($lProduitInital->getIdStockSolidaire() == 0 && $lProduitMaj->getQuantiteSolidaire() < 0) {
                     $lUniteSolidaire = '';
                     $lTestModeleLotSolidaire = $lProduitMaj->getIdModeleLotSolidaire();
                     $lTestDetailCommandeSolidaire = $lProduitMaj->getIdDetailCommandeSolidaire();
                     if (!empty($lTestModeleLotSolidaire) && !is_null($lTestModeleLotSolidaire)) {
                         $lUniteSolidaire = $lListeModeleLot[$lTestModeleLotSolidaire]->getUnite();
                     } else {
                         if (!empty($lTestDetailCommandeSolidaire) && !is_null($lTestDetailCommandeSolidaire)) {
                             $lUniteSolidaire = $lListeDetailCommande[$lTestDetailCommandeSolidaire]->getUnite();
                         }
                     }
                     $lIdStockSolidaire = $lStockService->set(new StockVO(null, null, $lProduitMaj->getQuantiteSolidaire(), 2, $lIdCompte, $lProduitMaj->getIdDetailCommandeSolidaire(), $lProduitMaj->getIdModeleLotSolidaire(), $lIdOperationAchatSolidaire, $lProduitMaj->getIdNomProduit(), $lUniteSolidaire));
                     // Prix
                     $lIdDetailOperationSolidaire = $lDetailOperationService->set(new DetailOperationVO(null, $lIdOperationAchatSolidaire, $lIdCompte, $lProduitMaj->getMontantSolidaire(), $lLibelleOperationSolidaire, null, 8, $lProduitMaj->getIdDetailCommandeSolidaire(), $lProduitMaj->getIdModeleLotSolidaire(), $lProduitMaj->getIdNomProduit(), null));
                 } else {
                     if ($lProduitInital->getIdStockSolidaire() != 0 && $lProduitMaj->getQuantiteSolidaire() < 0) {
                         // Modification
                         $lStockInitialSolidaire = $lStockService->get($lProduitInital->getIdStockSolidaire());
                         $lIdStockSolidaire = $lStockInitialSolidaire->getId();
                         $lStockInitialSolidaire->setQuantite($lProduitMaj->getQuantiteSolidaire());
                         $lStockService->set($lStockInitialSolidaire);
                         // Prix
                         $lDetailOperationInitialSolidaire = $lDetailOperationService->get($lProduitInital->getIdDetailOperationSolidaire());
                         $lIdDetailOperationSolidaire = $lDetailOperationInitialSolidaire->getId();
                         $lDetailOperationInitialSolidaire->setMontant($lProduitMaj->getMontantSolidaire());
                         $lDetailOperationService->set($lDetailOperationInitialSolidaire);
                     } else {
                         // Suppression
                         $lStockService->delete($lProduitInital->getIdStockSolidaire());
                         $lDetailOperationService->delete($lProduitInital->getIdDetailOperationSolidaire());
                     }
                 }
                 if ($lProduitMaj->getQuantiteSolidaire() < 0 || $lProduitMaj->getQuantite() < 0) {
                     // Pas d'ajout de ligne vide
                     DetailAchatManager::insert(new DetailAchatVO($lIdOperationAchat, $lIdOperationAchatSolidaire, $lProduitMaj->getIdNomProduit(), $lIdStock, $lIdDetailOperation, $lIdStockSolidaire, $lIdDetailOperationSolidaire));
                 }
             }
         }
         if (!$lMaj) {
             // Suppression
             $lStockService->delete($lProduitInital->getIdStock());
             $lDetailOperationService->delete($lProduitInital->getIdDetailOperation());
             $lStockService->delete($lProduitInital->getIdStockSolidaire());
             $lDetailOperationService->delete($lProduitInital->getIdDetailOperationSolidaire());
         }
     }
     foreach ($pAchat->getProduits() as $lProduitMaj) {
         $lMaj = false;
         foreach ($lAchatActuel->getProduits() as $lProduitInital) {
             if ($lProduitInital->getIdStock() == $lProduitMaj->getIdStock() && $lProduitInital->getIdDetailOperation() == $lProduitMaj->getIdDetailOperation() && $lProduitInital->getIdStockSolidaire() == $lProduitMaj->getIdStockSolidaire() && $lProduitInital->getIdDetailOperationSolidaire() == $lProduitMaj->getIdDetailOperationSolidaire()) {
                 // Modification
                 $lMaj = true;
             }
         }
         if (!$lMaj) {
             // Ajout
             // Stock
             $lIdStock = 0;
             $lIdDetailOperation = 0;
             if ($lProduitMaj->getQuantite() < 0) {
                 $lUnite = '';
                 $lTestModeleLot = $lProduitMaj->getIdModeleLot();
                 $lTestDetailCommande = $lProduitMaj->getIdDetailCommande();
                 if (!empty($lTestModeleLot) && !is_null($lTestModeleLot)) {
                     $lUnite = $lListeModeleLot[$lTestModeleLot]->getUnite();
                 } else {
                     if (!empty($lTestDetailCommande) && !is_null($lTestDetailCommande)) {
                         $lUnite = $lListeDetailCommande[$lTestDetailCommande]->getUnite();
                     }
                 }
                 $lIdStock = $lStockService->set(new StockVO(null, null, $lProduitMaj->getQuantite(), 1, $lIdCompte, $lProduitMaj->getIdDetailCommande(), $lProduitMaj->getIdModeleLot(), $lIdOperationAchat, $lProduitMaj->getIdNomProduit(), $lUnite));
                 // Prix
                 $lIdDetailOperation = $lDetailOperationService->set(new DetailOperationVO(null, $lIdOperationAchat, $lIdCompte, $lProduitMaj->getMontant(), $lLibelleOperation, null, 7, $lProduitMaj->getIdDetailCommande(), $lProduitMaj->getIdModeleLot(), $lProduitMaj->getIdNomProduit(), null));
             }
             // Stock Solidaire
             $lIdStockSolidaire = 0;
             $lIdDetailOperationSolidaire = 0;
             if ($lProduitMaj->getQuantiteSolidaire() < 0) {
                 $lUniteSolidaire = '';
                 $lTestModeleLotSolidaire = $lProduitMaj->getIdModeleLotSolidaire();
                 $lTestDetailCommandeSolidaire = $lProduitMaj->getIdDetailCommandeSolidaire();
                 if (!empty($lTestModeleLotSolidaire) && !is_null($lTestModeleLotSolidaire)) {
                     $lUniteSolidaire = $lListeModeleLot[$lTestModeleLotSolidaire]->getUnite();
                 } else {
                     if (!empty($lTestDetailCommandeSolidaire) && !is_null($lTestDetailCommandeSolidaire)) {
                         $lUniteSolidaire = $lListeDetailCommande[$lTestDetailCommandeSolidaire]->getUnite();
                     }
                 }
                 $lIdStockSolidaire = $lStockService->set(new StockVO(null, null, $lProduitMaj->getQuantiteSolidaire(), 2, $lIdCompte, $lProduitMaj->getIdDetailCommandeSolidaire(), $lProduitMaj->getIdModeleLotSolidaire(), $lIdOperationAchatSolidaire, $lProduitMaj->getIdNomProduit(), $lUniteSolidaire));
                 // Prix
                 $lIdDetailOperationSolidaire = $lDetailOperationService->set(new DetailOperationVO(null, $lIdOperationAchatSolidaire, $lIdCompte, $lProduitMaj->getMontantSolidaire(), $lLibelleOperationSolidaire, null, 8, $lProduitMaj->getIdDetailCommandeSolidaire(), $lProduitMaj->getIdModeleLotSolidaire(), $lProduitMaj->getIdNomProduit(), null));
             }
             if ($lProduitMaj->getQuantiteSolidaire() < 0 || $lProduitMaj->getQuantite() < 0) {
                 // Pas d'ajout de ligne vide
                 DetailAchatManager::insert(new DetailAchatVO($lIdOperationAchat, $lIdOperationAchatSolidaire, $lProduitMaj->getIdNomProduit(), $lIdStock, $lIdDetailOperation, $lIdStockSolidaire, $lIdDetailOperationSolidaire));
             }
         }
     }
     // Retourne l'Id de l'achat ou à defaut celui de l'achat solidaire
     $lIdRetour = $lIdOperationAchat;
     if ($lIdRetour == 0) {
         if ($lIdOperationAchatSolidaire != 0) {
             $lIdRetour = $lIdOperationAchatSolidaire;
         } else {
             $lIdRetour = $lIdRechargement;
         }
     }
     return $lIdRetour;
 }
 /**
  * @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
 }
	<table cellspacing="0" style="width: 100%; text-align: left; font-size: 10pt;">
		<thead>
			<tr>
				<th style="width: 55px; text-align: center; border: solid 1px black;" >Compte</th>
				<th style="width: 125px; text-align: center; border-top: solid 1px black; border-bottom: solid 1px black; border-right: solid 1px black;">Nom</th>
				<th style="width: 125px; text-align: center; border-top: solid 1px black; border-bottom: solid 1px black; border-right: solid 1px black;">Prénom</th>
				<th style="width: 95px; text-align: center; border-top: solid 1px black; border-bottom: solid 1px black; border-right: solid 1px black;">Tél.</th>
	<?php 
$lLots = array();
$lNbLignePrixProduit = 0;
$j = 0;
while ($j < $lNbProduitPage) {
    $lIdProduit = $lIdProduits[$i * $lLimitePaysage + $j];
    $lProduits = ProduitManager::selectDetailProduits(array($lIdProduit));
    $lProduit = $lProduits[0];
    $lLots[$lIdProduit] = DetailCommandeManager::selectByIdProduit($lIdProduit);
    $lnbLignePrix = count($lLots[$lIdProduit]);
    if ($lNbLignePrixProduit < $lnbLignePrix) {
        $lNbLignePrixProduit = $lnbLignePrix;
    }
    $lLabelNomProduit = $lProduit->getNproNom();
    if ($lProduit->getProType() == 2) {
        $lLabelNomProduit .= " (Abonnement)";
    }
    ?>
				<th colspan="2" style="width: 80px; text-align: center; border-top: solid 1px black; border-bottom: solid 1px black; border-right: solid 1px black;"><?php 
    echo $lLabelNomProduit;
    ?>
</th>
					
	<?php 
 /**
  * @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 modifierAchat($pParam)
  * @return ListeReservationCommandeVR
  * @desc Met à jour une réservation
  */
 public function modifierAchat($pParam)
 {
     $lVr = AfficheAchatAdherentValid::validModifierAchat($pParam);
     if ($lVr->getValid()) {
         $lAchatData = $pParam["achat"];
         $lAchat = new AchatVO();
         if ($lAchatData['idAchat'] < 0) {
             // Si c'est un ajout
             $lVr = AfficheAchatAdherentValid::validAjoutAchat($lAchatData);
             if ($lVr->getValid()) {
                 // Recherche si il y a une réservation
                 $lIdReservation = new IdReservationVO();
                 $lIdReservation->setIdCompte($lAchatData["idCompte"]);
                 $lIdReservation->setIdCommande($lAchatData["idMarche"]);
                 $lReservationService = new ReservationService();
                 $lOperations = $lReservationService->selectOperationReservation($lIdReservation);
                 if ($lOperations[0]->getTypePaiement() == 0) {
                     $lAchat->getId()->setIdReservation($lOperations[0]->getId());
                 }
                 $lAchat->getId()->setIdCompte($lAchatData["idCompte"]);
                 $lAchat->getId()->setIdCommande($lAchatData["idMarche"]);
                 foreach ($lAchatData["produits"] as $lDetail) {
                     $lDetailCommande = DetailCommandeManager::selectByIdProduit($lDetail["id"]);
                     $lDetailAchat = new DetailReservationVO();
                     $lDetailAchat->setIdDetailCommande($lDetailCommande[0]->getId());
                     $lDetailAchat->setQuantite($lDetail["quantite"]);
                     $lDetailAchat->setMontant($lDetail["prix"]);
                     $lProduit = ProduitManager::select($lDetail["id"]);
                     $lDetailAchat->setIdNomProduit($lProduit->getIdNomProduit());
                     $lDetailAchat->setUnite($lProduit->getUniteMesure());
                     if ($lAchatData["idAchat"] == -1) {
                         $lAchat->addDetailAchat($lDetailAchat);
                     } else {
                         if ($lAchatData["idAchat"] == -2) {
                             $lAchat->addDetailAchatSolidaire($lDetailAchat);
                         }
                     }
                 }
             } else {
                 return $lVr;
             }
         } else {
             $lOperationService = new OperationService();
             $lOperation = $lOperationService->get($lAchatData["idAchat"]);
             $lAchat = new AchatVO();
             $lAchat->getId()->setIdCompte($lOperation->getIdCompte());
             $lAchat->getId()->setIdCommande($lOperation->getIdCommande());
             $lAchat->getId()->setIdAchat($lOperation->getId());
             foreach ($lAchatData["produits"] as $lDetail) {
                 $lDetailCommande = DetailCommandeManager::selectByIdProduit($lDetail["id"]);
                 $lDetailAchat = new DetailReservationVO();
                 $lDetailAchat->setIdDetailCommande($lDetailCommande[0]->getId());
                 $lDetailAchat->setQuantite($lDetail["quantite"]);
                 $lDetailAchat->setMontant($lDetail["prix"]);
                 $lProduit = ProduitManager::select($lDetail["id"]);
                 $lDetailAchat->setIdNomProduit($lProduit->getIdNomProduit());
                 $lDetailAchat->setUnite($lProduit->getUniteMesure());
                 if ($lOperation->getTypePaiement() == 7) {
                     $lAchat->addDetailAchat($lDetailAchat);
                 } else {
                     if ($lOperation->getTypePaiement() == 8) {
                         $lAchat->addDetailAchatSolidaire($lDetailAchat);
                     }
                 }
             }
         }
         $lAchatService = new AchatService();
         $lIdOperation = $lAchatService->set($lAchat);
     }
     return $lVr;
 }
 /**
  * @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(DetailCommandeVO)
  * @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 DetailCommandeVO
  */
 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(DetailCommandeManager::CHAMP_DETAILCOMMANDE_ID . "," . DetailCommandeManager::CHAMP_DETAILCOMMANDE_ID_PRODUIT . "," . DetailCommandeManager::CHAMP_DETAILCOMMANDE_TAILLE . "," . DetailCommandeManager::CHAMP_DETAILCOMMANDE_PRIX . "," . DetailCommandeManager::CHAMP_DETAILCOMMANDE_ETAT);
     // Préparation de la requète de recherche
     $lRequete = DbUtils::prepareRequeteRecherche(DetailCommandeManager::TABLE_DETAILCOMMANDE, $lChamps, $pTypeRecherche, $pTypeCritere, $pCritereRecherche, $pTypeTri, $pCritereTri);
     $lListeDetailCommande = 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($lListeDetailCommande, DetailCommandeManager::remplirDetailCommande($lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_ID], $lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_ID_PRODUIT], $lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_TAILLE], $lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_PRIX], $lLigne[DetailCommandeManager::CHAMP_DETAILCOMMANDE_ETAT]));
             }
         } else {
             $lListeDetailCommande[0] = new DetailCommandeVO();
         }
         return $lListeDetailCommande;
     }
     $lListeDetailCommande[0] = new DetailCommandeVO();
     return $lListeDetailCommande;
 }
 /**
  * @name supprimerProduit($pId)
  * @param integer
  * @desc Supprime un produit du marché
  */
 public function supprimerProduit($pId)
 {
     $lProduit = ProduitManager::select($pId);
     // Suppression des lots
     $lLots = DetailCommandeManager::selectByIdProduit($pId);
     foreach ($lLots as $lLot) {
         $lLot->setEtat(1);
         DetailCommandeManager::update($lLot);
     }
     $lProduit->setEtat(1);
     ProduitManager::update($lProduit);
     // Modif des réservations
     $lReservationService = new ReservationService();
     $lIdMarche = $lProduit->getIdCommande();
     foreach ($lLots as $lLot) {
         // Chaque lot modifié
         $lListeDetailReservation = $lReservationService->getReservationSurLot($lLot->getId());
         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() != $lLot->getId()) {
                         // Ne positionne que les autres produits
                         array_push($lNvDetailReservation, $lDetailReservationActuelle);
                     }
                 }
                 $lReservationVO->setDetailReservation($lNvDetailReservation);
                 $lReservationService->set($lReservationVO);
                 // Maj de la reservation
             }
         }
     }
 }
 /**
  * @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;
 }