/**
  * @name remplirLotAbonnement($pId, $pIdProduitAbonnement, $pTaille, $pPrix, $pEtat)
  * @param int(11)
  * @param int(11)
  * @param decimal(10,2)
  * @param decimal(10,2)
  * @param tinyint(1)
  * @return LotAbonnementVO
  * @desc Retourne une LotAbonnementVO remplie
  */
 private static function remplirLotAbonnement($pId, $pIdProduitAbonnement, $pTaille, $pPrix, $pEtat)
 {
     $lLotAbonnement = new LotAbonnementVO();
     $lLotAbonnement->setId($pId);
     $lLotAbonnement->setIdProduitAbonnement($pIdProduitAbonnement);
     $lLotAbonnement->setTaille($pTaille);
     $lLotAbonnement->setPrix($pPrix);
     $lLotAbonnement->setEtat($pEtat);
     return $lLotAbonnement;
 }
 /**
  * @name updateProduit($pProduitAbonnement)
  * @param ProduitAbonnementVO
  * @return integer
  * @desc Met à jour un ProduitAbonnementVO
  */
 private function updateProduit($pProduitAbonnement, $pLotRemplacement = array())
 {
     $lProduitActuel = $this->selectProduit($pProduitAbonnement->getId());
     //Les lots
     $lLotSupp = array();
     foreach ($lProduitActuel->getLots() as $lLotActuel) {
         $lSuppLot = true;
         foreach ($pProduitAbonnement->getLots() as $lLotNv) {
             // Maj Lot
             if ($lLotActuel->getId() == $lLotNv->getId()) {
                 $lDcomId = $lLotActuel->getId();
                 $lSuppLot = false;
                 $lLotAbonnement = new LotAbonnementVO();
                 $lLotAbonnement->setId($lLotActuel->getId());
                 $lLotAbonnement->setIdProduitAbonnement($lProduitActuel->getId());
                 $lLotAbonnement->setTaille($lLotNv->getTaille());
                 $lLotAbonnement->setPrix($lLotNv->getPrix());
                 LotAbonnementManager::update($lLotAbonnement);
             }
         }
         // Supprimer Lot
         if ($lSuppLot) {
             array_push($lLotSupp, $lLotActuel->getId());
         }
     }
     // Nouveau Lot
     $lLotAdd = array();
     foreach ($pProduitAbonnement->getLots() as $lLotNv) {
         $lAjout = true;
         foreach ($lProduitActuel->getLots() as $lLotActuel) {
             if ($lLotActuel->getId() == $lLotNv->getId()) {
                 $lAjout = false;
             }
         }
         if ($lAjout) {
             $lLotAbonnement = new LotAbonnementVO();
             $lLotAbonnement->setIdProduitAbonnement($lProduitActuel->getId());
             $lLotAbonnement->setTaille($lLotNv->getTaille());
             $lLotAbonnement->setPrix($lLotNv->getPrix());
             $lDcomId = LotAbonnementManager::insert($lLotAbonnement);
             $lLotAdd[$lLotNv->getId()] = $lDcomId;
             // Si supression d'un lot et positionnement de ce nouveau lot permet de récupérer l'ID
         }
     }
     // Chaque lot supprimé => La réservation est positionnée sur un autre lot
     foreach ($lLotSupp as $lIdLot) {
         if (isset($pLotRemplacement[$lIdLot])) {
             $lIdLotRemplacement = $pLotRemplacement[$lIdLot];
             // Si le lot de remplacement est un nouveau lot on récupère le vrai id de base et non celui donné par le JS
             if ($lIdLotRemplacement < 0) {
                 $lIdLotRemplacement = $lLotAdd[$lIdLotRemplacement];
             }
             // Récupération des abonnements
             $lListeAbonnement = $this->getAbonnementSurLot($lIdLot);
             // Modification si il y a des abonnements
             if (!is_null($lListeAbonnement[0]->getCptAboId())) {
                 foreach ($lListeAbonnement as $lAbonnement) {
                     $lAncienAbonnement = CompteAbonnementManager::select($lAbonnement->getCptAboId());
                     $lAncienAbonnement->setIdLotAbonnement($lIdLotRemplacement);
                     $this->updateAbonnement($lAncienAbonnement);
                 }
             }
         } else {
             // Si pas de lot de remplacement suppression des abonnements du lot
             // Suppression des abonnements du lot
             $lListeAbonnement = $this->getAbonnementSurLot($lIdLot);
             foreach ($lListeAbonnement as $lAbonnement) {
                 $this->deleteAbonnement($lAbonnement->getCptAboId());
             }
         }
         // Suppression du lot
         $lDeleteLot = LotAbonnementManager::select($lIdLot);
         $lDeleteLot->setEtat(1);
         LotAbonnementManager::update($lDeleteLot);
     }
     return ProduitAbonnementManager::update($pProduitAbonnement);
 }
 /**
  * @name updateProduit($pParam)
  * @desc Met à jour un produit
  */
 public function updateProduit($pParam)
 {
     $lVr = ListeProduitValid::validUpdate($pParam);
     if ($lVr->getValid()) {
         $lAbonnementService = new AbonnementService();
         $lProduitAbonnement = $lAbonnementService->getProduit($pParam["id"]);
         $lProduitAbonnement->setUnite($pParam['unite']);
         $lProduitAbonnement->setStockInitial($pParam['stockInitial']);
         $lProduitAbonnement->setMax($pParam['max']);
         $lProduitAbonnement->setFrequence($pParam['frequence']);
         $lProduitAbonnement->setLots(array());
         foreach ($pParam['lots'] as $lLot) {
             $lLotAbonnement = new LotAbonnementVO();
             $lLotAbonnement->setId($lLot["id"]);
             $lLotAbonnement->setIdProduitAbonnement($pParam["id"]);
             $lLotAbonnement->setTaille($lLot["taille"]);
             $lLotAbonnement->setPrix($lLot["prix"]);
             $lLotAbonnement->setEtat(0);
             $lProduitAbonnement->addLots($lLotAbonnement);
         }
         $lAbonnementService->setProduit($lProduitAbonnement, $pParam["lotRemplacement"]);
     }
     return $lVr;
 }