public function validerAction(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("consulter_reservation", 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->getSurDemande() || $reservation->getMontantRestant() > 0)) {
                 $reglement = new Reglement();
                 if ($reservation->getSurDemande()) {
                     $reglement->setMontant($piece->getMontant());
                     $em->persist($piece->setRegle(TRUE)->setDateReglement(new \DateTime())->setMontant(0));
                 } else {
                     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->setReservation($reservation);
                 $reglement->setDateCreation(new \DateTime());
                 $em->persist($reglement);
                 $reservation->addReglement($reglement);
             }
         }
         if (($reservation->getSurDemande() || $reservation->getMontantRestant() > 0) && !is_null($data['piece']->getModeReglement()) && !is_null($data['piece']->getMontantOrigine())) {
             if ($data['piece']->getMontantOrigine() > 0) {
                 $reglement = new Reglement();
                 $piece = $data['piece'];
                 $piece->setClient($reservation->getClient())->setDateCreation(new \DateTime());
                 if ($reservation->getSurDemande()) {
                     $reglement->setMontant($piece->getMontantOrigine());
                     $em->persist($piece->setRegle(TRUE)->setMontant(0)->setDateReglement(new \DateTime()));
                 } else {
                     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->setReservation($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->getSurDemande() || $reservation->getMontantRestant() == 0) {
             if (!is_null($reservation->getClient()->getAmicale())) {
                 if ($reservation->getClient()->getAmicale()->getMontant() + $reservation->getTotal() > $reservation->getClient()->getAmicale()->getPlafond()) {
                     $session->getFlashBag()->add('warning', "Impossible de valider la réservation pour l'amicale " . $reservation->getClient()->getAmicale()->getLibelle() . "  Plafond insuffisant.   <br>Palfond : " . $reservation->getClient()->getAmicale()->getPlafond() . " DT et le  montant courrant est :" . $reservation->getClient()->getAmicale()->getMontant() . " DT");
                     return $this->redirect($this->generateUrl("valider_reservation", array('id' => $reservation->getId())));
                 }
                 $em->persist($reservation->getClient()->getAmicale()->setMontant($reservation->getClient()->getAmicale()->getMontant() + $reservation->getTotal()));
             }
             $em->persist($reservation->setEtat(2)->setValidated(new \DateTime())->setCode($this->container->get('reservation')->getCode()));
             $em->flush();
             $session->getFlashBag()->add('success', " Votre Réservation a été validée avec succès ");
             $this->container->get('mailerservice')->validation($reservation, 'SHT');
             return $this->redirect($this->generateUrl("consulter_reservation", 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> à payer");
         }
         $em->flush();
         return $this->redirect($this->generateUrl("valider_reservation", array('id' => $reservation->getId())));
     }
     return $this->render('BackHotelTunisieBundle:Reservation:validation.html.twig', array('reservation' => $reservation, 'form' => $form->createView(), 'pieces' => $pieces));
 }
Esempio n. 2
0
 public function generateSessionReservation(Reservation $reservation)
 {
     $tab = array();
     $tab['hotel'] = $reservation->getHotel()->getId();
     $tab['client'] = $reservation->getClient()->getId();
     $tab['dateDebut'] = $reservation->getDateDebut()->format('Y-m-d');
     $tab['dateFin'] = $reservation->getDateFin()->format('Y-m-d');
     $tab['nuitees'] = $reservation->getNuitees();
     return $tab;
 }