src/Controller/RegistrationController.php line 37
<?phpnamespace App\Controller;use App\Entity\AdditionalCompanyInformation;use App\Entity\DeliveryAddress;use App\Entity\Joker;use App\Entity\User;use App\Form\RegisterEmail;use App\Form\RegisterInformations;use Doctrine\ORM\EntityManagerInterface;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Annotation\Route;use Symfony\Contracts\HttpClient\HttpClientInterface;use Symfony\Contracts\Translation\TranslatorInterface;use Symfony\Component\Mime\Email;class RegistrationController extends AbstractController{private $client;private EntityManagerInterface $manager;public function __construct(HttpClientInterface $client, EntityManagerInterface $manager){$this->client = $client;$this->manager = $manager;}#[Route('/register', name: 'app_register')]public function email(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response{$form = $this->createForm(RegisterEmail::class);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$email = $form->get('email')->getData();// Vérifier si l'email existe déjà$existingUser = $entityManager->getRepository(User::class)->findOneBy(['email' => $email]);if ($existingUser) {$this->addFlash('danger', 'Cette adresse e-mail est déjà utilisée. Veuillez utiliser une autre adresse ou vous connecter.');return $this->render('register/email.html.twig', ['form' => $form->createView(),]);}$request->getSession()->set('register_email', $email);return $this->redirectToRoute('register_information_form');}return $this->render('register/email.html.twig', ['form' => $form->createView(),]);}#[Route('/register/informations', name: 'register_information_form')]public function informations(Request $request, MailerInterface $mailer, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager){$email = $request->getSession()->get('register_email');if (!$email) {return $this->redirectToRoute('app_register');}$form = $this->createForm(RegisterInformations::class, ['ceo_email' => $email, 'accountant_email' => $email, 'therapist_email' => $email]);$form->handleRequest($request);$emails = $this->getParameter('app.register.emails');if (!is_array($emails)) {$emails = explode(',', $emails);}if ($form->isSubmitted()) {if ($form->isValid()) {$formData = $form->getData();// Créer l'utilisateur$user = new User();$temporaryPassword = User::generatePassword();$user->setEmail($email);$user->setGeneratePasswordRecovery($temporaryPassword);$user->setPassword($userPasswordHasher->hashPassword($user,$temporaryPassword));$entityManager->persist($user);$entityManager->flush();// Créer le joker (remises)$joker = new Joker();$joker->setUser($user);$joker->setDateStart(new \DateTime());$year = date('Y');$date = new \DateTime();$date->setDate($year, 12, 31);$joker->setDateEnd($date);$joker->setNumberJoker(4);$entityManager->persist($joker);// Créer les informations d'entreprise$information = new AdditionalCompanyInformation();$information->setUser($user);$information->setCompanyName($formData['company_name']);$information->setCompanyAddress($formData['company_address']);$information->setCompanyPostal($formData['company_postal_code']);$information->setTownAddressCompany($formData['company_city']);$information->setCompanyCountry($formData['company_country']);$information->setTva($formData['company_vat_number']);// Note: Ces champs ne semblent pas avoir de setters correspondants dans l'entité// $information->setCompanyPhone($formData['company_phone']);$information->setIbanrib($formData['company_iban']);$information->setLegalForm($formData['company_legal_form']);$information->setRcs($formData['company_number']);if (isset($formData['company_siren'])) {$information->setSirenNumber($formData['company_siren']);}if (isset($formData['company_siret'])) {$information->setSiretNumber($formData['company_siret']);}if (isset($formData['website'])) {$information->setCompanyWebsite($formData['website']);}if (isset($formData['shop_surface_area'])) {$information->setStoreSize($formData['shop_surface_area']);}if (isset($formData['shop_food_supplement_surface_area'])) {$information->setSalesAreaForFoodSupplements($formData['shop_food_supplement_surface_area']);}// Informations CEO$information->setCeoGender($formData['ceo_gender']);$information->setCeoFirstName($formData['ceo_firstname']);$information->setCeoLastName($formData['ceo_lastname']);$information->setCeoEmail($formData['ceo_email']);if (isset($formData['ceo_phone'])) {$information->setCeoPhone($formData['ceo_phone']);}if (isset($formData['ceo_mobile'])) {$information->setCeoMobilePhone($formData['ceo_mobile']);}$information->setCeoSupplementsPurchaseDecisionMaker($formData['ceo_purchase_decision_maker'] ?? false);// Informations Comptable$information->setAccountantGender($formData['accountant_gender']);if (isset($formData['accountant_firstname'])) {$information->setAccountantFirstName($formData['accountant_firstname']);}if (isset($formData['accountant_lastname'])) {$information->setAccountantLastName($formData['accountant_lastname']);}if (isset($formData['accountant_email'])) {$information->setAccountantEmail($formData['accountant_email']);}if (isset($formData['accountant_phone'])) {$information->setAccountantPhone($formData['accountant_phone']);}if (isset($formData['accountant_mobile'])) {$information->setAccountantMobilePhone($formData['accountant_mobile']);}$information->setAccountantSupplementsPurchaseDecisionMaker($formData['accountant_purchase_decision_maker'] ?? false);// Informations Thérapeute$information->setTherapistGender($formData['therapist_gender']);if (isset($formData['therapist_firstname'])) {$information->setTherapistFirstName($formData['therapist_firstname']);}if (isset($formData['therapist_lastname'])) {$information->setTherapistLastName($formData['therapist_lastname']);}if (isset($formData['therapist_email'])) {$information->setTherapistEmail($formData['therapist_email']);}if (isset($formData['therapist_phone'])) {$information->setTherapistPhone($formData['therapist_phone']);}if (isset($formData['therapist_mobile'])) {$information->setTherapistMobilePhone($formData['therapist_mobile']);}$information->setTherapistSupplementsPurchaseDecisionMaker($formData['therapist_purchase_decision_maker'] ?? false);$entityManager->persist($information);// Créer l'adresse de livraison par défaut$address = new DeliveryAddress();$address->setUser($user);$address->setCompanyName($formData['company_name']);$address->setName($formData['ceo_lastname']);$address->setFirstName($formData['ceo_firstname']);$address->setAddress($formData['company_address']);$address->setTown($formData['company_city']);$address->setPostal($formData['company_postal_code']);$address->setCountry($formData['company_country']);$entityManager->persist($address);// Sauvegarder tout$entityManager->flush();// Ajouter le mot de passe temporaire au contexte de l'email$emailContext = $formData;$emailContext['temporary_password'] = $temporaryPassword;$emailContext['user_email'] = $email;// https://symfony.com/doc/6.4/mailer.html#html-content$emailNotification = (new TemplatedEmail())->from('info@b2bnaturamedicatrix.com')->to(...$emails)->subject('B2B Naturamedicatrix - Inscription client')->htmlTemplate('emails/client_register_informations.html.twig')->context($emailContext);$mailer->send($emailNotification);// Supprimer l'email de la session$request->getSession()->remove('register_email');$this->addFlash('success', 'Votre inscription a bien été effectuée, vous recevrez sous peu un e-mail de confirmation avec vos informations de connexion.');return $this->redirectToRoute('app_register');} else {$this->addFlash('danger', 'Des erreurs sont présentes dans les données renseignées, merci de les corriger avant de poursuivre.');}}return $this->render('register/informations.html.twig', ['form' => $form->createView(),]);}private function getToken(): Response{$url = 'https://ns3190747.ip-51-89-219.eu/Login';$response = $this->client->request('POST', $url, ['json' => ['userName' => 'Natura','password' => 'Natura@ApiB2B!2023'],]);$content = $response->getContent(); // Obtenez le contenu de la réponse$statusCode = $response->getStatusCode(); // Obtenez le code de statut de la réponse$tokenData = json_decode($content, true); // Convertissez le contenu JSON en tableau PHP// Vous devriez maintenant avoir le token JWT dans $tokenData (ou un nom approprié selon la structure de la réponse)// Pour cet exemple, je vais simplement renvoyer le contenu en tant que réponse.return new Response($content);}#[Route('/admin/mercator/customer/creation', name: 'mercator_customer_creation')]public function createCustomerWithMercator(Request $request, EntityManagerInterface $manager, UserPasswordHasherInterface $userPasswordHasher): RedirectResponse{$cat = $request->get('cat');$jwtToken = $this->getToken()->getContent(); // Remplacez par votre JWT$response = $this->client->request('GET', "https://ns3190747.ip-51-89-219.eu/customer?categorie=$cat", ['headers' => ['Authorization' => 'Bearer ' . $jwtToken,],]);$content = $response->getContent(); // Obtenez le contenu de la réponse$statusCode = $response->getStatusCode(); // Obtenez le code de statut de la réponse$fetchedCustomers = json_decode($content, true); // `true` pour obtenir un tableau associatifforeach ($fetchedCustomers as $customerData) {// PRIORITÉ 1 : Matching par email$checkCustomer = null;if (!empty($customerData['email'])) {$checkCustomer = $manager->getRepository(User::class)->findOneBy(['email' => $customerData['email']]);}// PRIORITÉ 2 : Fallback sur la TVA si email ne matche pasif (!$checkCustomer && !empty($customerData['numTVA'])) {$additionalInfo = $manager->getRepository(AdditionalCompanyInformation::class)->findOneBy(['tva' => $customerData['numTVA']]);if ($additionalInfo) {$checkCustomer = $additionalInfo->getUser();}}if (!$checkCustomer && $customerData['email'] != null) {$user = new User();$pass = User::generatePassword();$user->setEmail($customerData['email']);$user->setGeneratePasswordRecovery($pass);$user->setPassword($userPasswordHasher->hashPassword($user,$pass));$manager->persist($user);$manager->flush();$joker = new Joker();$joker->setUser($user);$joker->setDateStart(new \DateTime());$year = date('Y'); // Récupérer l'année actuelle$date = new \DateTime();$date->setDate($year, 12, 31); // Définir la date au 31 décembre de l'année actuelle$joker->setDateEnd($date);$joker->setNumberJoker(4);$manager->persist($joker);$information = new AdditionalCompanyInformation();$information->setUser($user);$information->setTva($customerData['numTVA']);$country = '';switch ($customerData['pays']) {case 'BE':$country = 'Belgique';break;case 'FR':$country = 'France';break;case 'LU':$country = 'Luxembourg';break;}$information->setCompanyCountry($country);$information->setMercatorBE($customerData['mercatorBE']);$information->setMercatorLU($customerData['mercatorLU']);$information->setCompanyName($customerData['nomSociete']);$information->setIdClientMercator($customerData['id']);$information->setCompanyAddress($customerData['adresse']);$information->setTownAddressCompany($customerData['ville']);$information->setCompanyPostal($customerData['codePostal']);$information->setCustomerCategoryMercator($customerData['categorie']);$information->setCompanyTypePro('Magasin Bio');$address = new DeliveryAddress();$address->setUser($user);$address->setCompanyName($customerData['nomSociete']);$address->setName("");$address->setAddress($customerData['adresse']);$address->setTown($customerData['ville']);$address->setPostal($customerData['codePostal']);$address->setFirstName("");$address->setCountry('France');$manager->persist($address);$manager->flush();$manager->persist($information);$manager->flush();} else {$information = $manager->getRepository(AdditionalCompanyInformation::class)->findOneBy(array('user' => $checkCustomer));if ($information != null) {$information->setTva($customerData['numTVA']);$country = '';switch ($customerData['pays']) {case 'BE':$country = 'Belgique';break;case 'FR':$country = 'France';break;case 'LU':$country = 'Luxembourg';break;}$information->setCompanyCountry($country);$information->setMercatorBE($customerData['mercatorBE']);$information->setMercatorLU($customerData['mercatorLU']);$information->setCompanyName($customerData['nomSociete']);$information->setIdClientMercator($customerData['id']);$information->setCompanyAddress($customerData['adresse']);$information->setTownAddressCompany($customerData['ville']);$information->setCompanyPostal($customerData['codePostal']);$information->setCustomerCategoryMercator($customerData['categorie']);$information->setCompanyTypePro('Magasin Bio');$checkDelivery = $manager->getRepository(DeliveryAddress::class)->findOneBy(array('user' => $checkCustomer, 'companyName' => $customerData['nomSociete']));if (!$checkDelivery) {$address = new DeliveryAddress();$address->setUser($checkCustomer);$address->setName("");$address->setFirstName("");$address->setCompanyName($customerData['nomSociete']);$address->setAddress($customerData['adresse']);$address->setTown($customerData['ville']);$address->setPostal($customerData['codePostal']);$address->setCountry($country);$manager->persist($address);$manager->flush();} else {$address = $checkDelivery;$address->setName("");$address->setFirstName("");$address->setAddress($customerData['adresse']);$address->setCompanyName($customerData['nomSociete']);$address->setTown($customerData['ville']);$address->setPostal($customerData['codePostal']);$address->setCountry($country);}$manager->flush();}}}$this->addFlash('success', "La création/mise à jour des clients de la catégorie $cat est un succès!");return $this->redirectToRoute('accueil');}}