src/Controller/UserProjectController.php line 22

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\BillingHistory;
  4. use App\Entity\UserProject;
  5. use App\Form\UserProjectFormType;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Security\Http\Attribute\IsGranted;
  13. #[IsGranted('ROLE_USER')]
  14. class UserProjectController extends AbstractController
  15. {
  16.     public function __construct(private readonly ManagerRegistry $doctrine) {}
  17.     
  18.     #[Route('/user/projects'name'app_user_projects')]
  19.     public function index(): Response
  20.     {
  21.         $userProjects $this->getUser()->getUserProjects();
  22.         $total = [];
  23.         
  24.         foreach ($userProjects as $project) {
  25.             $totalCount 0;
  26.             $billingHistories $this->doctrine->getRepository(BillingHistory::class)->findByUserProject($project);
  27.             foreach ($billingHistories as $billing) {
  28.                 if ($billing->getSignBillingService() == "-") {
  29.                     $totalCount += $billing->getPrice();
  30.                 }
  31.             }
  32.             $total[$project->getId()] = $totalCount;
  33.         }
  34.         // todo total balance
  35.         //$this->getUser()->getBillingHistories();
  36.         return $this->render('user_project/index.html.twig', [
  37.             'userProjects' => $userProjects,
  38.             'total' => $total,
  39.         ]);
  40.     }
  41.     #[Route('user/projects/create'name'app_user_project_create')]
  42.     public function create(Request $requestEntityManagerInterface $entityManager): Response
  43.     {
  44.         $userProject = new UserProject();
  45.         $form $this->createForm(UserProjectFormType::class, $userProject);
  46.         $form->handleRequest($request);
  47.         if ($form->isSubmitted() && $form->isValid()) {
  48.             $userProject->setUser($this->getUser());
  49.             $userProject->setIsMain(false);
  50.             $entityManager->persist($userProject);
  51.             $entityManager->flush();
  52.             return $this->redirectToRoute('app_user_projects');
  53.         }
  54.         return $this->render('user_project/form.html.twig', [
  55.             'form' => $form->createView(),
  56.             'userProject' => $userProject,
  57.             'createAction' => true
  58.         ]);
  59.     }
  60.     #[Route('/user/projects/{userProject}'name'app_user_project_edit')]
  61.     public function edit(Request $requestUserProject $userProjectEntityManagerInterface $entityManager): Response
  62.     {
  63.         if ($userProject->getUser() !== $this->getUser()) {
  64.             throw $this->createAccessDeniedException('Нет доступа');
  65.         }
  66.         
  67.         $form $this->createForm(UserProjectFormType::class, $userProject);
  68.         $form->handleRequest($request);
  69.         if ($form->isSubmitted() && $form->isValid()) {
  70.             $entityManager->flush();
  71.             return $this->redirectToRoute('app_user_projects');
  72.         }
  73.     
  74.         $billingHistories $this->doctrine->getRepository(BillingHistory::class)->findByUserProject($userProject);
  75.     
  76.         return $this->render('user_project/form.html.twig', [
  77.             'form' => $form->createView(),
  78.             'userProject' => $userProject,
  79.             'createAction' => false,
  80.             'billingHistories' => $billingHistories
  81.         ]);
  82.     }
  83.     #[Route('/user/projects/remove/{userProject}'name'app_user_project_remove')]
  84.     public function remove(UserProject $userProjectEntityManagerInterface $entityManager): Response
  85.     {
  86.         if ($userProject->getUser() !== $this->getUser()) {
  87.             throw $this->createAccessDeniedException('Нет доступа');
  88.         }
  89.         if ($userProject->isMain() === true) {
  90.             throw $this->createAccessDeniedException('Нельзя удалить проект по умолчанию');
  91.         }
  92.         $entityManager->remove($userProject);
  93.         $entityManager->flush();
  94.         return $this->redirectToRoute('app_user_projects');
  95.     }
  96. }