/**
  * @name delete($pId)
  * @param integer
  * @desc Met à jour une opération
  */
 public function delete($pId)
 {
     $lOperationValid = new OperationValid();
     if ($lOperationValid->delete($pId)) {
         $lOperation = $this->getDetail($pId);
         // Maj du solde du compte
         $lTypeModificationSolde = array(1, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14);
         if (in_array($lOperation->getTypePaiement(), $lTypeModificationSolde)) {
             $lCompteService = new CompteService();
             // Mise à jour du solde
             $lCompte = $lCompteService->get($lOperation->getIdCompte());
             $lCompte->setSolde($lCompte->getSolde() - $lOperation->getMontant());
             $lCompteService->set($lCompte);
         }
         // 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, $pId), array(), array());
         if (!is_null($lOperationChampComplementaireFacture[0]->getOpeId())) {
             // Suppression de l'operation de facture
             $lOperationFacture = $this->getDetail($lOperationChampComplementaireFacture[0]->getOpeId());
             $this->delete($lOperationFacture->getId());
             // Suppression de l'operation zeybu
             $lOpeFacChampComp = $lOperationFacture->getChampComplementaire();
             $this->delete($lOpeFacChampComp[10]->getValeur());
         }
         switch ($lOperation->getTypePaiement()) {
             case 0:
                 // Annulation de la reservation
             // Annulation de la reservation
             case 16:
             case 22:
                 $lOperation->setTypePaiement(16);
                 return $this->update($lOperation);
                 break;
             case 15:
                 // Réservation non récupérée
                 $lOperation->setTypePaiement(15);
                 return $this->update($lOperation);
                 break;
             case 1:
                 // Annulation achat/dépot
             // Annulation achat/dépot
             case 2:
             case 6:
                 $lOperation->setTypePaiement(18);
                 return $this->update($lOperation);
                 break;
             case 7:
                 $lOperation->setTypePaiement(18);
                 return $this->update($lOperation);
                 break;
             case 8:
                 $lOperation->setTypePaiement(20);
                 return $this->update($lOperation);
                 break;
             default:
                 $lOperation->setDate(StringUtils::dateTimeAujourdhuiDb());
                 $lOperation->setlibelle("Supression");
                 $this->insertHistorique($lOperation);
                 // Ajout historique
                 //$this->insertHistorique($lDetailOperation); // Ajout historique
                 return OperationManager::delete($pId);
                 // delete de l'opération
                 break;
         }
     } else {
         return false;
     }
 }
 /**
  * @name recherche( $pTypeRecherche, $pTypeCritere, $pCritereRecherche, $pTypeTri, $pCritereTri )
  * @param string nom de la table
  * @param string Le type de critère de recherche
  * @param array(string) champs à récupérer dans la table
  * @param array(array(string, object)) Dictionnaire(champ, valeur)) contenant les champs à filtrer ainsi que la valeur du filtre
  * @param array(array(string, string)) Dictionnaire(champ, sens) contenant les tris à appliquer
  * @return array(OperationChampComplementaireVO)
  * @desc Récupères les lignes de la table selon le critère de recherche puis trie et renvoie la liste de résultat sous forme d'une collection de OperationChampComplementaireVO
  */
 public static function recherche($pTypeRecherche, $pTypeCritere, $pCritereRecherche, $pTypeTri, $pCritereTri)
 {
     // Initialisation du Logger
     $lLogger =& Log::singleton('file', CHEMIN_FICHIER_LOGS);
     $lLogger->setMask(Log::MAX(LOG_LEVEL));
     // Préparation de la requète
     $lChamps = array(OperationChampComplementaireManager::CHAMP_OPERATIONCHAMPCOMPLEMENTAIRE_OPE_ID . "," . OperationChampComplementaireManager::CHAMP_OPERATIONCHAMPCOMPLEMENTAIRE_CHCP_ID . "," . OperationChampComplementaireManager::CHAMP_OPERATIONCHAMPCOMPLEMENTAIRE_VALEUR);
     // Préparation de la requète de recherche
     $lRequete = DbUtils::prepareRequeteRecherche(OperationChampComplementaireManager::TABLE_OPERATIONCHAMPCOMPLEMENTAIRE, $lChamps, $pTypeRecherche, $pTypeCritere, $pCritereRecherche, $pTypeTri, $pCritereTri);
     $lListeOperationChampComplementaire = array();
     if ($lRequete !== false) {
         $lLogger->log("Execution de la requete : " . $lRequete, PEAR_LOG_DEBUG);
         // Maj des logs
         $lSql = Dbutils::executerRequete($lRequete);
         if (mysql_num_rows($lSql) > 0) {
             while ($lLigne = mysql_fetch_assoc($lSql)) {
                 array_push($lListeOperationChampComplementaire, OperationChampComplementaireManager::remplirOperationChampComplementaire($lLigne[OperationChampComplementaireManager::CHAMP_OPERATIONCHAMPCOMPLEMENTAIRE_OPE_ID], $lLigne[OperationChampComplementaireManager::CHAMP_OPERATIONCHAMPCOMPLEMENTAIRE_CHCP_ID], $lLigne[OperationChampComplementaireManager::CHAMP_OPERATIONCHAMPCOMPLEMENTAIRE_VALEUR]));
             }
         } else {
             $lListeOperationChampComplementaire[0] = new OperationChampComplementaireVO();
         }
         return $lListeOperationChampComplementaire;
     }
     $lListeOperationChampComplementaire[0] = new OperationChampComplementaireVO();
     return $lListeOperationChampComplementaire;
 }