src/Controller/PraticiensController.php line 168

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Client\StripeClient;
  4. use App\Dto\Slot;
  5. use App\Entity\Account;
  6. use App\Entity\City;
  7. use App\Entity\CustomerProfile;
  8. use App\Entity\GroupSession;
  9. use App\Entity\Need;
  10. use App\Entity\Partner;
  11. use App\Entity\PartnerNote;
  12. use App\Entity\PartnerSecondaryLocation;
  13. use App\Entity\PartnerSubscription;
  14. use App\Entity\Reservation;
  15. use App\Entity\ReservationPayment;
  16. use App\Entity\ReservationPaymentLog;
  17. use App\Entity\ServiceDelivery;
  18. use App\Entity\ServiceDeliveryPlace;
  19. use App\Entity\Speciality;
  20. use App\Entity\SpecialityHasCity;
  21. use App\Entity\User;
  22. use App\Entity\VillesFrance;
  23. use App\Form\PartnerNoteType;
  24. use App\Form\UserLoginType;
  25. use App\Form\UserRegisterType;
  26. use App\Security\PasswordEncoder;
  27. use App\Service\GoogleCalendarService;
  28. use App\Service\ICalService;
  29. use App\Service\MailjetEmailService;
  30. use App\Utils\AgendaUtils;
  31. use Doctrine\ORM\EntityManagerInterface;
  32. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  33. use Stripe\Exception\ApiErrorException;
  34. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  35. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  36. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  37. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  38. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  39. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  40. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  41. use Symfony\Component\Form\FormInterface;
  42. use Symfony\Component\HttpFoundation\Exception\BadRequestException;
  43. use Symfony\Component\HttpFoundation\Request;
  44. use Symfony\Component\HttpFoundation\Response;
  45. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  46. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  47. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  48. use Symfony\Component\Routing\Annotation\Route;
  49. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  50. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  51. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  52. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  53. use Symfony\Component\Security\Http\SecurityEvents;
  54. use Symfony\Component\Validator\Constraints\NotBlank;
  55. use ICal\ICal;
  56. /**
  57. * Class PraticiensController
  58. * @package App\Controller
  59. *
  60. * @Route("/praticiens", name="praticiens_")
  61. */
  62. class PraticiensController extends AbstractController
  63. {
  64. private $em;
  65. public function __construct(EntityManagerInterface $em)
  66. {
  67. $this->em = $em;
  68. }
  69. /**
  70. * @Route(
  71. * path="/",
  72. * name="list",
  73. * options={"sitemap" = true}
  74. * )
  75. *
  76. * @return Response
  77. */
  78. public function listAction(Request $request, EntityManagerInterface $em)
  79. {
  80. $specialities = $em->getRepository(Speciality::class)->findAll();
  81. // Groupement alphabétique
  82. $specialities_grouped = [];
  83. foreach ($specialities as $speciality) {
  84. $firstLetter = $speciality->getLabel()[0];
  85. $firstLetter = strtoupper($firstLetter);
  86. if (!array_key_exists($firstLetter, $specialities_grouped)) {
  87. $specialities_grouped[$firstLetter] = [];
  88. }
  89. $specialities_grouped[$firstLetter][] = $speciality;
  90. }
  91. ksort($specialities_grouped);
  92. return $this->render('praticiens/list.html.twig', [
  93. "specialities_grouped" => $specialities_grouped,
  94. ]);
  95. }
  96. /**
  97. * @Route(
  98. * path="/{slugJob}",
  99. * name="fiche"
  100. * )
  101. *
  102. * @return Response
  103. */
  104. public function ficheAction(Speciality $speciality, Request $request)
  105. {
  106. $terms = $speciality->getLabel();
  107. $keywords= null;
  108. if ($terms) {
  109. $termsExplode = explode(" ", $terms);
  110. if (count($termsExplode)) {
  111. $keywords = $termsExplode;
  112. }
  113. }
  114. $radius = $request->get('rad');
  115. if (!$radius || intval($radius) < 5 || intval($radius) > 50) {
  116. $radius = 50;
  117. } else {
  118. $radius = intval($radius);
  119. }
  120. $partners = $this->em->getRepository(Partner::class)->search("practitionner", $keywords);
  121. $partnersAllowed = DefaultController::checkPartnersAlloweds($partners);
  122. return $this->render('praticiens/fiche.html.twig', [
  123. "speciality" => $speciality,
  124. "partners" => $partnersAllowed,
  125. "specialities" => $this->em->getRepository(Speciality::class)->findAll(),
  126. "rad" => $radius,
  127. ]);
  128. }
  129. /**
  130. * @Route(
  131. * path="/{slugJob}/description",
  132. * name="description"
  133. * )
  134. *
  135. * @return Response
  136. */
  137. public function descriptionAction(Speciality $speciality, Request $request)
  138. {
  139. return $this->render('praticiens/definition.html.twig', [
  140. "speciality" => $speciality,
  141. ]);
  142. }
  143. /**
  144. * @Route(
  145. * path="/{slugJob}/{slugCity}",
  146. * name="fiche_ville"
  147. * )
  148. *
  149. * @ParamConverter("speciality", options={"mapping": {"slugJob": "slugJob"}})
  150. * @ParamConverter("city", options={"mapping": {"slugCity": "slug"}})
  151. *
  152. * @return Response
  153. */
  154. public function ficheVilleAction(Speciality $speciality, City $city, Request $request)
  155. {
  156. $specialityHasCity = $this->em->getRepository(SpecialityHasCity::class)->findOneBy(["speciality" => $speciality, "city" => $city]);
  157. $terms = $speciality->getLabel();
  158. $keywords= null;
  159. if ($terms) {
  160. $termsExplode = explode(" ", $terms);
  161. if (count($termsExplode)) {
  162. $keywords = $termsExplode;
  163. }
  164. }
  165. $radius = $request->get('rad');
  166. if (!$radius || intval($radius) < 5 || intval($radius) > 50) {
  167. $radius = 50;
  168. } else {
  169. $radius = intval($radius);
  170. }
  171. $partners = $this->em->getRepository(Partner::class)->search("practitionner", $keywords, $city->getLat(), $city->getLon(), $radius);
  172. $partnersAllowed = DefaultController::checkPartnersAlloweds($partners);
  173. return $this->render('praticiens/fiche-ville.html.twig', [
  174. "speciality" => $speciality,
  175. "city" => $city,
  176. "specialityHasCity" => $specialityHasCity,
  177. "partners" => $partnersAllowed,
  178. "specialities" => $this->em->getRepository(Speciality::class)->findAll(),
  179. "cities" => $this->em->getRepository(City::class)->findAll(),
  180. "rad" => $radius,
  181. ]);
  182. }
  183. }