src/Controller/Institution/ProductController.php line 149

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Institution;
  3. use App\Controller\BaseController;
  4. use App\Entity\Addressing\Country;
  5. use App\Entity\Addressing\County;
  6. use App\Entity\Institution\Product;
  7. use App\Entity\Institution\ProductType;
  8. use App\Manager\BitbagStatic\BlockManager;
  9. use App\Manager\Cart\CartManager;
  10. use App\Manager\Institution\InstitutionManager;
  11. use App\Manager\Partner\PartnerManager;
  12. use App\Service\Institution\ArrApiService;
  13. use App\Service\Institution\OrderProductService;
  14. use App\Service\StaticPagesBitbagService;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. class ProductController extends BaseController
  19. {
  20.     public function indexAction(Request $request): Response
  21.     {
  22.         $request->getSession()->remove('iframeSourceLink');
  23.         $slug $request->get('slug');
  24.         /** @var Product $product */
  25.         $product $this->getEntityManager()->getRepository(Product::class)->findBySlug($slug);
  26.         $country $this->getEntityManager()->getRepository(Country::class)->find(Country::RO_COUNTRY_ID);
  27.         $counties $this->getEntityManager()->getRepository(County::class)->findAllByCountryForSelect($country);
  28.         $productAsArray $product->toArray();
  29.         $productAsArray['hasLegalPerson'] = $product->getProductType()->getInstitution()->isLegalPerson();
  30.         $productAsArray['hasPhysicalPerson'] = $product->getProductType()->getInstitution()->isPhysicalPerson();
  31.         $productAsArray['physicalIBANs'] = $product->getProductType()->getPhysicalIBANs();
  32.         $productAsArray['legalIBANs'] = $product->getProductType()->getLegalIBANs();
  33.         $productAsArray['isArr'] = $product->getProductType()->getCode() == ProductType::ARR_CODE;
  34.         $productAsArray['category'] = $product->getProductType()->getCategory();
  35.         $selectedCountyCode $request->get('county')
  36.             ? explode('-'$request->get('county'))[1] : null;
  37.         if (strlen($selectedCountyCode) <= 2) {
  38.             foreach ($counties as $county) {
  39.                 if (strtoupper($county['value']) == strtoupper($selectedCountyCode)) {
  40.                     $productAsArray['selectedCounty'] = strtoupper($county['value']);
  41.                 }
  42.             }
  43.         }
  44.         if ($request->get('city')) {
  45.             $parts explode('-'$request->get('city'));
  46.             $cityId $parts[sizeof($parts) - 1];
  47.             if ($cityId) {
  48.                 $productAsArray['selectedCity'] = (int)$cityId;
  49.             }
  50.         }
  51.         if ($publicToken $request->get('partnerPublicToken')) {
  52.             $partnerService $this->getContainer()->get('app.service.partner.partner');
  53.             $partnerService->verifyToken($requestPartnerManager::CAN_ISSUE_FINES_INDEX);
  54.             $partner $partnerService->retrievePartner($publicToken);
  55.             if ($product->getProductType()->getCategory() === ProductType::CATEGORY_FINE) {
  56.                 $routeName 'app_shop_fines_iframe';
  57.             } else {
  58.                 $routeName 'app_shop_tariffs_iframe';
  59.             }
  60.             $request->getSession()->set('iframeSourceLink',
  61.                 $this->generateUrl($routeName, ['partnerPublicToken' => $partner->getPublicToken()])
  62.             );
  63.             CartManager::removeAllProductsFromCartBySession($request->getSession());
  64.         }
  65.         return $this->render('@templates/Institution/product.html.twig', [
  66.             'publicToken' => $publicToken,
  67.             'product' => $productAsArray,
  68.             'accordionBlocksFaq' => StaticPagesBitbagService::getAllFilteredBlocksAsArray($this->getEntityManager(),
  69.                 $product->getProductType()->getCategory() == ProductType::CATEGORY_FINE ?
  70.                     BlockManager::BLOCK_ACCORDION_TEXT_FINES_CODE_PATTERN :
  71.                     BlockManager::BLOCK_ACCORDION_TEXT_TARIFFS_CODE_PATTERN),
  72.             'keywordsForSeo' => StaticPagesBitbagService::getFirstFilteredBlocks($this->getEntityManager(),
  73.                 $product->getProductType()->getCategory() == ProductType::CATEGORY_FINE ?
  74.                     BlockManager::BLOCK_SEO_META_FINES_KEYWORD_CODE_PATTERN :
  75.                     BlockManager::BLOCK_SEO_META_TARIFFS_KEYWORD_CODE_PATTERN),
  76.             'descriptionForSeo' => StaticPagesBitbagService::getFirstFilteredBlocks($this->getEntityManager(),
  77.                 $product->getProductType()->getCategory() == ProductType::CATEGORY_FINE ?
  78.                     BlockManager::BLOCK_SEO_META_FINES_DESCRIPTION_CODE_PATTERN :
  79.                     BlockManager::BLOCK_SEO_META_TARIFFS_DESCRIPTION_CODE_PATTERN),
  80.             'counties' => $counties
  81.         ]);
  82.     }
  83.     public function tariffsVerifyCnpCode(Request $request): Response
  84.     {
  85.         $arrService = new ArrApiService($this->getDoctrine()->getManager());
  86.         $product $this->getEntityManager()->getRepository(Product::class)
  87.             ->findBySlug($request->get('slug'));
  88.         $data $arrService->getAll($product$request->get('customerCNP'));
  89.         if (empty($data)) {
  90.             return new JsonResponse(['result' => false'message' => 'CNP invalid''errorCode' => 'no_data_for_cnp']);
  91.         }
  92.         return new JsonResponse(['result' => true'message' => 'CNP valid''data' => $data]);
  93.     }
  94.     public function retrieveProductsByCountyAndCityAction(Request $request): Response
  95.     {
  96.         if (!($countyCode $request->get('county'))) {
  97.             return new JsonResponse();
  98.         }
  99.         $cityId $request->get('city') ? (int)$request->get('city') : null;
  100.         $countyText $request->get('countyText') ? trim($request->get('countyText')) : null;
  101.         $cityText $request->get('cityText') ? trim($request->get('cityText')) : null;
  102.         $router $this->getContainer()->get('router');
  103.         $type $request->get('type');
  104.         $publicToken $request->getSession()->get(PartnerManager::SESSION_PARTNER_PUBLIC_TOKEN_NAME);
  105.         $products InstitutionManager::getProductsByLocation(
  106.             $this->getEntityManager(), $router$type$countyCode$countyText$cityId$cityText$publicToken
  107.         );
  108.         return $this->json($products);
  109.     }
  110.     public function submitData(): Response
  111.     {
  112.         /** @var OrderProductService $orderProductService */
  113.         $orderProductService $this->getContainer()->get('app.service.institution.order_product');
  114.         $response $orderProductService->storeNewProductInCart(
  115.             $this->getEntityManager(),
  116.             $this->getContainer()->getParameter('kernel.project_dir')
  117.         );
  118.         return new JsonResponse($response);
  119.     }
  120.     public function removeFromCart(): Response
  121.     {
  122.         /** @var OrderProductService $orderProductService */
  123.         $orderProductService $this->getContainer()->get('app.service.institution.order_product');
  124.         $result $orderProductService->removeFromCartSession();
  125.         return new JsonResponse(['result' => $result]);
  126.     }
  127.     public function fines(Request $request): Response
  128.     {
  129.         return $this->renderList($request, ['title' => 'Plata Amenzi''category' => 'fines''type' => 'fine']);
  130.     }
  131.     public function tariffs(Request $request): Response
  132.     {
  133.         return $this->renderList($request, ['title' => 'Plata Tarife''category' => 'tariffs''type' => 'tariff']);
  134.     }
  135.     private function renderList(Request $request, array $params): Response
  136.     {
  137.         $params $this->addProductToParams($request$params);
  138.         return $this->render('@templates/Front/Institution/list.html.twig'$params);
  139.     }
  140.     public function finesIframe(Request $request): Response
  141.     {
  142.         $partnerService $this->getContainer()->get('app.service.partner.partner');
  143.         $partnerService->verifyToken($requestPartnerManager::CAN_ISSUE_FINES_INDEX);
  144.         $partner $partnerService->retrievePartner($request->get('partnerPublicToken'));
  145.         $request->getSession()->set('iframeSourceLink'$this->generateUrl('app_shop_fines_iframe', [
  146.             'partnerPublicToken' => $partner->getPublicToken()
  147.         ]));
  148.         return $this->renderIframe($request, [
  149.             'title' => 'Plata Amenzi',
  150.             'category' => 'fines',
  151.             'type' => 'fine',
  152.             'publicToken' => $partner->getPublicToken(),
  153.         ]);
  154.     }
  155.     public function tariffsIframe(Request $request): Response
  156.     {
  157.         $partnerService $this->getContainer()->get('app.service.partner.partner');
  158.         $partnerService->verifyToken($requestPartnerManager::CAN_ISSUE_FINES_INDEX);
  159.         $partner $partnerService->retrievePartner($request->get('partnerPublicToken'));
  160.         $request->getSession()->set('iframeSourceLink'$this->generateUrl('app_shop_tariffs_iframe', [
  161.             'partnerPublicToken' => $partner->getPublicToken()
  162.         ]));
  163.         return $this->renderIframe($request, [
  164.             'title' => 'Plata Tarife',
  165.             'category' => 'tariffs',
  166.             'type' => 'tariff',
  167.             'publicToken' => $partner->getPublicToken(),
  168.         ]);
  169.     }
  170.     private function renderIframe(Request $request, array $params): Response
  171.     {
  172.         PartnerManager::checkQRCodeFlow($request);
  173.         $params $this->addProductToParams($request$params);
  174.         return $this->render('@templates/Front/Institution/iframe.html.twig'$params);
  175.     }
  176.     private function addProductToParams(Request $request, array $params): array
  177.     {
  178.         $country $this->getEntityManager()->getRepository(Country::class)->find(Country::RO_COUNTRY_ID);
  179.         $params['counties'] = $this->getEntityManager()->getRepository(County::class)->findAllByCountryForSelect($country);
  180.         if (!($productSlug $request->get('slug'))) {
  181.             $params['product'] = null;
  182.         } else {
  183.             /** @var Product $product */
  184.             $product $this->getEntityManager()->getRepository(Product::class)->findBySlug($productSlug);
  185.             $params['product'] = $product->toArray();
  186.             $params['product']['hasLegalPerson'] = $product->getProductType()->getInstitution()->isLegalPerson();
  187.             $params['product']['hasPhysicalPerson'] = $product->getProductType()->getInstitution()->isPhysicalPerson();
  188.             $params['product']['physicalIBANs'] = $product->getProductType()->getPhysicalIBANs();
  189.             $params['product']['legalIBANs'] = $product->getProductType()->getLegalIBANs();
  190.             $params['product']['isArr'] = $product->getProductType()->getCode() == ProductType::ARR_CODE;
  191.             $params['product']['category'] = $product->getProductType()->getCategory();
  192.         }
  193.         return $params;
  194.     }
  195. }