Untitled
unknown
plain_text
a year ago
7.8 kB
7
Indexable
/** * @Route("/account/visibility/page/create", name="visibility_space_page_create") */ public function renderInstallerPageCreationForm( Request $request, RegionHelper $regionHelper, CompanyHelper $companyHelper ): Response { $this->checkUserVisibilityAccess(); try { $proAccount = $this->userHelper->getUserProAccount(); $proContact = $this->userHelper->getUserProContact(); $externalId = $userProContact->externalId ?? $this->ssoUserService->getAccountExternalId($proContact->email); } catch (ClientErrorException|InvalidGrantException|ServerException|Id360Exception $e) { throw $this->createAccessDeniedException("Vous n'avez pas accès au service visibilité."); } if($externalId == null){ throw $this->createAccessDeniedException("Vous n'avez pas accès au service visibilité."); } $companyRepository = $this->storeLocatorEntityManager->getRepository(Company::class); $company = $companyRepository->findOneByAccExternalId($externalId); if ($company instanceof Company) { return $this->redirectToRoute('visibily_space_page')->setPrivate(); } $defaultFormData = [ 'company_name' => $proAccount->companyName, 'address_line' => $proAccount->address['addressLine'], 'zip_code' => $proAccount->address['postalCode'], 'city' => $proAccount->address['city'], 'phone_number' => $this->userHelper->transformPhoneNumber10Digits($proAccount->phoneNumber), 'email' => $proContact->email, 'action_zone_radius' => 30, 'job_name' => $proAccount->businessSectorLabel, ]; foreach (['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] as $day) { $defaultFormData["opening_{$day}_start_am"] = \DateTime::createFromFormat('H:i', '09:00'); $defaultFormData["opening_{$day}_end_pm"] = \DateTime::createFromFormat('H:i', '17:00'); } $form = $this->createForm(VisibilityPageCreationType::class, $defaultFormData); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $formData = $form->getData(); $company = new Company(); $currentDateTime = new \DateTime('now'); $company->setCreated($currentDateTime) ->setUpdated($currentDateTime) ->setStatus(CompanyRepository::STATUS_PENDING_REVIEW) ->setType(CompanyRepository::TYPE_INSTALLER) ->setProAccountId($proAccount->id) ->setProContactId($proContact->id) ->setAccExternalId($proAccount->externalId) ->setCntExternalId($proContact->externalId) ->setCompanyName($proAccount->companyName) ->setCompanyNumber($proAccount->siret) ->setAddressLine($formData['address_line']) ->setZipCode($formData['zip_code']) ->setCity($formData['city']) ->setSlug($companyHelper->generateSlug($company)) ; $company->setJobName($formData['job_name']); $company->setDirectorEmail($formData['email']); $company->setPhoneNumber($formData['phone_number']); if (!empty($formData['website_url'])) { $company->setWebsite($formData['website_url']); } if (!empty($formData['facebook_url'])) { $company->setFacebookUrl($formData['facebook_url']); } if (!empty($formData['linkedin_url'])) { $company->setLinkedinUrl($formData['linkedin_url']); } $company->setActionZoneRadius((int) $formData['action_zone_radius']); $company->setActionZoneCities($formData['action_zone_cities']); if (!empty($formData['certifications'])) { $certifications = $this->storeLocatorEntityManager->getRepository(Certification::class)->findBy(['id' => $formData['certifications']]); $company->setCertifications($certifications); } if (!empty($formData['product_families'])) { $productNatures = $this->storeLocatorEntityManager->getRepository(ProductNature::class)->findBy(['id' => $formData['product_families']]); $company->setProductNatures($productNatures); } try { $deptAndRegion = $regionHelper->getRegionInfoByZipCode($company->getZipCode(), $company->getCity()); $company->setDepartment($deptAndRegion['department']->getCode()); $company->setRegion($deptAndRegion['region']->getCode()); $company->setFullSlug($companyHelper->generateCompanyUrl($company)); } catch (\Exception $e) { $form->addError(new FormError('Impossible de déterminer le département et la région de votre entreprise.')); } try { $address = $proAccount->companyName . ' ' . $proAccount->address['addressLine'] . ' ' . $proAccount->address['postalCode'] . ' ' . $proAccount->address['city']; $coordinates = $companyHelper->getCoordinatesByAddress($address); $company->setLocation(new Point($coordinates['lng'], $coordinates['lat'])); } catch (\Exception $e) { $form->addError(new FormError('Impossible de déterminer les coordonnées géographiques de votre entreprise.')); } $openingTime = []; $days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']; foreach ($days as $day) { $startAM = $formData['opening_' . $day . '_start_am']; $endAM = $formData['opening_' . $day . '_end_am']; $startPM = $formData['opening_' . $day . '_start_pm']; $endPM = $formData['opening_' . $day . '_end_pm']; $startAM = ($startAM instanceof \DateTime) ? $startAM->format('H:i') : null; $endAM = ($endAM instanceof \DateTime) ? $endAM->format('H:i') : null; $startPM = ($startPM instanceof \DateTime) ? $startPM->format('H:i') : null; $endPM = ($endPM instanceof \DateTime) ? $endPM->format('H:i') : null; if ($startAM !== null || $endAM !== null || $startPM !== null || $endPM !== null) { $openingTime[$day] = [ 'am_start_time' => $startAM, 'am_end_time' => $endAM, 'pm_start_time' => $startPM, 'pm_end_time' => $endPM, ]; } } if (!empty($openingTime)) { $company->setOpeningTime(json_encode($openingTime, \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)); } if ($form->getErrors()->count() === 0) { try { $this->storeLocatorEntityManager->persist($company); $this->storeLocatorEntityManager->flush(); $this->sendCreationPageEmailNotifications($company); return $this->redirectToRoute('visibility_space_page_creation_confirmation'); } catch (\Exception $e) { $form->addError(new FormError('Une erreur est survenue lors de la création de votre page.')); } } } return $this->render('@ezdesign/my_account/visibility_space/creation_form.html.twig', [ 'form' => $form->createView(), 'content' => $this->loadVisibilitySpaceConfigurationContent(), ])->setPrivate(); }
Editor is loading...
Leave a Comment