/** * 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')); }