/** * @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 updateAbonnement($pCompteAbonnement) * @param CompteAbonnementVO * @return integer * @desc Met à jour un Abonnement */ private function updateAbonnement($pCompteAbonnement) { // Récupère le produitAbonnement $lProduitAbonnement = $this->getProduit($pCompteAbonnement->getIdProduitAbonnement()); // La liste des Produit identique en abonnement sur des marche en cours $lProduitsMarche = DetailMarcheViewManager::selectProduitAbonnementMarcheActifByIdNomProduit($lProduitAbonnement->getIdNomProduit()); $lListeProduitsMarche = array(); foreach ($lProduitsMarche as $lProduit) { if (isset($lListeProduitsMarche[$lProduit->getProId()])) { array_push($lListeProduitsMarche[$lProduit->getProId()]["lots"], $lProduit); } else { $lListeProduitsMarche[$lProduit->getProId()]["produit"] = $lProduit; $lListeProduitsMarche[$lProduit->getProId()]["lots"] = array(); array_push($lListeProduitsMarche[$lProduit->getProId()]["lots"], $lProduit); } } $lReservationService = new ReservationService(); $lStockService = new StockService(); foreach ($lListeProduitsMarche as $lProduitMarche) { $lSuspendu = false; // Si il n'y a pas de suspension à la date du marché if (TestFonction::dateTimeEstPLusGrandeEgale($lProduitMarche["produit"]->getComDateMarcheDebut(), $pCompteAbonnement->getDateDebutSuspension(), 'db') && TestFonction::dateTimeEstPLusGrandeEgale($pCompteAbonnement->getDateFinSuspension(), $lProduitMarche["produit"]->getComDateMarcheFin(), 'db')) { $lSuspendu = true; } $lPoursuivre = true; // Si le marché n'est pas encore passé if (!TestFonction::dateTimeEstPLusGrandeEgale($lProduitMarche["produit"]->getComDateMarcheDebut(), StringUtils::dateTimeAujourdhuiDb(), 'db')) { $lPoursuivre = false; } if ($lPoursuivre) { // Recherche de l'Id du lot dans le marché pour le produit correspondant. $lIdLot = 0; foreach ($lProduitMarche["lots"] as $lLot) { if (fmod($pCompteAbonnement->getQuantite(), $lLot->getDcomTaille()) == 0) { $lIdLot = $lLot->getDcomId(); $lTailleLot = $lLot->getDcomTaille(); $lPrixLot = $lLot->getDcomPrix(); } } // Si un lot correspond $lPoursuivre = $lIdLot != 0; if ($lPoursuivre) { $lReservation = new ReservationVO(); $lReservation->getId()->setIdCompte($pCompteAbonnement->getIdCompte()); $lReservation->getId()->setIdCommande($lProduitMarche["produit"]->getComId()); $lReservationsActuelle = $lReservationService->get($lReservation->getId()); $lTestDetailReservation = $lReservationsActuelle->getDetailReservation(); if (empty($lTestDetailReservation) && !$lSuspendu && $pCompteAbonnement->getEtat() == 0) { // Ajoute une réservation $lQuantite = $pCompteAbonnement->getQuantite(); if ($lProduitMarche["produit"]->getProStockInitial() != -1) { $lStockProduit = $lStockService->selectByIdProduitStockProduitReservation($lProduitMarche["produit"]->getProId()); $lStockDispo = $lProduitMarche["produit"]->getProStockInitial() - $lStockProduit[0]->getStoQuantite(); if ($lStockDispo > 0) { if ($lStockDispo < $lQuantite) { $lQuantite = $lStockDispo; } } else { // Plus de stock $lPoursuivre = false; } } if ($lPoursuivre) { if ($lProduitMarche["produit"]->getProMaxProduitCommande() != -1 && $lProduitMarche["produit"]->getProMaxProduitCommande() < $lQuantite) { $lQuantite = $lProduitMarche["produit"]->getProMaxProduitCommande(); } $lDetailReservation = new DetailReservationVO(); $lDetailReservation->setIdDetailCommande($lIdLot); $lDetailReservation->setQuantite(-1 * $lQuantite); $lDetailReservation->setMontant(-1 * $lQuantite / $lTailleLot * $lPrixLot); $lReservationsActuelle->addDetailReservation($lDetailReservation); $lReservationsActuelle->setId($lReservation->getId()); $lReservationService->set($lReservationsActuelle); } } else { // Si il y a une réservation déjà sur ce produit on la met à jour $lMaj = false; $lQuantiteActuelle = 0; foreach ($lReservationsActuelle->getDetailReservation() as $lDetailReservationActuelle) { if ($lDetailReservationActuelle->getIdProduit() == $lProduitMarche["produit"]->getProId()) { $lQuantiteActuelle = $lDetailReservationActuelle->getQuantite(); $lMaj = true; } else { $lReservation->addDetailReservation($lDetailReservationActuelle); } } if ($lMaj || !$lMaj && !$lSuspendu && $pCompteAbonnement->getEtat() == 0) { $lQuantite = $pCompteAbonnement->getQuantite(); if ($lProduitMarche["produit"]->getProStockInitial() != -1) { $lStockProduit = $lStockService->selectByIdProduitStockProduitReservation($lProduitMarche["produit"]->getProId()); $lStockDispo = $lProduitMarche["produit"]->getProStockInitial() - $lStockProduit[0]->getStoQuantite() - $lQuantiteActuelle; if ($lStockDispo > 0) { if ($lStockDispo < $lQuantite) { $lQuantite = $lStockDispo; } } else { // Plus de stock $lPoursuivre = false; } } if ($lPoursuivre) { if ($lProduitMarche["produit"]->getProMaxProduitCommande() != -1 && $lProduitMarche["produit"]->getProMaxProduitCommande() < $lQuantite) { $lQuantite = $lProduitMarche["produit"]->getProMaxProduitCommande(); } $lDetailReservation = new DetailReservationVO(); $lDetailReservation->setIdDetailCommande($lIdLot); $lDetailReservation->setQuantite(-1 * $lQuantite); $lDetailReservation->setMontant(-1 * $lQuantite / $lTailleLot * $lPrixLot); if ($pCompteAbonnement->getEtat() == 0 && !$lSuspendu) { // Si l'abonnement est toujours actif et qu'il n'y a pas de suspension $lReservation->addDetailReservation($lDetailReservation); } } $lReservationService->set($lReservation); } } } } } return CompteAbonnementManager::update($pCompteAbonnement); }
/** * @name getInfoAchatMarche($pParam) * @return InfoAchatCommandeResponse * @desc Retourne les infos de réservation d'un adhérent */ public function getInfoAchatMarche($pParam) { $lVr = MarcheValid::validGetInfoAchatMarche($pParam); if ($lVr->getValid()) { $lResponse = new InfoAchatCommandeResponse(); if ($pParam["id_adherent"] != 0) { // Si ce n'est pas le compte invité $lAdherent = AdherentViewManager::select($pParam["id_adherent"]); $lResponse->setAdherent($lAdherent); } $lStockService = new StockService(); $lStockProduitsDisponible = $lStockService->getProduitsDisponible(); // Stock de produit disponible $lStock = array(); $lProduitsMarche = array(); $lProduitsReservation = array(); $lProduitsAchat = array(); if ($pParam["id_commande"] != -1) { // Si ce n'est pas la caisse permanente $lMarcheService = new MarcheService(); $lMarche = $lMarcheService->get($pParam["id_commande"]); $lProduitsMarche = $lMarche->getProduits(); $lResponse->setMarche($lMarche); // Les informations du marché if ($pParam["id_adherent"] != 0) { // Si ce n'est pas le compte invité $lReservationService = new ReservationService(); $lIdReservation = new IdReservationVO(); $lIdReservation->setIdCompte($lAdherent->getAdhIdCompte()); $lIdReservation->setIdCommande($pParam["id_commande"]); // Récupère les réservations actives $lProduitsReservation = $lReservationService->get($lIdReservation, true)->getDetailReservation(); $lResponse->setReservation($lProduitsReservation); // La réservation $lAchatService = new AchatService(); $lOperationsAchat = $lAchatService->selectOperationAchat($lAdherent->getAdhIdCompte(), $pParam["id_commande"]); $lAchat = new AchatVO(); if (!is_null($lOperationsAchat[0]->getId())) { $lAchat = $lAchatService->get($lOperationsAchat[0]->getId()); $lProduitsAchat = $lAchat->getProduits(); } else { $lOperationService = new OperationService(); $lOperationsRechargement = $lOperationService->getOperationRechargementSurMarche($lAdherent->getAdhIdCompte(), $pParam["id_commande"]); if (!is_null($lOperationsRechargement[0]->getId())) { $lAchat = $lAchatService->get($lOperationsRechargement[0]->getId()); } } $lResponse->setAchats($lAchat); // L'achat } } if ($pParam["id_adherent"] != 0) { // Si ce n'est pas le compte invité $lAdhesionService = new AdhesionService(); $lResponse->setNbAdhesionEnCours($lAdhesionService->getNbAdhesionEnCoursSurAdherent($pParam["id_adherent"])); } // Fusion des stocks $lLotsProduits = array(); foreach ($lStockProduitsDisponible as $lProduitStock) { if (!is_null($lProduitStock->getId())) { $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 = $lProduitStock->getUnite(); $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(); $lMontant = NULL; $lQuantite = NULL; $lIdDetailCommande = NULL; // Ajout des réservations if (empty($lProduitsAchat)) { foreach ($lProduitsReservation as $lProduitReservation) { if ($lProduitReservation->getIdNomProduit() == $lProduitMarche->getIdNom() && $lProduitReservation->getUnite() == $lProduitMarche->getUnite()) { $lQuantite = $lProduitReservation->getQuantite(); $lMontant = $lProduitReservation->getMontant(); $lIdDetailCommande = $lProduitReservation->getIdDetailCommande(); } } } $lStock[$lProduitMarche->getCproNom()]["produits"][$lProduitMarche->getNom() . $lProduitMarche->getUnite()] = new ProduitDetailAchatAfficheVO($lProduitMarche->getIdNom(), null, null, null, null, $lIdDetailCommande, null, null, null, $lQuantite, $lUnite, null, $lUnite, $lMontant, 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 getAchatEtReservation($pParam) * @return AchatAdherentResponse * @desc Retourne les détails d'une réservation et des achats du marché */ public function getAchatEtReservation($pParam) { $lVr = AfficheAchatAdherentValid::validGetAchatEtReservation($pParam); if ($lVr->getValid()) { $lIdAdherent = $pParam["id_adherent"]; $lIdMarche = $pParam["id_marche"]; $lIdOperation = $pParam["idOperation"]; $lResponse = new AchatAdherentResponse(); $lAdherent = AdherentViewManager::select($lIdAdherent); $lResponse->setAdherent($lAdherent); // Tableau pour rechercher le détail des produits achetés $lIdProduits = array(); // Si achat sur marché recherche si il y a une réservation et le détail des achats if (!empty($lIdMarche) && empty($lIdOperation)) { $lReservationService = new ReservationService(); $lIdReservation = new IdReservationVO(); $lIdReservation->setIdCompte($lAdherent->getAdhIdCompte()); $lIdReservation->setIdCommande($lIdMarche); $lReservation = $lReservationService->get($lIdReservation); $lResponse->setReservation($lReservation); if (!empty($lReservation)) { // Récupère les informations sur les produits achetés foreach ($lReservation->getDetailReservation() as $lDetailReservation) { array_push($lIdProduits, $lDetailReservation->getIdProduit()); } } $lAchatService = new AchatService(); $lIdAchat = new IdAchatVO(); $lIdAchat->setIdCompte($lAdherent->getAdhIdCompte()); $lIdAchat->setIdCommande($lIdMarche); $lAchats = $lAchatService->getAll($lIdAchat); $lResponse->setAchats($lAchats); if (is_array($lAchats)) { foreach ($lAchats as $lAchat) { foreach ($lAchat->getDetailAchat() as $lDetailAchat) { array_push($lIdProduits, $lDetailAchat->getIdProduit()); } foreach ($lAchat->getDetailAchatSolidaire() as $lDetailAchat) { array_push($lIdProduits, $lDetailAchat->getIdProduit()); } } } } // Récupère l'achat si il il y une operation if (!empty($lIdOperation)) { $lAchatService = new AchatService(); $lIdAchat = new IdAchatVO(); $lIdAchat->setIdAchat($lIdOperation); $lAchat = $lAchatService->get($lIdAchat); $lResponse->setAchats($lAchat); foreach ($lAchat->getDetailAchat() as $lDetailAchat) { array_push($lIdProduits, $lDetailAchat->getIdProduit()); } foreach ($lAchat->getDetailAchatSolidaire() as $lDetailAchat) { array_push($lIdProduits, $lDetailAchat->getIdProduit()); } } $lProduitService = new ProduitService(); $lResponse->setDetailProduit($lProduitService->selectDetailProduits($lIdProduits)); return $lResponse; } return $lVr; }
/** * @name supprimerProduit($pId) * @param integer * @desc Supprime un produit du marché */ public function supprimerProduit($pId) { $lProduit = ProduitManager::select($pId); // Suppression des lots $lLots = DetailCommandeManager::selectByIdProduit($pId); foreach ($lLots as $lLot) { $lLot->setEtat(1); DetailCommandeManager::update($lLot); } $lProduit->setEtat(1); ProduitManager::update($lProduit); // Modif des réservations $lReservationService = new ReservationService(); $lIdMarche = $lProduit->getIdCommande(); foreach ($lLots as $lLot) { // Chaque lot modifié $lListeDetailReservation = $lReservationService->getReservationSurLot($lLot->getId()); 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() != $lLot->getId()) { // Ne positionne que les autres produits array_push($lNvDetailReservation, $lDetailReservationActuelle); } } $lReservationVO->setDetailReservation($lNvDetailReservation); $lReservationService->set($lReservationVO); // Maj de la reservation } } } }
/** * @name modifierReservation($pParam) * @return ListeReservationCommandeVR * @desc Met à jour une réservation */ public function modifierReservation($pParam) { $pParam['idCompte'] = $_SESSION[ID_COMPTE]; $lVr = ReservationMarcheValid::validUpdate($pParam); if ($lVr->getValid()) { $lReservationService = new ReservationService(); $lIdLot = $pParam["detailReservation"][0]["stoIdDetailCommande"]; $lDetailMarche = DetailMarcheViewManager::selectByLot($lIdLot); $lReservation = new ReservationVO(); $lReservation->getId()->setIdCompte($_SESSION[ID_COMPTE]); $lReservation->getId()->setIdCommande($lDetailMarche[0]->getComId()); $lReservationAbonnement = array(); $lReservationsActuelle = $lReservationService->get($lReservation->getId()); $lProduitsAbonnementMarche = ProduitManager::selectbyIdMarcheProduitAbonnement($lDetailMarche[0]->getComId()); foreach ($lReservationsActuelle->getDetailReservation() as $lReservationActuelle) { foreach ($lProduitsAbonnementMarche as $lProduitAboMarche) { if ($lReservationActuelle->getIdProduit() == $lProduitAboMarche->getId()) { $lReservationAbonnement[$lProduitAboMarche->getId()] = $lReservationActuelle; } } } foreach ($pParam["detailReservation"] as $lDetail) { $lDetailCommande = DetailCommandeManager::select($lDetail["stoIdDetailCommande"]); $lPrix = $lDetail["stoQuantite"] / $lDetailCommande->getTaille() * $lDetailCommande->getPrix(); $lDetailReservation = new DetailReservationVO(); $lDetailReservation->setIdDetailCommande($lDetail["stoIdDetailCommande"]); $lDetailReservation->setQuantite($lDetail["stoQuantite"]); $lDetailReservation->setMontant($lPrix); $lAjout = true; foreach ($lProduitsAbonnementMarche as $lProduitAboMarche) { if ($lDetailCommande->getIdProduit() == $lProduitAboMarche->getId()) { if (!isset($lReservationAbonnement[$lProduitAboMarche->getId()])) { $lReservationAbonnement[$lProduitAboMarche->getId()] = $lDetailReservation; } $lAjout = false; } } if ($lAjout) { $lReservation->addDetailReservation($lDetailReservation); } } foreach ($lReservationAbonnement as $lReservationAbo) { $lReservation->addDetailReservation($lReservationAbo); } $lIdOperation = $lReservationService->set($lReservation); } return $lVr; }