public function createbooking(Reservation $reservation)
 {
     $configResaBooking = $this->em->find('BackResaBookingBundle:Configuration', 1);
     $configAgence = $this->em->find('BackAdministrationBundle:Agence', 1);
     $organisateur = new Traveller('adult', null, null, null, $configResaBooking->getPrenom(), $configResaBooking->getNom(), $configResaBooking->getCivilite(), $configResaBooking->getAdresse(), "Tunisie", $configResaBooking->getVille(), $configResaBooking->getEmail(), $configResaBooking->getTel(), $configResaBooking->getCodePostal());
     $infoAgence = new infoagence('debiteur', $configAgence->getNom(), null, "confirmer", null, null, $configAgence->getNom());
     $client = new \SoapClient($configResaBooking->getWsdl());
     $request = array($reservation->getReponseDevis()['session'], $reservation->getTravellers(), $organisateur, $configResaBooking->getLogin(), $configResaBooking->getPassword(), null, $infoAgence, null, null);
     return $client->__soapCall('createbooking', $request);
 }
 public function devisAction($pension, Hotel $hotel, $debut, $fin, $room1, $room2, $room3, $room4, $room5)
 {
     $em = $this->getDoctrine()->getManager();
     $user = $this->get('security.context')->getToken()->getUser();
     if ($this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY') && !is_null($user->getClient())) {
         $client = $user->getClient();
     } else {
         $client = $this->container->get('users')->getPassager();
     }
     $confPaiement = $em->find('BackHotelTunisieBundle:ConfigurationPayement', 1);
     if ($confPaiement) {
         $choices[2] = 'Paiement Total en ligne';
         if ($confPaiement->getAvance() != 0) {
             $choices[3] = 'Paiement avance de ' . $confPaiement->getAvance() . '% en ligne';
         }
     }
     $reponse = $this->container->get('resabookingservice')->availabilityHotel($hotel->getProduit()['region'], $debut, $fin, $this->container->get('resabookingservice')->getRooms($room1, $room2, $room3, $room4, $room5), $hotel->getId());
     if ($reponse->rep->statut == 'failure') {
         $this->getRequest()->getSession()->getFlashBag()->add('warning', $reponse->rep->detail_erreur);
         return $this->redirect($this->generateUrl('front_resabooking_initialise_date'));
     }
     $chambs = new chambs();
     foreach ($reponse->hots[0]->chambres[0]->chambre[0]->chamb as $chamb) {
         $chambs->addChamb($chamb);
     }
     $reponseDevis = $this->container->get('resabookingservice')->devis($reponse->session, $hotel->getId(), $pension, $chambs, null);
     if ($reponseDevis->rep->statut == 'failure') {
         $this->getRequest()->getSession()->getFlashBag()->add('warning', $reponseDevis->rep->detail_erreur);
         return $this->redirect($this->generateUrl('front_resabooking_initialise_date'));
     }
     $request = $this->getRequest();
     if ($request->isMethod('POST')) {
         $travellerPrincipale = new Traveller('adult', null, null, null, $request->get("FirstName"), $request->get("LastName"), $request->get('civiliti'), $request->get('adresse'), $request->get('pays'), $request->get('ville'), $request->get('mail'), $request->get('tel'), $request->get('cp'));
         $travellers = new Travellers();
         $index = 1;
         foreach ($chambs->getChs() as $chamb) {
             for ($i = 1; $i <= $chamb->nombre_adult; $i++) {
                 $traveller = new Traveller('adult');
                 if ($i == 1 && $index == 1) {
                     $traveller = $travellerPrincipale;
                 } else {
                     $traveller->setFirstName($request->get($index . "_AdulteFirstName_" . $i));
                     $traveller->setLastName($request->get($index . "_AdulteLastName_" . $i));
                 }
                 $travellers->addTraveller($traveller);
             }
             for ($i = 1; $i <= $chamb->nombre_enfant; $i++) {
                 $traveller = new Traveller('enfant');
                 $traveller->setFirstName($request->get($index . "_EnfantFirstName_" . $i));
                 $traveller->setLastName($request->get($index . "_EnfantLastName_" . $i));
                 $travellers->addTraveller($traveller);
             }
             for ($i = 1; $i <= $chamb->nombre_bebe; $i++) {
                 $traveller = new Traveller('bebe');
                 $traveller->setFirstName($request->get($index . "_BeBeFirstName_" . $i));
                 $traveller->setLastName($request->get($index . "_BeBeLastName_" . $i));
                 $travellers->addTraveller($traveller);
             }
             $index++;
         }
         $reservation = new Reservation();
         $reservation->setClient($client)->setChambs($chambs)->setTraveller($travellerPrincipale)->setTravellers($travellers)->setHotel($hotel)->setPension($pension)->setReponseDevis($reponseDevis)->setTotalAchat($reponseDevis->price)->setTotal($this->get('resabookingservice')->margeResaBooking($reponseDevis->price))->setDateDebut(\DateTime::createFromFormat('Y-m-d', $debut))->setDateFin(\DateTime::createFromFormat('Y-m-d', $fin));
         if ($request->get('paiement') == 3 && $confPaiement->getAvance() != 0) {
             $montan = round($reservation->getTotal() * $confPaiement->getAvance() / 100);
         } else {
             $montan = $reservation->getTotal();
         }
         $em->persist($reservation->setTypePayement($request->get('paiement'))->setMontantPayementElectronique($montan));
         $em->flush();
         return $this->redirect($confPaiement->getUrl() . 'RB-' . $reservation->getId() . '&Montant=' . $montan . '&Devise=TND&sid=' . session_id() . '&affilie=' . $confPaiement->getNumeroAffiliation());
     }
     return $this->render('FrontGeneralBundle:resabooking:devis.html.twig', array('choinces' => $choices, 'hotel' => $hotel, 'chambs' => $chambs->getChs(), 'reponseDevis' => $reponseDevis, 'dateDebut' => \DateTime::createFromFormat('Y-m-d', $debut), 'dateFin' => \DateTime::createFromFormat('Y-m-d', $fin)));
 }
 public function validationAction(Reservation $reservation)
 {
     $user = $this->get('security.context')->getToken()->getUser();
     $em = $this->getDoctrine()->getManager();
     $request = $this->getRequest();
     $session = $this->getRequest()->getSession();
     $pieces = $em->getRepository('BackCommercialBundle:Piece')->findBy(array('client' => $reservation->getClient(), 'regle' => FALSE));
     if ($user->getId() != $reservation->getResponsable()->getId() || $reservation->getEtat() == 2) {
         return $this->redirect($this->generateUrl("back_resabooking_reservation_details", array('id' => $reservation->getId())));
     }
     $form = $this->createFormBuilder()->add("piece", new PieceType());
     foreach ($pieces as $piece) {
         $form->add('piece' . $piece->getId(), 'checkbox', array('label' => $piece->getNumero(), 'required' => FALSE));
     }
     $form = $form->getForm();
     if ($request->isMethod("POST")) {
         $form->submit($request);
         $data = $form->getData();
         foreach ($pieces as $piece) {
             if ($data['piece' . $piece->getId()] && $reservation->getMontantRestant() > 0) {
                 $reglement = new Reglement();
                 if ($piece->getMontant() <= $reservation->getMontantRestant()) {
                     $reglement->setMontant($piece->getMontant());
                     $em->persist($piece->setRegle(TRUE)->setDateReglement(new \DateTime())->setMontant(0));
                 } else {
                     $reglement->setMontant($reservation->getMontantRestant());
                     $em->persist($piece->setMontant($piece->getMontant() - $reservation->getMontantRestant()));
                 }
                 $reglement->setPiece($piece);
                 $reglement->setReservatioRB($reservation);
                 $reglement->setDateCreation(new \DateTime());
                 $em->persist($reglement);
                 $reservation->addReglement($reglement);
             }
         }
         if ($reservation->getMontantRestant() > 0 && !is_null($data['piece']->getModeReglement()) && !is_null($data['piece']->getMontantOrigine())) {
             if ($data['piece']->getMontantOrigine() > 0) {
                 $reglement = new Reglement();
                 $piece = new Piece();
                 $piece = $data['piece'];
                 $piece->setClient($reservation->getClient())->setDateCreation(new \DateTime());
                 if ($piece->getMontantOrigine() <= $reservation->getMontantRestant()) {
                     $reglement->setMontant($piece->getMontantOrigine());
                     $em->persist($piece->setRegle(TRUE)->setDateReglement(new \DateTime())->setMontant(0));
                 } else {
                     $reglement->setMontant($reservation->getMontantRestant());
                     $em->persist($piece->setRegle(FALSE)->setMontant($piece->getMontantOrigine() - $reservation->getMontantRestant()));
                 }
                 $reglement->setPiece($piece);
                 $reglement->setReservationRB($reservation);
                 $reglement->setDateCreation(new \DateTime());
                 $em->persist($reglement);
                 $reservation->addReglement($reglement);
                 $session->getFlashBag()->add('success', "Votre piéce a été ajoutée avec succès");
             } else {
                 $session->getFlashBag()->add('danger', "Le montant de la piéce doit étre suppérieure à 0");
             }
         }
         if ($reservation->getMontantRestant() == 0) {
             $em->persist($reservation->setEtat(2)->setValidated(new \DateTime()));
             $em->flush();
             $session->getFlashBag()->add('success', " Votre Réservation a été validée avec succès ");
             $this->container->get('mailerservice')->validation($reservation, 'PR');
             return $this->redirect($this->generateUrl("back_resabooking_reservation_details", array('id' => $reservation->getId())));
         } else {
             $session->getFlashBag()->add('info', " Votre Réservation n'a pas été encore validée, reste encore <strong>" . $reservation->getMontantRestant() . " DT </strong> a payé");
         }
         $em->flush();
         return $this->redirect($this->generateUrl("back_resabooking_reservation_validation", array('id' => $reservation->getId())));
     }
     return $this->render('BackResaBookingBundle:reservation:validation.html.twig', array('reservation' => $reservation, 'form' => $form->createView(), 'pieces' => $pieces));
 }