<?php
namespace App\Controller\Administration;
use App\Entity\User;
use App\Entity\Establishment;
use App\Repository\EstablishmentRepository;
use Symfony\Component\HttpFoundation\Request;
use App\Form\Administration\EstablishmentType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/**
* @Route("/establishment")
*/
class EstablishmentController extends AbstractController
{
/**
* @Route("/index", name="establishment_index", methods={"GET"})
*/
public function index(EstablishmentRepository $establishmentRepository): Response
{
return $this->render('administration/establishment/index.html.twig', [
'establishments' => $establishmentRepository->findBy([],['id' => 'DESC']),
]);
}
/**
* @Route("/ongoing/{id}", name="establishment_ongoing", methods={"GET"})
*/
public function ongoing(Establishment $establishment): Response
{
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
$user->setEstablishment($establishment);
try {
$entityManager->flush();
$this->addFlash('success', "Changement effectué :)");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors du changement.");
$this->addFlash('info', $th->getMessage());
return $this->json(['code' => 500, 'message' => "Une erreure est survenue lors du changement."], 200);
}
return $this->json(['code' => 200, 'message' => "Changement effectué :)"], 200);
}
/**
* @Route("/new", name="establishment_new", methods={"GET","POST"})
*/
public function new(Request $request, EstablishmentRepository $establishmentRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$_establishment = $user->getEstablishment();
$establishmentGroup = $_establishment->getEstablishmentGroup();
$establishments = $establishmentRepository->createQueryBuilder('entity')
->andWhere('entity.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishmentGroup)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
$establishment = new Establishment();
$form = $this->createForm(EstablishmentType::class, $establishment)
/* ->add('parent', EntityType::class, [
'class' => Establishment::class,
'choices' => $establishments,
'required' => false
]) */;
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($establishment);
try {
$entityManager->flush();
$this->addFlash('success', "Un établissement à été ajouté.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'ajout de l'établissement.");
$this->addFlash('info', $th->getMessage());
}
return $this->redirectToRoute('establishment_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('administration/establishment/new.html.twig', [
'establishment' => $establishment,
'form' => $form,
]);
}
/**
* @Route("/{id}/show", name="establishment_show", methods={"GET"})
*/
public function show(Establishment $establishment): Response
{
return $this->render('administration/establishment/show.html.twig', [
'establishment' => $establishment,
]);
}
/**
* @Route("/{id}/edit", name="establishment_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Establishment $establishment, EstablishmentRepository $establishmentRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$_establishment = $user->getEstablishment();
$establishmentGroup = $_establishment->getEstablishmentGroup();
$establishments = $establishmentRepository->createQueryBuilder('entity')
->andWhere('entity.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishmentGroup)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
$form = $this->createForm(EstablishmentType::class, $establishment)
/* ->add('parent', EntityType::class, [
'class' => Establishment::class,
'choices' => $establishments,
'required' => false
]) */;
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
try {
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', "l'établissement à été édité.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'édition de l'établissement.");
$this->addFlash('info', $th->getMessage());
}
return $this->redirectToRoute('establishment_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('administration/establishment/edit.html.twig', [
'establishment' => $establishment,
'form' => $form,
]);
}
/**
* @Route("/delete-selection", name="establishments_selected_delete", methods={"GET"})
*/
public function deleteSelected(Request $request, EstablishmentRepository $entityRepository): Response
{
$list = $request->get('entities');
$entityManager = $this->getDoctrine()->getManager();
$errors = 0;
foreach ($list as $key => $id) {
$entity = $entityRepository->findOneBy(['id' => intval($id)], []);
if ($entity != null) {
if (count($entity->getRhSalaries()) <= 0 && count($entity->getUsers()) <= 0) {
$entityManager->remove($entity);
}
}
}
try {
$entityManager->flush();
$this->addFlash('success', "Traitement effectué");
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectué");
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
}