/**
  * @name update($pFacture)
  * @param FactureVO
  * @return integer
  * @desc Met à jour une FactureVO
  */
 private function update($pFacture)
 {
     // Récupération de la facture actuelle
     $lIdOperation = $pFacture->getId()->getId();
     $lFactureInitiale = $this->select($lIdOperation);
     $lIdCompteFerme = $lFactureInitiale->getOperationProducteur()->getIdCompte();
     $lOperationService = new OperationService();
     // Montant pour l'id
     /*$lFactureInitiale->getId()->setMontant($pFacture->getOperationProducteur()->getMontant());
     		$lOperationService->set($lFactureInitiale->getId());*/
     // Gestion si pas de paiement
     if ($pFacture->getOperationProducteur()->getMontant() == 0) {
         $pFacture->getOperationProducteur()->setTypePaiement(21);
         //$pFacture->getOperationZeybu()->setTypePaiement(21);
     }
     // Montant / Typepaiement / Champ Complementaire pour le producteur
     $lFactureInitiale->getOperationProducteur()->setMontant($pFacture->getOperationProducteur()->getMontant());
     $lFactureInitiale->getOperationProducteur()->setTypePaiement($pFacture->getOperationProducteur()->getTypePaiement());
     $lFactureInitiale->getOperationProducteur()->setChampComplementaire($pFacture->getOperationProducteur()->getChampComplementaire());
     $lOperationService->set($lFactureInitiale->getOperationProducteur());
     // Montant / Typepaiement / Champ Complementaire pour le zeybu
     /*$lFactureInitiale->getOperationZeybu()->setMontant(-1 * $pFacture->getOperationProducteur()->getMontant());
     		$lFactureInitiale->getOperationZeybu()->setTypePaiement($pFacture->getOperationProducteur()->getTypePaiement());
     		$lFactureInitiale->getOperationZeybu()->setChampComplementaire($pFacture->getOperationProducteur()->getChampComplementaire());
     		$lOperationService->set($lFactureInitiale->getOperationZeybu());*/
     // Suppression de l'ensemble des lignes de facture qui seront à nouveau insérée
     DetailFactureManager::delete($lIdOperation);
     $lDetailOperationService = new DetailOperationService();
     $lStockService = new StockService();
     foreach ($lFactureInitiale->getProduits() as $lProduitInital) {
         $lMaj = false;
         foreach ($pFacture->getProduits() as $lProduitMaj) {
             if ($lProduitInital->getIdStock() == $lProduitMaj->getIdStock() && $lProduitInital->getIdDetailOperation() == $lProduitMaj->getIdDetailOperation() && $lProduitInital->getIdStockSolidaire() == $lProduitMaj->getIdStockSolidaire()) {
                 // Modification
                 $lMaj = true;
                 // Stock
                 $lIdStock = 0;
                 $lIdDetailOperation = 0;
                 if ($lProduitInital->getIdStock() == 0 && $lProduitMaj->getQuantite() > 0) {
                     // Ajout
                     $lIdStock = $lStockService->set(new StockVO(null, null, $lProduitMaj->getQuantite(), 4, $lIdCompteFerme, null, null, $lIdOperation, $lProduitMaj->getIdNomProduit(), $lProduitMaj->getUnite()));
                     // Prix
                     $lIdDetailOperation = $lDetailOperationService->set(new DetailOperationVO(null, $lIdOperation, $lIdCompteFerme, $lProduitMaj->getMontant(), 'Facture', null, 6, null, null, $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;
                 if ($lProduitInital->getIdStockSolidaire() == 0 && $lProduitMaj->getQuantiteSolidaire() > 0) {
                     // Ajout
                     $lIdStockSolidaire = $lStockService->set(new StockVO(null, null, $lProduitMaj->getQuantiteSolidaire(), 2, $lIdCompteFerme, null, null, $lIdOperation, $lProduitMaj->getIdNomProduit(), $lProduitMaj->getUnite()));
                 } else {
                     if ($lProduitInital->getIdStockSolidaire() != 0 && $lProduitMaj->getQuantiteSolidaire() > 0) {
                         // Modification
                         $lStockSolidaireInitial = $lStockService->get($lProduitInital->getIdStockSolidaire());
                         $lIdStockSolidaire = $lStockSolidaireInitial->getId();
                         $lStockSolidaireInitial->setQuantite($lProduitMaj->getQuantiteSolidaire());
                         $lStockService->set($lStockSolidaireInitial);
                     } else {
                         // Suppression
                         $lStockService->delete($lProduitInital->getIdStockSolidaire());
                     }
                 }
                 if ($lProduitMaj->getQuantiteSolidaire() > 0 || $lProduitMaj->getQuantite() > 0) {
                     // Pas d'ajout de ligne vide
                     DetailFactureManager::insert(new DetailFactureVO($lIdOperation, $lProduitInital->getIdNomProduit(), $lIdStock, $lIdDetailOperation, $lIdStockSolidaire));
                 }
             }
         }
         if (!$lMaj) {
             // Suppression
             $lStockService->delete($lProduitInital->getIdStock());
             $lDetailOperationService->delete($lProduitInital->getIdDetailOperation());
             $lStockService->delete($lProduitInital->getIdStockSolidaire());
         }
     }
     foreach ($pFacture->getProduits() as $lProduitMaj) {
         $lMaj = false;
         foreach ($lFactureInitiale->getProduits() as $lProduitInital) {
             if ($lProduitInital->getIdStock() == $lProduitMaj->getIdStock() && $lProduitInital->getIdDetailOperation() == $lProduitMaj->getIdDetailOperation() && $lProduitInital->getIdStockSolidaire() == $lProduitMaj->getIdStockSolidaire()) {
                 // Modification
                 $lMaj = true;
             }
         }
         if (!$lMaj) {
             // Ajout
             // Stock
             $lIdStock = 0;
             $lIdDetailOperation = 0;
             if ($lProduitMaj->getQuantite() > 0) {
                 $lIdStock = $lStockService->set(new StockVO(null, null, $lProduitMaj->getQuantite(), 4, $lIdCompteFerme, null, null, $lIdOperation, $lProduitMaj->getIdNomProduit(), $lProduitMaj->getUnite()));
                 // Prix
                 $lIdDetailOperation = $lDetailOperationService->set(new DetailOperationVO(null, $lIdOperation, $lIdCompteFerme, $lProduitMaj->getMontant(), 'Facture', null, 6, null, null, $lProduitMaj->getIdNomProduit(), null));
             }
             // Stock Solidaire
             $lIdStockSolidaire = 0;
             if ($lProduitMaj->getQuantiteSolidaire() > 0) {
                 $lIdStockSolidaire = $lStockService->set(new StockVO(null, null, $lProduitMaj->getQuantiteSolidaire(), 2, $lIdCompteFerme, null, null, $lIdOperation, $lProduitMaj->getIdNomProduit(), $lProduitMaj->getUnite()));
             }
             if ($lProduitMaj->getQuantiteSolidaire() > 0 || $lProduitMaj->getQuantite() > 0) {
                 // Pas d'ajout de ligne vide
                 DetailFactureManager::insert(new DetailFactureVO($lIdOperation, $lProduitMaj->getIdNomProduit(), $lIdStock, $lIdDetailOperation, $lIdStockSolidaire));
             }
         }
     }
     return $lIdOperation;
 }
 /**
  * @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 updateProduit($pProduit)
  * @param ProduitVO
  * @desc Met à jour le produit du marché
  */
 public function updateProduit($pProduit, $pLotRemplacement = array())
 {
     $lProduitActuel = $this->selectProduit($pProduit->getId());
     //Les lots
     $lLotModif = array();
     $lLotSupp = array();
     foreach ($lProduitActuel->getLots() as $lLotActuel) {
         $lMajLot = true;
         foreach ($pProduit->getLots() as $lLotNv) {
             // Maj Lot
             if ($lLotActuel->getId() == $lLotNv->getId()) {
                 $lDcomId = $lLotActuel->getId();
                 $lMajLot = false;
                 $lDetailCommande = new DetailCommandeVO();
                 $lDetailCommande->setId($lLotActuel->getId());
                 $lDetailCommande->setIdProduit($lProduitActuel->getId());
                 $lDetailCommande->setTaille($lLotNv->getTaille());
                 $lDetailCommande->setPrix($lLotNv->getPrix());
                 DetailCommandeManager::update($lDetailCommande);
                 // Maj des réservations associées
                 DetailOperationManager::majTotalReservation($lLotActuel->getId());
                 array_push($lLotModif, $lDetailCommande);
             }
         }
         // Supprimer Lot
         if ($lMajLot) {
             array_push($lLotSupp, $lLotActuel->getId());
         }
     }
     // Nouveau Lot
     $lLotAdd = array();
     foreach ($pProduit->getLots() as $lLotNv) {
         $lAjout = true;
         foreach ($lProduitActuel->getLots() as $lLotActuel) {
             if ($lLotActuel->getId() == $lLotNv->getId()) {
                 $lAjout = false;
             }
         }
         if ($lAjout) {
             $lDetailCommande = new DetailCommandeVO();
             $lDetailCommande->setIdProduit($lProduitActuel->getId());
             $lDetailCommande->setTaille($lLotNv->getTaille());
             $lDetailCommande->setPrix($lLotNv->getPrix());
             $lDcomId = DetailCommandeManager::insert($lDetailCommande);
             $lLotAdd[$lLotNv->getId()] = $lDcomId;
             // Si supression d'un lot et positionnement de ce nouveau lot permet de récupérer l'ID
         }
     }
     $lStockService = new StockService();
     $lResaActuel = GestionCommandeReservationProducteurViewManager::getStockReservationProducteur($lProduitActuel->getIdCompteFerme(), $lProduitActuel->getId());
     $lStockActuel = $lStockService->get($lResaActuel[0]->getStoId());
     // Maj du stock
     $lStockActuel->setQuantite($pProduit->getQteRestante());
     $lStockActuel->setIdDetailCommande($lDcomId);
     $lStockService->updateStockProduit($lStockActuel);
     $lProduit = ProduitManager::select($lProduitActuel->getId());
     $lProduit->setUniteMesure($pProduit->getUnite());
     if ($pProduit->getQteMaxCommande() == "" || $pProduit->getQteMaxCommande() == -1) {
         $lProduit->setMaxProduitCommande(-1);
     } else {
         $lProduit->setMaxProduitCommande($pProduit->getQteMaxCommande());
     }
     $lProduit->setType($pProduit->getType());
     ProduitManager::update($lProduit);
     // Modif des réservations
     $lReservationService = new ReservationService();
     $lIdMarche = $lProduitActuel->getIdMarche();
     foreach ($lLotSupp as $lIdLot) {
         // Chaque lot supprimé => La réservation est positionnée sur un autre lot
         if (isset($pLotRemplacement[$lIdLot])) {
             $lIdLotRemplacement = $pLotRemplacement[$lIdLot];
             if ($lIdLotRemplacement < 0) {
                 $lIdLotRemplacement = $lLotAdd[$lIdLotRemplacement];
             }
             $lListeDetailReservation = $lReservationService->getReservationSurLot($lIdLot);
             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() == $lIdLot) {
                             // Maj de la reservation pour ce produit
                             $lDetailCommande = DetailCommandeManager::select($lIdLotRemplacement);
                             $lPrix = $lDetailReservation->getStoQuantite() / $lDetailCommande->getTaille() * $lDetailCommande->getPrix();
                             $lDetailReservationVO = new DetailReservationVO();
                             $lDetailReservationVO->setIdDetailCommande($lIdLotRemplacement);
                             $lDetailReservationVO->setQuantite($lDetailReservation->getStoQuantite());
                             $lDetailReservationVO->setMontant($lPrix);
                             array_push($lNvDetailReservation, $lDetailReservationVO);
                         } else {
                             // Ajout des autres produits
                             array_push($lNvDetailReservation, $lDetailReservationActuelle);
                         }
                     }
                     $lReservationVO->setDetailReservation($lNvDetailReservation);
                     $lReservationService->set($lReservationVO);
                     // Maj de la reservation
                 }
             }
         }
         $lDeleteLot = DetailCommandeManager::select($lIdLot);
         $lDeleteLot->setEtat(1);
         DetailCommandeManager::update($lDeleteLot);
     }
 }