<?php
namespace App\Controller;
use App\Entity\City;
use App\Entity\ClubMembers;
use App\Entity\FollowUp;
use App\Entity\MemberCheckups;
use App\Entity\OrderData;
use App\Entity\Subscription;
use App\Entity\SubscriptionPayments;
use App\Entity\User;
use App\Entity\UserSubscription;
use App\Form\ChangePasswordType;
use App\Form\ClubMembersType;
use App\Form\EditUserType;
use App\Form\MemberCheckupsType;
use App\Service\CommanService;
use Doctrine\ORM\EntityManagerInterface;
use Imagine\Gd\Imagine;
use Imagine\Image\Box;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
/**
* @Route("/club-member")
*/
class ClubMemberController extends AbstractController
{
private $commanService;
private $em;
public function __construct(CommanService $commanService, EntityManagerInterface $em)
{
$this->commanService = $commanService;
$this->em = $em;
}
/**
* @Route("/list", name="club_member_list")
*/
public function index(Request $request, PaginatorInterface $paginator)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$user = $this->getUser()->getId();
$page = $request->get('page');
$userSubscription = $this->em->getRepository(UserSubscription::class)
->findOneBy(['user' => $user]);
if (null != $userSubscription) {
$subscriptionEndDate = $userSubscription->getEndDate()->format('Y-m-d');
}
if (true === $request->isXmlHttpRequest()) {
$itemsPerPage = 9;
$offset = ($page - 1) * $itemsPerPage;
$clubMember = $this->em->getRepository(ClubMembers::class)
->getClubMember($user, $itemsPerPage, $offset);
$clubMember = $this->renderView('club_member/render.html.twig', [
'clubMembers' => $clubMember,
'subscriptionEndDate' => $subscriptionEndDate ?? '',
]);
return new JsonResponse(['success' => true, 'clubMemberRecord' => $clubMember]);
} else {
// For initial page load, get first 9 members with A-Z sorting
$clubMember = $this->em->getRepository(ClubMembers::class)
->getClubMemberWithFilter($user, 'name_asc');
// Limit to first 9 members for initial display
$clubMember = array_slice($clubMember, 0, 9);
// Get total count for pagination info
$totalClubMember = $this->em->getRepository(ClubMembers::class)
->getTotalClubMember($user);
return $this->render('club_member/index.html.twig', [
'clubMembers' => $clubMember,
'subscriptionEndDate' => $subscriptionEndDate ?? '',
'totalClubMember' => $totalClubMember[0]['total_cm'] ?? 0,
]);
}
}
/**
* @Route("/add", name="club_member_add")
* @Route("/enquiry/add/{mode}", name="enquiry_add")
*/
public function add(Request $request, UserPasswordEncoderInterface $passwordEncoder, $mode = null)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$user = $this->getUser()->getId();
$userSubscription = $this->em->getRepository(UserSubscription::class)
->findOneBy(['user' => $user]);
if (null != $userSubscription) {
$subscriptionEndDate = $userSubscription->getEndDate()->format('Y-m-d');
}
$id = $request->query->get('id');
$oldImage = null;
if ($id) {
$clubMember = $this->em->getRepository(ClubMembers::class)
->find($id);
$oldImage = $clubMember->getImage();
$user = $this->em->getRepository(User::class)
->find($clubMember->getUser()->getId());
} else {
$clubMember = new ClubMembers();
$user = new User();
}
// Load form
$form = $this->createForm(ClubMembersType::class, $clubMember);
if ($request->isMethod('post')) {
if ($clubMember->getImage()) {
if (1 == $request->request->get('deleteImage')) {
$filesystem = new Filesystem();
if ($filesystem->exists($this->getParameter('club_directory').'/'.$clubMember->getImage())) {
$filesystem->remove($this->getParameter('club_directory').'/'.$clubMember->getImage());
$filesystem->remove($this->getParameter('thumbnail_directory').'/'.$clubMember->getImage());
}
$clubMember->setImage(null);
$this->em->persist($clubMember);
$this->em->flush();
}
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if (empty($id)) {
$userPassword = mt_rand(100000, 999999);
$password = $passwordEncoder->encodePassword($user, $userPassword);
$user->setPassword($password);
$user->setCreatedAt(new \DateTime());
if ('enquiry' == $mode) {
$user->setRoles(['ROLE_ENQUIRY']);
} else {
$user->setRoles(['ROLE_CLUB_MEMBER']);
}
}
$user->setUsername($form['email']->getData());
$user->setEmail($form['email']->getData() ?? '');
$user->setFirstName($form['firstName']->getData());
$user->setMiddleName($form['middleName']->getData() ?? '');
$user->setLastName($form['lastName']->getData());
$user->setMobileNumber($form['mobileNumber']->getData());
$user->setGender($form['gender']->getData());
$user->setStatus(0);
$user->setUpdatedAt(new \DateTime());
$this->em->persist($user);
$this->em->flush();
$file = $form['image']->getData();
if (null != $file && null != $oldImage) {
$filesystem = new Filesystem();
if ($filesystem->exists($this->getParameter('club_directory').'/'.$oldImage)) {
$filesystem->remove($this->getParameter('club_directory').'/'.$oldImage);
$filesystem->remove($this->getParameter('thumbnail_directory').'/'.$oldImage);
}
$clubMember->setImage(null);
$this->em->persist($clubMember);
$this->em->flush();
}
if ($file) {
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
$file->move($this->getParameter('club_directory'), $fileName);
$imagine = new Imagine();
$image = $imagine->open($this->getParameter('club_directory').'/'.$fileName);
$originalWidth = $image->getSize()->getWidth();
$originalHeight = $image->getSize()->getHeight();
$maxSize = 200;
list($newWidth, $newHeight) = $this->getNewHeightWidth($maxSize, $originalWidth, $originalHeight);
$image->resize(new Box($newWidth, $newHeight))->save($this->getParameter('club_directory').'/'.$fileName);
list($newWidth, $newHeight) = $this->getNewHeightWidth(100, $originalWidth, $originalHeight);
$image->resize(new Box($newWidth, $newHeight))->save($this->getParameter('thumbnail_directory').'/'.$fileName);
$clubMember->setImage($fileName);
} else {
if (isset($oldImage)) {
$clubMember->setImage($oldImage);
}
}
if (empty($id)) {
$clubMember->setCreatedAt(new \DateTime());
if ('enquiry' == $mode) {
$clubMember->setMemberType('ENQUIRY');
} else {
$clubMember->setMemberType('MEMBER');
}
}
$clubMember->setUser($user);
$clubMember->setCreatedBy($this->getUser()->getId());
$clubMember->setStatus(1);
$clubMember->setUpdatedAt(new \DateTime());
$this->em->persist($clubMember);
$this->em->flush();
$this->addFlash(
'success',
($id) ? 'Record updated sucessfully...!!!' :
'Record added sucessfully...!!!'
);
if ('enquiry' == $mode) {
return $this->redirectToRoute('enquiry_view', ['id' => $clubMember->getId()]);
} else {
return $this->redirectToRoute('club_member_view', ['id' => $clubMember->getId()]);
}
}
}
return $this->render('club_member/add.html.twig', [
'form' => $form->createView(),
'clubMember' => $clubMember,
'oldImage' => isset($oldImage) ? $oldImage : null,
'subscriptionEndDate' => $subscriptionEndDate ?? '',
]);
}
/**
* @Route("/profile", name="profile")
*/
public function profile(Request $request, UserPasswordEncoderInterface $passwordEncoder, SessionInterface $session)
{
$user = $this->getUser()->getId();
$userSubscription = $this->em->getRepository(UserSubscription::class)
->findOneBy(['user' => $user]);
if (null != $userSubscription) {
$subscriptionEndDate = $userSubscription->getEndDate()->format('Y-m-d');
}
$clubMember = $this->em->getRepository(ClubMembers::class)->findOneBy(['email' => $this->getUser()->getEmail()]);
$oldFirstName = $clubMember->getFirstName();
$oldLastName = $clubMember->getLastName();
if (null !== $clubMember) {
$oldImage = $clubMember->getImage();
$session->set('oldFirstName', $oldFirstName);
$session->set('oldLastName', $oldLastName);
$session->set('oldImage', $oldImage);
$session->set('clubMember', $clubMember);
}
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$id = $this->getUser()->getId();
$oldImage = null;
if ($id) {
$user = $this->em->getRepository(ClubMembers::class)
->findOneBy(['user' => $id]);
if ($user) {
$oldImage = $user->getImage();
$form = $this->createForm(EditUserType::class, $user);
} else {
$form = $this->createForm(EditUserType::class);
}
}
// Load form
if ($request->isMethod('post')) {
$file = $form['image']->getData();
if ($user->getImage()) {
if (1 == $request->request->get('deleteImage')) {
$filesystem = new Filesystem();
if ($filesystem->exists($this->getParameter('club_directory').'/'.$user->getImage())) {
$filesystem->remove($this->getParameter('club_directory').'/'.$user->getImage());
$filesystem->remove($this->getParameter('thumbnail_directory').'/'.$user->getImage());
}
$user->setImage(null);
$session->set('oldImage', '');
$this->em->persist($user);
$this->em->flush();
}
}
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$currentDate = new \DateTime();
$currentDate = $currentDate->format('Y-m-d');
if (null == $userSubscription || $userSubscription->getEndDate()->format('Y-m-d') < $currentDate) {
$this->addFlash(
'error',
'Please Purchase any subscription to edit profile...!!!'
);
return $this->redirectToRoute('profile');
}
$user->setUser($form->getNormData()->getUser());
$user->setFirstName($form['firstName']->getData());
$user->setMiddleName($form['middleName']->getData());
$user->setLastName($form['lastName']->getData());
$user->setAddress($form['address']->getData());
$user->setEmail($form['email']->getData());
$user->setMobileNumber($form['mobileNumber']->getData());
$user->setGender($form['gender']->getData());
$user->setBirthdate($form['birthdate']->getData());
// $user->setPanNumber($form['panNumber']->getData());
$user->setPincode($form['pincode']->getData());
$user->setSpouseFname($form['spouseFname']->getData());
$user->setSpouseMname($form['spouseMname']->getData());
$user->setSpouseLname($form['spouseLname']->getData());
$user->setHerbalifeId($form['herbalifeId']->getData());
// $user->setPaymentOrderHistory($form['paymentOrderHistory']->getData());
$file = $form['image']->getData();
if (null != $file && null != $oldImage) {
$filesystem = new Filesystem();
if ($filesystem->exists($this->getParameter('club_directory').'/'.$oldImage)) {
$filesystem->remove($this->getParameter('club_directory').'/'.$oldImage);
$filesystem->remove($this->getParameter('thumbnail_directory').'/'.$oldImage);
}
$user->setImage(null);
$session->set('oldImage', '');
$this->em->persist($user);
$this->em->flush();
}
if ($file) {
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
$file->move($this->getParameter('club_directory'), $fileName);
$imagine = new Imagine();
$image = $imagine->open($this->getParameter('club_directory').'/'.$fileName);
$originalWidth = $image->getSize()->getWidth();
$originalHeight = $image->getSize()->getHeight();
$maxSize = 200;
list($newWidth, $newHeight) = $this->getNewHeightWidth($maxSize, $originalWidth, $originalHeight);
$image->resize(new Box($newWidth, $newHeight))->save($this->getParameter('club_directory').'/'.$fileName);
list($newWidth, $newHeight) = $this->getNewHeightWidth(100, $originalWidth, $originalHeight);
$image->resize(new Box($newWidth, $newHeight))->save($this->getParameter('thumbnail_directory').'/'.$fileName);
$user->setImage($fileName);
} elseif (isset($oldImage)) {
$user->setImage($oldImage);
}
$this->em->persist($user);
$this->em->flush();
$oldImage = $user->getImage();
$this->addFlash(
'success',
($id) ? 'Record updated sucessfully...!!!' :
'Record added sucessfully...!!!'
);
}
}
return $this->render('user/profile.html.twig', [
'form' => $form->createView(),
'user' => $user,
'oldImage' => isset($oldImage) ? $oldImage : null,
'subscriptionEndDate' => $subscriptionEndDate ?? '',
]);
}
/**
* @Route("/delete", name="club_member_delete")
* @Route("/enquiry/delete/{mode}", name="enquiry_delete")
*/
public function delete(Request $request, $mode = null)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$id = $request->query->get('id');
$clubMember = $this->em->getRepository(ClubMembers::class)
->find($id);
$user = $this->em->getRepository(User::class)
->find($clubMember->getUser()->getId());
$filesystem = new Filesystem();
if ($clubMember->getImage()) {
if ($filesystem->exists($this->getParameter('club_directory').'/'.$clubMember->getImage())) {
$filesystem->remove($this->getParameter('club_directory').'/'.$clubMember->getImage());
$filesystem->remove($this->getParameter('thumbnail_directory').'/'.$clubMember->getImage());
}
}
$this->em->remove($clubMember);
$this->em->remove($user);
$this->em->flush();
$this->addFlash(
'success',
'Record deleted sucessfully...!!!'
);
if ('enquiry' == $mode) {
return $this->redirectToRoute('enquiry_list');
} else {
return $this->redirectToRoute('club_member_list');
}
}
/**
* @Route("/change-password", name="change_password")
*/
public function changePassword(Request $request, UserPasswordEncoderInterface $passwordEncoder, ValidatorInterface $validator)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$user = $this->getUser();
$form = $this->createForm(ChangePasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$oldPassword = $form->get('oldPassword')->getData();
$newPassword = $form->get('newPassword')->getData();
$confirmPassword = $form->get('confirmPassword')->getData();
if ($oldPassword != $newPassword) {
if ($newPassword == $confirmPassword) {
if ($passwordEncoder->isPasswordValid($user, $oldPassword)) {
$user->setPassword($passwordEncoder->encodePassword($user, $newPassword));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('app_logout');
} else {
$this->addFlash('error', 'Incorrect old password.');
}
} else {
$this->addFlash('error', 'New Password and confirm password must be same.');
}
} else {
$this->addFlash('error', 'Old Password and new password must not be same.');
}
}
return $this->render('user/changepassword.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/search", name="club_member_search")
*/
public function search(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$userId = $this->getUser()->getId();
$search = $request->request->get('search');
$searchMember = $this->em->getRepository(ClubMembers::class)
->getClubMemberForSearch($search, 'MEMBER', $userId, null, null);
$userSubscription = $this->em->getRepository(UserSubscription::class)
->findOneBy(['user' => $this->getUser()]);
if (null != $userSubscription) {
$subscriptionEndDate = $userSubscription->getEndDate()->format('Y-m-d');
}
return $this->render('club_member/render.html.twig', [
'clubMembers' => $searchMember,
'subscriptionEndDate' => $subscriptionEndDate ?? '',
]);
}
/**
* @Route("/filter", name="club_member_filter")
*/
public function filter(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$userId = $this->getUser()->getId();
$filter = $request->request->get('filter');
$filteredMembers = $this->em->getRepository(ClubMembers::class)
->getClubMemberWithFilter($userId, $filter);
$userSubscription = $this->em->getRepository(UserSubscription::class)
->findOneBy(['user' => $this->getUser()]);
if (null != $userSubscription) {
$subscriptionEndDate = $userSubscription->getEndDate()->format('Y-m-d');
}
return $this->render('club_member/render.html.twig', [
'clubMembers' => $filteredMembers,
'subscriptionEndDate' => $subscriptionEndDate ?? '',
]);
}
/**
* @Route("/member-checkup-delete", name="member_checkup_delete")
*/
public function memberCheckupDelete(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$id = $request->query->get('id');
$memberCheckup = $this->em->getRepository(MemberCheckups::class)
->find($id);
if ($memberCheckup->getImage()) {
$filesystem = new Filesystem();
if ($filesystem->exists($this->getParameter('member_checkup_directory').'/'.$memberCheckup->getImage())) {
$filesystem->remove($this->getParameter('member_checkup_directory').'/'.$memberCheckup->getImage());
$filesystem->remove($this->getParameter('thumbnail_directory').'/'.$memberCheckup->getImage());
}
}
$this->em->remove($memberCheckup);
$this->em->flush();
$this->addFlash(
'success',
'Record deleted sucessfully...!!!'
);
$source = $request->get('source');
if ('enquiry' === $source) {
return $this->redirectToRoute('enquiry_view', ['id' => $memberCheckup->getClubMember()->getId()]);
} else {
return $this->redirectToRoute('club_member_view', ['id' => $memberCheckup->getClubMember()->getId()]);
}
}
/**
* @Route("/view", name="club_member_view")
*/
public function view(Request $request, CommanService $commanService)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$id = $request->query->get('id');
$user = $this->getUser();
$userSubscription = $this->em->getRepository(UserSubscription::class)
->findOneBy(['user' => $user]);
if (null != $userSubscription) {
$subscriptionEndDate = $userSubscription->getEndDate()->format('Y-m-d');
}
if ($id) {
$clubMember = $this->em->getRepository(ClubMembers::class)
->find($id);
$checkupDatas = $this->em->getRepository(MemberCheckups::class)
->getCheckupData($id);
$chartDatas = $commanService->prepareChartData($checkupDatas);
$followUpData = $this->em->getRepository(FollowUp::class)
->getFolloeUpData($id);
$pastFollowUpData = $this->em->getRepository(FollowUp::class)
->getPastFollowUpData($id);
$order = $this->em->getRepository(OrderData::class)
->getOrderDetails($id);
$memberCheckups = new MemberCheckups();
$form = $this->createForm(MemberCheckupsType::class, $memberCheckups);
return $this->render('club_member/view.html.twig', [
'orders' => $order,
'followUpDatas' => $followUpData,
'pastFollowUpDatas' => $pastFollowUpData,
'clubMember' => $clubMember,
'checkupDatas' => $checkupDatas,
'chartDatas' => $chartDatas,
'form' => $form->createView(),
'wt_chart' => !empty($chartDatas['wt_chart']) ? $chartDatas['wt_chart'] : [],
'fat_chart' => !empty($chartDatas['fat_chart']) ? $chartDatas['fat_chart'] : [],
'bAge_chart' => !empty($chartDatas['bAge_chart']) ? $chartDatas['bAge_chart'] : [],
'bmi_chart' => !empty($chartDatas['bmi_chart']) ? $chartDatas['bmi_chart'] : [],
'bmr_chart' => !empty($chartDatas['bmr_chart']) ? $chartDatas['bmr_chart'] : [],
'vf_chart' => !empty($chartDatas['vf_chart']) ? $chartDatas['vf_chart'] : [],
'tsf_chart' => !empty($chartDatas['tsf_chart']) ? $chartDatas['tsf_chart'] : [],
'muscl_chart' => !empty($chartDatas['muscl_chart']) ? $chartDatas['muscl_chart'] : [],
'inchLoss_chart' => !empty($chartDatas['inchLoss_chart']) ? $chartDatas['inchLoss_chart'] : [],
'subscriptionEndDate' => $subscriptionEndDate ?? '',
]);
} else {
return $this->redirectToRoute('club_member_list');
}
}
/**
* @Route("/save-member-checkup", name="save_member_checkup")
*/
public function saveMemberCheckup(Request $request, MailerInterface $mailer)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$id = $request->query->get('club_member_id');
$checkupId = $request->get('checkupId');
$oldImage = null;
if ($this->getUser()) {
$userId = $this->getUser()->getId();
}
if (null != $request->query->get('viewsearch')) {
$memberCheckups = new MemberCheckups();
$clubMemberFullNames = null;
$clubMemberList = $this->em->getRepository(ClubMembers::class)
->getClubMember($userId);
$clubMemberFullNames = [];
foreach ($clubMemberList as $key => $value) {
$clubMemberFullNames[$value[0]->getFirstName().' '.$value[0]->getLastName().' - '.$value[0]->getEmail()] = $value[0]->getId();
}
$form = $this->createForm(MemberCheckupsType::class, $memberCheckups, ['checkedUp' => true, 'clubMemberFullNames' => $clubMemberFullNames]);
$form->handleRequest($request);
if ($form->isSubmitted() && !$form->isValid()) {
$result = $this->render('club_member/popUpView.html.twig', [
'form' => $form->createView(),
'viewsearch' => 1,
]);
$data = $result->getContent();
return new JsonResponse([
'status' => 'error',
'data' => $data,
]);
}
if ($form->isSubmitted() && $form->isValid()) {
$memberCheckups = new MemberCheckups();
$file = $form['image']->getData();
if ($file) {
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
$file->move($this->getParameter('member_checkup_directory'), $fileName);
$imagine = new Imagine();
$image = $imagine->open($this->getParameter('member_checkup_directory').'/'.$fileName);
$originalWidth = $image->getSize()->getWidth();
$originalHeight = $image->getSize()->getHeight();
$maxSize = 200;
list($newWidth, $newHeight) = $this->getNewHeightWidth($maxSize, $originalWidth, $originalHeight);
$image->resize(new Box($newWidth, $newHeight))->save($this->getParameter('member_checkup_directory').'/'.$fileName);
list($newWidth, $newHeight) = $this->getNewHeightWidth(100, $originalWidth, $originalHeight);
$image->resize(new Box($newWidth, $newHeight))->save($this->getParameter('thumbnail_directory').'/'.$fileName);
$memberCheckups->setImage($fileName);
} else {
if (isset($oldImage)) {
$memberCheckups->setImage($oldImage);
}
}
$memberId = $form->get('search')->getData();
if ($memberId) {
$clubMember = $this->em->getRepository(ClubMembers::class)->find($memberId);
$memberCheckups->setClubMember($clubMember);
}
$memberCheckups->setCheckupDate($form['checkupDate']->getData());
$memberCheckups->setWt($form['wt']->getData());
$memberCheckups->setFat($form['fat']->getData());
$memberCheckups->setBAge($form['bAge']->getData());
$memberCheckups->setBmi($form['bmi']->getData());
$memberCheckups->setBmr($form['bmr']->getData());
$memberCheckups->setVf($form['vf']->getData());
$memberCheckups->setTsf($form['tsf']->getData());
$memberCheckups->setMuscl($form['muscl']->getData());
$memberCheckups->setInchLoss($form['inchLoss']->getData());
$memberCheckups->setCreatedAt(new \DateTime());
$memberCheckups->setUpdatedAt(new \DateTime());
$this->em->persist($memberCheckups);
$this->em->flush();
if ($clubMember->getEmail()) {
$fromEmail = $this->getParameter('mailer_from');
$email = (new TemplatedEmail())
->from($fromEmail)
->to($clubMember->getEmail())
->subject('Checkup Update')
->htmlTemplate('email/checkup_update.html.twig')
->context([
'clubMember' => $clubMember,
'memberCheckups' => $memberCheckups,
]);
if ($file) {
$email->attachFromPath(
$this->getParameter('member_checkup_directory').'/'.$fileName,
$file->getClientOriginalName()
);
}
$mailer->send($email);
}
return new JsonResponse([
'status' => 'success',
]);
}
} else {
if ($id) {
$clubMember = $this->em->getRepository(ClubMembers::class)->find($id);
}
if ($checkupId) {
$memberCheckups = $this->em->getRepository(MemberCheckups::class)->find($checkupId);
if ($memberCheckups->getImage()) {
$oldImage = $memberCheckups->getImage();
}
} else {
$memberCheckups = new MemberCheckups();
}
$form = $this->createForm(MemberCheckupsType::class, $memberCheckups);
}
if ($request->isMethod('post')) {
if ($memberCheckups->getImage()) {
if (1 == $request->request->get('deleteImage')) {
$filesystem = new Filesystem();
if ($filesystem->exists($this->getParameter('member_checkup_directory').'/'.$memberCheckups->getImage())) {
$filesystem->remove($this->getParameter('member_checkup_directory').'/'.$memberCheckups->getImage());
$filesystem->remove($this->getParameter('thumbnail_directory').'/'.$memberCheckups->getImage());
}
$memberCheckups->setImage(null);
$this->em->persist($memberCheckups);
$this->em->flush();
}
}
$form->handleRequest($request);
if ($form->isSubmitted() && !$form->isValid()) {
$result = $this->render('club_member/popUpView.html.twig', [
'form' => $form->createView(),
'checkupId' => $checkupId,
'oldImage' => isset($oldImage) ? $oldImage : null,
]);
$data = $result->getContent();
return new JsonResponse([
'status' => 'error',
'data' => $data,
'checkupId' => $checkupId,
'oldImage' => isset($oldImage) ? $oldImage : null,
]);
}
if ($form->isSubmitted() && $form->isValid()) {
$file = $form['image']->getData();
if (null != $file && null != $oldImage) {
$filesystem = new Filesystem();
if ($filesystem->exists($this->getParameter('member_checkup_directory').'/'.$oldImage)) {
$filesystem->remove($this->getParameter('member_checkup_directory').'/'.$oldImage);
$filesystem->remove($this->getParameter('thumbnail_directory').'/'.$oldImage);
}
$memberCheckups->setImage(null);
$this->em->persist($memberCheckups);
$this->em->flush();
}
if ($file) {
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
$file->move($this->getParameter('member_checkup_directory'), $fileName);
$imagine = new Imagine();
$image = $imagine->open($this->getParameter('member_checkup_directory').'/'.$fileName);
$originalWidth = $image->getSize()->getWidth();
$originalHeight = $image->getSize()->getHeight();
$maxSize = 200;
list($newWidth, $newHeight) = $this->getNewHeightWidth($maxSize, $originalWidth, $originalHeight);
$image->resize(new Box($newWidth, $newHeight))->save($this->getParameter('member_checkup_directory').'/'.$fileName);
list($newWidth, $newHeight) = $this->getNewHeightWidth(100, $originalWidth, $originalHeight);
$image->resize(new Box($newWidth, $newHeight))->save($this->getParameter('thumbnail_directory').'/'.$fileName);
$memberCheckups->setImage($fileName);
} else {
if (isset($oldImage)) {
$memberCheckups->setImage($oldImage);
}
}
$memberCheckups->setClubMember($clubMember);
$memberCheckups->setCreatedAt(new \DateTime());
$memberCheckups->setUpdatedAt(new \DateTime());
$this->em->persist($memberCheckups);
$this->em->flush();
if ($clubMember->getEmail()) {
$fromEmail = $this->getParameter('mailer_from');
$email = (new TemplatedEmail())
->from($fromEmail)
->to($clubMember->getEmail())
->subject('Checkup Update')
->htmlTemplate('email/checkup_update.html.twig')
->context([
'clubMember' => $clubMember,
'memberCheckups' => $memberCheckups,
]);
if ($file) {
$email->attachFromPath(
$this->getParameter('member_checkup_directory').'/'.$fileName,
$file->getClientOriginalName()
);
}
$mailer->send($email);
}
$this->addFlash(
'success',
'Record updated sucessfully...!!!'
);
return new JsonResponse([
'status' => 'success',
'oldImage' => isset($oldImage) ? $oldImage : null,
]);
}
}
$result = $this->render('club_member/popUpView.html.twig', [
'form' => $form->createView(),
'oldImage' => isset($oldImage) ? $oldImage : null,
]);
$data = $result->getContent();
return new JsonResponse([
'status' => 'ok',
'data' => $data,
]);
}
private function getNewHeightWidth($maxSize = 200, $originalWidth, $originalHeight)
{
if ($originalWidth > $originalHeight) {
$newWidth = min($maxSize, $originalWidth);
$newHeight = $newWidth * $originalHeight / $originalWidth;
} else {
$newHeight = min($maxSize, $originalHeight);
$newWidth = $newHeight * $originalWidth / $originalHeight;
}
return [$newWidth, $newHeight];
}
private function generateUniqueFileName()
{
// md5() reduces the similarity of the file names generated by
// uniqid(), which is based on timestamps
return md5(uniqid());
}
/**
* @Route("/get-cities-by-state", name="city_get_by_state")
*/
public function getCitiesByState(Request $request): JsonResponse
{
$stateId = $request->query->get('state_id'); // Get the selected state's ID
$cities = $this->em->getRepository(City::class)->getCitiesByState($stateId, $this->em);
return $cities;
}
/**
* @Route("/subscription", name="subscription")
*/
public function subscription(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$userId = $this->getUser()->getId();
$criteria = [
'user' => $userId,
'status' => [1, 3],
];
$orderBy = [
'created_at' => 'ASC',
];
$currentDate = new \DateTime();
$days = null;
$perDay = null;
$remainingDays = null;
$activeSubscription = false;
$subscription = null;
$userSubscriptions = $this->em->getRepository(UserSubscription::class)->findBy($criteria, $orderBy);
foreach ($userSubscriptions as $subscription) {
$userSubscriptionEndDate = $subscription->getEndDate();
$currentDate = new \DateTime();
if ($userSubscriptionEndDate < $currentDate) {
if (1 == $subscription->getStatus()) {
$subscription->setStatus(0);
$this->em->persist($subscription);
$this->em->flush();
}
}
if ($userSubscriptionEndDate < $currentDate && 3 == $subscription->getStatus()) {
$subscription->setStatus(1);
$this->em->persist($subscription);
$this->em->flush();
}
}
$userSubscription = $this->em->getRepository(UserSubscription::class)->findOneBy(['user' => $userId, 'status' => 1]);
if ($userSubscription) {
$activeSubscription = $userSubscription->getSubscription();
}
if ($activeSubscription) {
$userSubscriptionEndDate = $userSubscription->getEndDate();
$userSubscriptionId = $userSubscription->getSubscription()->getId();
$subscription = $this->em->getRepository(Subscription::class)->find($userSubscriptionId);
if ($subscription->getId() == $userSubscriptionId && $userSubscriptionEndDate > $currentDate) {
$days = $subscription->getDuration();
$perDay = 100 / $days;
$remainingDays = $currentDate->diff($userSubscriptionEndDate)->days;
} elseif ($subscription->getId() == $userSubscriptionId && $userSubscriptionEndDate > $currentDate) {
$days = $subscription->getDuration();
$perDay = 100 / $days;
$remainingDays = $currentDate->diff($userSubscriptionEndDate)->days;
} elseif ($subscription->getId() == $userSubscriptionId && $userSubscriptionEndDate > $currentDate) {
$days = $subscription->getDuration();
$perDay = 100 / $days;
$remainingDays = $currentDate->diff($userSubscriptionEndDate)->days;
} else {
$days = null;
$perDay = null;
$remainingDays = null;
}
}
$result = $this->render('club_member/subscription.html.twig', [
'userSubscription' => $userSubscription,
'perDay' => $perDay,
'remainingDays' => $remainingDays,
'subscription' => $subscription,
'userSubscriptions' => $userSubscriptions,
]);
return $result;
}
/**
* @Route("/price-details", name="price_details")
*/
public function priceDetails(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$subscriptions = $this->em->getRepository(Subscription::class)->findAll();
$result = $this->render('club_member/priceDetails.html.twig', [
'subscriptions' => $subscriptions,
]);
return $result;
}
/**
* @Route("/package-details", name="package_details")
*/
public function packageDetails(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$id = $request->get('id');
$userId = $this->getUser()->getId();
$criteria = [
'user' => $userId,
];
$orderBy = [
'created_at' => 'ASC',
];
$userSubscriptions = $this->em->getRepository(UserSubscription::class)->findBy($criteria, $orderBy);
$userSubscription = array_pop($userSubscriptions);
if ($userSubscription) {
$subscriptionEndDate = $userSubscription->getEndDate();
$subscriptionStartDate = clone $subscriptionEndDate;
$day = 1;
$subscriptionStartDate->modify('+'.$day.' days')->format('Y-m-d');
$subscription = $this->em->getRepository(Subscription::class)->find($id);
$days = $subscription->getDuration();
$subscriptionEndDate = clone $subscriptionStartDate;
$subscriptionEndDate->modify('+'.$days.' days')->format('Y-m-d');
}
$userSubscription = $this->em->getRepository(UserSubscription::class)->findOneBy(['user' => $userId]);
if ($userSubscription) {
$userSubscriptionId = $userSubscription->getSubscription()->getId();
}
$subscription = $this->em->getRepository(Subscription::class)->find($id);
$result = $this->render('club_member/packageDetails.html.twig', [
'userSubscription' => $userSubscription,
'subscription' => $subscription,
'subscriptionStartDate' => $subscriptionStartDate ?? '',
'subscriptionEndDate' => $subscriptionEndDate ?? '',
]);
return $result;
}
/**
* @Route("/transcation-history", name="transcation_history")
*/
public function transcationHistory(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_SUPERVISOR');
$userId = $this->getUser()->getId();
$criteria = [
'user' => $userId,
];
$orderBy = [
'created_at' => 'DESC',
];
$subscriptionPayments = $this->em->getRepository(SubscriptionPayments::class)->findBy($criteria, $orderBy);
$userSubscriptions = $this->em->getRepository(UserSubscription::class)->findBy($criteria, $orderBy);
$result = $this->render('club_member/transcationHistory.html.twig', [
'subscriptionPayments' => $subscriptionPayments,
'userSubscriptions' => $userSubscriptions,
]);
return $result;
}
}