<?php
/**
* Created by PhpStorm.
* User: tim.schelle
* Date: 30.01.2019
* Time: 17:12
*/
namespace App\Controller;
use App\Entity\BackTemplates;
use App\Entity\Process;
use App\Entity\Todos;
use App\Entity\User;
use App\Service\Ajax;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Routing\Annotation\Route;
/**
* Todos controller.
*
* @Route("/todos")
*/
class TodosController extends AbstractController
{
private $doctrine;
public function __construct(ManagerRegistry $doctrine)
{
$this->doctrine = $doctrine;
}
/**
* create new todos
*
* @Route("/new/{processId}", name="todos_new", defaults={"processId"=Null}, methods={"GET", "POST"})
*/
public function createAction(Request $request, Ajax $ajax, $processId, TranslatorInterface $translator)
{
$em = $this->doctrine->getManager();
$helpdesk = $em->getRepository(\App\Entity\HelpDesk::class)->findOneBy(["controller" => $request->get('_route'), "roles"=>$this->getUser()->getRoles(), "language"=>$request->getLocale()]);
$user = $this->getUser();
if(!($user->getRole()->getId() == User::ROLE_ADMIN || $user->getRole()->getId() == User::ROLE_SUPER_ADMIN))
{
$this->addFlash('error', $translator->trans('not_permitted'));
return $this->redirectToRoute('homepage');
}
$todos = new Todos();
$backtemplate = new BackTemplates();
$process = Null;
if(isset($processId))
{
$process = $em->getRepository(\App\Entity\Process::class)->findOneBy(["id" => $processId]);
$todos->setProcess($process);
}
$form = $this->createForm(\App\Form\TodosType::class, $todos);
$formBacktemplate = $this->createForm(\App\Form\BacktemplateType::class, $backtemplate);
$form->handleRequest($request);
$formBacktemplate->handleRequest($request);
//AJAX
if($request->isXmlHttpRequest() || $request->query->get('showJson') == 1)
{
$data = $ajax->call($request);
return new JsonResponse($data);
}
if ($form->isSubmitted())
{
if ($form->get('due')->getViewData() >= date('Y-m-d') OR $form->get('due')->getViewData() > $todos->getDue())
{
if ($backtemplate->getRetry() != null && $backtemplate->getBody() != null)
{
// $backtemplate->setDue(new \DateTime(date('Y-m-d H:00:00', strtotime($backtemplate->getDue()))));
$backtemplate->setTodos($todos);
$backtemplate->setDue($todos->getDue());
$todos->setState(2);
$em->persist($backtemplate);
$em->persist($todos);
$em->flush();
} else {
$todos->setState(0);
}
// $todos->setDue(new \DateTime(date('Y-m-d 00:00:00', strtotime($todos->getDue()))));
$todos->setCreator($this->getUser());
$em->persist($todos);
$em->flush();
return $this->redirectToRoute('dashboard_index');
} else {
$form->get('due')->addError(new FormError('Datum ist in der Vergangenheit'));
}
}
return $this->render('todos/todos.html.twig', array(
'form' => $form->createView(),
'formBacktemplate' => $formBacktemplate->createView(),
'todos' => $todos,
'backtemplate' => $backtemplate,
'helpdesk' => $helpdesk,
));
}
/**
* edit todos
*
* @Route("/edit/{id}", name="todos_edit", methods={"GET", "POST"})
*/
public function editAction(Request $request, Ajax $ajax, $id, TranslatorInterface $translator)
{
$em = $this->doctrine->getManager();
$helpdesk = $em->getRepository(\App\Entity\HelpDesk::class)->findOneBy(["controller" => $request->get('_route'), "roles"=>$this->getUser()->getRoles(), "language"=>$request->getLocale()]);
$user = $this->getUser();
if(!($user->getRole()->getId() == User::ROLE_ADMIN || $user->getRole()->getId() == User::ROLE_SUPER_ADMIN))
{
$this->addFlash('error', $translator->trans('not_permitted'));
return $this->redirectToRoute('homepage');
}
$todos = $em->getRepository(\App\Entity\Todos::class)->findOneBy(['id' => $id]);
$process = $em->getRepository(\App\Entity\Process::class)->findOneBy(['id' => $todos->getProcess()]);
$backtemplates = $em->getRepository(\App\Entity\BackTemplates::class)->findBy(["todos" => $todos]);
$backtemplate = new BackTemplates();
$backtemplate->setRetry(0);
//AJAX
if($request->isXmlHttpRequest() || $request->query->get('showJson') == 1)
{
$data = $ajax->call($request);
return new JsonResponse($data);
}
foreach($backtemplates as $template)
{
if($backtemplate->getRetry() < $template->getRetry())
{
$backtemplate = $template;
}
}
if($backtemplate == null)
{
$backtemplate = new BackTemplates();
$backtemplate->setTodos($todos);
}
$form = $this->createForm(\App\Form\TodosType::class, $todos, ['date' => $todos->getDue()]);
$formBacktemplate = $this->createForm(\App\Form\BacktemplateType::class, $backtemplate);
$form->handleRequest($request);
$formBacktemplate->handleRequest($request);
$responsibility = null;
if($todos->getTodo() != null)
{
$responsibility = $todos->getTodo()->getResponsibility();
}
if ($responsibility == 1) {
$user = $todos->getProcess()->getContactPersonCustomer();
} elseif ($responsibility == 2) {
$user = $todos->getProcess()->getContactPersonSupplier();
} else {
$user = $em->getRepository(\App\Entity\User::class)->findOneBy(['email' => 'scorebox@fra-services.de']);
}
if ($form->isSubmitted())
{
if ($form->get('due')->getViewData() > date('Y-m-d') OR $form->get('due')->getViewData() > $todos->getDue())
{
$todos->setUpdatedAt(new \DateTime());
$em->persist($todos);
$em->flush();
if ($backtemplate->getRetry() != null && $backtemplate->getBody() != null)
{
$backtemplate->setTodos($todos);
$backtemplate->setDue($todos->getDue());
$em->persist($backtemplate);
$todos->setState(2);
$em->persist($todos);
$em->flush();
}
return $this->redirectToRoute('dashboard_index');
} else {
$form->get('due')->addError(new FormError('Datum ist in der Vergangenheit'));
}
}
return $this->render('todos/todos.html.twig', array(
'form' => $form->createView(),
'formBacktemplate' => $formBacktemplate->createView(),
'todos' => $todos,
'backtemplate' => $backtemplate,
'user' => $user,
'helpdesk' => $helpdesk,
));
}
/**
* close todos
*
* @Route("/close/{todosid}", name="todos_close", methods={"GET", "POST"})
*/
public function closeTodosAction(
$todosid,
TranslatorInterface $translator
)
{
$em = $this->doctrine->getManager();
$user = $this->getUser();
$todos = Null;
if(!($user->getRole()->getId() == User::ROLE_ADMIN || $user->getRole()->getId() == User::ROLE_SUPER_ADMIN))
{
$this->addFlash('error', $translator->trans('not_permitted'));
return $this->redirectToRoute('homepage');
}
$todos = $em->getRepository(\App\Entity\Todos::class)->findOneBy(['id' => $todosid]);
if ($todos)
{
$todo = $todos->getTodo();
if($todo)
{
$nextTodo = $todo->getNextTodo();
if($nextTodo)
{
$newTodos = new Todos();
$newTodos->setProcess($todos->getProcess());
$newTodos->setTodo($nextTodo);
$newTodos->setState($todos->getState());
$newTodos->setStaff($user);
$newTodos->setCreator($user);
$newTodos->setNotice($todos->getNotice());
$newTodos->setDue($todos->getDue());
$newTodos->setCreatedAt(new \DateTime("now"));
$todos->setState(Todos::STATE_CLOSED);
$em->persist($todos);
$em->persist($newTodos);
$this->addFlash('success', $translator->trans('todos.nextTodoCreated'));
} else {
$todos->setState(Todos::STATE_CLOSED);
$process = $todos->getProcess();
$process->setState(Process::STATE_CLOSED);
$processTodos = $em->getRepository(\App\Entity\Todos::class)->findBy(['process' => $process]);
foreach($processTodos as $todo)
{
$backtemplates = $em->getRepository(\App\Entity\BackTemplates::class)->findBy(['todos' => $todo]);
foreach($backtemplates as $backtemplate)
{
$this->forward('AppBundle\Controller\TodosController::deleteBacktemplate', [
'id' => $backtemplate->getId()
]);
}
$todo->setState(Todos::STATE_CLOSED);
$em->persist($todo);
}
$em->persist($todos);
$em->persist($process);
$this->addFlash('success', $translator->trans('todos.todosAndProcessFinished'));
}
} else {
// Prüfen Todo
$todos->setState(Todos::STATE_CLOSED);
$em->persist($todos);
$this->addFlash('success', $translator->trans('todos.finishedTodos'));
}
$em->flush();
}
return $this->redirectToRoute('dashboard_index');
}
/**
* close todos and repopen
*
* @Route("/closeReopenNewTodos/{todosid}/{todoid}", name="todos_close_reopen_new", defaults={"todosid"=Null, "todoid"=Null}, methods={"GET", "POST"})
*/
public function closeReopenNewTodos(TranslatorInterface $translator, $todosid, $todoid)
{
$em = $this->doctrine->getManager();
$user = $this->getUser();
$todos = Null;
$todo = Null;
if(!($user->getRole()->getId() == User::ROLE_ADMIN || $user->getRole()->getId() == User::ROLE_SUPER_ADMIN))
{
$this->addFlash('error', $translator->trans('not_permitted'));
return $this->redirectToRoute('homepage');
}
$todos = $em->getRepository(\App\Entity\Todos::class)->findOneBy(['id' => $todosid]);
$todo = $em->getRepository(\App\Entity\Todo::class)->findOneBy(['id' => $todoid]);
if ($todos && $todo)
{
$newTodos = new Todos();
$newTodos->setProcess($todos->getProcess());
$newTodos->setTodo($todo);
$newTodos->setState($todos->getState());
$newTodos->setStaff($user);
$newTodos->setCreator($user);
$newTodos->setNotice($todos->getNotice());
$newTodos->setDue($todos->getDue());
$newTodos->setCreatedAt(new \DateTime("now"));
$todos->setState(Todos::STATE_CLOSED);
$em->persist($newTodos);
$em->persist($todos);
$em->flush();
$this->addFlash('success', $translator->trans('todos.nextTodoCreated'));
}
return $this->redirectToRoute('dashboard_index');
}
/**
* delete Backtemplate
*
* @Route("/deleteBacktemplate/{id}", name="backtemplate_delete", defaults={"id"=Null})
*/
public function deleteBacktemplate(TranslatorInterface $translator, $id)
{
$em = $this->doctrine->getManager();
$user = $this->getUser();
if(!($user->getRole()->getId() == User::ROLE_ADMIN || $user->getRole()->getId() == User::ROLE_SUPER_ADMIN))
{
$this->addFlash('error', $translator->trans('not_permitted'));
return $this->redirectToRoute('homepage');
}
$backTemplate = $em->getRepository(\App\Entity\BackTemplates::class)->findOneBy(["id" => $id, 'sentAt' => null]);
if($backTemplate)
{
$em->remove($backTemplate);
$em->flush();
}
return $this->redirectToRoute('dashboard_index');
}
/**
* state close todos
*
* @Route("/close-state/{id}", name="todos_state_close", methods={"GET", "POST"})
*/
public function closeStateTodosAction(
$id,
TranslatorInterface $translator
)
{
$em = $this->doctrine->getManager();
$todos = Null;
$user = $this->getUser();
if(!($user->getRole()->getId() == User::ROLE_ADMIN || $user->getRole()->getId() == User::ROLE_SUPER_ADMIN))
{
$this->addFlash('error', $translator->trans('not_permitted'));
return $this->redirectToRoute('homepage');
}
$todos = $em->getRepository(\App\Entity\Todos::class)->findOneBy(['id' => $id]);
$todos->setState(3);
$em->persist($todos);
$em->flush();
return $this->redirectToRoute('dashboard_index');
}
}