list referral for an accompanying period

This commit is contained in:
2021-10-20 13:10:28 +02:00
parent 94c91d5825
commit c8762d2bc2
9 changed files with 161 additions and 24 deletions

View File

@@ -3,12 +3,18 @@
namespace Chill\PersonBundle\Controller;
use Chill\MainBundle\CRUD\Controller\ApiController;
use Chill\MainBundle\Serializer\Model\Collection;
use Chill\PersonBundle\AccompanyingPeriod\Suggestion\ReferralAvailableInterface;
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Chill\PersonBundle\Privacy\AccompanyingPeriodPrivacyEvent;
use Chill\PersonBundle\Entity\Person;
@@ -28,19 +34,23 @@ class AccompanyingCourseApiController extends ApiController
private Registry $registry;
private ReferralAvailableInterface $referralAvailable;
public function __construct(
EventDispatcherInterface $eventDispatcher,
ValidatorInterface $validator,
Registry $registry
Registry $registry,
ReferralAvailableInterface $referralAvailable
) {
$this->eventDispatcher = $eventDispatcher;
$this->validator = $validator;
$this->registry = $registry;
$this->referralAvailable = $referralAvailable;
}
public function confirmApi($id, Request $request, $_format): Response
{
/** @var AccompanyingPeriod $accompanyingPeriod */
/** @var AccompanyingPeriod $accompanyingPeriod */
$accompanyingPeriod = $this->getEntity('participation', $id, $request);
$this->checkACL('confirm', $request, $_format, $accompanyingPeriod);
@@ -58,10 +68,10 @@ $workflow = $this->registry->get($accompanyingPeriod);
'groups' => [ 'read' ]
]);
}
public function participationApi($id, Request $request, $_format)
{
/** @var AccompanyingPeriod $accompanyingPeriod */
/** @var AccompanyingPeriod $accompanyingPeriod */
$accompanyingPeriod = $this->getEntity('participation', $id, $request);
$person = $this->getSerializer()
->deserialize($request->getContent(), Person::class, $_format, []);
@@ -152,7 +162,7 @@ $workflow = $this->registry->get($accompanyingPeriod);
->deserialize($request->getContent(), $class, $_format, []);
} catch (RuntimeException $e) {
$exceptions[] = $e;
}
}
}
if ($requestor === null) {
throw new BadRequestException('Could not find any person or requestor', 0, $exceptions[0]);
@@ -187,4 +197,24 @@ $workflow = $this->registry->get($accompanyingPeriod);
return null;
}
/**
* @Route("/api/1.0/person/accompanying-course/{id}/referral-availables.{_format}",
* requirements={ "_format"="json"},
* name="chill_api_person_accompanying_period_referral_available")
* @param AccompanyingPeriod $period
* @return JsonResponse
*/
public function userReferral(AccompanyingPeriod $period, string $_format = 'json'): JsonResponse
{
$this->denyAccessUnlessGranted(AccompanyingPeriodVoter::EDIT, $period);
$total = $this->referralAvailable->countReferralAvailable($period);
$paginator = $this->getPaginatorFactory()->create($total);
$users = $this->referralAvailable->findReferralAvailable($period, $paginator->getItemsPerPage(),
$paginator->getCurrentPageFirstItemNumber());
return $this->json(new Collection($users, $paginator), Response::HTTP_OK,
[], [ AbstractNormalizer::GROUPS => [ 'read' ]]);
}
}