/**
  * @name update($pOperation)
  * @param OperationVO
  * @return integer
  * @desc Met à jour une opération
  */
 private function update($pOperation)
 {
     $pOperation->setDateMaj(StringUtils::dateTimeAujourdhuiDb());
     $pOperation->setIdLogin($_SESSION[DROIT_ID]);
     $this->insertHistorique($pOperation);
     // Ajout historique
     $lTypeModificationSolde = array(1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14);
     if (in_array($pOperation->getTypePaiement(), $lTypeModificationSolde)) {
         $lOperationActuelle = $this->get($pOperation->getId());
         // Dans le cas la réservation devient achat. La date de création doit être mise à jour.
         if ($lOperationActuelle->getTypePaiement() == 0 && $pOperation->getTypePaiement() == 7) {
             $pOperation->setDate($pOperation->getDateMaj());
         }
         // Mise à jour du solde
         $lCompteService = new CompteService();
         $lCompte = $lCompteService->get($pOperation->getIdCompte());
         // Si l'operation actuelle impacte le solde
         if (in_array($lOperationActuelle->getTypePaiement(), $lTypeModificationSolde)) {
             $lCompte->setSolde($lCompte->getSolde() - $lOperationActuelle->getMontant() + $pOperation->getMontant());
         } else {
             $lCompte->setSolde($lCompte->getSolde() + $pOperation->getMontant());
         }
         $lCompteService->set($lCompte);
     }
     // Maj des champs complémentaires
     // Suppression des champs complementaires
     OperationChampComplementaireManager::deleteByIdOpe($pOperation->getId());
     // Ajout des champs complementaires
     $lChampComplementaire = $pOperation->getChampComplementaire();
     if (!empty($lChampComplementaire)) {
         // Vérifie si le champ est autorisé en modification
         $lChampAutorise = TypePaiementChampcomplementaireManager::champAutoriseMaj($pOperation->getTypePaiement());
         $lChampAjout = array();
         foreach ($pOperation->getChampComplementaire() as $lChamp) {
             if (in_array($lChamp->getChcpId(), $lChampAutorise)) {
                 $lChamp->setOpeId($pOperation->getId());
                 array_push($lChampAjout, $lChamp);
             }
         }
         if (!empty($lChampAjout)) {
             OperationChampComplementaireManager::insert($lChampAjout);
         }
     }
     // Si c'est un paiement de facture de producteur il faut mettre à jour les paiements associés
     $lOperationChampComplementaireFacture = OperationChampComplementaireManager::recherche(array(OperationChampComplementaireManager::CHAMP_OPERATIONCHAMPCOMPLEMENTAIRE_CHCP_ID, OperationChampComplementaireManager::CHAMP_OPERATIONCHAMPCOMPLEMENTAIRE_VALEUR), array('=', '='), array(9, $pOperation->getId()), array(), array());
     if (!is_null($lOperationChampComplementaireFacture[0]->getOpeId())) {
         $lMontant = $pOperation->getMontant();
         // Maj de l'operation de facture
         $lOperationFacture = $this->getDetail($lOperationChampComplementaireFacture[0]->getOpeId());
         $lOperationFacture->setMontant($lMontant);
         $this->set($lOperationFacture);
         // Maj de l'operation zeybu
         $lOpeFacChampComp = $lOperationFacture->getChampComplementaire();
         if (isset($lOpeFacChampComp[10])) {
             $lOperationZeybu = $this->getDetail($lOpeFacChampComp[10]->getValeur());
             $lOperationZeybu->setMontant(-1 * $lMontant);
             $lOperationZeybu->setTypePaiement($pOperation->getTypePaiement());
             $lOperationZeybu->setChampComplementaire($pOperation->getChampComplementaire());
             $this->set($lOperationZeybu);
         }
     }
     return OperationManager::update($pOperation);
     // update de l'opération
 }