src/Controller/ProgramsController.php line 28
<?php
namespace App\Controller;
use App\Entity\Candidate;
use App\Entity\Company;
use App\Entity\Groupe;
use App\Entity\Program;
use App\Entity\ProgramCandidate;
use App\Form\ProgramCandidatType;
use App\Form\ProgramCompanyType;
use App\Form\ProgramGroupeType;
use App\Form\ProgramType;
use App\Repository\ClientRepository;
use App\Repository\ProgramCandidateRepository;
use App\Repository\ProgramRepository;
use App\Service\UserService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\RouterInterface;
class ProgramsController extends AbstractController
{
#[Route('/programs', name: 'app_programs')]
public function index(ProgramRepository $programRepo, UserService $userService): Response
{
$user = $this->getUser();
if (!$userService->isAdmin($this->getUser())){
$user = $user->getAdministrator();
}
return $this->render('programs/index.html.twig', [
'listprograms' => $programRepo->findBy(['adminUser' => $user]),
]);
}
#[Route('/programs/new', name: 'app_programs_create')]
public function create(Request $request,ProgramRepository $programRepo,ClientRepository $clientRepo): Response
{
$program = new Program();
$form = $this->createForm(ProgramType::class, $program);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $this->getUser();
$program->setAdminUser($user);
$programRepo->save($program, true);
return $this->redirectToRoute('app_programs');
}
return $this->render('programs/new.html.twig',[
'form' => $form->createView(),
'listClients' => $clientRepo->getClientsByAdminId($this->getUser()->getId())
]);
}
#[Route('/programs/edit/{id}', name: 'app_programs_edit')]
public function edit(Program $program, Request $request, ProgramRepository $programRepo,ClientRepository $clientRepo): Response
{
$form = $this->createForm(ProgramType::class, $program);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$programRepo->save($program, true);
return $this->redirectToRoute('app_programs');
}
return $this->render('programs/new.html.twig', [
'form' => $form->createView(),
'listClients' => $clientRepo->getClientsByAdminId($this->getUser()->getId())
]);
}
#[Route('/programs/delete/{id}', name: 'app_programs_delete')]
public function delete(Program $program, ProgramRepository $programRepo): Response
{
$programRepo->remove($program, true);
return $this->redirectToRoute('app_programs');
}
#[Route('/programs/details/{id}', name: 'app_programs_details')]
public function details(Program $program): Response
{
return $this->render('programs/details.html.twig',[
'program' => $program
]);
}
#[Route('/programs/addCandidate/{id}', name: 'app_programs_addCandidate')]
public function addCandidate(Program $program, Request $request, ProgramCandidateRepository $programCandidateRepo): Response
{
$programCandidate = new ProgramCandidate();
$form = $this->createForm(ProgramCandidatType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid() ) {
$candidate = $form->get('candidate')->getData();
$programCandidate->setProgram($program);
$programCandidate->setCandidate($candidate);
$programCandidate->setStatus('nouveau');
$programCandidateRepo->save($programCandidate, true);
return $this->redirectToRoute('app_programs_details', ['id' => $program->getId()]);
}
return $this->render('programs/add-candidate.html.twig',[
'candidateForm' => $form->createView()
]);
}
#[Route('/programs/addGroupe/{id}', name: 'app_programs_addGroupe')]
public function addGroupe(Program $program, Request $request, ProgramCandidateRepository $programCandidateRepo): Response
{
$programCandidate = new ProgramCandidate();
$form = $this->createForm(ProgramGroupeType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid() ) {
$groupe = $form->get('groupe')->getData();
$programCandidate->setProgram($program);
$programCandidate->setGroupe($groupe);
$programCandidate->setStatus('nouveau');
$programCandidateRepo->save($programCandidate, true);
return $this->redirectToRoute('app_programs_details', ['id' => $program->getId()]);
}
return $this->render('programs/add-groupe.html.twig',[
'candidateForm' => $form->createView()
]);
}
#[Route('/programs/addCompany/{id}', name: 'app_programs_addCompany')]
public function addCompany(Program $program, Request $request, ProgramCandidateRepository $programCandidateRepo): Response
{
$programCandidate = new ProgramCandidate();
$form = $this->createForm(ProgramCompanyType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid() ) {
$company = $form->get('company')->getData();
$programCandidate->setProgram($program);
$programCandidate->setCompany($company);
$programCandidate->setStatus('nouveau');
$programCandidateRepo->save($programCandidate, true);
return $this->redirectToRoute('app_programs_details', ['id' => $program->getId()]);
}
return $this->render('programs/add-company.html.twig',[
'candidateForm' => $form->createView()
]);
}
#[Route('/programs/candidate/delete/{id}/{program}', name: 'app_programs_candidate_delete')]
public function deleteCandidate(Program $program,Candidate $candidate, ProgramCandidateRepository $programCandidateRepo): Response
{
$candidate = $programCandidateRepo->findOneBy([
'program' => $program,
'candidate' => $candidate
]);
$programCandidateRepo->remove($candidate, true);
return $this->redirectToRoute('app_programs_details', ['id' =>$program->getId()]);
}
#[Route('/programs/company/delete/{id}/{program}', name: 'app_programs_company_delete')]
public function deleteCompany(Program $program,Company $company, ProgramCandidateRepository $programCandidateRepo): Response
{
$candidate = $programCandidateRepo->findOneBy([
'program' => $program,
'company' => $company
]);
$programCandidateRepo->remove($candidate, true);
return $this->redirectToRoute('app_programs_details', ['id' =>$program->getId()]);
}
#[Route('/programs/groupe/delete/{id}/{program}', name: 'app_programs_groupe_delete')]
public function deleteGroupe(Program $program,Groupe $groupe, ProgramCandidateRepository $programCandidateRepo): Response
{
$candidate = $programCandidateRepo->findOneBy([
'program' => $program,
'groupe' => $groupe
]);
$programCandidateRepo->remove($candidate, true);
return $this->redirectToRoute('app_programs_details', ['id' =>$program->getId()]);
}
#[Route('/programs/candidate/status/{candidate}/{program}', name: 'app_programs_candidate_status')]
public function statusCandidate(Request $request,Program $program,Candidate $candidate, ProgramCandidateRepository $programCandidateRepo): Response
{
$candidate = $programCandidateRepo->findOneBy([
'program' => $program,
'candidate' => $candidate
]);
$selectedStatus = $request->request->get('status');
$candidate->setStatus($selectedStatus);
$programCandidateRepo->save($candidate, true);
return $this->redirectToRoute('app_programs_details', ['id' =>$program->getId()]);
}
#[Route('/programs/groupe/status/{groupe}/{program}', name: 'app_programs_groupe_status')]
public function statusGroupe(Request $request,Program $program,Groupe $groupe, ProgramCandidateRepository $programCandidateRepo): Response
{
$candidate = $programCandidateRepo->findOneBy([
'program' => $program,
'groupe' => $groupe
]);
$selectedStatus = $request->request->get('status');
$candidate->setStatus($selectedStatus);
$programCandidateRepo->save($candidate, true);
return $this->redirectToRoute('app_programs_details', ['id' =>$program->getId()]);
}
#[Route('/programs/company/status/{company}/{program}', name: 'app_programs_company_status')]
public function statusCompany(Request $request,Program $program,Company $company, ProgramCandidateRepository $programCandidateRepo): Response
{
$candidate = $programCandidateRepo->findOneBy([
'program' => $program,
'company' => $company
]);
$selectedStatus = $request->request->get('status');
$candidate->setStatus($selectedStatus);
$programCandidateRepo->save($candidate, true);
return $this->redirectToRoute('app_programs_details', ['id' =>$program->getId()]);
}
}