diff --git a/Data/tasks.db b/Data/tasks.db index 2c6f902..e1503c4 100644 Binary files a/Data/tasks.db and b/Data/tasks.db differ diff --git a/composer.json b/composer.json index aa84db9..8407ef1 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "type": "project", "license": "proprietary", "require": { - "php": ">=7.1.3", + "php": ">=7.4", "ext-ctype": "*", "ext-iconv": "*", "composer/package-versions-deprecated": "1.11.99.1", diff --git a/src/Domain/Form/Type/TaskType.php b/src/Domain/Form/Type/TaskType.php index a5f1b1c..b1664a9 100644 --- a/src/Domain/Form/Type/TaskType.php +++ b/src/Domain/Form/Type/TaskType.php @@ -28,7 +28,7 @@ class TaskType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { $builder - ->add('nome', TextType::class, ['label' => false, 'attr' => ['placeholder' => 'Nome do Projeto ']]) + ->add('nome', TextType::class, ['label' => false, 'attr' => ['placeholder' => 'Nome da Tarefa']]) ->add('descricao', TextareaType::class) ->add('dtCadastro', DateType::class, [ 'label' => 'Data de Cadastro', @@ -37,6 +37,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void ]) ->add('dtConclusao', DateType::class, [ 'label' => 'Data de Conclusao', + 'placeholder' => 'Select a value', 'widget' => 'single_text', 'attr' => ['class' => 'js-datepicker', 'required' => false], ]) diff --git a/src/Domain/Form/Type/UsuarioType.php b/src/Domain/Form/Type/UsuarioType.php new file mode 100644 index 0000000..271b06a --- /dev/null +++ b/src/Domain/Form/Type/UsuarioType.php @@ -0,0 +1,49 @@ +add('nome', TextType::class, ['label' => false, 'attr' => ['placeholder' => 'Nome do Usuario']]) + ->add('email', EmailType::class, ['label' => false, 'attr' => ['placeholder' => 'E-mail']]) + ->add('password', PasswordType::class, ['label' => false, 'attr' => ['placeholder' => 'Senha']]) + ->add('roles', ChoiceType::class, array( + 'mapped' => false, + 'required' => true, + 'label' => 'User Type', + 'choices' => array( + 'Administrador' => 'ROLE_ADMIN', + 'Usuario' => 'ROLE_USER', + ), + 'expanded' => true, + )); + } + + /** + * @param OptionsResolver $resolver + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Usuario::class + ]); + } +} \ No newline at end of file diff --git a/src/Domain/Model/TaskRepositoryInterface.php b/src/Domain/Model/TaskRepositoryInterface.php new file mode 100644 index 0000000..759759d --- /dev/null +++ b/src/Domain/Model/TaskRepositoryInterface.php @@ -0,0 +1,21 @@ +taskRepository = $taskRepository; + } + + /** + * @param Task $task + */ + public function salvar(Task $task) + { + $this->taskRepository->salvar($task); + } + + /** + * @return array + */ + public function listar(): array + { + return $this->taskRepository->listar(); + } + + /** + * @param Task $id + */ + public function delete(Task $id) + { + $this->taskRepository->delete($id); + } + + /** + * @return array + */ + public function getNumeroTasks(): int + { + return $this->taskRepository->getNumeroTasks(); + } + + /** + * @return array + */ + public function getStatus(): int + { + return $this->taskRepository->getStatus(); + } + + + +} \ No newline at end of file diff --git a/src/Domain/Services/UsuarioService.php b/src/Domain/Services/UsuarioService.php new file mode 100644 index 0000000..1f36a56 --- /dev/null +++ b/src/Domain/Services/UsuarioService.php @@ -0,0 +1,63 @@ +usuarioRepository = $usuarioRepository; + } + + + /** + * @param Usuario $usuario + */ + public function salvar(Usuario $usuario) + { + $this->usuarioRepository->salvar($usuario); + } + + /** + * @param Usuario $id + */ + public function delete(Usuario $id) + { + $this->usuarioRepository->delete($id); + } + + /** + * @param Usuario $id + */ + public function editar(Usuario $id) + { + $this->usuarioRepository->editar($id); + } + + /** + * @param array + */ + public function listar() + { + $this->usuarioRepository->listar(); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Controller/ProjetoController.php b/src/Infrastructure/Controller/ProjetoController.php index f699236..8ab66dd 100644 --- a/src/Infrastructure/Controller/ProjetoController.php +++ b/src/Infrastructure/Controller/ProjetoController.php @@ -101,4 +101,5 @@ public function cadastrar(Request $request) 'form' => $form->createView(), ]); } + } diff --git a/src/Infrastructure/Controller/TaskController.php b/src/Infrastructure/Controller/TaskController.php index d5db585..f90f5c2 100644 --- a/src/Infrastructure/Controller/TaskController.php +++ b/src/Infrastructure/Controller/TaskController.php @@ -7,6 +7,7 @@ use App\Domain\Model\Status; use App\Domain\Model\Task; use App\Domain\Model\UsuarioAtribuicao; +use App\Domain\Services\TaskService; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -19,13 +20,27 @@ class TaskController extends AbstractController { + /** - * @Route("/usuario/{id}") + * @var TaskService */ - public function listTasks() - { + private TaskService $taskService; + /** + * ProjetoController constructor. + * @param TaskService $taskService + */ + public function __construct(TaskService $taskService) + { + $this->taskService = $taskService; + } + /** + * @Route("/listar/{id}") + */ + public function listTasks() + { + $this->taskService->listar(); } /** @@ -42,7 +57,6 @@ public function atribuir(Task $task) $usuarioTask->setUsuario($user); $usuarioTask->setDtAtribuicao(new \DateTime()); $usuarioTask->setTask($task); - $task->setStatus($status); $this->getDoctrine()->getManager()->persist($status); @@ -67,10 +81,7 @@ public function cadastrar(Projeto $projeto, Request $request) if ($form->isSubmitted()) { $task = $form->getData(); $task->setProjeto($projeto); - $doctrine = $this->getDoctrine()->getManager(); - - $doctrine->persist($task); - $doctrine->flush(); + $this->taskService->salvar($task); $this->addFlash('success','Task Cadastrada com sucesso'); @@ -93,14 +104,11 @@ public function editar(Task $task, Request $request) if ($form->isSubmitted()) { $task = $form->getData(); - $doctrine = $this->getDoctrine()->getManager(); + $this->taskService->salvar($task); - $doctrine->persist($task); - $doctrine->flush(); + $this->addFlash('success','Task atualizada com sucesso'); - $this->addFlash('success','Task Cadastrada com sucesso'); - - return $this->redirect('/usuario/tasks'); + return $this->redirect('/projetos/listar'); } return $this->render('novo-task.html.twig', [ @@ -109,7 +117,24 @@ public function editar(Task $task, Request $request) } /** - * @Route("/deletar/{atribuicao}", name="deletar_task", methods={"GET", "POST"}) + * @Route("/deletar/{id}", name="deletar_task", methods={"GET", "POST"}) + * @ParamConverter("id", class="App\Domain\Model\Task") + */ + public function deletarProjetoTask(Task $id) + { + $doctrine = $this->getDoctrine()->getManager(); + + $this->taskService->delete($id); + + $doctrine->flush(); + + $this->addFlash('success','Task Deletada com sucesso'); + + return $this->redirect('/projetos/listar'); + } + + /** + * @Route("/deletar_atribuicao/{atribuicao}", name="deletar_task_atribuicao", methods={"GET", "POST"}) * @ParamConverter("atribuicao", class="App\Domain\Model\UsuarioAtribuicao") */ public function deletar(UsuarioAtribuicao $atribuicao) diff --git a/src/Infrastructure/Controller/TasksTrackerController.php b/src/Infrastructure/Controller/TasksTrackerController.php index dea9d3c..17c342e 100644 --- a/src/Infrastructure/Controller/TasksTrackerController.php +++ b/src/Infrastructure/Controller/TasksTrackerController.php @@ -8,6 +8,7 @@ use App\Domain\Model\Task; use App\Domain\Model\Usuario; use App\Domain\Services\ProjetoService; +use App\Infrastructure\Repository\TaskRepository; use App\Infrastructure\Repository\UsuarioRepository; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -27,11 +28,13 @@ class TasksTrackerController extends AbstractController public ProjetoService $projetoService; public UsuarioRepository $usuarioRepository; + public TaskRepository $taskRepository; - public function __construct(ProjetoService $projetoService, UsuarioRepository $usuarioRepository) + public function __construct(ProjetoService $projetoService, UsuarioRepository $usuarioRepository, TaskRepository $taskRepository) { $this->projetoService = $projetoService; $this->usuarioRepository = $usuarioRepository; + $this->taskRepository = $taskRepository; } @@ -44,12 +47,16 @@ public function index() $numeroProjetos = $this->projetoService->getNumroDeProjetos(); $numeroUsuario = $this->usuarioRepository->getNumeroUsers(); + $numeroTasks = $this->taskRepository->getNumeroTasks(); + $status = $this->taskRepository->getStatus(); return $this->render( 'index.html.twig', [ 'numeroProjeto' => $numeroProjetos, - 'numeroUsuarios' => $numeroUsuario + 'numeroUsuarios' => $numeroUsuario, + 'numeroTasks' => $numeroTasks, + "status" => $status ] ); } diff --git a/src/Infrastructure/Controller/UsuarioAtribuicaoController.php b/src/Infrastructure/Controller/UsuarioAtribuicaoController.php index 3ee089d..68cb982 100644 --- a/src/Infrastructure/Controller/UsuarioAtribuicaoController.php +++ b/src/Infrastructure/Controller/UsuarioAtribuicaoController.php @@ -3,8 +3,10 @@ namespace App\Infrastructure\Controller; +use App\Domain\Form\Type\UsuarioType; use App\Domain\Model\Usuario; use App\Domain\Model\UsuarioAtribuicao; +use Symfony\Component\HttpFoundation\Request; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; diff --git a/src/Infrastructure/Controller/UsuarioController.php b/src/Infrastructure/Controller/UsuarioController.php new file mode 100644 index 0000000..0cfbbd2 --- /dev/null +++ b/src/Infrastructure/Controller/UsuarioController.php @@ -0,0 +1,117 @@ +usuarioService = $usuarioService; + } + + /** + * @Route("/cadastro", name="cadastrar_usuario", methods={"GET", "POST"}) + */ + public function cadastrar(Request $request) + { + $form = $this->createForm(UsuarioType::class); + $form->handleRequest($request); + if ($form->isSubmitted()) { + $usuario= $form->getData(); + + $role = $form->get('roles')->getData(); + + $usuario->setRoles(array($role)); + + $this->usuarioService->salvar($usuario); + + $this->addFlash('success','Usuario cadastrado com sucesso'); + + return $this->redirectToRoute('usuario_listar'); + } + return $this->render('usuario-cadastro.html.twig', [ + 'form' => $form->createView(), + ]); + } + + + /** + * @Route("/deletar/{id}", name="deletar_usuario", methods={"GET", "POST"}) + * @ParamConverter("id", class="App\Domain\Model\Usuario") + */ + public function deletar(Usuario $id) + { + $this->usuarioService->delete($id); + + $this->addFlash('success','Usuario deletado com sucesso'); + + return $this->redirect('/usuario/listar'); + } + + /** + * @Route("/editar/{usuario}", name="editar_usuario", methods={"GET", "POST"}) + * @ParamConverter("usuario", class="App\Domain\Model\Usuario") + */ + public function editar(Usuario $usuario, Request $request) + { + $form = $this->createForm(UsuarioType::class, $usuario); + $form->handleRequest($request); + + if ($form->isSubmitted()) { + $usuario = $form->getData(); + + $role = $form->get('roles')->getData(); + + $usuario->setRoles(array($role)); + + $this->usuarioService->editar($usuario); + + $this->addFlash('success','Usuario Cadastrado com sucesso'); + + return $this->redirect('/usuario/listar'); + } + + return $this->render('usuario-cadastro.html.twig', [ + 'form' => $form->createView(), + ]); + } + + + //metodo nao funcionando; + /** + * @Route("/listar/usuario" , name="listar_usuarios") + */ + public function listar() + { + $usuarios = $this->usuarioService->listar(); + + return $this->render('usuarios-listar.html.twig', + [ + 'usuarios' => $usuarios, + ] + ); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Repository/TaskRepository.php b/src/Infrastructure/Repository/TaskRepository.php new file mode 100644 index 0000000..0fc37df --- /dev/null +++ b/src/Infrastructure/Repository/TaskRepository.php @@ -0,0 +1,82 @@ +getEntityManager()->persist($task); + $this->getEntityManager()->flush(); + } + + /** + * @return array + */ + public function listar(): array + { + return $this->findAll(); + } + + /** + * @param Task $id + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + */ + public function delete(Task $id): void + { + $this->getEntityManager()->remove($id); + $this->getEntityManager()->flush(); + } + + /** + * @return int + * @throws \Doctrine\ORM\NoResultException + * @throws \Doctrine\ORM\NonUniqueResultException + */ + public function getNumeroTasks(): int + { + + $queryBuilder = $this->createQueryBuilder("pro"); + $queryBuilder + ->select($queryBuilder->expr()->count("pro")); + + return $queryBuilder->getQuery()->getSingleScalarResult(); + } + + /** + * @return int + * @throws \Doctrine\ORM\NoResultException + * @throws \Doctrine\ORM\NonUniqueResultException + */ + public function getStatus(): int + { + + $queryBuilder = $this->createQueryBuilder("task"); + $queryBuilder + ->select($queryBuilder->expr()->count("task.status"))->where("task.status = 4"); + + return $queryBuilder->getQuery()->getSingleScalarResult(); + + + } +} diff --git a/src/Infrastructure/Repository/UsuarioAtribuicaoRepository.php b/src/Infrastructure/Repository/UsuarioAtribuicaoRepository.php index 19826a3..8cb505c 100644 --- a/src/Infrastructure/Repository/UsuarioAtribuicaoRepository.php +++ b/src/Infrastructure/Repository/UsuarioAtribuicaoRepository.php @@ -37,4 +37,4 @@ public function groupUserAtribuicao(): array return $queryBuilder->getQuery()->execute(); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Repository/UsuarioRepository.php b/src/Infrastructure/Repository/UsuarioRepository.php index 4d42158..09a1b05 100644 --- a/src/Infrastructure/Repository/UsuarioRepository.php +++ b/src/Infrastructure/Repository/UsuarioRepository.php @@ -2,7 +2,9 @@ namespace App\Infrastructure\Repository; +use App\Domain\Form\Type\UsuarioType; use App\Domain\Model\Usuario; +use App\Domain\Model\UsuarioRepositoryInterface; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; @@ -12,7 +14,7 @@ * @method Usuario[] findAll() * @method Usuario[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ -class UsuarioRepository extends ServiceEntityRepository +class UsuarioRepository extends ServiceEntityRepository implements UsuarioRepositoryInterface { public function __construct(ManagerRegistry $registry) { @@ -32,6 +34,51 @@ public function getNumeroUsers(): int ->select($queryBuilder->expr()->count("user")); return $queryBuilder->getQuery()->getSingleScalarResult(); + } + + /** + * @param Usuario $usuario + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + */ + public function salvar(Usuario $usuario): void + { + $this->getEntityManager()->persist($usuario); + $this->getEntityManager()->flush(); + } + /** + * @param Usuario $id + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + */ + public function delete(Usuario $id): void + { + $this->getEntityManager()->remove($id); + $this->getEntityManager()->flush(); + } + + /** + * @param Usuario $usuario + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + */ + public function editar(Usuario $usuario): void + { + $this->getEntityManager()->persist($usuario); + $this->getEntityManager()->flush(); + } + + /** + * @param array + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + */ + public function listar(): array + { + return $this + ->getEntityManager() + ->getRepository(Usuario::class) + ->findAll(); } } diff --git a/templates/header.html.twig b/templates/header.html.twig index c2b89c6..45edc6a 100644 --- a/templates/header.html.twig +++ b/templates/header.html.twig @@ -34,7 +34,7 @@