<?php
namespace App\Controller\School;
use Knp\Snappy\Pdf;
use App\Entity\User;
use App\Entity\RhSalary;
use App\Entity\SettingRoom;
use App\Entity\SchoolMatter;
use App\Entity\SchoolTeacher;
use App\Entity\SettingClassroom;
use App\Entity\SettingTimeTable;
use App\Entity\SchoolWorkingTime;
use App\Repository\UserRepository;
use App\Entity\SchoolTeacherTimeSheet;
use App\Form\School\SchoolTeacherType;
use App\Repository\RhSalaryRepository;
use App\Repository\SettingRoomRepository;
use App\Repository\SchoolMatterRepository;
use App\Entity\SchoolWorkingTimeHourLesson;
use App\Repository\SchoolTeacherRepository;
use Knp\Component\Pager\PaginatorInterface;
use App\Entity\SchoolTeacherMatterClassroom;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\EquivalentMatterRepository;
use App\Repository\SettingClassroomRepository;
use App\Repository\SettingTimeTableRepository;
use Symfony\Component\HttpFoundation\Response;
use App\Repository\SchoolWorkingTimeRepository;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Form\School\SchoolWorkingTimeHourLessonType;
use App\Form\School\SchoolTeacherMatterClassroomType;
use App\Repository\SchoolWorkingTimeHourLessonRepository;
use App\Repository\SchoolTeacherMatterClassroomRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
/**
* @Route("/school/teacher")
*/
class SchoolTeacherController extends AbstractController
{
/**
* @Route("/index", name="school_teacher_index", methods={"GET"})
*/
public function index(Request $request, PaginatorInterface $paginator, SchoolTeacherRepository $schoolTeacherRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $this->getUser()->getEstablishment();
$school_teachers = $paginator->paginate(
$schoolTeacherRepository->createQueryBuilder('entity')
->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup())
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->orderBy('entity.id', 'DESC')
->getQuery(),
$request->query->getInt('page', 1),
1000
);
return $this->render('school/school_teacher/index.html.twig', [
'school_teachers' => $school_teachers,
]);
}
/**
* @Route("/new", name="school_teacher_new", methods={"GET","POST"})
*/
public function new(Request $request, RhSalaryRepository $rhSalaryRepository, SchoolTeacherRepository $schoolTeacherRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $this->getUser()->getEstablishment();
$salaries = $rhSalaryRepository->createQueryBuilder('entity')
->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup())
->orderBy('entity.last_name', 'ASC')
->getQuery()
->getResult();
$notTeacherSalaries = new ArrayCollection();
foreach ($salaries as $key => $salarie) {
//if (count($salarie->getSchoolTeachers()) <= 0 ) {
if (!$notTeacherSalaries->contains($salarie)) {
$notTeacherSalaries->add($salarie);
}
//}
}
$schoolTeacher = new SchoolTeacher();
$form = $this->createForm(SchoolTeacherType::class, $schoolTeacher)
->add('salary', EntityType::class, [
'class' => RhSalary::class,
'choices' => $notTeacherSalaries
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$teacher = $schoolTeacherRepository->findOneBy(['salary' => $schoolTeacher->getSalary(), 'schoolYear' => $schoolYear], []);
if (null != $teacher) {
$this->addFlash('info', "Impossible: Cet enseignant existe déjà.");
return $this->redirectToRoute('school_teacher_new');
}
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacher->setEstablishment($establishment);
$schoolTeacher->setSchoolYear($schoolYear);
$entityManager->persist($schoolTeacher);
try {
$entityManager->flush();
$this->addFlash('success', "Une classe à été ajoutée.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'ajout de la classe.");
$this->addFlash('info', $th->getMessage());
return $this->redirectToRoute('school_teacher_new');
}
return $this->redirectToRoute('school_teacher_edit', ['id' => $schoolTeacher->getId()]);
}
return $this->renderForm('school/school_teacher/new.html.twig', [
'school_teacher' => $schoolTeacher,
'form' => $form,
]);
}
/**
* @Route("/{id}/edit", name="school_teacher_edit", methods={"GET","POST"})
*/
public function edit(Request $request, SchoolTeacher $schoolTeacher, SchoolMatterRepository $schoolMatterRepository, SettingClassroomRepository $settingClassroomRepository, RhSalaryRepository $rhSalaryRepository, SchoolTeacherMatterClassroomRepository $schoolTeacherMatterClassroomRepository, SchoolTeacherRepository $schoolTeacherRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$classrooms = $settingClassroomRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], []);
$matters = $schoolMatterRepository->findBy(['establishment' => $establishment], []);
$matterCollections = new ArrayCollection();
foreach ($matters as $key => $matter) {
if ($schoolTeacher->getEquivalentMatters()->contains($matter->getEquivalentMatter())) {
$matterCollections->add($matter);
}
}
$notTeacherSalaries = $rhSalaryRepository->createQueryBuilder('entity')
->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup())
->andWhere('entity.last_name = :last_name')
->setParameter('last_name', $schoolTeacher->getSalary()->getLastName())
->andWhere('entity.first_name = :first_name')
->setParameter('first_name', $schoolTeacher->getSalary()->getFirstName())
->orderBy('entity.last_name', 'ASC')
->getQuery()
->getResult();
//$notTeacherSalaries = $rhSalaryRepository->findBy(['establishment' => $establishment], ['last_name' => 'ASC']);
if (!$this->isGranted("ROLE_EMPLOI_DU_TEMPS")) {
$notTeacherSalaries = new ArrayCollection();
$notTeacherSalaries->add($schoolTeacher->getSalary());
}
$form = $this->createForm(SchoolTeacherType::class, $schoolTeacher)
->add('salary', EntityType::class, [
'class' => RhSalary::class,
'choices' => $notTeacherSalaries
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$teacher = $schoolTeacherRepository->findOneBy(['salary' => $schoolTeacher->getSalary(), 'schoolYear' => $schoolYear], []);
if (null != $teacher) {
if ($teacher != $schoolTeacher) {
$this->addFlash('info', "Impossible: Cet enseignant existe déjà.");
return $this->redirectToRoute('school_teacher_edit', ['id' => $schoolTeacher->getId()]);
}
}
try {
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', "la classe à été édité.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'édition de la classe.");
$this->addFlash('info', $th->getMessage());
return $this->redirectToRoute('school_teacher_edit', ['id' => $schoolTeacher->getId()]);
}
}
$schoolTeacherMatterClassroom = new SchoolTeacherMatterClassroom();
$schoolTeacherMatterClassroomForm = $this->createForm(SchoolTeacherMatterClassroomType::class, $schoolTeacherMatterClassroom)
->add('matter', EntityType::class, [
'class' => SchoolMatter::class,
'choices' => $matterCollections
])
->add('classroom', EntityType::class, [
'class' => SettingClassroom::class,
'choices' => $classrooms
]);
$schoolTeacherMatterClassroomForm->handleRequest($request);
if ($schoolTeacherMatterClassroomForm->isSubmitted() && $schoolTeacherMatterClassroomForm->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
if ($schoolTeacherMatterClassroom->getMatter()->getLevel() != $schoolTeacherMatterClassroom->getClassroom()->getLevel()) {
$this->addFlash('warning', "La matière selectionnée doit être dans le même niveau que la classe");
return $this->redirectToRoute('school_teacher_edit', ['id' => $schoolTeacher->getId()]);
}
$_schoolTeacherMatterClassroom = $schoolTeacherMatterClassroomRepository->findOneBy(['classroom' => $schoolTeacherMatterClassroom->getClassroom(), 'matter' => $schoolTeacherMatterClassroom->getMatter(), 'is_disabled' => 0], []);
if (null != $_schoolTeacherMatterClassroom) {
$this->addFlash('warning', "Un enseignant (" .$_schoolTeacherMatterClassroom->getTeacher()->getName(). ") est déjà affecté à cette matière dans cette classe.");
return $this->redirectToRoute('school_teacher_edit', ['id' => $schoolTeacher->getId()]);
}
$schoolTeacherMatterClassroom->setTeacher($schoolTeacher);
$schoolTeacherMatterClassroom->setEstablishment($establishment);
$schoolTeacherMatterClassroom->setSchoolYear($schoolTeacher->getSchoolYear());
$entityManager->persist($schoolTeacherMatterClassroom);
try {
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', "Enrégistrement effectué avec succès.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'édition de l'enseignant.");
$this->addFlash('info', $th->getMessage());
return $this->redirectToRoute('school_teacher_edit', ['id' => $schoolTeacher->getId()]);
}
}
return $this->renderForm('school/school_teacher/edit.html.twig', [
'school_teacher' => $schoolTeacher,
'form' => $form,
'school_teacher_matter_classroom' => $schoolTeacherMatterClassroom,
'school_teacher_matter_classroom_form' => $schoolTeacherMatterClassroomForm,
]);
}
/**
* @Route("/delete-selection", name="school_teachers_selected_delete", methods={"GET"})
*/
public function deleteSelected(Request $request, SchoolTeacherRepository $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) {
foreach ($entity->getSchoolTeacherMatterClassrooms() as $key => $schoolTeacherMatterClassroom) {
$schoolTeacherMatterClassroom->setIsDisabled(true);
}
$entity->setIsDisabled(true);
//$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);
}
/**
* @Route("/api/new-get-classroom-matters", name="api_school_teacher_new_get_classroom_matters", methods={"GET"})
*/
public function apiNewGetClassroomMatters(Request $request, SettingClassroomRepository $settingClassroomRepository, SchoolMatterRepository $schoolMatterRepository, SchoolTeacherRepository $schoolTeacherRepository, EquivalentMatterRepository $equivalentMatterRepository): Response
{
$equivalentMatterList = $request->get('equivalentMatters');
$classroomList = $request->get('classrooms');
$schoolMatters = new ArrayCollection();
if (count($classroomList) > 0) {
foreach ($classroomList as $key => $id) {
$classroom = $settingClassroomRepository->findOneBy(['id' => intval($id)], []);
if ($classroom != null) {
foreach ($equivalentMatterList as $key => $id) {
$equivalentMatter = $equivalentMatterRepository->findOneBy(['id' => intval($id)], []);
if ($equivalentMatter != null) {
foreach ($schoolMatterRepository->findBy(['equivalentMatter' => $equivalentMatter, 'level' => $classroom->getLevel(), 'is_test_matter' => 0], []) as $key => $matter) {
$isTeach = false;
foreach ($schoolTeacherRepository->findBy(['establishment' => $classroom->getEstablishment()], []) as $key => $_teacher) {
if ($_teacher->getClassrooms()->contains($classroom) && $_teacher->getMatters()->contains($matter)) {
$isTeach = true;
break;
}
}
if (!$isTeach) {
$sMatter = [
'id' => $matter->getId(),
'label' => $matter->getLevel()->getLabel().' '.$matter->getLabel(),
];
if (!$schoolMatters->contains($sMatter)) {
$schoolMatters->add($sMatter);
}
}
}
}
}
}
}
}
return $this->json([
'code' => 200,
'message' => "found :)",
'schoolMatters' => $schoolMatters,
'classrooms' => $classroomList
],
200);
}
/**
* @Route("/print/list-by-classroom", name="school_teacher_print_list_by_classroom")
*/
public function print_list_by_classroom(Pdf $knpSnappyPdf, SettingClassroomRepository $settingClassroomRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $this->getUser()->getEstablishment();
$setting_classrooms = $settingClassroomRepository->createQueryBuilder('entity')
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
$html = $this->renderView('school/print/list_by_classroom.html.twig', [
'setting_classrooms' => $setting_classrooms,
'school_year' => $schoolYear,
'setting' => $establishment,
]);
$file_name = "LISTE_ENSEIGNANT_PAR_CLASSE.pdf";
$footer = $this->renderView('print/footer.html.twig', ['setting' => $establishment,]);
$header = $this->renderView('print/header.html.twig', ['setting' => $establishment,]);
$options = [
'orientation' => 'Portrait',
'header-html' => $header
//'footer-html' => $footer
];
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/rapport/' . $file_name, $options, true);
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'rapport',
]);
}
/**
* @Route("/print/list-by-teacher", name="school_teacher_print_list_by_teacher")
*/
public function print_list_by_teacher(Pdf $knpSnappyPdf, SchoolTeacherRepository $schoolTeacherRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$school_teachers = $schoolTeacherRepository->createQueryBuilder('entity')
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.is_disabled = :is_disabled')
->setParameter('is_disabled', 0)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
$html = $this->renderView('school/print/list_by_teacher.html.twig', [
'school_teachers' => $school_teachers,
'school_year' => $schoolYear,
'setting' => $establishment,
]);
$file_name = "LISTE_ENSEIGNANT_PAR_CLASSE_ET_MATIERE.pdf";
$footer = $this->renderView('print/footer.html.twig', ['setting' => $establishment,]);
$header = $this->renderView('print/header.html.twig', ['setting' => $establishment,]);
$options = [
'orientation' => 'Portrait',
'header-html' => $header
//'footer-html' => $footer
];
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/rapport/' . $file_name, $options, true);
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'rapport',
]);
}
/**
* @Route("/api/edit-get-matters", name="api_school_teacher_edit_get_matters", methods={"GET"})
*/
public function apiEditMatters(Request $request, SettingClassroomRepository $settingClassroomRepository, SchoolMatterRepository $schoolMatterRepository, SchoolTeacherRepository $schoolTeacherRepository): Response
{
$idClassroom = $request->get('idClassroom');
$idTeacher = intval($request->get('idTeacher'));
$teacher = $schoolTeacherRepository->findOneBy(['id' => $idTeacher], []);
$classroom = $settingClassroomRepository->findOneBy(['id' => $idClassroom], []);
$matters = new ArrayCollection();
$establishment = $this->getUser()->getEstablishment();
$schoolMatters = $schoolMatterRepository->createQueryBuilder('entity')
/* ->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup()) */
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.level = :level')
->setParameter('level', $classroom->getLevel())
->andWhere('entity.is_test_matter = :is_test_matter')
->setParameter('is_test_matter', 0)
->orderBy('entity.label', 'ASC')
->getQuery()
->getResult();
foreach ($schoolMatters as $key => $matter) {
if ($teacher->getEquivalentMatters()->contains($matter->getEquivalentMatter())) {
$matters->add([
'id' => $matter->getId(),
'label' => $matter->getLevel()->getLabel().' '.$matter->getLabel(),
]);
}
}
return $this->json([
'code' => 200,
'message' => "found :)",
'schoolMatters' => $matters,
],
200);
}
/**
* @Route("/{id}/enabled", name="school_teacher_enabled", methods={"GET"})
*/
public function enabled(SchoolTeacher $entity): Response
{
$entityManager = $this->getDoctrine()->getManager();
foreach ($entity->getSchoolTeacherMatterClassrooms() as $key => $schoolTeacherMatterClassroom) {
$schoolTeacherMatterClassroom->setIsDisabled(false);
}
$entity->setIsDisabled(false);
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);
}
/**
* @Route("/{id}/time-sheet", name="school_teacher_time_sheet", methods={"GET","POST"})
*/
public function time_sheet(Request $request, SchoolTeacher $schoolTeacher, SchoolMatterRepository $schoolMatterRepository, SettingClassroomRepository $settingClassroomRepository, SettingRoomRepository $settingRoomRepository, SettingTimeTableRepository $settingTimeTableRepository, SchoolWorkingTimeRepository $schoolWorkingTimeRepository, SchoolWorkingTimeHourLessonRepository $schoolWorkingTimeHourLessonRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$settingClassrooms = $settingClassroomRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], []);
//$schoolMatters = $schoolMatterRepository->findBy(['establishment' => $establishment], []);
$settingRooms = $settingRoomRepository->createQueryBuilder('entity')
->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup())
/* ->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment) */
->orderBy('entity.label', 'ASC')
->getQuery()
->getResult();
$settingTimeTables = $settingTimeTableRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], []);
$matterCollections = new ArrayCollection();
$settingClassroomCollections = new ArrayCollection();
foreach ($schoolTeacher->getSchoolTeacherMatterClassrooms() as $key => $schoolTeacherMatterClassroom) {
if ($schoolTeacherMatterClassroom->getMatter()->getEstablishment() == $establishment) {
$matterCollections->add($schoolTeacherMatterClassroom->getMatter());
}
}
foreach ($schoolTeacher->getSchoolTeacherMatterClassrooms() as $key => $schoolTeacherMatterClassroom) {
foreach ($matterCollections as $key => $_schoolMatter) {
if (!$settingClassroomCollections->contains($schoolTeacherMatterClassroom->getClassroom())) {
if ($schoolTeacherMatterClassroom->getClassroom()->getEstablishment() == $establishment) {
$settingClassroomCollections->add($schoolTeacherMatterClassroom->getClassroom());
}
}
}
}
$schoolWorkingTimeHourLesson = new SchoolWorkingTimeHourLesson();
$form = $this->createForm(SchoolWorkingTimeHourLessonType::class, $schoolWorkingTimeHourLesson)
->add('schoolMatter', EntityType::class, [
'class' => SchoolMatter::class,
'choices' => $matterCollections
])
->add('settingClassroom', EntityType::class, [
'class' => SettingClassroom::class,
'choices' => $settingClassroomCollections
])
->add('settingRoom', EntityType::class, [
'class' => SettingRoom::class,
'choices' => $settingRooms
])
->add('settingTimeTable', EntityType::class, [
'class' => SettingTimeTable::class,
'choices' => $settingTimeTables
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$settingRoom = $settingRoomRepository->findOneBy(['id' => $schoolWorkingTimeHourLesson->getSettingRoom()->getId()], []);
$schoolMatter = $schoolMatterRepository->findOneBy(['id' => $schoolWorkingTimeHourLesson->getSchoolMatter()->getId()], []);
$settingTimeTable = $settingTimeTableRepository->findOneBy(['id' => $schoolWorkingTimeHourLesson->getSettingTimeTable()->getId()], []);
$settingClassroom = $settingClassroomRepository->findOneBy(['id' => $schoolWorkingTimeHourLesson->getSettingClassroom()->getId()], []);
if (null == $settingTimeTable) {
$this->addFlash('warning', "La plage horaire est introuvable.");
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
if (null == $settingRoom) {
$this->addFlash('warning', "Veuillez selectionner une salle");
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
if (null == $schoolMatter) {
$this->addFlash('warning', "Veuillez selectionner une matière");
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
if (null == $settingClassroom) {
$this->addFlash('warning', "Veuillez selectionner une classe");
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
if ($schoolWorkingTimeHourLesson->getSchoolMatter()->getLevel() != $schoolWorkingTimeHourLesson->getSettingClassroom()->getLevel()) {
$this->addFlash('warning', "Matière et classe doivent être du même niveau.");
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
$schoolWorkingTime = $schoolWorkingTimeRepository->findOneBy(['establishment' => $establishment, 'schoolYear' => $schoolYear, 'settingClassroom' => $schoolWorkingTimeHourLesson->getSettingClassroom()], []);
if (null == $schoolWorkingTime) {
$schoolWorkingTime = new SchoolWorkingTime();
$schoolWorkingTime->setEstablishment($establishment);
$schoolWorkingTime->setSchoolYear($schoolYear);
$schoolWorkingTime->setSettingClassroom($schoolWorkingTimeHourLesson->getSettingClassroom());
$entityManager->persist($schoolWorkingTime);
}
$_schoolWorkingTimeHourLesson = $schoolWorkingTimeHourLessonRepository->findOneBy(['schoolWorkingTime' => $schoolWorkingTime, 'settingTimeTable' => $schoolWorkingTimeHourLesson->getSettingTimeTable(), 'day' => $schoolWorkingTimeHourLesson->getDay()], []);
$schoolWorkingTimeHourLesson->setEstablishment($establishment);
$schoolWorkingTimeHourLesson->setSchoolTeacher($schoolTeacher);
$schoolWorkingTimeHourLesson->setSchoolYear($schoolYear);
$schoolWorkingTimeHourLesson->setSchoolWorkingTime($schoolWorkingTime);
$schoolWorkingTimeHourLesson->setDefautDuration($settingTimeTable->getDefautDuration());
if (count($schoolWorkingTimeHourLessonRepository->findBy(['schoolTeacher' => $schoolTeacher, 'settingClassroom' => $schoolWorkingTime->getSettingClassroom(), 'settingTimeTable' => $settingTimeTable, 'day' => $schoolWorkingTimeHourLesson->getDay()], [])) > 0) {
$this->addFlash('warning', "Un enseignant ne peut avoir plus d'un cours le même jour à la même heure avec la même classe.");
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
$_schoolWorkingTimeHourLesson = $schoolWorkingTimeHourLessonRepository->findOneBy(['schoolYear' => $schoolYear, 'settingRoom' => $settingRoom, 'settingTimeTable' => $schoolWorkingTimeHourLesson->getSettingTimeTable(), 'day' => $schoolWorkingTimeHourLesson->getDay()], []);
//if (count($schoolWorkingTimeHourLessonRepository->findBy(['settingRoom' => $settingRoom, 'settingTimeTable' => $schoolWorkingTimeHourLesson->getSettingTimeTable(), 'day' => $schoolWorkingTimeHourLesson->getDay(), 'settingClassroom' => $schoolWorkingTimeHourLesson->getSettingClassroom()], [])) > 0) {
if (null != $_schoolWorkingTimeHourLesson) {
if (!$_schoolWorkingTimeHourLesson->getSettingRoom()->getIsArea()) {
$this->addFlash('warning', "Une salle ne peut abriter plus d'un cours le même jour à la même heure. Classe: " .$_schoolWorkingTimeHourLesson->getSettingClassroom()->getLabel().", Enseignant: " .$_schoolWorkingTimeHourLesson->getSchoolTeacher()->__toString().", Jour: " .$_schoolWorkingTimeHourLesson->getDay().", Heure: " .$_schoolWorkingTimeHourLesson->getSettingTimeTable()->getLabel().", Matière: " .$_schoolWorkingTimeHourLesson->getSchoolMatter()->getLabel());
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
}
if (count($schoolWorkingTimeHourLessonRepository->findBy(['schoolMatter' => $schoolMatter, 'settingTimeTable' => $schoolWorkingTimeHourLesson->getSettingTimeTable(), 'day' => $schoolWorkingTimeHourLesson->getDay(), 'settingClassroom' => $schoolWorkingTimeHourLesson->getSettingClassroom()], [])) > 0) {
$this->addFlash('warning', "Une matière ne peut être enseigner plus d'un fois le même jour à la même heure dans la même classe.");
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
/* if ($schoolWorkingTimeHourLesson->getSchoolMatter()->getHourlyVolumeRestToDispach($schoolYear) < $schoolWorkingTimeHourLesson->getSettingTimeTable()->getDefautDuration()) {
$this->addFlash('warning', "Le volume horaire hebdomadaire affecté à cette matière est atteint.");
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
} */
if (null != $_schoolWorkingTimeHourLesson) {
$_schoolWorkingTimeHourLesson->setSchoolMatter($schoolWorkingTimeHourLesson->getSchoolMatter());
$_schoolWorkingTimeHourLesson->setSchoolTeacher($schoolTeacher);
$_schoolWorkingTimeHourLesson->setSettingRoom($schoolWorkingTimeHourLesson->getSettingRoom());
}else {
$entityManager->persist($schoolWorkingTimeHourLesson);
}
try {
$entityManager->flush();
$this->addFlash('success', "Enrégistrement effectué avec succès.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'édition de l'enseignant.");
$this->addFlash('info', $th->getMessage());
}
return $this->redirectToRoute('school_teacher_time_sheet', ['id' => $schoolTeacher->getId()]);
}
return $this->renderForm('school/school_teacher/time_sheet.html.twig', [
'school_teacher' => $schoolTeacher,
'school_working_time_hour_lesson' => $schoolWorkingTimeHourLesson,
'form' => $form,
]);
}
/**
* @Route("/working-time/{id}/print", name="school_teacher_working_time_print", methods={"GET"})
*/
public function print_working_time(Pdf $knpSnappyPdf, SchoolTeacher $schoolTeacher, SettingTimeTableRepository $settingTimeTableRepository, SchoolWorkingTimeHourLessonRepository $schoolWorkingTimeHourLessonRepository)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$template = 'school/print/schoolTeacherWorkingTime.html.twig';
if ($establishment->getType() != $establishment::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
$template = 'school/print/schoolTeacherWorkingTime.html.twig';
}
$schoolWorkingTimeHourLessons = $schoolWorkingTimeHourLessonRepository->findBy(['schoolTeacher' => $schoolTeacher], []);
$html = $this->renderView($template, [
'school_year' => $schoolYear,
'school_teacher' => $schoolTeacher,
'schoolWorkingTimeHourLessons' => $schoolWorkingTimeHourLessons,
'setting_time_tables' => $settingTimeTableRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], ['label' => 'ASC']),
'week_days' => SchoolWorkingTime::COURS_DAYS,
'setting' => $establishment,
]);
$footer = $this->renderView('print/footer.html.twig', ['setting' => $establishment]);
$header = $this->renderView('print/header.html.twig', ['setting' => $establishment]);
$options = [
'orientation' => 'Portrait'
//'header-html' => $header
//'footer-html' => $footer
];
$file_name = 'EMPLOIE_DU_TEMPS_'.$schoolTeacher->getId()."_.pdf";
try {
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/working-time/' . $file_name, $options, true);
} catch (\Throwable $th) {
$this->addFlash('info', "Effectué");
}
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'working-time',
]);
}
/**
* @Route("/reset-password/{id}", name="school_teacher_reset_password", methods={"GET"})
*/
public function resetPassword(SchoolTeacher $schoolTeacher, UserPasswordHasherInterface $userPasswordHasherInterface): Response
{
$entityManager = $this->getDoctrine()->getManager();
$user = $schoolTeacher->getSalary()->getUser();
if (null != $user) {
$user->setIsPasswordChanged(false);
$user->setIsEnabled(true);
$user->setPassword(
$userPasswordHasherInterface->hashPassword(
$user,
"central-edu"
)
);
try {
$entityManager->flush();
$this->addFlash('success', "Mot de passe réinitialisé :)".$user->getUserIdentifier());
return $this->json(['code' => 200, 'message' => "Mot de passe réinitialisé :) ".$user->getUserIdentifier()], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('info', $th->getMessage());
return $this->json(['code' => 500, 'message' => $th->getMessage()], 200);
}
}
$this->addFlash('warning', "Une erreure s'est produite");
return $this->json(['code' => 500, 'message' => "Une erreure s'est produite"], 200);
}
/**
* @Route("/api/get-matters", name="api_school_teacher_matters", methods={"GET"})
*/
public function api_get_matters(Request $request, SchoolTeacherRepository $entityRepository, SettingClassroomRepository $settingClassroomRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$classroom = $settingClassroomRepository->findOneBy(['id' => $request->get('classroom')], []);
$entity = $entityRepository->findOneBy(['id' => $request->get('teacher')], []);
if ($entity != null) {
return $this->json([
'code' => 200,
'message' => "found :)",
'schoolMatters' => $entity->getJsonMatterTeachs($classroom, $establishment)],
200);
}else{
return $this->json(['code' => 500, 'message' => "not found :)"], 200);
}
}
/**
* @Route("/print/teachers", name="school_teacher_print_teachers", methods={"GET"})
*/
public function print_teachers(Pdf $knpSnappyPdf, UserRepository $userRepository)
{
$setting = $this->getUser()->getEstablishment();
$teachers = $userRepository->createQueryBuilder('entity')
->innerJoin('entity.rhSalary', 'rhSalary')
->addSelect('rhSalary')
->innerJoin('rhSalary.schoolTeachers', 'schoolTeachers')
->addSelect('schoolTeachers')
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $setting)
->andWhere('schoolTeachers.is_disabled = :is_disabled')
->setParameter('is_disabled', 0)
->andWhere('entity.is_enabled = :is_enabled')
->setParameter('is_enabled', 1)
->orderBy('rhSalary.last_name', 'ASC')
->getQuery()
->getResult();
$template = 'security/print/teachers.html.twig';
$html = $this->renderView($template, [
'teachers' => $teachers,
'setting' => $setting,
]);
$file_name = "ENSEIGNANTS_.pdf";
$footer = $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
$header = $this->renderView('print/header.html.twig', ['setting' => $setting,]);
$options = [
'orientation' => 'Portrait',
'header-html' => $header,
'footer-html' => $footer
];
try {
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/teachers/' . $file_name, $options, true);
} catch (\Throwable $th) {
$this->addFlash('info', "Ce reçu à déjà été imprimé.");
}
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'teachers',
]);
}
/**
* @Route("/api/get-classrooms", name="api_school_teacher_classrooms", methods={"GET"})
*/
public function api_get_classrooms(Request $request, SchoolTeacherRepository $entityRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$entity = $entityRepository->findOneBy(['id' => $request->get('teacher'), 'is_disabled' => 0], []);
if ($entity != null) {
return $this->json([
'code' => 200,
'message' => "found :)",
'settingClassrooms' => $entity->getJsonClassroomTeachs($establishment)],
200);
}else{
return $this->json(['code' => 500, 'message' => "not found :)"], 200);
}
}
/**
* @Route("/api/get-time_tables", name="api_school_teacher_time_tables", methods={"GET"})
*/
public function api_get_time_tables(Request $request, SchoolTeacherRepository $entityRepository, SettingClassroomRepository $settingClassroomRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$classroom = $settingClassroomRepository->findOneBy(['id' => $request->get('classroom')], []);
$entity = $entityRepository->findOneBy(['id' => $request->get('teacher'), 'is_disabled' => 0], []);
if ($entity != null) {
return $this->json([
'code' => 200,
'message' => "found :)",
'settingTimeTables' => $entity->getJsonTimeTableTeachs($classroom, $establishment)],
200);
}else{
return $this->json(['code' => 500, 'message' => "not found :)"], 200);
}
}
/**
* @Route("/api/get-working-time-hour-lessons", name="api_school_teacher_working_time_hour_lessons", methods={"GET"})
*/
public function api_get_working_time_hour_lessons(Request $request, SchoolTeacherRepository $entityRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$establishment = $user->getEstablishment();
$entity = $entityRepository->findOneBy(['id' => $request->get('teacher'), 'is_disabled' => 0], []);
if ($entity != null) {
return $this->json([
'code' => 200,
'message' => "found :)",
'workingTimeHourLessons' => $entity->getJsonWorkingTimeHourLessons($establishment)],
200);
}else{
return $this->json(['code' => 500, 'message' => "not found :)"], 200);
}
}
/**
* @Route("/{id}/edit-login", name="school_teacher_edit_login", methods={"POST"})
*/
public function editLogin(Request $request, SchoolTeacher $schoolTeacher, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasherInterface): Response
{
if (!$this->isGranted('ROLE_DIRECTEUR')) {
return $this->json(['code' => 403, 'message' => 'Accès refusé'], 403);
}
$newLogin = $request->request->get('newLogin');
$resetPassword = $request->request->get('resetPassword') === 'true';
// Validation : au moins une action doit être demandée
if (empty($newLogin) && !$resetPassword) {
return $this->json(['code' => 400, 'message' => 'Veuillez sélectionner au moins une action : modifier le login ou réinitialiser le mot de passe'], 400);
}
$user = $schoolTeacher->getSalary()->getUser();
$currentLogin = $user->getUsername();
$messages = [];
// Traitement de la modification du login
if (!empty($newLogin)) {
if ($newLogin === $currentLogin) {
return $this->json(['code' => 400, 'message' => 'Le nouveau login doit être différent de l\'actuel'], 400);
}
// Vérifier si le nouveau login existe déjà
$existingUser = $userRepository->findOneBy(['username' => $newLogin]);
if ($existingUser && $existingUser->getId() !== $user->getId()) {
return $this->json(['code' => 400, 'message' => 'Ce login existe déjà'], 400);
}
$user->setUsername($newLogin);
$messages[] = 'Login modifié';
}
// Traitement de la réinitialisation du mot de passe
if ($resetPassword) {
$user->setPassword(
$userPasswordHasherInterface->hashPassword(
$user,
"central-edu"
)
);
$user->setIsPasswordChanged(false);
$user->setIsEnabled(true);
$messages[] = 'Mot de passe réinitialisé';
}
try {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->flush();
$message = implode(' et ', $messages) . ' avec succès';
return $this->json(['code' => 200, 'message' => $message], 200);
} catch (\Throwable $th) {
return $this->json(['code' => 500, 'message' => 'Une erreur est survenue lors des modifications'], 500);
}
}
}