Untitled

 avatar
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