src/DcSiteBundle/Controller/CallbackController.php line 33

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Entity\Dealer;
  6. use CoreBundle\Entity\ViDiDepartment;
  7. use CoreBundle\Entity\ViDiWorker;
  8. use CoreBundle\Factory\Vehicle as VehicleFactory;
  9. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  10. use CoreBundle\Model\Callback\CallbackRequest;
  11. use CoreBundle\Model\Vehicles\Repository;
  12. use CoreBundle\Services\MediaExtensionVidi;
  13. use DateTime;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use PortalBundle\Model\SeoMetaTag;
  16. use Symfony\Component\Filesystem\Filesystem;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\RequestStack;
  20. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  21. use Symfony\Component\Routing\RouterInterface;
  22. use Twig\Environment;
  23. class CallbackController extends BaseDcController
  24. {
  25.     public function __construct(CoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  26.     {
  27.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  28.     }
  29.     public function init(Request $request): JsonResponse
  30.     {
  31.         $workersRepo $this->em->getRepository(ViDiWorker::class)->findBy(['dealer' => $this->getDealer(), 'callback_available' => 1]);
  32.         $departments = [];
  33.         $inArray = [];
  34.         foreach ($workersRepo as $worker) {
  35.             $departmentId $worker->getDepartment()->getId();
  36.             if (in_array($departmentId$inArray)) {
  37.                 continue;
  38.             }
  39.             array_push($inArray$departmentId);
  40.             $departments[] = [
  41.                 'id' => $departmentId,
  42.                 'name' => $worker->getDepartment()->getTitle($request->getLocale()),
  43.                 'position' => $worker->getDepartment()->getPriority(),
  44.             ];
  45.         }
  46.         usort($departments, fn($a$b) => $a['position'] <=> $b['position']);
  47.         /* Проверка на робочие часы салона */
  48.         $isWorkingTime true;
  49.         $startWorkingTime = (new DateTime('today'))->modify('+ 8 hours');
  50.         $endWorkingTime = (new DateTime('today'))->modify('+ 20 hours');
  51.         if ($startWorkingTime->diff(new DateTime('now'))->invert === || $endWorkingTime->diff(new DateTime('now'))->invert === 0) {
  52.             $isWorkingTime false;
  53.         }
  54.         $user null;
  55.         if ($this->getUser()) {
  56.             $user = [
  57.                 'name' => $this->getUser()->getName(),
  58.                 'surname' => $this->getUser()->getLastName(),
  59.                 'email' => $this->getUser()->getEmail(),
  60.                 'phone' => $this->getUser()->getPhone(),
  61.             ];
  62.         }
  63.         return $this->json(['departments' => $departments'isWorkingTime' => $isWorkingTime'user' => $user]);
  64.     }
  65.     public function createRequest(Request $requestCallbackRequest $callbackRequest): JsonResponse
  66.     {
  67.         $utm $request->get('utm') ?? $request->cookies->get('ViDiTrackUTM');
  68.         $phone preg_replace('/\D/'''$request->request->get('userPhone'));
  69.         $departmentId $request->request->get('departmentId');
  70.         $dealerDomain $request->request->get('dealerDomain');
  71.         $Dealer $this->em->getRepository(Dealer::class)->findOneBy(['domain' => $dealerDomain]);
  72.         if ($dealerDomain == '') {
  73.             $Dealer $this->getDealer();
  74.         }
  75.         $request $callbackRequest->createRequest($Dealer$phone$departmentId$utm);
  76.         if ($request) {
  77.             return $this->json(['success' => true'requestId' => $request->getId()]);
  78.         }
  79.         return $this->json(['success' => false]);
  80.     }
  81.     public function getState(Request $requestCallbackRequest $callbackRequest): JsonResponse
  82.     {
  83.         $requestId $request->request->get('request');
  84.         return $this->json(['state' => $callbackRequest->checkState($requestId), 'requestId' => $requestId]);
  85.     }
  86.     public function getDealerI()
  87.     {
  88.         $Dealer $this->em->getRepository(Dealer::class)->findAll();
  89.     }
  90.     public function getDepartmentVIDI(Request $request): JsonResponse
  91.     {
  92.         $locale $request->getLocale();
  93.         $departments $this->em->getRepository(ViDiDepartment::class)->findAll();
  94.         $dealerDepartment = [];
  95.         /** @var ViDiDepartment $department */
  96.         foreach ($departments as $department) {
  97.             $dealerId $department->getDealer()->getId();
  98.             if (!isset($dealerDepartment[$dealerId])) {
  99.                 $dealerDepartment[$dealerId] = [
  100.                     'dealer' => [
  101.                         'dealerId' => $dealerId,
  102.                         'domain' => $department->getDealer()->getDomain(),
  103.                         'title' => $department->getDealer()->getName(),
  104.                     ],
  105.                     'departmnet' => [],
  106.                 ];
  107.             }
  108.             $dealerDepartment[$dealerId]['departmnet'][] = [
  109.                 'departmentId' => $department->getId(),
  110.                 'title' => $department->getTitle($locale),
  111.             ];
  112.         }
  113.         return $this->json(['result' => $dealerDepartment]);
  114.     }
  115. }