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)); }