src/V4/Controller/Quote/PostQuoteSearchFormAction.php line 23

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\V4\Controller\Quote;
  4. use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
  5. use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
  6. use App\DataProvider\AbstractCollectionDataProvider;
  7. use App\DataProvider\RequestDataProviderTrait;
  8. use App\Service\Form\FormUtils;
  9. use App\V4\Model\ChildrenAwareInterface;
  10. use App\V4\Model\Quote\Quote;
  11. use App\V4\Service\Quote\QuoteFormHandler;
  12. use App\V4\Voters\QuoteVoter;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Serializer\Serializer;
  18. use Symfony\Component\Serializer\SerializerInterface;
  19. class PostQuoteSearchFormAction extends AbstractController
  20. {
  21.     use FormUtils;
  22.     use RequestDataProviderTrait;
  23.     /**
  24.      * @var QuoteFormHandler
  25.      */
  26.     private $quoteFormHandler;
  27.     /**
  28.      * @var CollectionDataProviderInterface
  29.      */
  30.     private $collectionDataProvider;
  31.     /**
  32.      * @var Serializer
  33.      */
  34.     private $serializer;
  35.     /**
  36.      * @param QuoteFormHandler                $quoteFormHandler
  37.      * @param CollectionDataProviderInterface $collectionDataProvider
  38.      * @param Serializer                      $serializer
  39.      */
  40.     public function __construct(
  41.         QuoteFormHandler $quoteFormHandler,
  42.         CollectionDataProviderInterface $collectionDataProvider,
  43.         SerializerInterface $serializer
  44.     ) {
  45.         $this->quoteFormHandler $quoteFormHandler;
  46.         $this->collectionDataProvider $collectionDataProvider;
  47.         $this->serializer $serializer;
  48.     }
  49.     /**
  50.      * @param Request $request
  51.      *
  52.      * @return JsonResponse|iterable
  53.      *
  54.      * @throws ResourceClassNotSupportedException
  55.      */
  56.     public function __invoke(Request $request)
  57.     {
  58.         $this->denyAccessUnlessGranted(QuoteVoter::QUOTE_SHOW_LIST);
  59.         $search json_decode($request->getContent(), true) ?? [];
  60.         if (null !== $request->get('prospectId')) {
  61.             $search['prospectIds'] = [$request->get('prospectId')];
  62.         }
  63.         $quoteSearchForm $this->quoteFormHandler->handleQuoteSearchForm($request->query->get('tab'), $search);
  64.         if (!$quoteSearchForm->isSubmitted() || !$quoteSearchForm->isValid()) {
  65.             return new JsonResponse([
  66.                 'code' => Response::HTTP_BAD_REQUEST,
  67.                 'data' => $this->convertFormErrorsToArray($quoteSearchForm),
  68.                 'errorMessage' => 'quote_form_search',
  69.             ], Response::HTTP_BAD_REQUEST);
  70.         }
  71.         $searchBody $this->completeSearchBodyFromRequest(
  72.             $request,
  73.             array_merge(
  74.                 json_decode($this->serializer->serialize($quoteSearchForm->getData(), 'json'), true),
  75.                 $request->query->has('status_isWon') ? ['status_isWon' => $request->query->get('status_isWon')] : [],
  76.                 $request->query->has('status_inProgress') ? ['status_inProgress' => $request->query->get('status_inProgress')] : [],
  77.                 [ChildrenAwareInterface::FILTER_EXCLUDE_PARENT_ENTITIES => 'true']
  78.             )
  79.         );
  80.         $searchBody $this->replaceFormKeyToSearchKey($quoteSearchForm$searchBody);
  81.         $transformResponse = !$request->query->get('disableTransformation'false);
  82.         $response $this
  83.             ->collectionDataProvider
  84.             ->getCollection(Quote::class, null, [
  85.                 'filters' => $searchBody,
  86.                 AbstractCollectionDataProvider::CONTEXT_TAB => $request->query->get('tab'),
  87.                 'transformResponse' => $transformResponse,
  88.             ])
  89.         ;
  90.         if ($transformResponse) {
  91.             return new JsonResponse($response);
  92.         }
  93.         return $response;
  94.     }
  95. }