protected function execute(InputInterface $input, OutputInterface $output)
 {
     set_time_limit(0);
     ini_set('memory_limit', '-1');
     $container = $this->getContainer();
     $output->writeln("Looking for active Sprints...");
     $em = $container->get('doctrine')->getManager();
     //buscamos los Sprints activos
     $sprints = $em->getRepository('BackendBundle:Sprint')->findByStatus(null, Entity\Sprint::STATUS_IN_PROCESS);
     if (!empty($sprints)) {
         $output->writeln(count($sprints) . " Sprints found.");
         foreach ($sprints as $sprint) {
             //buscamos todos los items asociados al Sprint
             $search = array('sprint' => $sprint->getId());
             $order = array('priority' => 'DESC');
             $allSprintItems = $em->getRepository('BackendBundle:Item')->findBy($search, $order);
             $estimatedTime = 0;
             $workedTime = 0;
             $remainingTime = 0;
             //recorremos los items del Sprint para calcular los tiempos
             foreach ($allSprintItems as $item) {
                 $estimatedTime += $item->getEstimatedHours();
                 $workedTime += $item->getWorkedHours();
                 if ($item->isActive() && $item->getEstimatedHours() > $item->getWorkedHours()) {
                     $remainingTime += $item->getEstimatedHours() - $item->getWorkedHours();
                 }
             }
             $sprint->setEstimatedTime($estimatedTime);
             $sprint->setWorkedTime($workedTime);
             $sprint->setRemainingTime($remainingTime);
             $em->persist($sprint);
             $output->writeln("Estimated, worked and remaining time updated to " . $sprint->getName() . ' in Project ' . $sprint->getProject()->getName());
             //verificamos si la fecha actual hace parte del Sprint para calcular el tiempo restante
             $searchSprintDay = array('date' => Util::getCurrentDate(), 'sprint' => $sprint->getId());
             $sprintDay = $em->getRepository('BackendBundle:SprintDay')->findOneBy($searchSprintDay);
             if ($sprintDay) {
                 $sprintDay->setRemainingWork($remainingTime);
                 $em->persist($sprintDay);
             }
         }
         $em->flush();
     } else {
         $output->writeln("No active Sprints found.");
     }
 }
Esempio n. 2
0
 /**
  * Permite verificar si el usuario logueado tiene un registro de tiempo
  * @author Cesar Giraldo <*****@*****.**> May 25 2016
  * @return \BackendBundle\Entity\TimeTracking
  */
 public function getActiveTimeTrack()
 {
     $user = $this->tokenStorage->getToken()->getUser();
     if ($user) {
         $searchActive = array('user' => $user->getId(), 'endTime' => null);
         $order = array('date' => 'DESC', 'startTime' => 'DESC');
         $timeTrack = $this->em->getRepository('BackendBundle:TimeTracking')->findOneBy($searchActive, $order);
         if (!$timeTrack instanceof Entity\TimeTracking) {
             $timeTrack = new Entity\TimeTracking();
             $timeTrack->setUser($user);
         } else {
             $workedTime = $this->getSecondsBetweenDates($timeTrack->getStartTime(), Util::getCurrentDate());
             $timeTrack->setWorkedTime($workedTime);
         }
         return $timeTrack;
     }
     return null;
 }
 /**
  * Esta funcion permite rechazar una invitacion a un proyecto
  * @author Cesar Giraldo <*****@*****.**> 22/01/2016
  * @param Request $request datos de la solicitud
  * @return JsonResponse JSON con mensaje de respuesta
  */
 public function rejectAction(Request $request)
 {
     $em = $this->getDoctrine()->getManager();
     $invitationId = $request->request->get('invitationId');
     $response['result'] = "__OK__";
     $response['msg'] = "";
     $invitation = $em->getRepository('BackendBundle:ProjectInvitation')->find($invitationId);
     if (!$invitation || ($invitation && $invitation->getStatus() != Entity\ProjectInvitation::STATUS_ACTIVE || $invitation && $invitation->getUser()->getId() != $this->getUser()->getId())) {
         $response['result'] = "__KO__";
         $response['msg'] = $this->get('translator')->trans('backend.project_invitation.invitation_not_found');
         return new JsonResponse($response);
     }
     try {
         $invitation->setStatus(Entity\ProjectInvitation::STATUS_REJECTED);
         $invitation->setCanceledDate(Util::getCurrentDate());
         $em->persist($invitation);
         $em->flush();
     } catch (\Exception $exc) {
         $response['result'] = "__KO__";
         $response['msg'] = $this->get('translator')->trans('backend.project_invitation.error_rejecting');
     }
     return new JsonResponse($response);
 }
 /**
  * Esta funcion permite eliminar una invitacion de un proyecto
  * @author Cesar Giraldo <*****@*****.**> 20/01/2016
  * @param Request $request
  * @return JsonResponse
  */
 public function deleteInvitationAction(Request $request)
 {
     $em = $this->getDoctrine()->getManager();
     $invitationId = $request->request->get('invitationId');
     $response['result'] = "__OK__";
     $response['msg'] = "";
     $invitation = $em->getRepository('BackendBundle:ProjectInvitation')->find($invitationId);
     if (!$invitation) {
         $response['result'] = "__KO__";
         $response['msg'] = $this->get('translator')->trans('backend.project_invitation.not_found_message');
         return new JsonResponse($response);
     }
     try {
         $invitation->setStatus(Entity\ProjectInvitation::STATUS_CANCELED);
         $invitation->setCanceledDate(Util::getCurrentDate());
         $em->persist($invitation);
         $em->flush();
     } catch (\Exception $exc) {
         $response['result'] = "__KO__";
         $response['msg'] = $this->get('translator')->trans('backend.project_invitation.error_canceling');
     }
     return new JsonResponse($response);
 }
