<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\Projets;
use App\Entity\Logements;
use App\Entity\Locataires;
use App\Form\LocatairesType;
use App\Entity\AutresContacts;
use App\Form\AutresContactsType;
use App\Entity\LocataireConjoint;
use App\Form\LocataireConjointType;
use App\Repository\ProjetsRepository;
use App\Repository\LocatairesRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\AutresContactsRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Repository\LocataireConjointRepository;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class ProjetsController extends AbstractController
{
#[Route('/projets', name: 'app_projets')]
public function index(EntityManagerInterface $entityManager, ProjetsRepository $projet): Response
{
// Utilisez l'instance EntityManagerInterface pour interagir avec la base de données
$projet = $entityManager->getRepository(Projets::class)->findAll();
$user = $entityManager->getRepository(User::class)->findAll();
// On retourne un tableau de tous les "noms de projets" dans le template.
return $this->render('projets/projets.html.twig', [
"projets" => $projet,
"user" => $user,
]);
}
// --------------------------------------------------------------------------------------
#[Route('/projets/{id}', name: 'app_projets_detail', methods:['GET','HEAD'])]
public function display_projet($id = null, Request $request, EntityManagerInterface $entityManager, Projets $projet, Logements $logement, Locataires $locataire, AutresContacts $autresContacts, LocataireConjoint $locataireConjoint): Response
{
// Utilisez l'instance EntityManagerInterface pour interagir avec la base de données et des tables ci dessous
$projet = $entityManager->getRepository(Projets::class)->find($id);
$logement = $entityManager->getRepository(Logements::class)->find($id);
$locataire = $entityManager->getRepository(Locataires::class)->find($id);
$locataireConjoint = $entityManager->getRepository(LocataireConjoint::class)->find($id);
$autresContacts = $entityManager->getRepository(AutresContacts::class)->find($id);
// on recupére les logements et les locataires du projet courant
$logement = $projet->getLogements();
// *******************************************************************************************
// ****requetage pour les compteurs *********************************************************
// *******************************************************************************************
// ******** recuperation de tous les compteurs de la Table Locataires ************************
$queryBuilder = $entityManager->createQueryBuilder();
$projet = $entityManager->getRepository(Projets::class)->find($id);
$queryBuilder
->select ('SUM(l.ayantDroit) AS ayantDroit',
'SUM(l.demandeMutation) AS demandeMutation',
'SUM(l.refusTravaux) AS refusTravaux'
)
->from('App\Entity\Locataires', 'l')
->join('l.logements', 'lg')
->where('lg.projets = :projets_id')
->setParameter('projets_id', $projet)
->groupBy('lg.projets');
$resultatsLoc = $queryBuilder->getQuery()->getResult();
// ******** recuperation de tous les compteurs de la Table Logements ************************
$queryBuilder = $entityManager->createQueryBuilder('lg');
$projet = $entityManager->getRepository(Projets::class)->find($id);
$queryBuilder
->select('SUM(lg.logementVide) AS logementVide',
'SUM(lg.logementTempo) AS logementTempo'
)
->from('App\Entity\Logements', 'lg')
->join('lg.projets', 'projets')
->where('projets.id = :projets_id')
->setParameter('projets_id', $projet)
->groupBy('projets.id');
$resultatsLog = $queryBuilder->getQuery()->getResult();
// *****************************************************************************************
// *****************************************************************************************
// *******************************************************************************************
// **** DECLARATION DES VARIABLES DE LA PAGES ***********************************************
// *******************************************************************************************
include __DIR__.'/variablesDur.php';
// *******************************************************************************************
// ****requetage pour bouton SWITCH *********************************************************
// *******************************************************************************************
// $locataire = new Locataires();
// $form = $this ->createForm(LocatairesType::class, $locataire);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// $data = $form->getData();
// // Récupérez votre entité à partir de la base de données
// $entity = $entityManager->getRepository(Locataires::class)->find($id);
// // Mettez à jour la valeur de 'tutelleCuratelle' en fonction de la position du switch
// $entity->setTutelleCuratelle($data['tutelleCuratelle']);
// // Enregistrez les changements dans la base de données
// $entityManager->flush();
// Redirigez l'utilisateur vers une autre page
// return $this->redirectToRoute('projets/projet_detail.html.twig');
// }
// On retourne dans le template.
return $this->render('projets/projet_detail.html.twig', [
// On retourne un tableau de tous les "noms de projets" dans le template.
"projets" => $projet,
"logements" => $logement,
"locataires" => $locataire,
"locataireConjoint" => $locataireConjoint,
"AutresContacts" => $autresContacts,
// déclaratif des variables centralisés sur "VariablesDur.php
"tutelleCuratelle" => $tutelleCuratelle,
"carteInvalidite" => $carteInvalidite,
"ayantDroit" => $ayantDroit,
"demandeMutation" => $demandeMutation,
"refusTravaux" => $refusTravaux,
// ***return resultats pour le requetage des compteurs ***************
"resultatsLoc" => $resultatsLoc,
"resultatsLog" => $resultatsLog,
]);
}
// --------------------------------------------------------------------------------
// CRUD LOCATAIRES ---------------------------------------------------------------
// --------------------------------------------------------------------------------
/* AFFICHER ***************************************************/
#[Route('projets/{id}', name: 'app_locataire_afficher')]
public function showLocataire(Locataires $locataire): Response
{
return $this->render("projets/showlocataire.html.twig",[
"locataire" => $locataire,
]);
}
// AJOUTER UN LOCATAIRE EN BDD *************************************************/
#[Route('projets/{id}', name: 'app_locataire_ajouter')]
public function addLocataire(Request $request,EntityManagerInterface $manager, LocatairesRepository $locatairesRepository): Response
{
$locataire = new Locataires();
$form = $this ->createForm(LocatairesType::class, $locataire);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// $locataire = $form->getData();
$locatairesRepository->save($locataire, true);
// on prepare et on envoye en BDD
$manager->persist($locataire);
$manager->flush();
// message de succés
$this->addFlash('Success', "Votre nouveau locataire " . $locataire->getNom() . " a bien été ajouté");
return $this->redirectToRoute("app_locataire_afficher");
}
return $this->render('projets/showlocataire.html.twig', [
'form' => $form->createView()
]);
}
// --------------------------------------------------------------------------------
/* MODIFIER ***************************************************/
#[Route('projets/{id}', name: 'app_locataire_modifier')]
public function updateLocataire(int $id,Request $request,EntityManagerInterface $manager,Locataires $locataire, LocatairesRepository $locatairesRepository): Response
{
// récupérez l'objet correspondant à son l'ID
$locataire = $manager->getRepository(Locataires::class)->find($id);
if (!$locataire) {
throw $this->createNotFoundException('Le locataire avec l\'ID '.$id.' n\'existe pas.');
}
$form = $this ->createForm(LocataireType::class, $locataire);
// traitez le formulaire soumis
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$locataire = $form->getData();
$locatairesRepository->save($locataire, true);
// on prepare et on envoye en BDD
$this->$manager->persist($locataire);
$this->$manager->flush();
// redirigez l'utilisateur vers une page de confirmation de la modification réussie // message succés !
$this->addFlash('Success', "Votre locataire " . $locataire->getNom() . " " . $locataire->getPrenom() . " a bien été modifié(e)");
return $this->redirectToRoute("app_locataire_afficher");
}
return $this->render('projets/editLocataire.html.twig', [
'formLocataire' => $form->createView(),
'locataire' => $locataire,
]);
}
// --------------------------------------------------------------------------------
// SUPPRIMER UN LOCATAIRE EN BDD ************************************************
#[Route('/{id}', name: 'app_locataire_supprimer')]
public function DeleteLocataire(Request $request,Locataires $locataire, EntityManagerInterface $manager, LocatairesRepository $locatairesRepository): Response
{
// $manager->remove($locataire);
// $manager->flush();
if ($this->isCsrfTokenValid('delete'.$locataire->getId(), $request->request->get('_token'))) {
$locatairesRepository->remove($locataire, true);
}
$nomLocataire = $locataire->getNom();
$prenomLocataire = $locataire->getPrenom();
$this->addFlash('success', "Votre locataire " . $nomLocataire . " " . $prenomLocataire ." a bien été supprimé(e)");
return $this->redirectToRoute("app_locataire_afficher");
}
// *****************************************************************************************************************************************
// --------------------------------------------------------------------------------
// CRUD LOCATAIRES CONJOINT ------------------------------------------------------
// --------------------------------------------------------------------------------
/* AFFICHER ***************************************************/
#[Route('/{id}', name: 'app_locatairesConjoint_afficher')]
public function showLocatairesConjoint(LocataireConjoint $locataireConjoint): Response
{
return $this->render("projets/showlocataireConjoint.html.twig",[
"locataireConjoint" => $locataireConjoint,
]);
}
// AJOUTER UN LOCATAIRE EN BDD *************************************************/
#[Route('projet_detail/{id}', name: 'app_locataireConjoint_ajouter')]
public function addLocataireConjoint(Request $request,EntityManagerInterface $manager, LocataireConjointRepository $locataireConjointRepository): Response
{
$locataireConjoint = new LocataireConjoint();
$form = $this ->createForm(LocataireConjointType::class, $locataireConjoint);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$locataireConjointRepository->save($locataireConjoint, true);
// message de succés
$this->addFlash('Success', "Votre nouveau locataire conjoint " . $locataireConjoint->getNom() . " " . $locataireConjoint->getPrenom() . " a bien été ajouté");
return $this->redirectToRoute("app_locataireConjoint_afficher", [], Response::HTTP_SEE_OTHER);
}
return $this->render('projets/showLocataireConjoint.html.twig', [
'form' => $form->createView()
]);
}
// --------------------------------------------------------------------------------
/* MODIFIER ***************************************************/
#[Route('/{id}', name: 'app_locataireConjoint_modifier')]
public function updateLocataireConjoint(int $id,Request $request,EntityManagerInterface $manager,LocataireConjoint $locataireConjoint, LocataireConjointRepository $locataireConjointRepository): Response
{
// récupérez l'objet correspondant à son l'ID
$locataireConjoint = $this->$manager->getRepository(LocataireConjoint::class)->find($id);
$form = $this ->createForm(LocataireConjointType::class, $locataireConjoint);
// pré-remplissez le formulaire avec les valeurs actuelles du nom et du prénom du locataire
$form->get('nom')->setData($locataireConjoint->getNom());
$form->get('prenom')->setData($locataireConjoint->getPrenom());
$form->get('email')->setData($locataireConjoint->getEmail());
$form->get('numeroMobile')->setData($locataireConjoint->getNumeroFixe());
$form->get('numeroFixe')->setData($locataireConjoint->getNumeroFixe());
$form->get('age')->setData($locataireConjoint->getAge());
$form->get('metier')->setData($locataireConjoint->getMetier());
// traitez le formulaire soumis
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$locataireConjoint = $form->getData();
$locataireConjointRepository->save($locataireConjoint, true);
// on prepare et on envoye en BDD
$manager->persist($locataireConjoint);
$manager->flush();
// redirigez l'utilisateur vers une page de confirmation de la modification réussie // message succés !
$this->addFlash('Success', "Votre locataire " . $locataireConjoint->getNom() . " " . $locataireConjoint->getPrenom() . " a bien été modifié(e)");
return $this->redirectToRoute("app_locataire_afficher", [], Response::HTTP_SEE_OTHER);
}
return $this->render('projets/showlocataire.html.twig', [
'form' => $form->createView(),
'locataireConjoint' => $locataireConjoint,
]);
}
// --------------------------------------------------------------------------------
// SUPPRIMER UN LOCATAIRE EN BDD ************************************************
#[Route('/{id}', name: 'app_locataireConjoint_supprimer')]
public function DeleteLocataireConjoint(Request $request,LocataireConjoint $locataireConjoint, EntityManagerInterface $manager, LocataireConjointRepository $locataireConjointRepository): Response
{
$manager->remove($locataireConjoint);
$manager->flush();
if ($this->isCsrfTokenValid('deleteConjoint'.$locataireConjoint->getId(), $request->request->get('_token'))) {
$locataireConjointRepository->remove($locataireConjoint, true);
}
$nomLocataireConjoint = $locataireConjoint->getNom();
$prenomLocataireConjoint = $locataireConjoint->getPrenom();
$this->addFlash('success', "Votre locataire " . $nomLocataireConjoint . $prenomLocataireConjoint ." a bien été supprimé(e)");
return $this->redirectToRoute("app_locataireConjoint_afficher", [], Response::HTTP_SEE_OTHER);
}
// *****************************************************************************************************************************************
// --------------------------------------------------------------------------------
// CRUD AUTRES CONTACTS ------------------------------------------------------
// --------------------------------------------------------------------------------
/* AFFICHER ***************************************************/
#[Route('/{id}', name: 'app_autresContacts_afficher')]
public function showLocatairesAutresContacts(AutresContacts $AutresContacts): Response
{
return $this->render("projets/showAutresContacts.html.twig",[
"AutresContacts" => $AutresContacts,
]);
}
// AJOUTER UN LOCATAIRE EN BDD *************************************************/
#[Route('projet_detail/{id}', name: 'app_autresContacts_ajouter')]
public function addAutresContacts(Request $request,EntityManagerInterface $manager, AutresContactsRepository $autresContactsRepository): Response
{
$autresContacts = new AutresContacts();
$form = $this ->createForm(AutresContactsType::class, $autresContacts);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$autresContactsRepository->save($autresContacts, true);
// message de succés
$this->addFlash('Success', "Votre nouveau autre contact " . $autresContacts->getNom() . " " . $autresContacts->getPrenom() . " a bien été ajouté");
return $this->redirectToRoute("app_autresContacts_afficher", [], Response::HTTP_SEE_OTHER);
}
return $this->render('projets/showAutresContacts.html.twig', [
'form' => $form->createView()
]);
}
// --------------------------------------------------------------------------------
/* MODIFIER ***************************************************/
#[Route('/{id}', name: 'app_autresContacts_modifier')]
public function updateAutresContacts(int $id,Request $request,EntityManagerInterface $manager,AutresContacts $autresContacts, AutresContactsRepository $AutresContactsRepository): Response
{
// récupérez l'objet correspondant à son l'ID
$autresContacts = $this->$manager->getRepository(AutresContacts::class)->find($id);
$form = $this ->createForm(AutresContactsType::class, $autresContacts);
// pré-remplissez le formulaire avec les valeurs actuelles du nom et du prénom du locataire
$form->get('nom')->setData($autresContacts->getNom());
$form->get('prenom')->setData($autresContacts->getPrenom());
$form->get('email')->setData($autresContacts->getEmail());
$form->get('numeroMobile')->setData($autresContacts->getNumeroFixe());
$form->get('numeroFixe')->setData($autresContacts->getNumeroFixe());
$form->get('lienFamilliale')->setData($autresContacts->getLienFamilliale());
// traitez le formulaire soumis
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$autresContacts = $form->getData();
$AutresContactsRepository->save($autresContacts, true);
// on prepare et on envoye en BDD
$manager->persist($autresContacts);
$manager->flush();
// redirigez l'utilisateur vers une page de confirmation de la modification réussie // message succés !
$this->addFlash('Success', "Votre autre Contact " . $autresContacts->getNom() . " " . $autresContacts->getPrenom() . " a bien été modifié(e)");
return $this->redirectToRoute("app_autresContacts_afficher", [], Response::HTTP_SEE_OTHER);
}
return $this->render('projets/showlocataire.html.twig', [
'form' => $form->createView(),
'AutresContacts' => $autresContacts,
]);
}
// --------------------------------------------------------------------------------
// SUPPRIMER UN LOCATAIRE EN BDD ************************************************
#[Route('/{id}', name: 'app_autresContacts_supprimer')]
public function DeleteAutresContacts(Request $request,AutresContacts $autresContacts, EntityManagerInterface $manager, AutresContactsRepository $AutresContactsRepository): Response
{
if ($this->isCsrfTokenValid('deleteAutresContacts'.$autresContacts->getId(), $request->request->get('_token'))) {
$AutresContactsRepository->remove($autresContacts, true);
}
$nomAutresContacts = $autresContacts->getNom();
$prenomAutresContacts = $autresContacts->getPrenom();
$this->addFlash('success', "Votre locataire " . $nomAutresContacts . $prenomAutresContacts ." a bien été supprimé(e)");
return $this->redirectToRoute("app_autresContacts_afficher", [], Response::HTTP_SEE_OTHER);
}
}