/**
  * @name getReservation($pParam)
  * @return ReservationAdherentResponse
  * @desc Retourne les détails d'une réservation et de la commande
  */
 public function getReservation($pParam)
 {
     $lVr = AfficheReservationAdherentValid::validAjout($pParam);
     if ($lVr->getValid()) {
         $lIdAdherent = $pParam["id_adherent"];
         $lIdCommande = $pParam["id_commande"];
         $lResponse = new ReservationAdherentResponse();
         $lAdherent = AdherentViewManager::select($lIdAdherent);
         $lResponse->setAdherent($lAdherent);
         $lMarcheService = new MarcheService();
         $lResponse->setMarche($lMarcheService->get($pParam["id_commande"]));
         $lReservationService = new ReservationService();
         $lIdReservation = new IdReservationVO();
         $lIdReservation->setIdCompte($lAdherent->getAdhIdCompte());
         $lIdReservation->setIdCommande($pParam["id_commande"]);
         if ($lReservationService->enCoursOuAchete($lIdReservation)) {
             $lReservation = $lReservationService->get($lIdReservation);
             $lResponse->setReservation($lReservation->getDetailReservation());
             $lResponse->setEtat($lReservation->getEtat());
         } else {
             $lResponse->setEtat(null);
         }
         return $lResponse;
     }
     return $lVr;
 }
 /**
  * @name getInfoCompte()
  * @desc Donne les infos sur le compte du zeybu
  */
 public function getInfoCompte()
 {
     $lCompteService = new CompteService();
     $lOperationService = new OperationService();
     $lMarcheService = new MarcheService();
     $lSoldeSolidaire = $lCompteService->get(-2)->getSolde();
     $lSoldeTotal = $lCompteService->get(-1)->getSolde();
     $lSoldeCaisse = $lOperationService->getSoldeCaisse();
     $lSoldeBanque = $lOperationService->getSoldeBanque();
     return new InfoCompteZeybuResponse($lSoldeTotal, $lSoldeSolidaire, $lSoldeCaisse, $lSoldeBanque, $lMarcheService->get());
 }
 /**
  * @name getInfoCommande($pParam)
  * @return EditerCommandeResponse
  * @desc Retourne la liste des adhérents qui ont réservé sur cette commande et les infos sur la commande.
  */
 public function getInfoCommande($pParam)
 {
     $lVr = EditerCommandeValid::validGetInfoCommande($pParam);
     if ($lVr->getValid()) {
         $lIdMarche = $pParam["id_marche"];
         $lMarcheService = new MarcheService();
         $lMarche = $lMarcheService->get($lIdMarche);
         $lResponse = new EditerCommandeResponse();
         $lResponse->setMarche($lMarche);
         return $lResponse;
     }
     return $lVr;
 }
 /**
  * @name getInfoCommande($pParam)
  * @return AfficheBonDeCommandeResponse
  * @desc Retourne la liste des producteurs de cette commande.
  */
 public function getInfoCommande($pParam)
 {
     $lVr = BonDeCommandeValid::validGetInfoCommande($pParam);
     if ($lVr->getValid()) {
         $lIdMarche = $pParam["id_commande"];
         $lMarcheService = new MarcheService();
         $lMarche = $lMarcheService->get($lIdMarche);
         $lResponse = new AfficheBonDeCommandeResponse();
         $lProducteurs = ListeProducteurMarcheViewManager::select($lIdMarche);
         $lResponse->setComNumero($lMarche->getNumero());
         $lResponse->setArchive($lMarche->getArchive());
         $lResponse->setProducteurs($lProducteurs);
         return $lResponse;
     }
     return $lVr;
 }
 /**
  * @name getInfoDupliquerMarche($pParam)
  * @return AfficheAjoutCommandeResponse
  * @desc Retourne la liste des produits
  */
 public function getInfoDupliquerMarche($pParam)
 {
     $lVr = EditerCommandeValid::validGetInfoCommande($pParam);
     if ($lVr->getValid()) {
         $lIdMarche = $pParam["id_marche"];
         $lMarcheService = new MarcheService();
         $lMarche = $lMarcheService->get($lIdMarche);
         $lAbonnementService = new AbonnementService();
         foreach ($lMarche->getProduits() as $lProduit) {
             if ($lProduit->getType() == 2) {
                 $lDetailAbonnement = $lAbonnementService->getProduitByIdNom($lProduit->getIdNom());
                 // Gestion des limites de stock et max adhérent pour les abonnements
                 $lProduit->setStockInitial($lDetailAbonnement->getStockInitial());
                 $lProduit->setQteMaxCommande($lDetailAbonnement->getMax());
                 $lNvLots = array();
                 foreach ($lDetailAbonnement->getLots() as $lLot) {
                     $lAbonnement = $lAbonnementService->getAbonnementSurLot($lLot->getId());
                     $lLotAbonnementMarcheVO = new LotAbonnementMarcheVO();
                     $lLotAbonnementMarcheVO->setId($lLot->getId());
                     $lLotAbonnementMarcheVO->setTaille($lLot->getTaille());
                     $lLotAbonnementMarcheVO->setPrix($lLot->getPrix());
                     if (!is_null($lAbonnement[0]->getCptAboId())) {
                         $lLotAbonnementMarcheVO->setReservation(true);
                     }
                     array_push($lNvLots, $lLotAbonnementMarcheVO);
                 }
                 $lProduit->setLots($lNvLots);
             }
         }
         $lResponse = new DupliquerMarcheResponse();
         $lResponse->setMarche($lMarche);
         $lFermeService = new FermeService();
         $lResponse->setListeFerme($lFermeService->get());
         return $lResponse;
     }
     return $lVr;
 }
 /**
  * @name getListeMarche()
  * @return ListeMarcheResponse
  * @desc Retourne la liste des marchés.
  */
 public function getListeMarche()
 {
     $lMarcheService = new MarcheService();
     return new ListeMarcheResponse($lMarcheService->get());
 }
 /**
  * @name getInfoAchatMarche($pParam)
  * @return InfoAchatCommandeResponse
  * @desc Retourne les infos de réservation d'un adhérent
  */
 public function getInfoAchatMarche($pParam)
 {
     $lVr = AchatValid::validInfoAchatMarche($pParam);
     if ($lVr->getValid()) {
         $lResponse = new InfoAchatCommandeResponse();
         $lProduitsAchat = array();
         $lIdMarche = 0;
         $lIdCompte = 0;
         if (!empty($pParam["id_commande"])) {
             $lIdMarche = $pParam["id_commande"];
         }
         if (!empty($pParam["id"])) {
             $lAchatService = new AchatService();
             $lAchat = $lAchatService->get($pParam["id"]);
             $lProduitsAchat = $lAchat->getProduits();
             $lResponse->setAchats($lAchat);
             // L'achat
             if (!is_null($lAchat->getOperationAchat())) {
                 $lIdCompte = $lAchat->getOperationAchat()->getIdCompte();
                 $lChcp = $lAchat->getOperationAchat()->getChampComplementaire();
                 if (isset($lChcp[1])) {
                     $lIdMarche = $lChcp[1]->getValeur();
                 }
             }
             if (!is_null($lAchat->getOperationAchatSolidaire())) {
                 $lIdCompte = $lAchat->getOperationAchatSolidaire()->getIdCompte();
                 $lChcp = $lAchat->getOperationAchatSolidaire()->getChampComplementaire();
                 if (isset($lChcp[1])) {
                     $lIdMarche = $lChcp[1]->getValeur();
                 }
             }
         }
         if ($pParam["id_adherent"] > 0) {
             // Si c'est un compte adhérent
             $lData = $lVr->getData();
             $lIdCompte = $lData['adherent']->getAdhIdCompte();
             $lResponse->setAdherent($lData['adherent']);
             $lAdhesionService = new AdhesionService();
             $lResponse->setNbAdhesionEnCours($lAdhesionService->getNbAdhesionEnCoursSurAdherent($pParam["id_adherent"]));
         }
         $lStockService = new StockService();
         $lStockProduitsDisponible = $lStockService->getProduitsDisponible();
         $lStock = array();
         $lProduitsMarche = array();
         if ($lIdMarche != 0) {
             // Si ce n'est pas la caisse permanente
             $lMarcheService = new MarcheService();
             $lMarche = $lMarcheService->get($lIdMarche);
             $lProduitsMarche = $lMarche->getProduits();
             $lResponse->setMarche($lMarche);
             // Les informations du marché
         }
         // Fusion des stocks
         $lLotsProduits = array();
         foreach ($lStockProduitsDisponible as $lProduitStock) {
             $lAjout = true;
             foreach ($lProduitsMarche as $lProduitMarche) {
                 if ($lProduitStock->getIdNom() == $lProduitMarche->getIdNom() && $lProduitStock->getUnite() == $lProduitMarche->getUnite()) {
                     $lAjout = false;
                 }
             }
             if ($lAjout) {
                 if (!isset($lStock[$lProduitStock->getCproNom()])) {
                     $lStock[$lProduitStock->getCproNom()] = array("cproId" => $lProduitStock->getIdCategorie(), "cproNom" => $lProduitStock->getCproNom(), "produits" => array());
                 }
                 $lUnite = !is_null($lProduitStock->getUnite()) ? $lProduitStock->getUnite() : $lProduitStock->getUniteSolidaire();
                 $lStock[$lProduitStock->getCproNom()]["produits"][$lProduitStock->getNom() . $lProduitStock->getUnite()] = new ProduitDetailAchatAfficheVO($lProduitStock->getIdNom(), null, null, null, null, null, null, null, null, null, $lUnite, null, $lUnite, null, null, $lProduitStock->getIdCategorie(), $lProduitStock->getCproNom(), null, $lProduitStock->getNom());
                 $lLotsProduits[$lProduitStock->getIdNom() . $lProduitStock->getUnite()] = array("nom" => $lProduitStock->getNom(), "type" => "modele", "lots" => $lProduitStock->getLots());
             }
         }
         foreach ($lProduitsMarche as $lProduitMarche) {
             if (!isset($lStock[$lProduitMarche->getCproNom()])) {
                 $lStock[$lProduitMarche->getCproNom()] = array("cproId" => $lProduitMarche->getIdCategorie(), "cproNom" => $lProduitMarche->getCproNom(), "produits" => array());
             }
             $lUnite = !is_null($lProduitMarche->getUnite()) ? $lProduitMarche->getUnite() : $lProduitMarche->getUniteSolidaire();
             $lStock[$lProduitMarche->getCproNom()]["produits"][$lProduitMarche->getNom() . $lProduitMarche->getUnite()] = new ProduitDetailAchatAfficheVO($lProduitMarche->getIdNom(), null, null, null, null, null, null, null, null, null, $lUnite, null, $lUnite, null, null, $lProduitMarche->getIdCategorie(), $lProduitMarche->getCproNom(), null, $lProduitMarche->getNom());
             $lLotsProduits[$lProduitMarche->getIdNom() . $lProduitMarche->getUnite()] = array("nom" => $lProduitMarche->getNom(), "type" => "marche", "lots" => $lProduitMarche->getLots());
         }
         foreach ($lProduitsAchat as $lProduitAchat) {
             $lUnite = !is_null($lProduitAchat->getUnite()) ? $lProduitAchat->getUnite() : $lProduitAchat->getUniteSolidaire();
             if (!is_null($lUnite)) {
                 if (isset($lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite])) {
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setIdStock($lProduitAchat->getIdStock());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setIdStockSolidaire($lProduitAchat->getIdStockSolidaire());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setIdDetailCommande($lProduitAchat->getIdDetailCommande());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setIdModeleLot($lProduitAchat->getIdModeleLot());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setIdDetailCommandeSolidaire($lProduitAchat->getIdDetailCommandeSolidaire());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setIdModeleLotSolidaire($lProduitAchat->getIdModeleLotSolidaire());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setQuantite($lProduitAchat->getQuantite());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setQuantiteSolidaire($lProduitAchat->getQuantiteSolidaire());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setMontant($lProduitAchat->getMontant());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setMontantSolidaire($lProduitAchat->getMontantSolidaire());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setIdDetailOperation($lProduitAchat->getIdDetailOperation());
                     $lStock[$lProduitAchat->getCproNom()][$lProduitAchat->getNproNom()][$lUnite]->setIdDetailOperationSolidaire($lProduitAchat->getIdDetailOperationSolidaire());
                 } else {
                     if (!isset($lStock[$lProduitAchat->getCproNom()])) {
                         $lStock[$lProduitAchat->getCproNom()] = array("cproId" => $lProduitAchat->getCproId(), "cproNom" => $lProduitAchat->getCproNom(), "produits" => array());
                     }
                     $lProduitAchat->setUnite($lUnite);
                     $lProduitAchat->setUniteSolidaire($lUnite);
                     $lStock[$lProduitAchat->getCproNom()]["produits"][$lProduitAchat->getNproNom() . $lUnite] = $lProduitAchat;
                     // Ajout des lots
                     $lModelesLot = ModeleLotManager::selectByIdNomProduit($lProduitAchat->getIdNomProduit());
                     // Récupère même les lots supprimés car il y a peut être eu un achat sur ce lot précédemment
                     $lLots = array();
                     foreach ($lModelesLot as $lModeleLot) {
                         $lLot = new DetailMarcheVO();
                         $lLot->setId($lModeleLot->getId());
                         $lLot->setTaille($lModeleLot->getQuantite());
                         $lLot->setPrix($lModeleLot->getPrix());
                         $lLots[$lModeleLot->getId()] = $lLot;
                     }
                     $lLotsProduits[$lProduitAchat->getIdNomProduit() . $lUnite] = array("nom" => $lProduitAchat->getNproNom(), "type" => "modele", "lots" => $lLots);
                 }
             }
         }
         ksort($lStock);
         $lResponse->setStock($lStock);
         // Stock de produit disponible
         $lResponse->setLots($lLotsProduits);
         // Lots des produits
         $lBanqueService = new BanqueService();
         $lTypePaiementService = new TypePaiementService();
         $lResponse->setTypePaiement($lTypePaiementService->selectVisible());
         // Type de paiment
         $lResponse->setBanques($lBanqueService->getAllActif());
         // Liste des banques
         $lResponse->setIdRequete(uniqid());
         return $lResponse;
     }
     return $lVr;
 }
 /**
  * @name ajoutReservation($pIdCompte,$pIdMarche)
  * @param integer
  * @param integer
  * @return bool
  * @desc Positionne les réservations pour les abonnements du compte sur le maché
  */
 public function ajoutReservation($pIdCompte, $pIdMarche)
 {
     $lProduits = $this->getProduitsAbonne($pIdCompte);
     $lMarcheService = new MarcheService();
     $lMarche = $lMarcheService->get($pIdMarche);
     $lReservationAbonnement = array("idCompte" => $pIdCompte, "produits" => array());
     foreach ($lMarche->getProduits() as $lNouveauProduit) {
         // Ajout des réservations pour abonnement
         if ($lNouveauProduit->getType() == 2) {
             $lIdNomProduit = $lNouveauProduit->getIdNom();
             foreach ($lProduits as $lProduit) {
                 if ($lIdNomProduit == $lProduit->getNproId()) {
                     // Pas de suspension de l'abonnement et stock dispo pour positionner cette réservation (ou pas de limite de stock)
                     if (!(TestFonction::dateTimeEstPLusGrandeEgale($lMarche->getDateMarcheDebut(), $lProduit->getCptAboDateDebutSuspension(), 'db') && TestFonction::dateTimeEstPLusGrandeEgale($lProduit->getCptAboDateFinSuspension(), $lMarche->getDateMarcheDebut(), 'db')) && !(TestFonction::dateTimeEstPLusGrandeEgale($lMarche->getDateMarcheFin(), $lProduit->getCptAboDateDebutSuspension(), 'db') && TestFonction::dateTimeEstPLusGrandeEgale($lProduit->getCptAboDateFinSuspension(), $lMarche->getDateMarcheFin(), 'db')) && ($lNouveauProduit->getStockReservation() >= $lProduit->getCptAboQuantite() || $lNouveauProduit->getStockInitial() == -1)) {
                         foreach ($lNouveauProduit->getLots() as $lLot) {
                             $lDcomId = $lLot->getId();
                         }
                         $lReservationAbonnement["produits"][$lIdNomProduit] = array("id" => $lIdNomProduit, "idLot" => $lDcomId, "quantite" => $lProduit->getCptAboQuantite());
                     }
                 }
             }
         }
     }
     // Positionnement des réservations
     $lReservationService = new ReservationService();
     $lReservationVO = new ReservationVO();
     $lReservationVO->getId()->setIdCompte($pIdCompte);
     $lReservationVO->getId()->setIdCommande($pIdMarche);
     $lEnregistrer = false;
     foreach ($lReservationAbonnement["produits"] as $lDetail) {
         $lDetailCommande = DetailCommandeManager::select($lDetail["idLot"]);
         $lPrix = $lDetail["quantite"] / $lDetailCommande->getTaille() * $lDetailCommande->getPrix();
         $lDetailReservation = new DetailReservationVO();
         $lDetailReservation->setIdDetailCommande($lDetail["idLot"]);
         $lDetailReservation->setQuantite($lDetail["quantite"] * -1);
         $lDetailReservation->setMontant($lPrix * -1);
         $lReservationVO->addDetailReservation($lDetailReservation);
         $lEnregistrer = true;
     }
     if ($lEnregistrer) {
         $lReservationService->set($lReservationVO);
     }
 }
 /**
  * @name controleModifierReservation($pParam)
  * @return ListeReservationCommandeVR
  * @desc Vérifie si il est possible de modifier la réservation
  */
 public function controleModifierReservation($pParam)
 {
     $pParam['idCompte'] = $_SESSION[ID_COMPTE];
     $lVr = ReservationMarcheValid::validAjout($pParam);
     if ($lVr->getValid()) {
         $lIdLot = $pParam["detailReservation"][0]["stoIdDetailCommande"];
         $lDetailMarche = DetailMarcheViewManager::selectByLot($lIdLot);
         $lResponse = new ReservationMarcheResponse();
         $lMarcheService = new MarcheService();
         $lResponse->setMarche($lMarcheService->get($lDetailMarche[0]->getComId()));
         $lResponse->setAdherent(AdherentViewManager::select($_SESSION[DROIT_ID]));
         return $lResponse;
     }
     return $lVr;
 }