Esempio n. 5
0
 /**
  * Set Page initial status before persisting
  * @ORM\PrePersist
  */
 public function setDefaults()
 {
     if ($this->getCreationDate() === null) {
         $this->setCreationDate(Util::getCurrentDate());
     }
     if ($this->getStatus() === null) {
         $this->setStatus(self::STATUS_NEW);
     }
     if ($this->getWorkedHours() === null) {
         $this->setWorkedHours(0);
     }
 }
Esempio n. 6
0
 /**
  * Set Page initial status before persisting
  * @ORM\PrePersist
  */
 public function setDefaults()
 {
     if ($this->getAssignationDate() === null) {
         $this->setAssignationDate(Util::getCurrentDate());
     }
 }
 /**
  * Permite iniciar un contador de tiempo para una tarea determinada
  * @author Cesar Giraldo <*****@*****.**> 06/04/2016
  * @param Request $request
  * @return JsonResponse
  */
 public function stopTimeAction(Request $request)
 {
     $response = array('result' => '__KO__', 'msg' => '');
     $em = $this->getDoctrine()->getManager();
     $timeTrackId = trim(strip_tags($request->request->get('timeId')));
     if ($timeTrackId != '') {
         $timeTrack = $em->getRepository('BackendBundle:TimeTracking')->find($timeTrackId);
         if ($timeTrack instanceof Entity\TimeTracking && $this->container->get('access_control')->isAllowedProject($timeTrack->getProject()->getId())) {
             if (empty($timeTrack->getEndTime())) {
                 $timeTrack->setEndTime(Util::getCurrentDate());
                 $workedTime = $this->container->get('time_tracker')->getSecondsBetweenDates($timeTrack->getStartTime(), $timeTrack->getEndTime());
                 $timeTrack->setWorkedTime($workedTime);
                 $em->persist($timeTrack);
                 $em->flush();
                 $response['result'] = '__OK__';
             } else {
                 $response['msg'] = $this->get('translator')->trans('backend.item.not_found_message') . ".";
             }
         } else {
             $response['msg'] = $this->get('translator')->trans('backend.item.not_found_message');
         }
     } else {
         $response['msg'] = $this->get('translator')->trans('backend.item.not_found_message');
     }
     return new JsonResponse($response);
 }
