src/Controller/Institution/ProductController.php line 126

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