<?php
declare(strict_types=1);
namespace App\V4\Action\Quote;
use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface;
use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
use App\Service\ApiWebServiceFilterBuilder\PaginationFilterBuilder;
use App\V4\Model\Task\Task;
use App\V4\Voters\TaskVoter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
class GetRelatedTasksByQuoteAction extends AbstractController
{
/**
* @var CollectionDataProviderInterface
*/
private $collectionDataProvider;
/**
* @param CollectionDataProviderInterface $collectionDataProvider
*/
public function __construct(
CollectionDataProviderInterface $collectionDataProvider
) {
$this->collectionDataProvider = $collectionDataProvider;
}
/**
* @param Request $request
*
* @return JsonResponse|iterable
*
* @throws ResourceClassNotSupportedException
*/
public function __invoke(Request $request)
{
$this->denyAccessUnlessGranted(TaskVoter::TASK_SHOW_LIST);
$filters = [
'quotes.externalValue' => $request->get('id'),
PaginationFilterBuilder::FILTER_ITEM_PER_PAGE => $request->get(PaginationFilterBuilder::FILTER_ITEM_PER_PAGE) ?? null,
PaginationFilterBuilder::FILTER_PAGE => $request->get(PaginationFilterBuilder::FILTER_PAGE) ?? null,
];
$response = $this
->collectionDataProvider
->getCollection(Task::class, null, [
'filters' => $filters,
'transformResponse' => false,
])
;
$relatedTasks = [];
/** @var Task $task */
foreach ($response as $task) {
$relatedTasks[] = [
'id' => $task->getId(),
'name' => $task->getName(),
'beginAt' => $task->getBeginAtWithFormat('d/m/Y H:i'),
'prospectId' => $task->getProspectId(),
'isClosed' => $task->getIsClosed(),
'isReminder' => $task->isReminder(),
'isMailing' => $task->isMailing(),
'isSynchroOutlook' => $task->isSynchroOutlook(),
];
}
return new JsonResponse(['data' => $relatedTasks]);
}
}