<?php
namespace App\V4\Controller\Prospect;
use App\Model\Form\FormSchema;
use App\V4\Model\Prospect\Prospect;
use App\V4\Service\Prospect\ProspectFormHandler;
use App\V4\Voters\ProspectVoter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Serializer\Exception\ExceptionInterface;
class GetProspectFormAction extends AbstractController
{
/**
* @var ProspectFormHandler
*/
private $prospectFormHandler;
/**
* @param ProspectFormHandler $prospectFormHandler
*/
public function __construct(ProspectFormHandler $prospectFormHandler)
{
$this->prospectFormHandler = $prospectFormHandler;
}
/**
* @param Request $request
* @param Prospect $data
* @param string $id
*
* @return FormSchema|JsonResponse
*
* @throws ExceptionInterface
*/
public function __invoke(Request $request, Prospect $data, string $id)
{
$this->denyAccessUnlessGranted(ProspectVoter::PROSPECT_ADD_EDIT);
switch ($id) {
// We are probably in the case of a new prospect, the "id" will be hardcoded
case Prospect::GROUP_TYPE_BUSINESS:
$prospectType = Prospect::GROUP_TYPE_BUSINESS;
break;
case Prospect::GROUP_TYPE_INDIVIDUAL:
$prospectType = Prospect::GROUP_TYPE_INDIVIDUAL;
break;
// We are probably in the case of an existing prospect, we can rely on the data
default:
$prospectType = $data->getType();
}
return $this->prospectFormHandler->getProspectForm(
$data,
$prospectType,
(bool) $request->query->get('isLegacy', false)
);
}
}