diff --git a/src/Domain/Form/Type/StatusType.php b/src/Domain/Form/Type/StatusType.php new file mode 100644 index 0000000..70125d4 --- /dev/null +++ b/src/Domain/Form/Type/StatusType.php @@ -0,0 +1,36 @@ +add('descricao', TextType::class, ['label' => 'Descrição']) + ->add('salvar', SubmitType::class); + } + + /** + * @param OptionsResolver $resolver + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Status::class + ]); + } +} diff --git a/src/Domain/Form/Type/TaskType.php b/src/Domain/Form/Type/TaskType.php index a5f1b1c..e997e61 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 Task ']]) ->add('descricao', TextareaType::class) ->add('dtCadastro', DateType::class, [ 'label' => 'Data de Cadastro', diff --git a/src/Domain/Form/Type/UsuarioType.php b/src/Domain/Form/Type/UsuarioType.php new file mode 100644 index 0000000..89c0948 --- /dev/null +++ b/src/Domain/Form/Type/UsuarioType.php @@ -0,0 +1,60 @@ +add('email', TextType::class, ['label' => 'Email']) + ->add('nome', TextType::class, ['label' => 'Nome']) + ->add('password', PasswordType::class, ['label' => 'Senha']) + ->add('roles', ChoiceType::class, ['label' => 'Permissão', + //'multiple' => false, + 'choices' => [ + 'ROLE_ADMIM' => 'ROLE_ADMIM', + 'ROLE_COMUN' => 'ROLE_COMUM', + ], + ]) + ->add('salvar', SubmitType::class); + + $builder->get('roles') + ->addModelTransformer(new CallbackTransformer( + function ($rolesArray) { + // transform the array to a string + return is_array($rolesArray)? $rolesArray[0]: null; + }, + function ($rolesString) { + // transform the string back to an array + return [$rolesString]; + } + )); + } + + /** + * @param OptionsResolver $resolver + */ + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Usuario::class + ]); + } +} diff --git a/src/Domain/Model/ProjetoRepositoryInterface.php b/src/Domain/Model/ProjetoRepositoryInterface.php index ee55a03..d1be804 100644 --- a/src/Domain/Model/ProjetoRepositoryInterface.php +++ b/src/Domain/Model/ProjetoRepositoryInterface.php @@ -11,4 +11,6 @@ interface ProjetoRepositoryInterface public function salvar(Projeto $projeto): void; public function listar(): array; + + public function findByStatus($value); } diff --git a/src/Domain/Services/ProjetoService.php b/src/Domain/Services/ProjetoService.php index 17ac2bc..eb17c7b 100644 --- a/src/Domain/Services/ProjetoService.php +++ b/src/Domain/Services/ProjetoService.php @@ -41,4 +41,9 @@ public function listar(): array { return $this->projetoRepository->listar(); } + + public function findByStatus($value) + { + return $this->projetoRepository->findByStatus($value); + } } diff --git a/src/Domain/Services/StatusService.php b/src/Domain/Services/StatusService.php new file mode 100644 index 0000000..10f30dc --- /dev/null +++ b/src/Domain/Services/StatusService.php @@ -0,0 +1,53 @@ +statusRepository = $statusRepository; + } + + /** + * @param Status $status + */ + public function salvar(Status $status) + { + $this->statusRepository->salvar($status); + } + + /** + * @return array + */ + public function listar(): array + { + return $this->statusRepository->listar(); + } + + /** + * @param Status $status + */ + public function remover(Status $status) + { + $this->statusRepository->remover($status); + } +} diff --git a/src/Domain/Services/TaskService.php b/src/Domain/Services/TaskService.php new file mode 100644 index 0000000..a53f13b --- /dev/null +++ b/src/Domain/Services/TaskService.php @@ -0,0 +1,55 @@ +taskRepository = $taskRepository; + } + + /** + * @param Task $status + */ + public function salvar(Task $task) + { + $this->taskRepository->salvar($task); + } + + /** + * @return array + */ + public function listar(): array + { + return $this->taskRepository->listar(); + } + + /** + * @param Task $task + */ + public function remover(Status $task) + { + $this->taskRepository->remover($task); + } +} diff --git a/src/Domain/Services/UsuarioService.php b/src/Domain/Services/UsuarioService.php new file mode 100644 index 0000000..f8b6ddf --- /dev/null +++ b/src/Domain/Services/UsuarioService.php @@ -0,0 +1,54 @@ +usuarioRepository = $usuarioRepository; + } + + /** + * @param Usuario $usuario + */ + public function salvar(Usuario $usuario) + { + $this->usuarioRepository->salvar($usuario); + } + + /** + * @return array + */ + public function listar(): array + { + return $this->usuarioRepository->listar(); + } + + /** + * @param Usuario $usuario + */ + public function remover(Usuario $usuario) + { + $this->usuarioRepository->remover($usuario); + } +} diff --git a/src/Infrastructure/Controller/ProjetoController.php b/src/Infrastructure/Controller/ProjetoController.php index 0bafe04..9cc2636 100644 --- a/src/Infrastructure/Controller/ProjetoController.php +++ b/src/Infrastructure/Controller/ProjetoController.php @@ -102,4 +102,20 @@ public function cadastrar(Request $request) 'form' => $form->createView(), ]); } + + /** + * @Route("/pesquisar", name="pesquisar_projetos") + */ + public function findByStatus() + { + $value = 'juan'; + $projeto = $this->projetoService->findByStatus($value); + $output = new \Symfony\Component\Console\Output\ConsoleOutput(); + + $output->writeln('erro'); + return $this->render('projeto.html.twig', ['projeto' => $projeto]); + //return $this->render('lista-projetos.html.twig', ['projetos' => $projetos]); + } + + } diff --git a/src/Infrastructure/Controller/StatusController.php b/src/Infrastructure/Controller/StatusController.php new file mode 100644 index 0000000..9504eba --- /dev/null +++ b/src/Infrastructure/Controller/StatusController.php @@ -0,0 +1,112 @@ +statusService = $statusService; + } + + + + /** + * @Route("/listar" , name="status_listar") + */ + public function listar() + { + + $status = $this->statusService->listar(); + + return $this->render('status-listar.html.twig', + [ + 'status' => $status, + ] + ); + } + + /** + * @Route("/cadastrar", name="status_cadastrar") + */ + public function cadastrar(Request $request) + { + $form = $this->createForm(StatusType::class); + $form->handleRequest($request); + + if ($form->isSubmitted()) { + $status = $form->getData(); + $this->statusService->salvar($status); + $this->addFlash('success','Status Salvo com sucesso'); + + return $this->redirectToRoute('status_listar'); + } + + return $this->render('novo-status.html.twig', [ + 'form' => $form->createView(), + ]); + } + + /** + * @Route("/editar/{status}", name="editar_status") + * @ParamConverter("status", class="App\Domain\Model\Status") + * @param Status $status + */ + public function editar(Status $status, Request $request) + { + $form = $this->createForm(StatusType::class, $status); + $form->handleRequest($request); + + if ($form->isSubmitted()) { + + $status = $form->getData(); + $this->statusService->salvar($status); + + $this->addFlash('success','Status Alterado com sucesso'); + + return $this->redirectToRoute('status_listar'); + } + + return $this->render('novo-status.html.twig', [ + 'form' => $form->createView(), + ]); + } + + /** + * @Route("/remover/{status}", name="remover_status") + * @ParamConverter("status", class="App\Domain\Model\Status") + * @param Status $status + */ + public function remover(Status $status, Request $request) + { + + $this->statusService->remover($status); + + $this->addFlash('success','Status Removido com sucesso'); + + return $this->redirectToRoute('status_listar'); + + } + + + +} diff --git a/src/Infrastructure/Controller/TaskController.php b/src/Infrastructure/Controller/TaskController.php index d5db585..6afbc38 100644 --- a/src/Infrastructure/Controller/TaskController.php +++ b/src/Infrastructure/Controller/TaskController.php @@ -12,12 +12,20 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use App\Domain\Services\TaskService; /** * @Route("/task") */ class TaskController extends AbstractController { + + private TaskService $taskService; + + public function __construct(TaskService $taskService) + { + $this->taskService = $taskService; + } /** * @Route("/usuario/{id}") @@ -67,11 +75,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'); return $this->redirect('/projetos/visualizar/'.$projeto->getId()); @@ -93,12 +97,9 @@ public function editar(Task $task, Request $request) if ($form->isSubmitted()) { $task = $form->getData(); - $doctrine = $this->getDoctrine()->getManager(); - - $doctrine->persist($task); - $doctrine->flush(); - - $this->addFlash('success','Task Cadastrada com sucesso'); + + $this->taskService->salvar($task); + $this->addFlash('success','Task Alterada com sucesso'); return $this->redirect('/usuario/tasks'); } diff --git a/src/Infrastructure/Controller/UsuarioAtribuicaoController.php b/src/Infrastructure/Controller/UsuarioAtribuicaoController.php index 3ee089d..700d1d6 100644 --- a/src/Infrastructure/Controller/UsuarioAtribuicaoController.php +++ b/src/Infrastructure/Controller/UsuarioAtribuicaoController.php @@ -2,13 +2,16 @@ namespace App\Infrastructure\Controller; - +use App\Domain\Form\Type\UsuarioType; use App\Domain\Model\Usuario; use App\Domain\Model\UsuarioAtribuicao; use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\HttpFoundation\Request; +use App\Domain\Services\UsuarioService; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; /** * Class UsuarioAtribuicaoController @@ -18,6 +21,13 @@ class UsuarioAtribuicaoController extends AbstractController { + private UsuarioService $usuarioService; + + public function __construct(UsuarioService $usuarioService) + { + $this->usuarioService = $usuarioService; + } + /** * @Route("/tasks" , name="usuario_tasks") */ @@ -43,11 +53,13 @@ public function listarAtribuicoes() */ public function listarUsuarios() { - $usuarios = $this - ->getDoctrine() - ->getRepository(Usuario::class) - ->findAll() - ; +// $usuarios = $this +// ->getDoctrine() +// ->getRepository(Usuario::class) +// ->findAll() +// ; + + $usuarios = $this->usuarioService->listar(); return $this->render('usuarios-listar.html.twig', [ @@ -55,5 +67,67 @@ public function listarUsuarios() ] ); } + + /** + * @Route("/cadastrar", name="usuario_cadastrar") + */ + public function cadastrar(Request $request) + { + $form = $this->createForm(UsuarioType::class); + $form->handleRequest($request); + + if ($form->isSubmitted()) { + $usuario = $form->getData(); + $this->usuarioService->salvar($usuario); + $this->addFlash('success','Usuário Salvo com sucesso'); + + return $this->redirectToRoute('usuario_listar'); + } + + return $this->render('novo-usuario.html.twig', [ + 'form' => $form->createView(), + ]); + } + + /** + * @Route("/editar/{usuario}", name="editar_usuarios") + * @ParamConverter("usuario", class="App\Domain\Model\Usuario") + * @param Usuario $usuario + */ + public function editar(Usuario $usuario, Request $request) + { + $form = $this->createForm(UsuarioType::class, $usuario); + $form->handleRequest($request); + + if ($form->isSubmitted()) { + + $usuario = $form->getData(); + $this->usuarioService->salvar($usuario); + + $this->addFlash('success','Usuário Alterado com sucesso'); + + return $this->redirectToRoute('usuario_listar'); + } + + return $this->render('novo-usuario.html.twig', [ + 'form' => $form->createView(), + ]); + } + + /** + * @Route("/remover/{usuario}", name="remover_usuarios") + * @ParamConverter("usuario", class="App\Domain\Model\Usuario") + * @param Usuario $usuario + */ + public function remover(Usuario $usuario, Request $request) + { + + $this->usuarioService->remover($usuario); + + $this->addFlash('success','Usuário Removido com sucesso'); + + return $this->redirectToRoute('usuario_listar'); + + } } diff --git a/src/Infrastructure/Repository/ProjetoRepository.php b/src/Infrastructure/Repository/ProjetoRepository.php index 4393401..9ed81c4 100644 --- a/src/Infrastructure/Repository/ProjetoRepository.php +++ b/src/Infrastructure/Repository/ProjetoRepository.php @@ -36,4 +36,19 @@ public function listar(): array { return $this->findAll(); } + + public function findByStatus($value) + { + return $this->createQueryBuilder('u') + ->select('u') + ->innerJoin('u.tasks', 't') + ->innerJoin('t.status', 'i') + ->Where('i.id = :status') + ->setParameter('status', 2) + ->andWhere('u.id = :id') + ->setParameter('id', 32) + ->getQuery() + ->getSingleResult() + ; + } } diff --git a/src/Infrastructure/Repository/StatusRepository.php b/src/Infrastructure/Repository/StatusRepository.php new file mode 100644 index 0000000..10bb228 --- /dev/null +++ b/src/Infrastructure/Repository/StatusRepository.php @@ -0,0 +1,41 @@ +getEntityManager()->persist($status); + $this->getEntityManager()->flush(); + } + + /** + * @return array + */ + public function listar(): array + { + return $this->findAll(); + } + + public function remover(Status $status): void + { + $this->getEntityManager()->remove($status); + $this->getEntityManager()->flush(); + } +} diff --git a/src/Infrastructure/Repository/TaskRepository.php b/src/Infrastructure/Repository/TaskRepository.php new file mode 100644 index 0000000..421c372 --- /dev/null +++ b/src/Infrastructure/Repository/TaskRepository.php @@ -0,0 +1,42 @@ +getEntityManager()->persist($task); + $this->getEntityManager()->flush(); + } + + /** + * @return array + */ + public function listar(): array + { + return $this->findAll(); + } + + public function remover(Task $task): void + { + $this->getEntityManager()->remove($task); + $this->getEntityManager()->flush(); + } +} diff --git a/src/Infrastructure/Repository/UsuarioRepository.php b/src/Infrastructure/Repository/UsuarioRepository.php index 524680c..68650e1 100644 --- a/src/Infrastructure/Repository/UsuarioRepository.php +++ b/src/Infrastructure/Repository/UsuarioRepository.php @@ -47,4 +47,29 @@ public function findOneBySomeField($value): ?Usuario ; } */ + + /** + * @param Usuario $projeto + * @throws \Doctrine\ORM\ORMException + * @throws \Doctrine\ORM\OptimisticLockException + */ + public function salvar(Usuario $usuario): void + { + $this->getEntityManager()->persist($usuario); + $this->getEntityManager()->flush(); + } + + /** + * @return array + */ + public function listar(): array + { + return $this->findAll(); + } + + public function remover(Usuario $usuario): void + { + $this->getEntityManager()->remove($usuario); + $this->getEntityManager()->flush(); + } } diff --git a/templates/header.html.twig b/templates/header.html.twig index c2b89c6..8d195f0 100644 --- a/templates/header.html.twig +++ b/templates/header.html.twig @@ -80,7 +80,7 @@ data-parent="#accordionSidebar">
@@ -93,7 +93,20 @@