/**
  * @name insert($pReservation)
  * @param ReservationVO
  * @return integer
  * @desc Ajoute une réservation
  */
 private function insert($pReservation)
 {
     // Calcul du total
     $lTotal = 0;
     foreach ($pReservation->getDetailReservation() as $lProduit) {
         $lTotal += $lProduit->getMontant();
     }
     // L'operation
     $lOperation = new OperationDetailVO();
     $lOperation->setIdCompte($pReservation->getId()->getIdCompte());
     $lOperation->setMontant($lTotal);
     $lOperation->setLibelle("Marché N°" . $pReservation->getId()->getIdCommande());
     $lOperation->setTypePaiement(0);
     $lOperation->setType(0);
     $lChampComplementaire = array();
     // Id Marché
     $lOperationChampComplementaire = new OperationChampComplementaireVO();
     $lOperationChampComplementaire->setChcpId(1);
     $lOperationChampComplementaire->setValeur($pReservation->getId()->getIdCommande());
     array_push($lChampComplementaire, $lOperationChampComplementaire);
     $lOperation->setChampComplementaire($lChampComplementaire);
     //
     //		$lOperation->setIdCommande($pReservation->getId()->getIdCommande());
     $lListeIdDetailCommande = array();
     foreach ($pReservation->getDetailReservation() as $lProduit) {
         array_push($lListeIdDetailCommande, $lProduit->getIdDetailCommande());
     }
     $lDetailMarche = DetailMarcheViewManager::selectByIdDetailCommande($lListeIdDetailCommande);
     $lOperationService = new OperationService();
     $lIdOperation = $lOperationService->set($lOperation);
     // Ajout detail operation
     $lStockService = new StockService();
     $lDetailOperationService = new DetailOperationService();
     foreach ($pReservation->getDetailReservation() as $lProduit) {
         // Ajout du stock
         $lStock = new StockVO();
         $lStock->setQuantite($lProduit->getQuantite());
         $lStock->setType(0);
         $lStock->setIdCompte($pReservation->getId()->getIdCompte());
         $lStock->setIdDetailCommande($lProduit->getIdDetailCommande());
         $lStock->setIdOperation($lIdOperation);
         $lStock->setIdNomProduit($lDetailMarche[$lProduit->getIdDetailCommande()]->getProIdNomProduit());
         $lStock->setUnite($lDetailMarche[$lProduit->getIdDetailCommande()]->getProUniteMesure());
         $lStockService->set($lStock);
         // Ajout du détail de l'operation
         $lDetailOperation = new DetailOperationVO();
         $lDetailOperation->setIdOperation($lIdOperation);
         $lDetailOperation->setIdCompte($pReservation->getId()->getIdCompte());
         $lDetailOperation->setMontant($lProduit->getMontant());
         $lDetailOperation->setLibelle("Marché N°" . $pReservation->getId()->getIdCommande());
         $lDetailOperation->setTypePaiement(0);
         $lDetailOperation->setIdDetailCommande($lProduit->getIdDetailCommande());
         $lDetailOperation->setIdNomProduit($lDetailMarche[$lProduit->getIdDetailCommande()]->getProIdNomProduit());
         $lDetailOperationService->set($lDetailOperation);
     }
     return $lIdOperation;
 }
 /**
  * @name remplirOperationChampComplementaire($pOpeId, $pCpchcpId, $pValeur)
  * @param int(11)
  * @param int(11)
  * @param varchar(50)
  * @return OperationChampComplementaireVO
  * @desc Retourne une OperationChampComplementaireVO remplie
  */
 private static function remplirOperationChampComplementaire($pOpeId, $pChcpId, $pValeur)
 {
     $lOperationChampComplementaire = new OperationChampComplementaireVO();
     $lOperationChampComplementaire->setOpeId($pOpeId);
     $lOperationChampComplementaire->setChcpId($pChcpId);
     $lOperationChampComplementaire->setValeur($pValeur);
     return $lOperationChampComplementaire;
 }
 /**
  * @name enregistrerBonDeCommande($pParam)
  * @return AfficheListeProduitBonDeCommandeResponse
  * @desc Enregistre le bon de commande.
  */
 public function enregistrerBonDeCommande($pParam)
 {
     $lVr = ProduitsBonDeCommandeValid::validAjout($pParam);
     if ($lVr->getValid()) {
         $lIdMarche = $pParam["id_commande"];
         $lIdCompteFerme = $pParam["id_compte_ferme"];
         $lProduits = $pParam["produits"];
         // On enregistre uniquement les produits avec à minima quantité (même si prix à 0)
         // Calcul du total
         $lTotal = 0;
         $lProduitsValide = array();
         foreach ($lProduits as $lProduit) {
             if ($lProduit["quantite"] > 0) {
                 array_push($lProduitsValide, $lProduit);
             }
             $lTotal += $lProduit["prix"];
         }
         // Récupère l'opération Bon de commande si elle existe
         $lOperationService = new OperationService();
         $lOperations = $lOperationService->getBonCommande($lIdMarche, $lIdCompteFerme);
         $lIdOperation = $lOperations[0]->getId();
         if (is_null($lIdOperation)) {
             // Si il n'y a pas d'opération de Bon de commande
             $lOperation = new OperationDetailVO();
             $lOperation->setIdCompte($lIdCompteFerme);
             $lOperation->setLibelle('Bon de Commande');
             $lOperation->setTypePaiement(5);
             $lOperationChampComplementaire = new OperationChampComplementaireVO();
             $lOperationChampComplementaire->setChcpId(1);
             $lOperationChampComplementaire->setValeur($lIdMarche);
             $lOperation->setChampComplementaire(array($lOperationChampComplementaire));
         } else {
             $lOperation = $lOperations[0];
         }
         $lOperation->setMontant($lTotal);
         $lIdOperation = $lOperationService->set($lOperation);
         // Ajout ou mise à jour de l'operation
         $lBonCommande = InfoBonCommandeViewManager::selectInfoBonCommande($lIdMarche, $lIdCompteFerme);
         $lDetailOperationService = new DetailOperationService();
         $lStockService = new StockService();
         foreach ($lProduitsValide as $lProduit) {
             $lMaj = false;
             foreach ($lBonCommande as $lBon) {
                 if ($lProduit["dcomId"] == $lBon->getDcomId()) {
                     $lMaj = true;
                     //$lDcom = DetailCommandeManager::selectByIdProduit($lProduit["id"]);
                     $lStock = new StockVO();
                     $lStock->setId($lBon->getStoId());
                     $lStock->setQuantite($lProduit["quantite"]);
                     $lStock->setType(3);
                     $lStock->setIdCompte($lIdCompteFerme);
                     $lStock->setIdDetailCommande($lProduit["dcomId"]);
                     $lStock->setIdOperation($lIdOperation);
                     $lStockService->set($lStock);
                     $lDetailOperation = $lDetailOperationService->get($lBon->getDopeId());
                     $lDetailOperation->setIdOperation($lIdOperation);
                     $lDetailOperation->setIdCompte($lIdCompteFerme);
                     $lDetailOperation->setMontant($lProduit["prix"]);
                     $lDetailOperation->setLibelle('Bon de Commande');
                     $lDetailOperation->setTypePaiement(5);
                     $lDetailOperationService->set($lDetailOperation);
                 }
             }
             if (!$lMaj) {
                 //$lDcom = DetailCommandeManager::selectByIdProduit($lProduit["id"]);
                 $lStock = new StockVO();
                 $lStock->setQuantite($lProduit["quantite"]);
                 $lStock->setType(3);
                 $lStock->setIdCompte($lIdCompteFerme);
                 $lStock->setIdDetailCommande($lProduit["dcomId"]);
                 $lStock->setIdOperation($lIdOperation);
                 $lStockService->set($lStock);
                 $lDetailOperation = new DetailOperationVO();
                 $lDetailOperation->setIdOperation($lIdOperation);
                 $lDetailOperation->setIdCompte($lIdCompteFerme);
                 $lDetailOperation->setMontant($lProduit["prix"]);
                 $lDetailOperation->setLibelle('Bon de Commande');
                 $lDetailOperation->setTypePaiement(5);
                 //$lDetailOperation->setTypePaiementChampComplementaire($lProduit["id"]);
                 $lDetailOperation->setIdDetailCommande($lProduit["dcomId"]);
                 $lDetailOperationService->set($lDetailOperation);
             }
         }
         foreach ($lBonCommande as $lBon) {
             $lDelete = true;
             foreach ($lProduitsValide as $lProduit) {
                 if ($lProduit["dcomId"] == $lBon->getDcomId()) {
                     $lDelete = false;
                 }
             }
             if ($lDelete) {
                 $lStockService->delete($lBon->getStoId());
                 $lDetailOperationService->delete($lBon->getDopeId());
             }
         }
     }
     return $lVr;
 }