mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
110 lines
3.7 KiB
PHP
110 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace Chill\PersonBundle\Controller;
|
|
|
|
use Chill\MainBundle\Pagination\PaginatorFactory;
|
|
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
use Symfony\Component\Serializer\SerializerInterface;
|
|
use Symfony\Component\Translation\TranslatorInterface;
|
|
use Chill\PersonBundle\Repository\AccompanyingPeriod\AccompanyingPeriodWorkRepository;
|
|
|
|
class AccompanyingCourseWorkController extends AbstractController
|
|
{
|
|
private TranslatorInterface $trans;
|
|
private SerializerInterface $serializer;
|
|
private AccompanyingPeriodWorkRepository $workRepository;
|
|
private PaginatorFactory $paginator;
|
|
|
|
public function __construct(
|
|
TranslatorInterface $trans,
|
|
SerializerInterface $serializer,
|
|
AccompanyingPeriodWorkRepository $workRepository,
|
|
PaginatorFactory $paginator
|
|
) {
|
|
$this->trans = $trans;
|
|
$this->serializer = $serializer;
|
|
$this->workRepository = $workRepository;
|
|
$this->paginator = $paginator;
|
|
}
|
|
|
|
/**
|
|
* @Route(
|
|
* "{_locale}/person/accompanying-period/{id}/work/new",
|
|
* name="chill_person_accompanying_period_work_new",
|
|
* methods={"GET"}
|
|
* )
|
|
*/
|
|
public function createWork(AccompanyingPeriod $period): Response
|
|
{
|
|
// TODO ACL
|
|
|
|
if ($period->getSocialIssues()->count() === 0) {
|
|
$this->addFlash('error', $this->trans->trans(
|
|
"accompanying_work.You must add at least ".
|
|
"one social issue on accompanying period")
|
|
);
|
|
|
|
return $this->redirectToRoute('chill_person_accompanying_course_index', [
|
|
'accompanying_period_id' => $period->getId()
|
|
]);
|
|
}
|
|
|
|
$json = $this->serializer->normalize($period, 'json', [ "groups" => [ "read" ]]);
|
|
|
|
return $this->render('@ChillPerson/AccompanyingCourseWork/create.html.twig', [
|
|
'accompanyingCourse' => $period,
|
|
'json' => $json
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @Route(
|
|
* "{_locale}/person/accompanying-period/work/{id}/edit",
|
|
* name="chill_person_accompanying_period_work_edit",
|
|
* methods={"GET"}
|
|
* )
|
|
*/
|
|
public function editWork(AccompanyingPeriodWork $work): Response
|
|
{
|
|
// TODO ACL
|
|
$json = $this->serializer->normalize($work, 'json', [ "groups" => [ "read" ] ]);
|
|
return $this->render('@ChillPerson/AccompanyingCourseWork/edit.html.twig', [
|
|
'accompanyingCourse' => $work->getAccompanyingPeriod(),
|
|
'work' => $work,
|
|
'json' => $json
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @Route(
|
|
* "{_locale}/person/accompanying-period/{id}/work",
|
|
* name="chill_person_accompanying_period_work_list",
|
|
* methods={"GET"}
|
|
* )
|
|
*/
|
|
public function listWorkByAccompanyingPeriod(AccompanyingPeriod $period): Response
|
|
{
|
|
// TODO ACL
|
|
$totalItems = $this->workRepository->countByAccompanyingPeriod($period);
|
|
$paginator = $this->paginator->create($totalItems);
|
|
|
|
$works = $this->workRepository->findByAccompanyingPeriod(
|
|
$period,
|
|
['startDate' => 'DESC', 'endDate' => 'DESC'],
|
|
$paginator->getItemsPerPage(),
|
|
$paginator->getCurrentPageFirstItemNumber()
|
|
);
|
|
|
|
return $this->render('@ChillPerson/AccompanyingCourseWork/index.html.twig', [
|
|
'accompanyingCourse' => $period,
|
|
'works' => $works,
|
|
'paginator' => $paginator
|
|
]);
|
|
}
|
|
}
|