src/Controller/ClubMemberController.php line 806

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\City;
  4. use App\Entity\ClubMembers;
  5. use App\Entity\FollowUp;
  6. use App\Entity\MemberCheckups;
  7. use App\Entity\OrderData;
  8. use App\Entity\Subscription;
  9. use App\Entity\SubscriptionPayments;
  10. use App\Entity\User;
  11. use App\Entity\UserSubscription;
  12. use App\Form\ChangePasswordType;
  13. use App\Form\ClubMembersType;
  14. use App\Form\EditUserType;
  15. use App\Form\MemberCheckupsType;
  16. use App\Service\CommanService;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Imagine\Gd\Imagine;
  19. use Imagine\Image\Box;
  20. use Knp\Component\Pager\PaginatorInterface;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\Filesystem\Filesystem;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  28. use Symfony\Component\Validator\Validator\ValidatorInterface;
  29. use Symfony\Component\Mailer\MailerInterface;
  30. use Symfony\Component\Mime\Email;
  31. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  32. /**
  33.  * @Route("/club-member")
  34.  */
  35. class ClubMemberController extends AbstractController
  36. {
  37.     private $commanService;
  38.     private $em;
  39.     public function __construct(CommanService $commanServiceEntityManagerInterface $em)
  40.     {
  41.         $this->commanService $commanService;
  42.         $this->em $em;
  43.     }
  44.     /**
  45.      * @Route("/list", name="club_member_list")
  46.      */
  47.     public function index(Request $requestPaginatorInterface $paginator)
  48.     {
  49.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  50.         $user $this->getUser()->getId();
  51.         $page $request->get('page');
  52.         $userSubscription $this->em->getRepository(UserSubscription::class)
  53.                 ->findOneBy(['user' => $user]);
  54.         if (null != $userSubscription) {
  55.             $subscriptionEndDate $userSubscription->getEndDate()->format('Y-m-d');
  56.         }
  57.         if (true === $request->isXmlHttpRequest()) {
  58.             $itemsPerPage 9;
  59.             $offset = ($page 1) * $itemsPerPage;
  60.             $clubMember $this->em->getRepository(ClubMembers::class)
  61.                 ->getClubMember($user$itemsPerPage$offset);
  62.             $clubMember $this->renderView('club_member/render.html.twig', [
  63.                 'clubMembers' => $clubMember,
  64.                 'subscriptionEndDate' => $subscriptionEndDate ?? '',
  65.             ]);
  66.             return new JsonResponse(['success' => true'clubMemberRecord' => $clubMember]);
  67.         } else {
  68.             // For initial page load, get first 9 members with A-Z sorting
  69.             $clubMember $this->em->getRepository(ClubMembers::class)
  70.                 ->getClubMemberWithFilter($user'name_asc');
  71.             // Limit to first 9 members for initial display
  72.             $clubMember array_slice($clubMember09);
  73.             // Get total count for pagination info
  74.             $totalClubMember $this->em->getRepository(ClubMembers::class)
  75.                 ->getTotalClubMember($user);
  76.             return $this->render('club_member/index.html.twig', [
  77.                 'clubMembers' => $clubMember,
  78.                 'subscriptionEndDate' => $subscriptionEndDate ?? '',
  79.                 'totalClubMember' => $totalClubMember[0]['total_cm'] ?? 0,
  80.             ]);
  81.         }
  82.     }
  83.     /**
  84.      * @Route("/add", name="club_member_add")
  85.      * @Route("/enquiry/add/{mode}", name="enquiry_add")
  86.      */
  87.     public function add(Request $requestUserPasswordEncoderInterface $passwordEncoder$mode null)
  88.     {
  89.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  90.         $user $this->getUser()->getId();
  91.         $userSubscription $this->em->getRepository(UserSubscription::class)
  92.                 ->findOneBy(['user' => $user]);
  93.         if (null != $userSubscription) {
  94.             $subscriptionEndDate $userSubscription->getEndDate()->format('Y-m-d');
  95.         }
  96.         $id $request->query->get('id');
  97.         $oldImage null;
  98.         if ($id) {
  99.             $clubMember $this->em->getRepository(ClubMembers::class)
  100.                 ->find($id);
  101.             $oldImage $clubMember->getImage();
  102.             $user $this->em->getRepository(User::class)
  103.                 ->find($clubMember->getUser()->getId());
  104.         } else {
  105.             $clubMember = new ClubMembers();
  106.             $user = new User();
  107.         }
  108.         // Load form
  109.         $form $this->createForm(ClubMembersType::class, $clubMember);
  110.         if ($request->isMethod('post')) {
  111.             if ($clubMember->getImage()) {
  112.                 if (== $request->request->get('deleteImage')) {
  113.                     $filesystem = new Filesystem();
  114.                     if ($filesystem->exists($this->getParameter('club_directory').'/'.$clubMember->getImage())) {
  115.                         $filesystem->remove($this->getParameter('club_directory').'/'.$clubMember->getImage());
  116.                         $filesystem->remove($this->getParameter('thumbnail_directory').'/'.$clubMember->getImage());
  117.                     }
  118.                     $clubMember->setImage(null);
  119.                     $this->em->persist($clubMember);
  120.                     $this->em->flush();
  121.                 }
  122.             }
  123.             $form->handleRequest($request);
  124.             if ($form->isSubmitted() && $form->isValid()) {
  125.                 if (empty($id)) {
  126.                     $userPassword mt_rand(100000999999);
  127.                     $password $passwordEncoder->encodePassword($user$userPassword);
  128.                     $user->setPassword($password);
  129.                     $user->setCreatedAt(new \DateTime());
  130.                     if ('enquiry' == $mode) {
  131.                         $user->setRoles(['ROLE_ENQUIRY']);
  132.                     } else {
  133.                         $user->setRoles(['ROLE_CLUB_MEMBER']);
  134.                     }
  135.                 }
  136.                 $user->setUsername($form['email']->getData());
  137.                 $user->setEmail($form['email']->getData() ?? '');
  138.                 $user->setFirstName($form['firstName']->getData());
  139.                 $user->setMiddleName($form['middleName']->getData() ?? '');
  140.                 $user->setLastName($form['lastName']->getData());
  141.                 $user->setMobileNumber($form['mobileNumber']->getData());
  142.                 $user->setGender($form['gender']->getData());
  143.                 $user->setStatus(0);
  144.                 $user->setUpdatedAt(new \DateTime());
  145.                 $this->em->persist($user);
  146.                 $this->em->flush();
  147.                 $file $form['image']->getData();
  148.                 if (null != $file && null != $oldImage) {
  149.                     $filesystem = new Filesystem();
  150.                     if ($filesystem->exists($this->getParameter('club_directory').'/'.$oldImage)) {
  151.                         $filesystem->remove($this->getParameter('club_directory').'/'.$oldImage);
  152.                         $filesystem->remove($this->getParameter('thumbnail_directory').'/'.$oldImage);
  153.                     }
  154.                     $clubMember->setImage(null);
  155.                     $this->em->persist($clubMember);
  156.                     $this->em->flush();
  157.                 }
  158.                 if ($file) {
  159.                     $fileName $this->generateUniqueFileName().'.'.$file->guessExtension();
  160.                     $file->move($this->getParameter('club_directory'), $fileName);
  161.                     $imagine = new Imagine();
  162.                     $image $imagine->open($this->getParameter('club_directory').'/'.$fileName);
  163.                     $originalWidth $image->getSize()->getWidth();
  164.                     $originalHeight $image->getSize()->getHeight();
  165.                     $maxSize 200;
  166.                     list($newWidth$newHeight) = $this->getNewHeightWidth($maxSize$originalWidth$originalHeight);
  167.                     $image->resize(new Box($newWidth$newHeight))->save($this->getParameter('club_directory').'/'.$fileName);
  168.                     list($newWidth$newHeight) = $this->getNewHeightWidth(100$originalWidth$originalHeight);
  169.                     $image->resize(new Box($newWidth$newHeight))->save($this->getParameter('thumbnail_directory').'/'.$fileName);
  170.                     $clubMember->setImage($fileName);
  171.                 } else {
  172.                     if (isset($oldImage)) {
  173.                         $clubMember->setImage($oldImage);
  174.                     }
  175.                 }
  176.                 if (empty($id)) {
  177.                     $clubMember->setCreatedAt(new \DateTime());
  178.                     if ('enquiry' == $mode) {
  179.                         $clubMember->setMemberType('ENQUIRY');
  180.                     } else {
  181.                         $clubMember->setMemberType('MEMBER');
  182.                     }
  183.                 }
  184.                 $clubMember->setUser($user);
  185.                 $clubMember->setCreatedBy($this->getUser()->getId());
  186.                 $clubMember->setStatus(1);
  187.                 $clubMember->setUpdatedAt(new \DateTime());
  188.                 $this->em->persist($clubMember);
  189.                 $this->em->flush();
  190.                 $this->addFlash(
  191.                     'success',
  192.                     ($id) ? 'Record updated sucessfully...!!!' :
  193.                         'Record added sucessfully...!!!'
  194.                 );
  195.                 if ('enquiry' == $mode) {
  196.                     return $this->redirectToRoute('enquiry_view', ['id' => $clubMember->getId()]);
  197.                 } else {
  198.                     return $this->redirectToRoute('club_member_view', ['id' => $clubMember->getId()]);
  199.                 }
  200.             }
  201.         }
  202.         return $this->render('club_member/add.html.twig', [
  203.             'form' => $form->createView(),
  204.             'clubMember' => $clubMember,
  205.             'oldImage' => isset($oldImage) ? $oldImage null,
  206.             'subscriptionEndDate' => $subscriptionEndDate ?? '',
  207.         ]);
  208.     }
  209.     /**
  210.      * @Route("/profile", name="profile")
  211.      */
  212.     public function profile(Request $requestUserPasswordEncoderInterface $passwordEncoderSessionInterface $session)
  213.     {
  214.         $user $this->getUser()->getId();
  215.         $userSubscription $this->em->getRepository(UserSubscription::class)
  216.                 ->findOneBy(['user' => $user]);
  217.         if (null != $userSubscription) {
  218.             $subscriptionEndDate $userSubscription->getEndDate()->format('Y-m-d');
  219.         }
  220.         $clubMember $this->em->getRepository(ClubMembers::class)->findOneBy(['email' => $this->getUser()->getEmail()]);
  221.         $oldFirstName $clubMember->getFirstName();
  222.         $oldLastName $clubMember->getLastName();
  223.         if (null !== $clubMember) {
  224.             $oldImage $clubMember->getImage();
  225.             $session->set('oldFirstName'$oldFirstName);
  226.             $session->set('oldLastName'$oldLastName);
  227.             $session->set('oldImage'$oldImage);
  228.             $session->set('clubMember'$clubMember);
  229.         }
  230.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  231.         $id $this->getUser()->getId();
  232.         $oldImage null;
  233.         if ($id) {
  234.             $user $this->em->getRepository(ClubMembers::class)
  235.                 ->findOneBy(['user' => $id]);
  236.             if ($user) {
  237.                 $oldImage $user->getImage();
  238.                 $form $this->createForm(EditUserType::class, $user);
  239.             } else {
  240.                 $form $this->createForm(EditUserType::class);
  241.             }
  242.         }
  243.         // Load form
  244.         if ($request->isMethod('post')) {
  245.             $file $form['image']->getData();
  246.             if ($user->getImage()) {
  247.                 if (== $request->request->get('deleteImage')) {
  248.                     $filesystem = new Filesystem();
  249.                     if ($filesystem->exists($this->getParameter('club_directory').'/'.$user->getImage())) {
  250.                         $filesystem->remove($this->getParameter('club_directory').'/'.$user->getImage());
  251.                         $filesystem->remove($this->getParameter('thumbnail_directory').'/'.$user->getImage());
  252.                     }
  253.                     $user->setImage(null);
  254.                     $session->set('oldImage''');
  255.                     $this->em->persist($user);
  256.                     $this->em->flush();
  257.                 }
  258.             }
  259.             $form->handleRequest($request);
  260.             if ($form->isSubmitted() && $form->isValid()) {
  261.                 $currentDate = new \DateTime();
  262.                 $currentDate $currentDate->format('Y-m-d');
  263.                 if (null == $userSubscription || $userSubscription->getEndDate()->format('Y-m-d') < $currentDate) {
  264.                     $this->addFlash(
  265.                         'error',
  266.                         'Please Purchase any subscription to edit profile...!!!'
  267.                     );
  268.                     return $this->redirectToRoute('profile');
  269.                 }
  270.                 $user->setUser($form->getNormData()->getUser());
  271.                 $user->setFirstName($form['firstName']->getData());
  272.                 $user->setMiddleName($form['middleName']->getData());
  273.                 $user->setLastName($form['lastName']->getData());
  274.                 $user->setAddress($form['address']->getData());
  275.                 $user->setEmail($form['email']->getData());
  276.                 $user->setMobileNumber($form['mobileNumber']->getData());
  277.                 $user->setGender($form['gender']->getData());
  278.                 $user->setBirthdate($form['birthdate']->getData());
  279.                 // $user->setPanNumber($form['panNumber']->getData());
  280.                 $user->setPincode($form['pincode']->getData());
  281.                 $user->setSpouseFname($form['spouseFname']->getData());
  282.                 $user->setSpouseMname($form['spouseMname']->getData());
  283.                 $user->setSpouseLname($form['spouseLname']->getData());
  284.                 $user->setHerbalifeId($form['herbalifeId']->getData());
  285.                 // $user->setPaymentOrderHistory($form['paymentOrderHistory']->getData());
  286.                 $file $form['image']->getData();
  287.                 if (null != $file && null != $oldImage) {
  288.                     $filesystem = new Filesystem();
  289.                     if ($filesystem->exists($this->getParameter('club_directory').'/'.$oldImage)) {
  290.                         $filesystem->remove($this->getParameter('club_directory').'/'.$oldImage);
  291.                         $filesystem->remove($this->getParameter('thumbnail_directory').'/'.$oldImage);
  292.                     }
  293.                     $user->setImage(null);
  294.                     $session->set('oldImage''');
  295.                     $this->em->persist($user);
  296.                     $this->em->flush();
  297.                 }
  298.                 if ($file) {
  299.                     $fileName $this->generateUniqueFileName().'.'.$file->guessExtension();
  300.                     $file->move($this->getParameter('club_directory'), $fileName);
  301.                     $imagine = new Imagine();
  302.                     $image $imagine->open($this->getParameter('club_directory').'/'.$fileName);
  303.                     $originalWidth $image->getSize()->getWidth();
  304.                     $originalHeight $image->getSize()->getHeight();
  305.                     $maxSize 200;
  306.                     list($newWidth$newHeight) = $this->getNewHeightWidth($maxSize$originalWidth$originalHeight);
  307.                     $image->resize(new Box($newWidth$newHeight))->save($this->getParameter('club_directory').'/'.$fileName);
  308.                     list($newWidth$newHeight) = $this->getNewHeightWidth(100$originalWidth$originalHeight);
  309.                     $image->resize(new Box($newWidth$newHeight))->save($this->getParameter('thumbnail_directory').'/'.$fileName);
  310.                     $user->setImage($fileName);
  311.                 } elseif (isset($oldImage)) {
  312.                     $user->setImage($oldImage);
  313.                 }
  314.                 $this->em->persist($user);
  315.                 $this->em->flush();
  316.                 $oldImage $user->getImage();
  317.                 $this->addFlash(
  318.                     'success',
  319.                     ($id) ? 'Record updated sucessfully...!!!' :
  320.                         'Record added sucessfully...!!!'
  321.                 );
  322.             }
  323.         }
  324.         return $this->render('user/profile.html.twig', [
  325.             'form' => $form->createView(),
  326.             'user' => $user,
  327.             'oldImage' => isset($oldImage) ? $oldImage null,
  328.             'subscriptionEndDate' => $subscriptionEndDate ?? '',
  329.         ]);
  330.     }
  331.     /**
  332.      * @Route("/delete", name="club_member_delete")
  333.      * @Route("/enquiry/delete/{mode}", name="enquiry_delete")
  334.      */
  335.     public function delete(Request $request$mode null)
  336.     {
  337.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  338.         $id $request->query->get('id');
  339.         $clubMember $this->em->getRepository(ClubMembers::class)
  340.                 ->find($id);
  341.         $user $this->em->getRepository(User::class)
  342.                 ->find($clubMember->getUser()->getId());
  343.         $filesystem = new Filesystem();
  344.         if ($clubMember->getImage()) {
  345.             if ($filesystem->exists($this->getParameter('club_directory').'/'.$clubMember->getImage())) {
  346.                 $filesystem->remove($this->getParameter('club_directory').'/'.$clubMember->getImage());
  347.                 $filesystem->remove($this->getParameter('thumbnail_directory').'/'.$clubMember->getImage());
  348.             }
  349.         }
  350.         $this->em->remove($clubMember);
  351.         $this->em->remove($user);
  352.         $this->em->flush();
  353.         $this->addFlash(
  354.             'success',
  355.             'Record deleted sucessfully...!!!'
  356.         );
  357.         if ('enquiry' == $mode) {
  358.             return $this->redirectToRoute('enquiry_list');
  359.         } else {
  360.             return $this->redirectToRoute('club_member_list');
  361.         }
  362.     }
  363.     /**
  364.      * @Route("/change-password", name="change_password")
  365.      */
  366.     public function changePassword(Request $requestUserPasswordEncoderInterface $passwordEncoderValidatorInterface $validator)
  367.     {
  368.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  369.         $user $this->getUser();
  370.         $form $this->createForm(ChangePasswordType::class);
  371.         $form->handleRequest($request);
  372.         if ($form->isSubmitted() && $form->isValid()) {
  373.             $oldPassword $form->get('oldPassword')->getData();
  374.             $newPassword $form->get('newPassword')->getData();
  375.             $confirmPassword $form->get('confirmPassword')->getData();
  376.             if ($oldPassword != $newPassword) {
  377.                 if ($newPassword == $confirmPassword) {
  378.                     if ($passwordEncoder->isPasswordValid($user$oldPassword)) {
  379.                         $user->setPassword($passwordEncoder->encodePassword($user$newPassword));
  380.                         $entityManager $this->getDoctrine()->getManager();
  381.                         $entityManager->persist($user);
  382.                         $entityManager->flush();
  383.                         return $this->redirectToRoute('app_logout');
  384.                     } else {
  385.                         $this->addFlash('error''Incorrect old password.');
  386.                     }
  387.                 } else {
  388.                     $this->addFlash('error''New Password and confirm password must be same.');
  389.                 }
  390.             } else {
  391.                 $this->addFlash('error''Old Password and new password must not be same.');
  392.             }
  393.         }
  394.         return $this->render('user/changepassword.html.twig', [
  395.             'form' => $form->createView(),
  396.         ]);
  397.     }
  398.     /**
  399.      * @Route("/search", name="club_member_search")
  400.      */
  401.     public function search(Request $request)
  402.     {
  403.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  404.         $userId $this->getUser()->getId();
  405.         $search $request->request->get('search');
  406.         $searchMember $this->em->getRepository(ClubMembers::class)
  407.                 ->getClubMemberForSearch($search'MEMBER'$userIdnullnull);
  408.         $userSubscription $this->em->getRepository(UserSubscription::class)
  409.                 ->findOneBy(['user' => $this->getUser()]);
  410.         if (null != $userSubscription) {
  411.             $subscriptionEndDate $userSubscription->getEndDate()->format('Y-m-d');
  412.         }
  413.         return $this->render('club_member/render.html.twig', [
  414.             'clubMembers' => $searchMember,
  415.             'subscriptionEndDate' => $subscriptionEndDate ?? '',
  416.         ]);
  417.     }
  418.     /**
  419.      * @Route("/filter", name="club_member_filter")
  420.      */
  421.     public function filter(Request $request)
  422.     {
  423.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  424.         $userId $this->getUser()->getId();
  425.         $filter $request->request->get('filter');
  426.         $filteredMembers $this->em->getRepository(ClubMembers::class)
  427.                 ->getClubMemberWithFilter($userId$filter);
  428.         $userSubscription $this->em->getRepository(UserSubscription::class)
  429.                 ->findOneBy(['user' => $this->getUser()]);
  430.         if (null != $userSubscription) {
  431.             $subscriptionEndDate $userSubscription->getEndDate()->format('Y-m-d');
  432.         }
  433.         return $this->render('club_member/render.html.twig', [
  434.             'clubMembers' => $filteredMembers,
  435.             'subscriptionEndDate' => $subscriptionEndDate ?? '',
  436.         ]);
  437.     }
  438.     /**
  439.      * @Route("/member-checkup-delete", name="member_checkup_delete")
  440.      */
  441.     public function memberCheckupDelete(Request $request)
  442.     {
  443.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  444.         $id $request->query->get('id');
  445.         $memberCheckup $this->em->getRepository(MemberCheckups::class)
  446.                 ->find($id);
  447.         if ($memberCheckup->getImage()) {
  448.             $filesystem = new Filesystem();
  449.             if ($filesystem->exists($this->getParameter('member_checkup_directory').'/'.$memberCheckup->getImage())) {
  450.                 $filesystem->remove($this->getParameter('member_checkup_directory').'/'.$memberCheckup->getImage());
  451.                 $filesystem->remove($this->getParameter('thumbnail_directory').'/'.$memberCheckup->getImage());
  452.             }
  453.         }
  454.         $this->em->remove($memberCheckup);
  455.         $this->em->flush();
  456.         $this->addFlash(
  457.             'success',
  458.             'Record deleted sucessfully...!!!'
  459.         );
  460.         $source $request->get('source');
  461.         if ('enquiry' === $source) {
  462.             return $this->redirectToRoute('enquiry_view', ['id' => $memberCheckup->getClubMember()->getId()]);
  463.         } else {
  464.             return $this->redirectToRoute('club_member_view', ['id' => $memberCheckup->getClubMember()->getId()]);
  465.         }
  466.     }
  467.     /**
  468.      * @Route("/view", name="club_member_view")
  469.      */
  470.     public function view(Request $requestCommanService $commanService)
  471.     {
  472.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  473.         $id $request->query->get('id');
  474.         $user $this->getUser();
  475.         $userSubscription $this->em->getRepository(UserSubscription::class)
  476.                 ->findOneBy(['user' => $user]);
  477.         if (null != $userSubscription) {
  478.             $subscriptionEndDate $userSubscription->getEndDate()->format('Y-m-d');
  479.         }
  480.         if ($id) {
  481.             $clubMember $this->em->getRepository(ClubMembers::class)
  482.                     ->find($id);
  483.             $checkupDatas $this->em->getRepository(MemberCheckups::class)
  484.                         ->getCheckupData($id);
  485.             $chartDatas $commanService->prepareChartData($checkupDatas);
  486.             $followUpData $this->em->getRepository(FollowUp::class)
  487.                         ->getFolloeUpData($id);
  488.             $pastFollowUpData $this->em->getRepository(FollowUp::class)
  489.                         ->getPastFollowUpData($id);
  490.             $order $this->em->getRepository(OrderData::class)
  491.                 ->getOrderDetails($id);
  492.             $memberCheckups = new MemberCheckups();
  493.             $form $this->createForm(MemberCheckupsType::class, $memberCheckups);
  494.             return $this->render('club_member/view.html.twig', [
  495.                 'orders' => $order,
  496.                 'followUpDatas' => $followUpData,
  497.                 'pastFollowUpDatas' => $pastFollowUpData,
  498.                 'clubMember' => $clubMember,
  499.                 'checkupDatas' => $checkupDatas,
  500.                 'chartDatas' => $chartDatas,
  501.                 'form' => $form->createView(),
  502.                 'wt_chart' => !empty($chartDatas['wt_chart']) ? $chartDatas['wt_chart'] : [],
  503.                 'fat_chart' => !empty($chartDatas['fat_chart']) ? $chartDatas['fat_chart'] : [],
  504.                 'bAge_chart' => !empty($chartDatas['bAge_chart']) ? $chartDatas['bAge_chart'] : [],
  505.                 'bmi_chart' => !empty($chartDatas['bmi_chart']) ? $chartDatas['bmi_chart'] : [],
  506.                 'bmr_chart' => !empty($chartDatas['bmr_chart']) ? $chartDatas['bmr_chart'] : [],
  507.                 'vf_chart' => !empty($chartDatas['vf_chart']) ? $chartDatas['vf_chart'] : [],
  508.                 'tsf_chart' => !empty($chartDatas['tsf_chart']) ? $chartDatas['tsf_chart'] : [],
  509.                 'muscl_chart' => !empty($chartDatas['muscl_chart']) ? $chartDatas['muscl_chart'] : [],
  510.                 'inchLoss_chart' => !empty($chartDatas['inchLoss_chart']) ? $chartDatas['inchLoss_chart'] : [],
  511.                 'subscriptionEndDate' => $subscriptionEndDate ?? '',
  512.             ]);
  513.         } else {
  514.             return $this->redirectToRoute('club_member_list');
  515.         }
  516.     }
  517.     /**
  518.      * @Route("/save-member-checkup", name="save_member_checkup")
  519.      */
  520.     public function saveMemberCheckup(Request $requestMailerInterface $mailer)
  521.     {
  522.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  523.         $id $request->query->get('club_member_id');
  524.         $checkupId $request->get('checkupId');
  525.         $oldImage null;
  526.         if ($this->getUser()) {
  527.             $userId $this->getUser()->getId();
  528.         }
  529.         if (null != $request->query->get('viewsearch')) {
  530.             $memberCheckups = new MemberCheckups();
  531.             $clubMemberFullNames null;
  532.             $clubMemberList $this->em->getRepository(ClubMembers::class)
  533.                 ->getClubMember($userId);
  534.             $clubMemberFullNames = [];
  535.             foreach ($clubMemberList as $key => $value) {
  536.                 $clubMemberFullNames[$value[0]->getFirstName().' '.$value[0]->getLastName().' - '.$value[0]->getEmail()] = $value[0]->getId();
  537.             }
  538.             $form $this->createForm(MemberCheckupsType::class, $memberCheckups, ['checkedUp' => true'clubMemberFullNames' => $clubMemberFullNames]);
  539.             $form->handleRequest($request);
  540.             if ($form->isSubmitted() && !$form->isValid()) {
  541.                 $result $this->render('club_member/popUpView.html.twig', [
  542.                     'form' => $form->createView(),
  543.                     'viewsearch' => 1,
  544.                 ]);
  545.                 $data $result->getContent();
  546.                 return new JsonResponse([
  547.                     'status' => 'error',
  548.                     'data' => $data,
  549.                 ]);
  550.             }
  551.             if ($form->isSubmitted() && $form->isValid()) {
  552.                 $memberCheckups = new MemberCheckups();
  553.                 $file $form['image']->getData();
  554.                 if ($file) {
  555.                     $fileName $this->generateUniqueFileName().'.'.$file->guessExtension();
  556.                     $file->move($this->getParameter('member_checkup_directory'), $fileName);
  557.                     $imagine = new Imagine();
  558.                     $image $imagine->open($this->getParameter('member_checkup_directory').'/'.$fileName);
  559.                     $originalWidth $image->getSize()->getWidth();
  560.                     $originalHeight $image->getSize()->getHeight();
  561.                     $maxSize 200;
  562.                     list($newWidth$newHeight) = $this->getNewHeightWidth($maxSize$originalWidth$originalHeight);
  563.                     $image->resize(new Box($newWidth$newHeight))->save($this->getParameter('member_checkup_directory').'/'.$fileName);
  564.                     list($newWidth$newHeight) = $this->getNewHeightWidth(100$originalWidth$originalHeight);
  565.                     $image->resize(new Box($newWidth$newHeight))->save($this->getParameter('thumbnail_directory').'/'.$fileName);
  566.                     $memberCheckups->setImage($fileName);
  567.                 } else {
  568.                     if (isset($oldImage)) {
  569.                         $memberCheckups->setImage($oldImage);
  570.                     }
  571.                 }
  572.                 $memberId $form->get('search')->getData();
  573.                 if ($memberId) {
  574.                     $clubMember $this->em->getRepository(ClubMembers::class)->find($memberId);
  575.                     $memberCheckups->setClubMember($clubMember);
  576.                 }
  577.                 $memberCheckups->setCheckupDate($form['checkupDate']->getData());
  578.                 $memberCheckups->setWt($form['wt']->getData());
  579.                 $memberCheckups->setFat($form['fat']->getData());
  580.                 $memberCheckups->setBAge($form['bAge']->getData());
  581.                 $memberCheckups->setBmi($form['bmi']->getData());
  582.                 $memberCheckups->setBmr($form['bmr']->getData());
  583.                 $memberCheckups->setVf($form['vf']->getData());
  584.                 $memberCheckups->setTsf($form['tsf']->getData());
  585.                 $memberCheckups->setMuscl($form['muscl']->getData());
  586.                 $memberCheckups->setInchLoss($form['inchLoss']->getData());
  587.                 $memberCheckups->setCreatedAt(new \DateTime());
  588.                 $memberCheckups->setUpdatedAt(new \DateTime());
  589.                 $this->em->persist($memberCheckups);
  590.                 $this->em->flush();
  591.                 if ($clubMember->getEmail()) {
  592.                     $fromEmail $this->getParameter('mailer_from');
  593.                     $email = (new TemplatedEmail())
  594.                         ->from($fromEmail)
  595.                         ->to($clubMember->getEmail())
  596.                         ->subject('Checkup Update')
  597.                         ->htmlTemplate('email/checkup_update.html.twig')
  598.                         ->context([
  599.                             'clubMember' => $clubMember,
  600.                             'memberCheckups' => $memberCheckups,
  601.                         ]);
  602.                     if ($file) {
  603.                         $email->attachFromPath(
  604.                             $this->getParameter('member_checkup_directory').'/'.$fileName,
  605.                             $file->getClientOriginalName()
  606.                         );
  607.                     }
  608.                     $mailer->send($email);
  609.                 }
  610.                 return new JsonResponse([
  611.                     'status' => 'success',
  612.                 ]);
  613.             }
  614.         } else {
  615.             if ($id) {
  616.                 $clubMember $this->em->getRepository(ClubMembers::class)->find($id);
  617.             }
  618.             if ($checkupId) {
  619.                 $memberCheckups $this->em->getRepository(MemberCheckups::class)->find($checkupId);
  620.                 if ($memberCheckups->getImage()) {
  621.                     $oldImage $memberCheckups->getImage();
  622.                 }
  623.             } else {
  624.                 $memberCheckups = new MemberCheckups();
  625.             }
  626.             $form $this->createForm(MemberCheckupsType::class, $memberCheckups);
  627.         }
  628.         if ($request->isMethod('post')) {
  629.             if ($memberCheckups->getImage()) {
  630.                 if (== $request->request->get('deleteImage')) {
  631.                     $filesystem = new Filesystem();
  632.                     if ($filesystem->exists($this->getParameter('member_checkup_directory').'/'.$memberCheckups->getImage())) {
  633.                         $filesystem->remove($this->getParameter('member_checkup_directory').'/'.$memberCheckups->getImage());
  634.                         $filesystem->remove($this->getParameter('thumbnail_directory').'/'.$memberCheckups->getImage());
  635.                     }
  636.                     $memberCheckups->setImage(null);
  637.                     $this->em->persist($memberCheckups);
  638.                     $this->em->flush();
  639.                 }
  640.             }
  641.             $form->handleRequest($request);
  642.             if ($form->isSubmitted() && !$form->isValid()) {
  643.                 $result $this->render('club_member/popUpView.html.twig', [
  644.                     'form' => $form->createView(),
  645.                     'checkupId' => $checkupId,
  646.                     'oldImage' => isset($oldImage) ? $oldImage null,
  647.                 ]);
  648.                 $data $result->getContent();
  649.                 return new JsonResponse([
  650.                     'status' => 'error',
  651.                     'data' => $data,
  652.                     'checkupId' => $checkupId,
  653.                     'oldImage' => isset($oldImage) ? $oldImage null,
  654.                 ]);
  655.             }
  656.             if ($form->isSubmitted() && $form->isValid()) {
  657.                 $file $form['image']->getData();
  658.                 if (null != $file && null != $oldImage) {
  659.                     $filesystem = new Filesystem();
  660.                     if ($filesystem->exists($this->getParameter('member_checkup_directory').'/'.$oldImage)) {
  661.                         $filesystem->remove($this->getParameter('member_checkup_directory').'/'.$oldImage);
  662.                         $filesystem->remove($this->getParameter('thumbnail_directory').'/'.$oldImage);
  663.                     }
  664.                     $memberCheckups->setImage(null);
  665.                     $this->em->persist($memberCheckups);
  666.                     $this->em->flush();
  667.                 }
  668.                 if ($file) {
  669.                     $fileName $this->generateUniqueFileName().'.'.$file->guessExtension();
  670.                     $file->move($this->getParameter('member_checkup_directory'), $fileName);
  671.                     $imagine = new Imagine();
  672.                     $image $imagine->open($this->getParameter('member_checkup_directory').'/'.$fileName);
  673.                     $originalWidth $image->getSize()->getWidth();
  674.                     $originalHeight $image->getSize()->getHeight();
  675.                     $maxSize 200;
  676.                     list($newWidth$newHeight) = $this->getNewHeightWidth($maxSize$originalWidth$originalHeight);
  677.                     $image->resize(new Box($newWidth$newHeight))->save($this->getParameter('member_checkup_directory').'/'.$fileName);
  678.                     list($newWidth$newHeight) = $this->getNewHeightWidth(100$originalWidth$originalHeight);
  679.                     $image->resize(new Box($newWidth$newHeight))->save($this->getParameter('thumbnail_directory').'/'.$fileName);
  680.                     $memberCheckups->setImage($fileName);
  681.                 } else {
  682.                     if (isset($oldImage)) {
  683.                         $memberCheckups->setImage($oldImage);
  684.                     }
  685.                 }
  686.                 $memberCheckups->setClubMember($clubMember);
  687.                 $memberCheckups->setCreatedAt(new \DateTime());
  688.                 $memberCheckups->setUpdatedAt(new \DateTime());
  689.                 $this->em->persist($memberCheckups);
  690.                 $this->em->flush();
  691.                 if ($clubMember->getEmail()) {
  692.                     $fromEmail $this->getParameter('mailer_from');
  693.                     $email = (new TemplatedEmail())
  694.                         ->from($fromEmail)
  695.                         ->to($clubMember->getEmail())
  696.                         ->subject('Checkup Update')
  697.                         ->htmlTemplate('email/checkup_update.html.twig')
  698.                         ->context([
  699.                             'clubMember' => $clubMember,
  700.                             'memberCheckups' => $memberCheckups,
  701.                         ]);
  702.                     if ($file) {
  703.                         $email->attachFromPath(
  704.                             $this->getParameter('member_checkup_directory').'/'.$fileName,
  705.                             $file->getClientOriginalName()
  706.                         );
  707.                     }
  708.                     $mailer->send($email);
  709.                 }
  710.                 $this->addFlash(
  711.                     'success',
  712.                     'Record updated sucessfully...!!!'
  713.                 );
  714.                 return new JsonResponse([
  715.                     'status' => 'success',
  716.                     'oldImage' => isset($oldImage) ? $oldImage null,
  717.                 ]);
  718.             }
  719.         }
  720.         $result $this->render('club_member/popUpView.html.twig', [
  721.             'form' => $form->createView(),
  722.             'oldImage' => isset($oldImage) ? $oldImage null,
  723.         ]);
  724.         $data $result->getContent();
  725.         return new JsonResponse([
  726.             'status' => 'ok',
  727.             'data' => $data,
  728.         ]);
  729.     }
  730.     private function getNewHeightWidth($maxSize 200$originalWidth$originalHeight)
  731.     {
  732.         if ($originalWidth $originalHeight) {
  733.             $newWidth min($maxSize$originalWidth);
  734.             $newHeight $newWidth $originalHeight $originalWidth;
  735.         } else {
  736.             $newHeight min($maxSize$originalHeight);
  737.             $newWidth $newHeight $originalWidth $originalHeight;
  738.         }
  739.         return [$newWidth$newHeight];
  740.     }
  741.     private function generateUniqueFileName()
  742.     {
  743.         // md5() reduces the similarity of the file names generated by
  744.         // uniqid(), which is based on timestamps
  745.         return md5(uniqid());
  746.     }
  747.     /**
  748.      * @Route("/get-cities-by-state", name="city_get_by_state")
  749.      */
  750.     public function getCitiesByState(Request $request): JsonResponse
  751.     {
  752.         $stateId $request->query->get('state_id'); // Get the selected state's ID
  753.         $cities $this->em->getRepository(City::class)->getCitiesByState($stateId$this->em);
  754.         return $cities;
  755.     }
  756.     /**
  757.      * @Route("/subscription", name="subscription")
  758.      */
  759.     public function subscription(Request $request)
  760.     {
  761.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  762.         $userId $this->getUser()->getId();
  763.         $criteria = [
  764.             'user' => $userId,
  765.             'status' => [13],
  766.         ];
  767.         $orderBy = [
  768.             'created_at' => 'ASC',
  769.         ];
  770.         $currentDate = new \DateTime();
  771.         $days null;
  772.         $perDay null;
  773.         $remainingDays null;
  774.         $activeSubscription false;
  775.         $subscription null;
  776.         $userSubscriptions $this->em->getRepository(UserSubscription::class)->findBy($criteria$orderBy);
  777.         foreach ($userSubscriptions as $subscription) {
  778.             $userSubscriptionEndDate $subscription->getEndDate();
  779.             $currentDate = new \DateTime();
  780.             if ($userSubscriptionEndDate $currentDate) {
  781.                 if (== $subscription->getStatus()) {
  782.                     $subscription->setStatus(0);
  783.                     $this->em->persist($subscription);
  784.                     $this->em->flush();
  785.                 }
  786.             }
  787.             if ($userSubscriptionEndDate $currentDate && == $subscription->getStatus()) {
  788.                 $subscription->setStatus(1);
  789.                 $this->em->persist($subscription);
  790.                 $this->em->flush();
  791.             }
  792.         }
  793.         $userSubscription $this->em->getRepository(UserSubscription::class)->findOneBy(['user' => $userId'status' => 1]);
  794.         if ($userSubscription) {
  795.             $activeSubscription $userSubscription->getSubscription();
  796.         }
  797.         if ($activeSubscription) {
  798.             $userSubscriptionEndDate $userSubscription->getEndDate();
  799.             $userSubscriptionId $userSubscription->getSubscription()->getId();
  800.             $subscription $this->em->getRepository(Subscription::class)->find($userSubscriptionId);
  801.             if ($subscription->getId() == $userSubscriptionId && $userSubscriptionEndDate $currentDate) {
  802.                 $days $subscription->getDuration();
  803.                 $perDay 100 $days;
  804.                 $remainingDays $currentDate->diff($userSubscriptionEndDate)->days;
  805.             } elseif ($subscription->getId() == $userSubscriptionId && $userSubscriptionEndDate $currentDate) {
  806.                 $days $subscription->getDuration();
  807.                 $perDay 100 $days;
  808.                 $remainingDays $currentDate->diff($userSubscriptionEndDate)->days;
  809.             } elseif ($subscription->getId() == $userSubscriptionId && $userSubscriptionEndDate $currentDate) {
  810.                 $days $subscription->getDuration();
  811.                 $perDay 100 $days;
  812.                 $remainingDays $currentDate->diff($userSubscriptionEndDate)->days;
  813.             } else {
  814.                 $days null;
  815.                 $perDay null;
  816.                 $remainingDays null;
  817.             }
  818.         }
  819.         $result $this->render('club_member/subscription.html.twig', [
  820.             'userSubscription' => $userSubscription,
  821.             'perDay' => $perDay,
  822.             'remainingDays' => $remainingDays,
  823.             'subscription' => $subscription,
  824.             'userSubscriptions' => $userSubscriptions,
  825.         ]);
  826.         return $result;
  827.     }
  828.     /**
  829.      * @Route("/price-details", name="price_details")
  830.      */
  831.     public function priceDetails(Request $request)
  832.     {
  833.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  834.         $subscriptions $this->em->getRepository(Subscription::class)->findAll();
  835.         $result $this->render('club_member/priceDetails.html.twig', [
  836.             'subscriptions' => $subscriptions,
  837.         ]);
  838.         return $result;
  839.     }
  840.     /**
  841.      * @Route("/package-details", name="package_details")
  842.      */
  843.     public function packageDetails(Request $request)
  844.     {
  845.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  846.         $id $request->get('id');
  847.         $userId $this->getUser()->getId();
  848.         $criteria = [
  849.             'user' => $userId,
  850.         ];
  851.         $orderBy = [
  852.             'created_at' => 'ASC',
  853.         ];
  854.         $userSubscriptions $this->em->getRepository(UserSubscription::class)->findBy($criteria$orderBy);
  855.         $userSubscription array_pop($userSubscriptions);
  856.         if ($userSubscription) {
  857.             $subscriptionEndDate $userSubscription->getEndDate();
  858.             $subscriptionStartDate = clone $subscriptionEndDate;
  859.             $day 1;
  860.             $subscriptionStartDate->modify('+'.$day.' days')->format('Y-m-d');
  861.             $subscription $this->em->getRepository(Subscription::class)->find($id);
  862.             $days $subscription->getDuration();
  863.             $subscriptionEndDate = clone $subscriptionStartDate;
  864.             $subscriptionEndDate->modify('+'.$days.' days')->format('Y-m-d');
  865.         }
  866.         $userSubscription $this->em->getRepository(UserSubscription::class)->findOneBy(['user' => $userId]);
  867.         if ($userSubscription) {
  868.             $userSubscriptionId $userSubscription->getSubscription()->getId();
  869.         }
  870.         $subscription $this->em->getRepository(Subscription::class)->find($id);
  871.         $result $this->render('club_member/packageDetails.html.twig', [
  872.             'userSubscription' => $userSubscription,
  873.             'subscription' => $subscription,
  874.             'subscriptionStartDate' => $subscriptionStartDate ?? '',
  875.             'subscriptionEndDate' => $subscriptionEndDate ?? '',
  876.         ]);
  877.         return $result;
  878.     }
  879.     /**
  880.      * @Route("/transcation-history", name="transcation_history")
  881.      */
  882.     public function transcationHistory(Request $request)
  883.     {
  884.         $this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
  885.         $userId $this->getUser()->getId();
  886.         $criteria = [
  887.             'user' => $userId,
  888.         ];
  889.         $orderBy = [
  890.             'created_at' => 'DESC',
  891.         ];
  892.         $subscriptionPayments $this->em->getRepository(SubscriptionPayments::class)->findBy($criteria$orderBy);
  893.         $userSubscriptions $this->em->getRepository(UserSubscription::class)->findBy($criteria$orderBy);
  894.         $result $this->render('club_member/transcationHistory.html.twig', [
  895.             'subscriptionPayments' => $subscriptionPayments,
  896.             'userSubscriptions' => $userSubscriptions,
  897.         ]);
  898.         return $result;
  899.     }
  900. }