/**
  * Creates a new Vmr entity.
  *
  */
 public function createAction(Request $request)
 {
     $entity = new Vmr();
     $form = $this->createCreateForm($entity);
     $form->handleRequest($request);
     if ($form->isValid()) {
         $em = $this->getDoctrine()->getManager();
         $em->persist($entity);
         $em->flush();
         $id = $entity->getId();
         $days = $em->getRepository('StageOCPProjectBundle:Day')->datesFromNow();
         $allReservations = array();
         foreach ($days as $day) {
             $reservationsArray = $em->getRepository('StageOCPProjectBundle:Reservation')->findByDay($day);
             foreach ($reservationsArray as $reservations) {
                 $allReservations[] = $reservations;
             }
         }
         $idReservations = array();
         foreach ($allReservations as $allR) {
             $idReservations[] = $allR->getId();
         }
         foreach ($idReservations as $idR) {
             $vmr = new VmrReservation();
             $vmr->setReservation($em->getRepository('StageOCPProjectBundle:Reservation')->find($idR));
             $vmr->setVmr($em->getRepository('StageOCPProjectBundle:Vmr')->find($id));
             $vmr->setIsReserved(false);
             $em->persist($vmr);
         }
         $em->flush();
         return $this->redirect($this->generateUrl('admin_vmr'));
     }
     return $this->render('StageOCPProjectBundle:Vmr:new.html.twig', array('entity' => $entity, 'form' => $form->createView()));
 }
 public function reserveAction($id, $hebdo = false, $option = false, $data = false)
 {
     $em = $this->getDoctrine()->getManager();
     $idU = $this->container->get('security.context')->getToken()->getUser()->getId();
     $user = $em->getRepository('StageOCPUserBundle:User')->find($idU);
     $vr = $em->getRepository('StageOCPProjectBundle:VmrReservation')->find($id);
     $vr->setUser($user);
     $vr->setIsReserved(true);
     $em->persist($vr);
     $em->flush();
     $vr = $em->getRepository('StageOCPProjectBundle:VmrReservation')->find($id);
     $errors = false;
     $msgError = 'Il y a eu un conflit cause par ';
     if ($hebdo) {
         $days = [];
         if ($option == 'option1') {
             $max = 53;
         }
         if ($option == 'option2') {
             $max = intval($data);
             $max++;
         }
         if ($option == 'option3') {
             $date = new \DateTime($data);
             $diff = $date->format('U') - $vr->getReservation()->getDay()->getDate()->format('U');
             $max = intval($diff / 604800);
             $max++;
         }
         for ($i = 1; $i < $max; $i++) {
             $days[] = new \DateTime($vr->getReservation()->getDay()->getDate()->modify('+1 week')->format('Y/m/d'));
         }
         $vmrs = $em->getRepository('StageOCPProjectBundle:Vmr')->findAll();
         $begin = $vr->getReservation()->getBegin();
         $end = $vr->getReservation()->getEnd();
         foreach ($days as $jour) {
             $error = false;
             $day = $em->getRepository('StageOCPProjectBundle:Day')->findOneBy(array('date' => $jour));
             if (!$day) {
                 $day = new Day();
                 $day->setDate($jour);
                 $em->persist($day);
                 $reservation = new Reservation();
                 $reservation->setBegin($begin);
                 $reservation->setEnd($end);
                 $reservation->setDay($day);
                 $em->persist($reservation);
                 foreach ($vmrs as $vmr) {
                     $newVr = new VmrReservation();
                     $newVr->setReservation($reservation);
                     $newVr->setVmr($vmr);
                     if ($vmr == $vr->getVmr()) {
                         $newVr->setIsReserved(true);
                         $newVr->setUser($user);
                     } else {
                         $newVr->setIsReserved(false);
                         $newVr->setUser(null);
                     }
                     $em->persist($newVr);
                 }
                 $em->flush();
             } else {
                 $reservation = $em->getRepository('StageOCPProjectBundle:Reservation')->findOneBy(array('day' => $day, 'begin' => $begin, 'end' => $end));
                 $reservs = $em->getRepository('StageOCPProjectBundle:Reservation')->findByDay($day);
                 if (!$reservation) {
                     $reservation = new Reservation();
                     $reservation->setBegin($begin);
                     $reservation->setEnd($end);
                     $reservation->setDay($day);
                     $em->persist($reservation);
                     if ($reservs) {
                         foreach ($reservs as $res) {
                             if ($this->conflict($res, $reservation)) {
                                 foreach ($res->getVmrreservations() as $reservVrs) {
                                     if ($reservVrs->getIsReserved()) {
                                         if ($reservVrs->getUser() == $user) {
                                             $error = true;
                                             $errors = true;
                                             $msgError .= 'votre reservation de la ' . $reservVrs->getVmr()->getName() . ' reserve le ' . $reservVrs->getReservation()->getDay()->getDate()->format('d/m/Y') . ' de ' . $reservVrs->getReservation()->getBegin()->format('H:i:s') . ' a ' . $reservVrs->getReservation()->getEnd()->format('H:i:s') . ', ';
                                         } else {
                                             if ($reservVrs->getVmr() == $vr->getVmr()) {
                                                 $error = true;
                                                 $errors = true;
                                                 $msgError .= 'la reservation de la ' . $reservVrs->getVmr()->getName() . ' reserve par ' . $reservVrs->getUser()->getUsernameCanonical() . 'le ' . $reservVrs->getReservation()->getDay()->getDate()->format('d/m/Y') . ' de ' . $reservVrs->getReservation()->getBegin()->format('H:i:s') . ' a ' . $reservVrs->getReservation()->getEnd()->format('H:i:s') . ', ';
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     if (!$error) {
                         foreach ($vmrs as $vmr) {
                             $newVr = new VmrReservation();
                             $newVr->setReservation($reservation);
                             $newVr->setVmr($vmr);
                             if ($vmr == $vr->getVmr()) {
                                 $newVr->setIsReserved(true);
                                 $newVr->setUser($user);
                             } else {
                                 $newVr->setIsReserved(false);
                                 $newVr->setUser(null);
                             }
                             $em->persist($newVr);
                         }
                     } else {
                         foreach ($vmrs as $vmr) {
                             $newVr = new VmrReservation();
                             $newVr->setReservation($reservation);
                             $newVr->setVmr($vmr);
                             $newVr->setIsReserved(false);
                             $newVr->setUser(null);
                             $em->persist($newVr);
                         }
                     }
                     $em->flush();
                 } else {
                     if ($reservs) {
                         foreach ($reservs as $res) {
                             if ($this->conflict($res, $reservation)) {
                                 foreach ($res->getVmrreservations() as $reservVrs) {
                                     if ($reservVrs->getIsReserved()) {
                                         if ($reservVrs->getUser() == $user) {
                                             $errors = true;
                                             $error = true;
                                             $msgError .= 'votre reservation de la ' . $reservVrs->getVmr()->getName() . ' reserve le ' . $reservVrs->getReservation()->getDay()->getDate()->format('d/m/Y') . ' de ' . $reservVrs->getReservation()->getBegin()->format('H:i:s') . ' a ' . $reservVrs->getReservation()->getEnd()->format('H:i:s') . ', ';
                                         } else {
                                             if ($reservVrs->getVmr() == $vr->getVmr()) {
                                                 $errors = true;
                                                 $error = true;
                                                 $msgError .= 'la reservation de la ' . $reservVrs->getVmr()->getName() . ' reserve par ' . $reservVrs->getUser()->getUsernameCanonical() . ' le ' . $reservVrs->getReservation()->getDay()->getDate()->format('d/m/Y') . ' de ' . $reservVrs->getReservation()->getBegin()->format('H:i:s') . ' a ' . $reservVrs->getReservation()->getEnd()->format('H:i:s') . ', ';
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                     if (!$error) {
                         $reservationVmr = $em->getRepository('StageOCPProjectBundle:VmrReservation')->findOneBy(array('reservation' => $reservation, 'vmr' => $vr->getVmr()));
                         $reservationVmr->setIsReserved(true);
                         $reservationVmr->setUser($user);
                         $em->persist($reservationVmr);
                         $em->flush();
                     }
                 }
             }
         }
     }
     $vr = $em->getRepository('StageOCPProjectBundle:VmrReservation')->find($id);
     $reservation = $vr->getReservation();
     $reservations = $em->getRepository('StageOCPProjectBundle:Reservation')->findByDay($reservation->getDay());
     $conflictVrs = [];
     if ($reservations) {
         foreach ($reservations as $reserv) {
             if ($this->conflict($reserv, $reservation)) {
                 foreach ($reserv->getVmrreservations() as $reservVrs) {
                     if ($reservVrs->getIsReserved()) {
                         $conflictVrs[] = $reservVrs;
                     }
                 }
             }
         }
     }
     $VrsFinal = [];
     $vrs = $em->getRepository('StageOCPProjectBundle:VmrReservation')->findByReservation($reservation);
     if (count($conflictVrs)) {
         for ($i = 0; $i < count($vrs); $i++) {
             foreach ($conflictVrs as $conflictVr) {
                 if ($vrs[$i]->getVmr() == $conflictVr->getVmr()) {
                     $VrsFinal[$i] = $conflictVr;
                     break;
                 } else {
                     $VrsFinal[$i] = $vrs[$i];
                 }
             }
         }
     } else {
         $VrsFinal = $vrs;
     }
     $vrsJson = array();
     $i = 0;
     foreach ($VrsFinal as $vrvr) {
         if ($vrvr->getUser()) {
             $vrsJson[$i] = array('id' => $vrvr->getId(), 'isReserved' => $vrvr->getIsReserved(), 'user' => array('id' => $vrvr->getUser()->getId(), 'username' => $vrvr->getUser()->getUsernameCanonical(), 'email' => $vrvr->getUser()->getEmailCanonical()), 'reservation' => array('id' => $vr->getReservation()->getId(), 'begin' => $vr->getReservation()->getBegin()->format('H:i:s'), 'end' => $vr->getReservation()->getEnd()->format('H:i:s')), 'vmr' => array('id' => $vrvr->getVmr()->getId(), 'name' => $vrvr->getVmr()->getName()));
         } else {
             $vrsJson[$i] = array('id' => $vrvr->getId(), 'isReserved' => $vrvr->getIsReserved(), 'user' => null, 'reservation' => array('id' => $vr->getReservation()->getId(), 'begin' => $vr->getReservation()->getBegin()->format('H:i:s'), 'end' => $vr->getReservation()->getEnd()->format('H:i:s')), 'vmr' => array('id' => $vrvr->getVmr()->getId(), 'name' => $vrvr->getVmr()->getName()));
         }
         $i++;
     }
     $message = \Swift_Message::newInstance()->setSubject('Reservation')->setFrom(array('*****@*****.**' => 'OcpGroup'))->setTo($vr->getUser()->getEmailCanonical())->setCharset('utf-8')->setContentType('text/html')->setBody($this->renderView('StageOCPProjectBundle::notifReserv.html.twig', array('name' => $vr->getUser()->getUsernameCanonical(), 'vmr' => $vr->getVmr()->getName(), 'day' => $vr->getReservation()->getDay()->getDate(), 'begin' => $vr->getReservation()->getBegin(), 'end' => $vr->getReservation()->getEnd())));
     $this->get('mailer')->send($message);
     if ($errors) {
         $erreurs = $msgError;
     } else {
         $erreurs = false;
     }
     return new JsonResponse(array('vmr' => array('id' => $vr->getVmr()->getId(), 'name' => $vr->getVmr()->getName()), 'vr' => array('id' => $vr->getId(), 'isReserved' => $vr->getIsReserved(), 'user' => array('id' => $vr->getUser()->getId(), 'username' => $vr->getUser()->getUsernameCanonical(), 'email' => $vr->getUser()->getEmailCanonical())), 'vrs' => $vrsJson, 'error' => $erreurs), 200, array('Access-Control-Allow-Origin' => '*', 'Content-Type' => 'application/json'));
 }