Esempio n. 8
0
 /**
  * Set Page initial status before persisting
  * @ORM\PrePersist
  */
 public function setDefaults()
 {
     if ($this->getDate() === null) {
         $this->setDate(Util::getCurrentDate());
     }
     if ($this->getStartTime() === null) {
         $this->setStartTime(Util::getCurrentDate());
     }
     if ($this->getStartTime() != null && $this->getEndTime() != null) {
         $startTime = $this->getStartTime();
         $interval = $startTime->diff($this->getEndTime());
         var_dump($interval->format("%H:%I:%S"));
         die;
     }
 }
 /**
  * Esta funcion permite listar el Sprint Backlog de un sprint determinado
  * @author Cesar Giraldo <*****@*****.**> 28/01/2016
  * @param Request $request
  * @param string $id identificador del proyecto
  * @param string $sprintId identificador del sprint
  * @return type
  */
 public function sprintBacklogAction(Request $request, $id, $sprintId)
 {
     $em = $this->getDoctrine()->getManager();
     $sprint = $em->getRepository('BackendBundle:Sprint')->find($sprintId);
     if (!$sprint || $sprint && $sprint->getProject()->getId() != $id) {
         $this->get('session')->getFlashBag()->add('messageError', $this->get('translator')->trans('backend.sprint.not_found_message'));
         return $this->redirectToRoute('backend_project_sprints', array('id' => $id));
     }
     if (!$this->container->get('access_control')->isAllowedProject($id)) {
         $this->get('session')->getFlashBag()->add('messageError', $this->get('translator')->trans('backend.project.not_found_message'));
         return $this->redirectToRoute('backend_projects');
     }
     $search = array('sprint' => $sprint->getId());
     $order = array('priority' => 'DESC');
     $allSprintItems = $em->getRepository('BackendBundle:Item')->findBy($search, $order);
     $estimatedTime = 0;
     $workedTime = 0;
     $remainingTime = 0;
     foreach ($allSprintItems as $item) {
         $estimatedTime += $item->getEstimatedHours();
         $workedTime += $item->getWorkedHours();
         if ($item->isActive() && $item->getEstimatedHours() > $item->getWorkedHours()) {
             $remainingTime += $item->getEstimatedHours() - $item->getWorkedHours();
         }
     }
     $sprint->setEstimatedTime($estimatedTime);
     $sprint->setWorkedTime($workedTime);
     $sprint->setRemainingTime($remainingTime);
     $em->persist($sprint);
     //verificamos si el Sprint esta en proceso
     if ($sprint->getStatus() == Entity\Sprint::STATUS_IN_PROCESS) {
         //verificamos si la fecha actual hace parte del Sprint para calcular el tiempo restante
         $searchSprintDay = array('date' => Util::getCurrentDate(), 'sprint' => $sprintId);
         $sprintDay = $em->getRepository('BackendBundle:SprintDay')->findOneBy($searchSprintDay);
         if ($sprintDay) {
             $sprintDay->setRemainingWork($remainingTime);
             $em->persist($sprintDay);
         }
     }
     $em->flush();
     $search['parent'] = NULL;
     $sprintBacklog = $em->getRepository('BackendBundle:Item')->findBy($search, $order);
     //logica para pintar la grafica Burdown del Sprint
     $days = $em->getRepository('BackendBundle:SprintDay')->findBy(array('sprint' => $sprintId), array('date' => 'ASC'));
     $sprintDays = count($days);
     $listDays = array();
     for ($i = 0; $i < $sprintDays; $i++) {
         $listDays[$i] = $days[$i]->getDate()->format($sprint->getProject()->getSettings()->getPHPDateFormat());
     }
     $estimatedTimePerDay = 0;
     $idealArray = array();
     if ($sprintDays > 0 && $sprint->getEstimatedTime() > 0) {
         $estimatedTimePerDay = number_format($sprint->getEstimatedTime() / $sprintDays, 1);
         $idealArray = range(0, $sprint->getEstimatedTime() - 1, $estimatedTimePerDay);
     }
     $idealXArray = array();
     foreach ($idealArray as $value) {
         $value = trim($value);
         $idealXArray[] = 'Day ' . $value;
     }
     //datos del avance del sprint
     $actualArray = array();
     for ($i = 0; $i < $sprintDays; $i++) {
         $actualArray[$i] = $days[$i]->getRemainingWork();
     }
     return $this->render('BackendBundle:Project/Sprint:backlog.html.twig', array('project' => $sprint->getProject(), 'sprint' => $sprint, 'sprintBacklog' => $sprintBacklog, 'menu' => self::MENU, 'idealXArray' => $idealXArray, 'idealArray' => array_reverse($idealArray), 'actualArray' => $actualArray, 'listDays' => $listDays));
 }
Esempio n. 10
0
 /**
  * Set Page initial status before persisting
  * @ORM\PrePersist
  */
 public function setDefaults()
 {
     if ($this->getCreationDate() === null) {
         $this->setCreationDate(Util::getCurrentDate());
     }
     if ($this->getIsAccountConfirmed() === null) {
         $this->setIsAccountConfirmed(false);
     }
 }
 /**
  * Set Page initial status before persisting
  * @ORM\PrePersist
  */
 public function setDefaults()
 {
     if ($this->getDate() === null) {
         $this->setDate(Util::getCurrentDate());
     }
     if ($this->getStatus() === null) {
         $this->setStatus(self::STATUS_ACTIVE);
     }
 }