/**
  * @name modifierProduit($pParam)
  * @return NomProduitCatalogueVR
  * @desc Met à jour un produit
  */
 public function modifierProduit($pParam)
 {
     $lVr = NomProduitCatalogueValid::validUpdate($pParam);
     if ($lVr->getValid()) {
         $lId = $pParam['idNomProduit'];
         $lNomProduitVO = NomProduitManager::select($lId);
         $lNomProduitVO->setNumero($pParam['numero']);
         $lNomProduitVO->setNom($pParam['nom']);
         $lNomProduitVO->setDescription($pParam['description']);
         $lNomProduitVO->setIdCategorie($pParam['idCategorie']);
         $lNomProduitVO->setIdFerme($pParam['id']);
         $lNomProduitVO->setEtat(0);
         NomProduitManager::update($lNomProduitVO);
         /** Producteurs **/
         $lProducteurs = NomProduitProducteurViewManager::select($lId);
         $lIdProducteurs = array();
         $lProducteursDelete = array();
         foreach ($lProducteurs as $lProducteur) {
             array_push($lIdProducteurs, $lProducteur->getPrdtId());
             if (!in_array($lProducteur->getPrdtId(), $pParam['producteurs'])) {
                 array_push($lProducteursDelete, $lProducteur->getNPrdtId());
             }
         }
         if (!empty($lProducteursDelete)) {
             NomProduitProducteurManager::deleteByArray($lProducteursDelete);
         }
         $lProducteursInsert = array();
         foreach ($pParam['producteurs'] as $lProducteur) {
             if (!in_array($lProducteur, $lIdProducteurs)) {
                 $lNomProduitProducteurVO = new NomProduitProducteurVO();
                 $lNomProduitProducteurVO->setIdNomProduit($lId);
                 $lNomProduitProducteurVO->setIdProducteur($lProducteur);
                 $lNomProduitProducteurVO->setEtat(0);
                 array_push($lProducteursInsert, $lNomProduitProducteurVO);
             }
         }
         if (!empty($lProducteursInsert)) {
             NomProduitProducteurManager::insertByArray($lProducteursInsert);
         }
         /** Caracteristiques **/
         $lCaracteristiques = CaracteristiqueProduitViewManager::select($lId);
         $lIdCaracteristiques = array();
         $lCaracteristiquesDelete = array();
         foreach ($lCaracteristiques as $lCaracteristique) {
             array_push($lIdCaracteristiques, $lCaracteristique->getCarId());
             if (!in_array($lCaracteristique->getCarId(), $pParam['caracteristiques'])) {
                 array_push($lCaracteristiquesDelete, $lCaracteristique->getCarProId());
             }
         }
         if (!empty($lCaracteristiquesDelete)) {
             CaracteristiqueProduitManager::deleteByArray($lCaracteristiquesDelete);
         }
         $lCaracteristiquesInsert = array();
         foreach ($pParam['caracteristiques'] as $lCaracteristique) {
             if (!in_array($lCaracteristique, $lIdCaracteristiques)) {
                 $lCaracteristiqueProduitVO = new CaracteristiqueProduitVO();
                 $lCaracteristiqueProduitVO->setIdNomProduit($lId);
                 $lCaracteristiqueProduitVO->setIdCaracteristique($lCaracteristique);
                 $lCaracteristiqueProduitVO->setEtat(0);
                 array_push($lCaracteristiquesInsert, $lCaracteristiqueProduitVO);
             }
         }
         if (!empty($lCaracteristiquesInsert)) {
             CaracteristiqueProduitManager::insertByArray($lCaracteristiquesInsert);
         }
         /** Modeles Lot **/
         $lModelesLot = ModeleLotViewManager::selectByIdNomProduit($lId);
         $lModelesLotDelete = array();
         foreach ($lModelesLot as $lModeleLot) {
             $lUpdate = false;
             foreach ($pParam['modelesLot'] as $lNvModeleLot) {
                 if ($lModeleLot->getMLotId() == $lNvModeleLot["id"]) {
                     $lUpdate = true;
                     $lModeleLotVO = new ModeleLotVO();
                     $lModeleLotVO->setId($lNvModeleLot["id"]);
                     $lModeleLotVO->setIdNomProduit($lId);
                     $lModeleLotVO->setQuantite($lNvModeleLot["quantite"]);
                     $lModeleLotVO->setUnite($lNvModeleLot["unite"]);
                     $lModeleLotVO->setPrix($lNvModeleLot["prix"]);
                     $lModeleLotVO->setEtat(0);
                     ModeleLotManager::update($lModeleLotVO);
                 }
             }
             if (!$lUpdate) {
                 array_push($lModelesLotDelete, $lModeleLot->getMLotId());
             }
         }
         if (!empty($lModelesLotDelete)) {
             ModeleLotManager::deleteByArray($lModelesLotDelete);
         }
         $lModelesLotInsert = array();
         foreach ($pParam['modelesLot'] as $lModeleLot) {
             if (empty($lModeleLot['id'])) {
                 $lModeleLotVO = new ModeleLotVO();
                 $lModeleLotVO->setIdNomProduit($lId);
                 $lModeleLotVO->setQuantite($lModeleLot["quantite"]);
                 $lModeleLotVO->setUnite($lModeleLot["unite"]);
                 $lModeleLotVO->setPrix($lModeleLot["prix"]);
                 $lModeleLotVO->setEtat(0);
                 array_push($lModelesLotInsert, $lModeleLotVO);
             }
         }
         if (!empty($lModelesLotInsert)) {
             ModeleLotManager::insertByArray($lModelesLotInsert);
         }
     }
     return $lVr;
 }
 /**
  * @name remplirModeleLot($pId, $pIdNomProduit, $pQuantite, $pUnite, $pPrix, $pEtat)
  * @param int(11)
  * @param int(11)
  * @param decimal(10,2)
  * @param varchar(20)
  * @param decimal(10,2)
  * @param tinyint(1)
  * @return ModeleLotVO
  * @desc Retourne une ModeleLotVO remplie
  */
 private static function remplirModeleLot($pId, $pIdNomProduit, $pQuantite, $pUnite, $pPrix, $pEtat)
 {
     $lModeleLot = new ModeleLotVO();
     $lModeleLot->setId($pId);
     $lModeleLot->setIdNomProduit($pIdNomProduit);
     $lModeleLot->setQuantite($pQuantite);
     $lModeleLot->setUnite($pUnite);
     $lModeleLot->setPrix($pPrix);
     $lModeleLot->setEtat($pEtat);
     return $lModeleLot;
 }