src/Controller/Backend/CotisationController.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Backend;
  3. use App\Entity\CotisationNotification;
  4. use App\Entity\EntityStatus;
  5. use App\Entity\Order;
  6. use App\Entity\PaymentType;
  7. use App\Service\IsMemberService;
  8. use App\Service\SaleService;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use App\Entity\Cotisation;
  14. use App\Form\Backend\CotisationFormType;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. #[IsGranted('ROLE_COMPTABLE'message"Cher utilisateur FFCB, Vous n'avez pas l'autorisation pour cette action !")]
  20. #[Route('/admin')]
  21. class CotisationController extends AbstractController
  22. {
  23.     private IsMemberService $isMemberService;
  24.     public function __construct(IsMemberService $isMemberService)
  25.     {
  26.         $this->isMemberService $isMemberService;
  27.     }
  28.     #[Route(path'/cotisations/{id}/show'name'show_cotisation')]
  29.     #[IsGranted('ROLE_USER'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  30.     public function show(Cotisation $cotisation): Response
  31.     {
  32.         return $this->render('backend/cotisation/show.html.twig', [
  33.             'controller_name' => 'CotisationController',
  34.             'menu' => 'cotisation',
  35.             'cotisation' => $cotisation,
  36.         ]);
  37.     }
  38.     #[Route(path'/cotisations/add'name'add_cotisation')]
  39.     #[IsGranted('ROLE_ADD_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  40.     public function add(
  41.         Request $request,
  42.         EntityManagerInterface $em,
  43.         SaleService $saleService
  44.     ): RedirectResponse|Response
  45.     {
  46.         $cotisation = new Cotisation();
  47.         $form $this->createForm(CotisationFormType::class, $cotisation);
  48.         $form->handleRequest($request);
  49.         if ($form->isSubmitted() && $form->isValid()) {
  50.             $cotisation $this->save(
  51.                 $cotisation,
  52.                 $form->get('paymentType')->getData(),
  53.                 $saleService,
  54.                 $em
  55.             );
  56.             /*$notification = $em->getRepository(CotisationNotification::class)->findOneBy([
  57.                 'firm' => $cotisation->getEntreprise(),
  58.                 'status' => CotisationNotification::STATUS_ACTIVE
  59.             ]);
  60.             if (!is_null($notification)) {
  61.                 $notification->setStatus(CotisationNotification::STATUS_PERFORMED);
  62.                 $em->persist($notification);
  63.             }
  64.             $order = $saleService->buildOrderFromCotisation(
  65.                 $this->getUser()->getContact()->getFirm(),
  66.                 $cotisation,
  67.                 $form->get('paymentType')->getData()
  68.             );
  69.             $cotisation->setAssocietedOrder($order);
  70.             if ($cotisation->isOptionMapa() === false) {
  71.                 $cotisation->setPriceOptionMapa(null);
  72.             }
  73.             if ($cotisation->isOptionImportExport() === false) {
  74.                 $cotisation->setPriceOptionImportExport(null);
  75.             }*/
  76.             $em->persist($cotisation);
  77.             $em->flush();
  78.             $this->addFlash(
  79.                 'success',
  80.                 'Enregistrement effectué avec succès'
  81.             );
  82.             return $this->redirectToRoute('show_cotisation', [
  83.                 'id' => $cotisation->getId()
  84.             ]);
  85.         }
  86.         return $this->renderForm('backend/cotisation/edit.html.twig', [
  87.             'controller_name' => 'CotisationController',
  88.             'menu' => 'cotisation',
  89.             'cotisationForm' => $form,
  90.             'action' => 'creation'
  91.         ]);
  92.     }
  93.     #[Route(path'/cotisations/{id}/edit'name'edit_cotisation')]
  94.     #[IsGranted('ROLE_UPDATE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  95.     public function edit(
  96.         Request $request,
  97.         Cotisation $cotisation,
  98.         EntityManagerInterface $em,
  99.         SaleService $saleService
  100.     ): RedirectResponse|Response
  101.     {
  102.         $form $this->createForm(CotisationFormType::class, $cotisation);
  103.         $form->handleRequest($request);
  104.         if ($form->isSubmitted() && $form->isValid()) {
  105.             $cotisation $this->save(
  106.                 $cotisation,
  107.                 $form->get('paymentType')->getData(),
  108.                 $saleService,
  109.                 $em
  110.             );
  111.             $em->persist($cotisation);
  112.             $em->flush();
  113.             $this->addFlash(
  114.                 'success',
  115.                 'Enregistrement effectué avec succès'
  116.             );
  117.             return $this->redirectToRoute('show_cotisation', [
  118.                 'id' => $cotisation->getId()
  119.             ]);
  120.         }
  121.         return $this->renderForm('backend/cotisation/edit.html.twig', [
  122.             'controller_name' => 'CotisationController',
  123.             'menu' => 'cotisation',
  124.             'cotisationForm' => $form,
  125.             'action' => 'editer',
  126.             'cotisation' => $cotisation
  127.         ]);
  128.     }
  129.     private function save(
  130.         Cotisation $cotisation,
  131.         PaymentType $paymentType,
  132.         SaleService $saleService,
  133.         EntityManagerInterface $em
  134.     ): Cotisation
  135.     {
  136.         $notification $em->getRepository(CotisationNotification::class)->findOneBy([
  137.             'firm' => $cotisation->getEntreprise(),
  138.             'status' => CotisationNotification::STATUS_ACTIVE
  139.         ]);
  140.         if (!is_null($notification)) {
  141.             $notification->setStatus(CotisationNotification::STATUS_PERFORMED);
  142.             $em->persist($notification);
  143.         }
  144.         if ($cotisation->isOptionMapa() === false) {
  145.             $cotisation->setPriceOptionMapa(null);
  146.         }
  147.         if ($cotisation->isOptionImportExport() === false) {
  148.             $cotisation->setPriceOptionImportExport(null);
  149.         }
  150.         $totalHt  0;
  151.         $totalHt += $cotisation->getPriceDepartmentPart() ?? 0;
  152.         $totalHt += $cotisation->getPriceNationalPart() ?? 0;
  153.         $totalHt += $cotisation->getPriceOptionImportExport() ?? 0;
  154.         $cotisation->setPriceHt($totalHt);
  155.         $totalVAT $cotisation->getPriceHt() / 100 20;
  156.         $cotisation->setPriceVat($totalVAT);
  157.         $totalTtc $cotisation->getPriceHt() + $cotisation->getPriceVat() + ($cotisation->getPriceOptionMapa() ?? 0);
  158.         $cotisation->setPriceTtc($totalTtc);
  159.         $this->isMemberService->checkIsMember($cotisation->getEntreprise());
  160.         if ($cotisation->getAssocietedOrder() === null) {
  161.             $order $saleService->buildOrderFromCotisation(
  162.                 $cotisation->getEntreprise(),
  163.                 $cotisation,
  164.                 $paymentType
  165.             );
  166.             $cotisation->setAssocietedOrder($order);
  167.         } else {
  168.             $cotisation
  169.                 ->getAssocietedOrder()
  170.                 ->setPaymentType($paymentType)
  171.             ;
  172.         }
  173.         $orderStatus = match ($cotisation->getCotisationStatut()->getId()) {
  174.             => Order::STATUS_PAID,
  175.             default => Order::STATUS_WAITING_PAYMENT
  176.         };
  177.         $cotisation
  178.             ->getAssocietedOrder()
  179.             ->setStatus($orderStatus)
  180.         ;
  181.         return $cotisation;
  182.     }
  183.     #[Route(path'/cotisations/{id}/archive'name'archive_cotisation'methods: ['DELETE''POST'])]
  184.     #[IsGranted('ROLE_DELETE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  185.     public function archive(Cotisation $cotisationRequest $requestEntityManagerInterface $em): JsonResponse
  186.     {
  187.         $data json_decode($request->getContent(), true);
  188.         if ($this->isCsrfTokenValid('cotisation_'.$cotisation->getId(), $data['_token'])) {
  189.             $cotisation->setStatus(EntityStatus::STATUS_ARCHIVED);
  190.             $order $cotisation->getAssocietedOrder();
  191.             if($order){
  192.                 $order->setStatus(EntityStatus::STATUS_ARCHIVED);
  193.                 $em->persist($order);
  194.             }
  195.             $em->persist($cotisation);
  196.             $em->flush();
  197.             return new JsonResponse([
  198.                 'status' => 'ok',
  199.                 'message' => 'Archivage effectuée avec succès'
  200.             ]);
  201.         }
  202.         return new JsonResponse([
  203.             'status' => 'nok',
  204.             'message' => 'Erreur lors de l\'archivage. Merci de contacter un administrateur.'
  205.         ]);
  206.     }
  207.     #[Route(path'/cotisations/{id}/enable'name'enable_cotisation'methods: ['DELETE''POST'])]
  208.     #[IsGranted('ROLE_DELETE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  209.     public function enable(Cotisation $cotisationRequest $requestEntityManagerInterface $em): JsonResponse
  210.     {
  211.         $data json_decode($request->getContent(), true);
  212.         if (
  213.             $cotisation->getStatus() === EntityStatus::STATUS_ARCHIVED &&
  214.             $this->isCsrfTokenValid('cotisation_'.$cotisation->getId(), $data['_token'])
  215.         ) {
  216.             $cotisation->setStatus(EntityStatus::STATUS_ENABLED);
  217.             $em->persist($cotisation);
  218.             $em->flush();
  219.             return new JsonResponse([
  220.                 'status' => 'ok',
  221.                 'message' => 'Activation effectuée avec succès'
  222.             ]);
  223.         }
  224.         return new JsonResponse([
  225.             'status' => 'nok',
  226.             'message' => 'Erreur lors de l\'activation. Merci de contacter un administrateur.'
  227.         ]);
  228.     }
  229. }