Untitled
unknown
plain_text
a year ago
7.8 kB
15
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