src/Controller/App/SubscriptionController.php line 35

  1. <?php
  2. namespace App\Controller\App;
  3. use DateTime;
  4. use DateInterval;
  5. use App\Entity\Child;
  6. use App\Entity\Payment;
  7. use App\Entity\Section;
  8. use App\Entity\Service;
  9. use App\Form\PaymentType;
  10. use App\Entity\Subscription;
  11. use App\Form\SubscriptionType;
  12. use App\Entity\enums\SubscriptionStatus;
  13. use App\Form\SubscriptionTypeBasic;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use App\Repository\SubscriptionRepository;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Form\FormFactoryInterface;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\Serializer\SerializerInterface;
  22. use Symfony\Contracts\Translation\TranslatorInterface;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. #[Route('/app/subscription')]
  25. class SubscriptionController extends AbstractController
  26. {
  27.     public function __construct(private TranslatorInterface $translator)
  28.     {
  29.     }
  30.     #[Route('/'name'app_subscription_index'methods: ['GET''POST'])]
  31.     public function index(Request $requestSubscriptionRepository $subscriptionRepositoryEntityManagerInterface $manager): Response
  32.     {
  33.         if ($request->isXmlHttpRequest()) {
  34.             if ($this->isCsrfTokenValid('subscription_type_basic'$_POST['subscription_type_basic']['_token'])) {
  35.                 $subscription = new Subscription();
  36.                 $form $this->createForm(SubscriptionTypeBasic::class, $subscription);
  37.                 $child $manager->getRepository(Child::class)->find($_POST['subscription_type_basic']['child']);
  38.                 $service $manager->getRepository(Service::class)->find($_POST['subscription_type_basic']['service']);
  39.                 $start_date = new DateTime($_POST['subscription_type_basic']['start_date']);
  40.                 $expire_date $start_date->add(new DateInterval('P' $service->getDuration() . 'D'));
  41.                 $subscription
  42.                     ->setChild($child)
  43.                     ->setService($service)
  44.                     ->setDescription($_POST['subscription_type_basic']['description'])
  45.                     ->setTotal(floatval($service->getPrice()))
  46.                     ->setDiscount($_POST['subscription_type_basic']['discount'])
  47.                     ->setStartDate(new DateTime($_POST['subscription_type_basic']['start_date']))
  48.                     ->setExpireDate($expire_date)
  49.                     ->setCreatedBy($this->getUser());
  50.                 $subscriptionRepository->add($subscriptiontrue);
  51.                 return new JsonResponse(['status' => 'ok''data' => $subscription->getId(), 'msg' => $this->translator->trans('Abonnement crée !!')]);
  52.             } else {
  53.                 return new JsonResponse(['status' => 'no''data' => null'msg' => $this->translator->trans('token invalid !')]);
  54.             }
  55.         }
  56.         $subscription = new Subscription();
  57.         $form $this->createForm(SubscriptionTypeBasic::class, $subscription);
  58.         $edit_form $this->createForm(SubscriptionTypeBasic::class, $subscription, [
  59.             'action' => $this->generateUrl('app_subscription_edit_ajax', ['id' => '1']),
  60.             'method' => 'POST',
  61.             'attr' => ['name' => 'subscription_type_basic_edit']
  62.         ]);
  63.         return $this->render('app/subscription/index.html.twig', [
  64.             'subscriptions' => $subscriptionRepository->findAll(),
  65.             'form' => $form->createView(),
  66.             'edit_form' => $edit_form->createView()
  67.         ]);
  68.     }
  69.     #[Route('/new'name'app_subscription_new'methods: ['GET''POST'])]
  70.     public function new(Request $requestSubscriptionRepository $subscriptionRepository): Response
  71.     {
  72.         return $this->redirectToRoute('app_subscription_index', [], Response::HTTP_SEE_OTHER);
  73.         // $subscription = new Subscription();
  74.         // $form = $this->createForm(SubscriptionType::class, $subscription);
  75.         // $form->handleRequest($request);
  76.         // if ($form->isSubmitted() && $form->isValid()) {
  77.         //     /** @var $user App\Entity\User */
  78.         //     $user = $this->getUser();
  79.         //     $subscription
  80.         //         ->setCreatedBy($this->getUser());
  81.         //     $this->addFlash('success', $this->translator->trans('Succès !!'));
  82.         //     $subscriptionRepository->add($subscription, true);
  83.         //     return $this->redirectToRoute('app_subscription_index', [], Response::HTTP_SEE_OTHER);
  84.         // }
  85.         // return $this->renderForm('app/subscription/new.html.twig', [
  86.         //     'subscription' => $subscription,
  87.         //     'form' => $form,
  88.         // ]);
  89.     }
  90.     #[Route('/{id}'name'app_subscription_show'methods: ['GET'])]
  91.     public function show(Subscription $subscription): Response
  92.     {
  93.         return $this->redirectToRoute('app_subscription_index', [], Response::HTTP_SEE_OTHER);
  94.         // return $this->render('app/subscription/show.html.twig', [
  95.         //     'subscription' => $subscription,
  96.         // ]);
  97.     }
  98.     #[Route('/ajax/{id}'name'app_subscription_show_ajax'methods: ['GET'])]
  99.     public function show_ajax(Subscription $subscriptionSerializerInterface $serializer): Response
  100.     {
  101.         $json $serializer->serialize($subscription'json', ['groups' => ['read:subscription:basic''read:child:basic''read:service:basic']]);
  102.         return $this->json(json_decode($json));
  103.     }
  104.     #[Route('/{id}/edit'name'app_subscription_edit'methods: ['GET''POST'])]
  105.     public function edit(Request $requestSubscription $subscriptionSubscriptionRepository $subscriptionRepositoryFormFactoryInterface $formFactory): Response
  106.     {
  107.         $form $this->createForm(SubscriptionTypeBasic::class, $subscription);
  108.         $form->handleRequest($request);
  109.         if ($form->isSubmitted() && $form->isValid()) {
  110.             /** @var $start_date DateTime */
  111.             $start_date $subscription->getStartDate();
  112.             $expire_date $start_date->add(new DateInterval('P' $subscription->getService()->getDuration() . 'D'));
  113.             $subscription
  114.                 ->setTotal(floatval($subscription->getService()->getPrice()))
  115.                 ->setStartDate(new DateTime($_POST['subscription_type_basic']['start_date']))
  116.                 ->setExpireDate($expire_date);
  117.             $subscriptionRepository->add($subscriptiontrue);
  118.             $this->addFlash('success'$this->translator->trans('Succès !!'));
  119.             return $this->redirectToRoute('app_subscription_edit', ['id' => $subscription->getId()], Response::HTTP_SEE_OTHER);
  120.         }
  121.         $payment = new Payment();
  122.         $edit_form $formFactory->createNamed('payment_type_edit'PaymentType::class, $payment);
  123.         return $this->renderForm('app/subscription/edit.html.twig', [
  124.             'subscription' => $subscription,
  125.             'form' => $form,
  126.             'edit_form' => $edit_form
  127.         ]);
  128.     }
  129.     #[Route('/{id?}/edit/ajax'name'app_subscription_edit_ajax'methods: ['GET''POST'])]
  130.     public function edit_ajax(Request $requestSubscription $subscriptionSubscriptionRepository $subscriptionRepositoryEntityManagerInterface $manager): Response
  131.     {
  132.         if ($request->isXmlHttpRequest()) {
  133.             if ($this->isCsrfTokenValid('edit_subscription'$_POST['subscription_type_basic']['_token'])) {
  134.                 $child $manager->getRepository(Child::class)->find($_POST['subscription_type_basic']['child']);
  135.                 $service $manager->getRepository(Service::class)->find($_POST['subscription_type_basic']['service']);
  136.                 $form $this->createForm(SubscriptionTypeBasic::class, $subscription);
  137.                 $start_date = new DateTime($_POST['subscription_type_basic']['start_date']);
  138.                 $expire_date $start_date->add(new DateInterval('P' $service->getDuration() . 'D'));
  139.                 $subscription
  140.                     ->setDescription($_POST['subscription_type_basic']['description'])
  141.                     ->setChild($child)
  142.                     ->setService($service)
  143.                     ->setStartDate(new DateTime($_POST['subscription_type_basic']['start_date']))
  144.                     ->setExpireDate($expire_date)
  145.                     ->setDiscount($_POST['subscription_type_basic']['discount']);
  146.                 $form->handleRequest($request);
  147.                 $subscriptionRepository->add($subscriptiontrue);
  148.                 return new JsonResponse(['status' => 'ok''data' => $subscription->getId(), 'msg' => $this->translator->trans('Abonnement mis à jour !!')]);
  149.             } else {
  150.                 return new JsonResponse(['status' => 'no''data' => null'msg' => $this->translator->trans('token invalid !')]);
  151.             }
  152.         }
  153.     }
  154.     #[Route('/{id}'name'app_subscription_delete'methods: ['POST'])]
  155.     public function delete(Request $requestSubscription $subscriptionSubscriptionRepository $subscriptionRepository): Response
  156.     {
  157.         if ($this->isCsrfTokenValid('delete' $subscription->getId(), $request->request->get('_token'))) {
  158.             try {
  159.                 $subscriptionRepository->remove($subscriptiontrue);
  160.                 $this->addFlash('success'$this->translator->trans('Succès !!'));
  161.             } catch (\Exception $e) {
  162.                 $errorMessage $e->getMessage();
  163.                 $result explode(':'$errorMessage);
  164.                 $this->addFlash('error'$result[0]);
  165.             }
  166.         }
  167.         return $this->redirectToRoute('app_subscription_index', [], Response::HTTP_SEE_OTHER);
  168.     }
  169. }