<?php
namespace App\Controller\School;
use App\Entity\User;
use DateTimeImmutable;
use App\Entity\SchoolMatter;
use App\Entity\SchoolTeacher;
use App\Entity\SettingClassroom;
use App\Entity\SettingTimeTable;
use App\Service\DateIntervalManage;
use App\Service\PayrollSyncService;
use App\Entity\SchoolTeacherCallSheet;
use App\Entity\SchoolTeacherCallSheetLine;
use App\Repository\SchoolMatterRepository;
use App\Entity\SchoolWorkingTimeHourLesson;
use App\Repository\SchoolTeacherRepository;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\SettingClassroomRepository;
use App\Repository\SettingTimeTableRepository;
use Symfony\Component\HttpFoundation\Response;
use App\Form\School\SchoolTeacherCallSheetType;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Repository\SchoolTeacherCallSheetRepository;
use App\Repository\SchoolTeacherCallSheetLineRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/**
* @Route("/school/teacher-call-sheet-re")
* Fiche réalisé par un utilisateur avec le role ROLE_FICHE_PRESENCE
*/
class SchoolTeacherCallSheetReController extends AbstractController
{
/**
* @Route("/new", name="school_teacher_call_sheet_re_new", methods={"GET","POST"})
*/
public function new(Request $request, PayrollSyncService $payrollSyncService, SchoolTeacherRepository $schoolTeacherRepository, SchoolMatterRepository $schoolMatterRepository, SettingClassroomRepository $settingClassroomRepository, SettingTimeTableRepository $settingTimeTableRepository, SchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$schoolTeachers = $schoolTeacherRepository->createQueryBuilder('entity')
->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup())
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.is_disabled = :is_disabled')
->setParameter('is_disabled', 0)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
$schoolTeacherCallSheet = new SchoolTeacherCallSheet();
$form = $this->createForm(SchoolTeacherCallSheetType::class, $schoolTeacherCallSheet)
->add('settingClassroom', EntityType::class, [
'class' => SettingClassroom::class,
'choices' => $settingClassroomRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], ['label' => 'ASC']),
'required' => false
])
->add('settingTimeTable', EntityType::class, [
'class' => SettingTimeTable::class,
'choices' => $settingTimeTableRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], ['label' => 'ASC']),
'required' => false
])
->add('schoolMatter', EntityType::class, [
'class' => SchoolMatter::class,
'choices' => $schoolMatterRepository->findBy(['establishment' => $establishment], ['label' => 'ASC']),
'required' => false
])
->add('schoolTeacher', EntityType::class, [
'class' => SchoolTeacher::class,
'choices' => $schoolTeachers,
'required' => false
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$rhSalary = $schoolTeacherCallSheet->getSchoolTeacher()->getSalary();
if($establishment->getIsFaceAttendanceEnabled()) {
$records = $payrollSyncService->getRecordsByRhSalary($rhSalary, new \DateTime(), new \DateTime());
if (count($records) <= 0) {
$this->addFlash('warning', "Cet employé a pas encore pointé: ".$rhSalary->getFirstName()." ".$rhSalary->getLastName());
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
}
$entityManager = $this->getDoctrine()->getManager();
$_schoolTeacherCallSheet = $schoolTeacherCallSheetRepository->findOneBy([
'establishment' => $establishment,
'schoolYear' => $schoolYear,
'settingClassroom' => $schoolTeacherCallSheet->getSettingClassroom(),
'settingTimeTable' => $schoolTeacherCallSheet->getSettingTimeTable(),
'schoolMatter' => $schoolTeacherCallSheet->getSchoolMatter(),
'create_date' => $schoolTeacherCallSheet->getCreateDate(),
'day' => DateIntervalManage::FRENCH_DAY[$schoolTeacherCallSheet->getCreateDate()->format('D')],
], []);
if (null != $_schoolTeacherCallSheet) {
$this->addFlash('warning', "Cette fiche existe déjà.");
return $this->redirectToRoute('school_teacher_call_sheet_re_call', ['id' => $_schoolTeacherCallSheet->getId()]);
}
if (null == $schoolTeacherCallSheet->getSettingTimeTable()) {
$this->addFlash('warning', "Veuillez selectionner un horaire");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
if (null == $schoolTeacherCallSheet->getSettingClassroom()) {
$this->addFlash('warning', "Veuillez selectionner une classe");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
if (null == $schoolTeacherCallSheet->getSchoolMatter()) {
$this->addFlash('warning', "Veuillez selectionner une matière");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
$schoolTeacherCallSheet->setEstablishment($establishment);
$schoolTeacherCallSheet->setSchoolYear($schoolYear);
$schoolTeacherCallSheet->setEstablishment($establishment);
$schoolTeacherCallSheet->setDay(DateIntervalManage::FRENCH_DAY[$schoolTeacherCallSheet->getCreateDate()->format('D')]);
$schoolTeacherCallSheet->setCreateTime(date('H:i'));
$entityManager->persist($schoolTeacherCallSheet);
if($schoolTeacherCallSheet->getSchoolMatter()->getLv2() == 'AUCUN') {
if($schoolTeacherCallSheet->getSchoolMatter()->getArtOrMusique() == null || $schoolTeacherCallSheet->getSchoolMatter()->getArtOrMusique() == '') {
/* --- pas une langue vivante 2 --- */
foreach ($schoolTeacherCallSheet->getSettingClassroom()->getRegistereds($schoolYear) as $key => $registrationStudentRegistration) {
$schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
$schoolTeacherCallSheetLine->setEstablishment($establishment);
$schoolTeacherCallSheetLine->setSchoolYear($schoolYear);
$schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
$schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
$schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
$schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
$schoolTeacherCallSheetLine->setIsAbsent(false);
$schoolTeacherCallSheetLine->setIsPresente(true);
if ($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt(new DateTimeImmutable()) > 0) {
$schoolTeacherCallSheetLine->setIsAbsent(true);
$schoolTeacherCallSheetLine->setIsPresente(false);
}
$entityManager->persist($schoolTeacherCallSheetLine);
}
}else {
foreach ($schoolTeacherCallSheet->getSettingClassroom()->getRegistereds($schoolTeacherCallSheet->getSchoolYear()) as $key => $registrationStudentRegistration) {
if ($registrationStudentRegistration->getStudent()->getArtOrMusique() == $schoolTeacherCallSheet->getSchoolMatter()->getArtOrMusique()) {
$schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
$schoolTeacherCallSheetLine->setEstablishment($establishment);
$schoolTeacherCallSheetLine->setSchoolYear($schoolYear);
$schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
$schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
$schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
$schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
$schoolTeacherCallSheetLine->setIsAbsent(false);
$schoolTeacherCallSheetLine->setIsPresente(true);
if ($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt(new DateTimeImmutable()) > 0) {
$schoolTeacherCallSheetLine->setIsAbsent(true);
$schoolTeacherCallSheetLine->setIsPresente(false);
}
$entityManager->persist($schoolTeacherCallSheetLine);
}
}
}
}else {
/* --- est une langue vivante 2 --- */
foreach ($schoolTeacherCallSheet->getSettingClassroom()->getRegistereds($schoolYear) as $key => $registrationStudentRegistration) {
if ($registrationStudentRegistration->getStudent()->getLv2() == $schoolTeacherCallSheet->getSchoolMatter()->getLv2()) {
$schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
$schoolTeacherCallSheetLine->setEstablishment($establishment);
$schoolTeacherCallSheetLine->setSchoolYear($schoolYear);
$schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
$schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
$schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
$schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
$schoolTeacherCallSheetLine->setIsAbsent(false);
$schoolTeacherCallSheetLine->setIsPresente(true);
if ($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt(new DateTimeImmutable()) > 0) {
$schoolTeacherCallSheetLine->setIsAbsent(true);
$schoolTeacherCallSheetLine->setIsPresente(false);
}
$entityManager->persist($schoolTeacherCallSheetLine);
}
}
}
try {
$entityManager->flush();
$this->addFlash('success', "Un élt a été ajouté.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'ajout de l'élt.");
$this->addFlash('info', $th->getMessage());
return $this->redirectToRoute('school_teacher_call_sheet_re_new');
}
return $this->redirectToRoute('school_teacher_call_sheet_re_call', ['id' => $schoolTeacherCallSheet->getId()]);
}
return $this->renderForm('school/school_teacher_call_sheet/re/new.html.twig', [
'schoolTeacherCallSheet' => $schoolTeacherCallSheet,
'form' => $form,
]);
}
/**
* @Route("/{id}/create", name="school_teacher_call_sheet_re_create", methods={"GET"})
*/
public function create(SchoolWorkingTimeHourLesson $schoolWorkingTimeHourLesson, SchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$createDate = new DateTimeImmutable();
$schoolTeacherCallSheet = $schoolTeacherCallSheetRepository->findOneBy([
'establishment' => $schoolWorkingTimeHourLesson->getEstablishment(),
'schoolYear' => $schoolWorkingTimeHourLesson->getSchoolYear(),
'schoolTeacher' => $schoolWorkingTimeHourLesson->getSchoolTeacher(),
'schoolWorkingTime' => $schoolWorkingTimeHourLesson->getSchoolWorkingTime(),
'settingClassroom' => $schoolWorkingTimeHourLesson->getSettingClassroom(),
'settingTimeTable' => $schoolWorkingTimeHourLesson->getSettingTimeTable(),
'create_date' => $createDate,
'day' => $schoolWorkingTimeHourLesson->getDay(),
], []);
if (null != $schoolTeacherCallSheet) {
$this->addFlash('warning', "Cette fiche existe déjà.");
return $this->redirectToRoute('school_teacher_call_sheet_re_call', ['id' => $schoolTeacherCallSheet->getId()]);
}
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacherCallSheet = new SchoolTeacherCallSheet();
$schoolTeacherCallSheet->setEstablishment($schoolWorkingTimeHourLesson->getEstablishment());
$schoolTeacherCallSheet->setSchoolYear($schoolWorkingTimeHourLesson->getSchoolYear());
$schoolTeacherCallSheet->setSchoolMatter($schoolWorkingTimeHourLesson->getSchoolMatter());
$schoolTeacherCallSheet->setSchoolTeacher($schoolWorkingTimeHourLesson->getSchoolTeacher());
$schoolTeacherCallSheet->setSchoolWorkingTime($schoolWorkingTimeHourLesson->getSchoolWorkingTime());
$schoolTeacherCallSheet->setSettingClassroom($schoolWorkingTimeHourLesson->getSettingClassroom());
$schoolTeacherCallSheet->setSettingTimeTable($schoolWorkingTimeHourLesson->getSettingTimeTable());
$schoolTeacherCallSheet->setDay($schoolWorkingTimeHourLesson->getDay());
$schoolTeacherCallSheet->setCreateDate(new DateTimeImmutable());
$schoolTeacherCallSheet->setCreateTime(date('H:i'));
$entityManager->persist($schoolTeacherCallSheet);
if($schoolWorkingTimeHourLesson->getSchoolMatter()->getLv2() == 'AUCUN') {
if($schoolWorkingTimeHourLesson->getSchoolMatter()->getArtOrMusique() == null || $schoolWorkingTimeHourLesson->getSchoolMatter()->getArtOrMusique() == '') {
/* --- pas une langue vivante 2 --- */
foreach ($schoolWorkingTimeHourLesson->getSettingClassroom()->getRegistereds($schoolWorkingTimeHourLesson->getSchoolYear()) as $key => $registrationStudentRegistration) {
$schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
$schoolTeacherCallSheetLine->setEstablishment($schoolWorkingTimeHourLesson->getEstablishment());
$schoolTeacherCallSheetLine->setSchoolYear($schoolWorkingTimeHourLesson->getSchoolYear());
$schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
$schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
$schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
$schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
$schoolTeacherCallSheetLine->setIsAbsent(false);
$schoolTeacherCallSheetLine->setIsPresente(true);
if ($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt(new DateTimeImmutable()) > 0) {
$schoolTeacherCallSheetLine->setIsAbsent(true);
$schoolTeacherCallSheetLine->setIsPresente(false);
}
$entityManager->persist($schoolTeacherCallSheetLine);
}
}else {
foreach ($schoolWorkingTimeHourLesson->getSettingClassroom()->getRegistereds($schoolWorkingTimeHourLesson->getSchoolYear()) as $key => $registrationStudentRegistration) {
if ($registrationStudentRegistration->getStudent()->getArtOrMusique() == $schoolWorkingTimeHourLesson->getSchoolMatter()->getArtOrMusique()) {
$schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
$schoolTeacherCallSheetLine->setEstablishment($schoolWorkingTimeHourLesson->getEstablishment());
$schoolTeacherCallSheetLine->setSchoolYear($schoolWorkingTimeHourLesson->getSchoolYear());
$schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
$schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
$schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
$schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
$schoolTeacherCallSheetLine->setIsAbsent(false);
$schoolTeacherCallSheetLine->setIsPresente(true);
if ($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt(new DateTimeImmutable()) > 0) {
$schoolTeacherCallSheetLine->setIsAbsent(true);
$schoolTeacherCallSheetLine->setIsPresente(false);
}
$entityManager->persist($schoolTeacherCallSheetLine);
}
}
}
}else {
/* --- est une langue vivante 2 --- */
foreach ($schoolWorkingTimeHourLesson->getSettingClassroom()->getRegistereds($schoolWorkingTimeHourLesson->getSchoolYear()) as $key => $registrationStudentRegistration) {
if ($registrationStudentRegistration->getStudent()->getLv2() == $schoolWorkingTimeHourLesson->getSchoolMatter()->getLv2()) {
$schoolTeacherCallSheetLine = new SchoolTeacherCallSheetLine();
$schoolTeacherCallSheetLine->setEstablishment($schoolWorkingTimeHourLesson->getEstablishment());
$schoolTeacherCallSheetLine->setSchoolYear($schoolWorkingTimeHourLesson->getSchoolYear());
$schoolTeacherCallSheetLine->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolTeacherCallSheetLine->setCreateDate(new DateTimeImmutable());
$schoolTeacherCallSheetLine->setCreateTime($schoolTeacherCallSheet->getCreateTime());
$schoolTeacherCallSheetLine->setDay($schoolTeacherCallSheet->getDay());
$schoolTeacherCallSheetLine->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
$schoolTeacherCallSheetLine->setIsAbsent(false);
$schoolTeacherCallSheetLine->setIsPresente(true);
if ($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getAmountDueAt(new DateTimeImmutable()) > 0) {
$schoolTeacherCallSheetLine->setIsAbsent(true);
$schoolTeacherCallSheetLine->setIsPresente(false);
}
$entityManager->persist($schoolTeacherCallSheetLine);
}
}
}
try {
$entityManager->flush();
return $this->redirectToRoute('school_teacher_call_sheet_re_call', ['id' => $schoolTeacherCallSheet->getId()]);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
/**
* @Route("/{id}/call", name="school_teacher_call_sheet_re_call", methods={"GET","POST"})
*/
public function call(SchoolTeacherCallSheet $schoolTeacherCallSheet, SchoolTeacherCallSheetLineRepository $schoolTeacherCallSheetLineRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$schoolTeacherCallSheetLines = $schoolTeacherCallSheetLineRepository->createQueryBuilder('entity')
->innerJoin('entity.registrationStudentRegistration', 'registrationStudentRegistration')
->addSelect('registrationStudentRegistration')
->innerJoin('registrationStudentRegistration.student', 'student')
->addSelect('student')
->andWhere('entity.schoolTeacherCallSheet = :callSheet')
->setParameter('callSheet', $schoolTeacherCallSheet)
->orderBy('student.last_name', 'ASC')
->getQuery()
->getResult();
return $this->renderForm('school/school_teacher_call_sheet/re/call.html.twig', [
'school_teacher_call_sheet' => $schoolTeacherCallSheet,
'recovery_put_out_amount' => $establishment->getRecoveryPutOutAmount(),
'school_teacher_call_sheet_lines' => $schoolTeacherCallSheetLines,
'duDate' => new DateTimeImmutable(),
]);
}
}