src/V4/Action/Quote/GetRelatedTasksByQuoteAction.php line 16

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\V4\Action\Quote;
  4. use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
  5. use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
  6. use App\Service\ApiWebServiceFilterBuilder\PaginationFilterBuilder;
  7. use App\V4\Model\Task\Task;
  8. use App\V4\Voters\TaskVoter;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. class GetRelatedTasksByQuoteAction extends AbstractController
  13. {
  14.     /**
  15.      * @var CollectionDataProviderInterface
  16.      */
  17.     private $collectionDataProvider;
  18.     /**
  19.      * @param CollectionDataProviderInterface $collectionDataProvider
  20.      */
  21.     public function __construct(
  22.         CollectionDataProviderInterface $collectionDataProvider
  23.     ) {
  24.         $this->collectionDataProvider $collectionDataProvider;
  25.     }
  26.     /**
  27.      * @param Request $request
  28.      *
  29.      * @return JsonResponse|iterable
  30.      *
  31.      * @throws ResourceClassNotSupportedException
  32.      */
  33.     public function __invoke(Request $request)
  34.     {
  35.         $this->denyAccessUnlessGranted(TaskVoter::TASK_SHOW_LIST);
  36.         $filters = [
  37.             'quotes.externalValue' => $request->get('id'),
  38.             PaginationFilterBuilder::FILTER_ITEM_PER_PAGE => $request->get(PaginationFilterBuilder::FILTER_ITEM_PER_PAGE) ?? null,
  39.             PaginationFilterBuilder::FILTER_PAGE => $request->get(PaginationFilterBuilder::FILTER_PAGE) ?? null,
  40.         ];
  41.         $response $this
  42.             ->collectionDataProvider
  43.             ->getCollection(Task::class, null, [
  44.                 'filters' => $filters,
  45.                 'transformResponse' => false,
  46.             ])
  47.         ;
  48.         $relatedTasks = [];
  49.         /** @var Task $task */
  50.         foreach ($response as $task) {
  51.             $relatedTasks[] = [
  52.                 'id' => $task->getId(),
  53.                 'name' => $task->getName(),
  54.                 'beginAt' => $task->getBeginAtWithFormat('d/m/Y H:i'),
  55.                 'prospectId' => $task->getProspectId(),
  56.                 'isClosed' => $task->getIsClosed(),
  57.                 'isReminder' => $task->isReminder(),
  58.                 'isMailing' => $task->isMailing(),
  59.                 'isSynchroOutlook' => $task->isSynchroOutlook(),
  60.             ];
  61.         }
  62.         return new JsonResponse(['data' => $relatedTasks]);
  63.     }
  64. }