Esempio n. 1
0
 public function saveReservation($data, $result, $source, Reservation $reservation = null)
 {
     $hotel = $this->em->getRepository('BackHotelTunisieBundle:Hotel')->find($result['hotel']);
     $calendrier = $this->getCalendrier($result);
     if (is_null($reservation)) {
         $tarifCommercial = $this->em->getRepository('BackCommercialBundle:Tarif')->find(1);
         $client = $data['client'];
         $coordoonnes = array($client->getNomPrenom(), $client->getTel1(), $client->getEmail(), $client->getAdresse());
         $reservation = new Reservation();
         $options = array();
         foreach ($hotel->getOptions() as $option) {
             if (isset($data['option_' . $option->getId()]) && $data['option_' . $option->getId()]) {
                 $options[] = $option->getId();
             }
         }
         $reservation->setClient($client)->setCoordonnees($coordoonnes)->setHotel($hotel)->setDateDebut(\DateTime::createFromFormat('Y-m-d', $result['dateDebut']))->setDateFin(\DateTime::createFromFormat('Y-m-d', $result['dateFin']))->setNuitees($result['nuitees'])->setSurDemande($result['surDemande'])->setOptions($options);
         if (!is_null($client->getAmicale())) {
             $reservation->setAmicale($client->getAmicale());
             if ($client->getResponsable()) {
                 $reservation->setValidatedAmicale(new \DateTime())->setResponsableAmicale($client);
             }
         }
         if (isset($data['observation'])) {
             $reservation->setObservation($data['observation']);
         }
         if ($tarifCommercial && $tarifCommercial->getTimbre()) {
             $reservation->setTimbre($tarifCommercial->getMontantTimbre());
         }
         if ($source == 'backoffice') {
             $user = $this->container->get('security.context')->getToken()->getUser();
             $reservation->setResponsable($user)->setFrontOffice(0);
         } else {
             $reservation->setFrontOffice(1);
         }
         $this->em->persist($reservation);
     }
     $chambreOrdre = 0;
     foreach ($result['chambres'] as $chambre) {
         $noms = array();
         $chambreOrdre++;
         $reservationChambre = new ReservationChambre();
         $reservationChambre->setReservation($reservation)->setChambre($this->em->getRepository('BackHotelTunisieBundle:Chambre')->find($chambre['details']['chambre']))->setArrangement($this->em->getRepository('BackHotelTunisieBundle:Arrangement')->find($chambre['details']['arrangement']))->setOccupants(explode(',', $chambre['details']['occupants']))->setReductions($chambre['details']['reduc'])->setSupplements($chambre['details']['supp'])->setVues($chambre['details']['vue'])->setNoms(array());
         $this->em->persist($reservationChambre);
         foreach ($calendrier as $periode) {
             $jourChambre = new ReservationChambreJour();
             $jourChambre->setChambre($reservationChambre)->setJour(\DateTime::createFromFormat('Y-m-d', $periode['dateDebut']))->setSaisonCalcule($periode['saison'])->setSaisonContingent($this->container->get('saisons')->getSaisonContingent($hotel, $periode['dateDebut'], count($result['chambres'])));
             $this->em->persist($jourChambre);
         }
         foreach ($chambre['adultes'] as $adulte) {
             $ReservationPersonne = new ReservationPersonne();
             $ReservationPersonne->setReservationChambreAdulte($reservationChambre)->setOrdre($adulte['ordre'])->setNom($data['chambre' . $chambreOrdre . 'adulte' . $adulte['ordre']]);
             $this->em->persist($ReservationPersonne);
             $noms[] = $data['chambre' . $chambreOrdre . 'adulte' . $adulte['ordre']];
             foreach ($adulte['jours'] as $jour) {
                 $reservationJour = new ReservationJour();
                 $reservationJour->setPersonne($ReservationPersonne)->setJour(\DateTime::createFromFormat('Y-m-d', $jour['jour']))->setSaison($this->em->getRepository('BackHotelTunisieBundle:Saison')->find($jour['saison']['id']));
                 $this->em->persist($reservationJour);
                 foreach ($jour['lignes'] as $ligne) {
                     if (!is_null($ligne)) {
                         $reservationLigne = new ReservationLigne();
                         $reservationLigne->setJour($reservationJour)->setCode($ligne['code'])->setLibelle($ligne['name'])->setAchat($ligne['achat'])->setVente($ligne['vente']);
                         $this->em->persist($reservationLigne);
                     }
                 }
             }
         }
         foreach ($chambre['enfants'] as $enfant) {
             $ReservationPersonne = new ReservationPersonne();
             $ReservationPersonne->setReservationChambreEnfant($reservationChambre)->setOrdre($enfant['ordre'])->setNom($data['chambre' . $chambreOrdre . 'Enfant' . $enfant['ordre']])->setAge($enfant['age']);
             $this->em->persist($ReservationPersonne);
             $noms[] = $data['chambre' . $chambreOrdre . 'Enfant' . $enfant['ordre']];
             foreach ($enfant['jours'] as $jour) {
                 $reservationJour = new ReservationJour();
                 $reservationJour->setPersonne($ReservationPersonne)->setJour(\DateTime::createFromFormat('Y-m-d', $jour['jour']))->setSaison($this->em->getRepository('BackHotelTunisieBundle:Saison')->find($jour['saison']['id']));
                 $this->em->persist($reservationJour);
                 foreach ($jour['lignes'] as $ligne) {
                     if (!is_null($ligne)) {
                         $reservationLigne = new ReservationLigne();
                         $reservationLigne->setJour($reservationJour)->setCode($ligne['code'])->setLibelle($ligne['name'])->setAchat($ligne['achat'])->setVente($ligne['vente']);
                         $this->em->persist($reservationLigne);
                     }
                 }
             }
         }
         $this->em->persist($reservationChambre->setNoms($noms));
         foreach ($chambre['supplements'] as $suppLigne) {
             if (!is_null($suppLigne)) {
                 $reservationLigne = new ReservationLigne();
                 $reservationLigne->setSupplement($reservationChambre)->setCode($suppLigne['code'])->setLibelle($suppLigne['name'])->setAchat($suppLigne['achat'])->setVente($suppLigne['vente']);
                 $this->em->persist($reservationLigne);
             }
         }
         foreach ($chambre['reductions'] as $reducLigne) {
             if (!is_null($reducLigne)) {
                 $reservationLigne = new ReservationLigne();
                 $reservationLigne->setReduction($reservationChambre)->setCode($reducLigne['code'])->setLibelle($reducLigne['name'])->setAchat($reducLigne['achat'])->setVente($reducLigne['vente']);
                 $this->em->persist($reservationLigne);
             }
         }
     }
     $this->em->flush();
     $this->container->get('users')->getPassager();
     if ($reservation->getFrontOffice()) {
         $this->container->get('mailerservice')->creationFront($reservation, 'SHT');
     } else {
         $this->container->get('mailerservice')->creationBack($reservation, 'SHT');
     }
     return $reservation->getId();
 }