<?php
namespace App\Controller\School;
use App\Entity\SchoolTeacherCallSheet;
use App\Entity\SchoolTeacherCallSheetLine;
use App\Entity\SchoolTeacherTimeSheet;
use App\Entity\SchoolWorkingTimeHourLesson;
use App\Entity\User;
use App\Repository\SchoolTeacherAbsenceRepository;
use App\Repository\SchoolTeacherCallSheetLineRepository;
use App\Repository\SchoolTeacherCallSheetRepository;
use App\Repository\SchoolTeacherRepository;
use App\Repository\SchoolWorkingTimeHourLessonRepository;
use App\Repository\SettingClassroomRepository;
use App\Repository\SettingTimeTableRepository;
use App\Repository\UserRepository;
use App\Service\DateIntervalManage;
use App\Service\PayrollSyncService;
use App\Service\SMSSender;
use App\Service\ZKBioSyncService;
use DateTimeImmutable;
use Doctrine\Common\Collections\ArrayCollection;
use Knp\Component\Pager\PaginatorInterface;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/school/teacher-call-sheet")
*/
class SchoolTeacherCallSheetController extends AbstractController
{
/**
* @Route("/index", name="school_teacher_call_sheet_index", methods={"GET"})
*/
public function index(Request $request, PaginatorInterface $paginator, SchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository, SchoolTeacherRepository $schoolTeacherRepository, SettingClassroomRepository $settingClassroomRepository, UserRepository $userRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$schoolTeacher = $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear, 'is_disabled' => 0], []);
$school_teacher = $schoolTeacherRepository->findOneBy(['id' => $request->get('school_teacher')], []);
$settingClassroom = $settingClassroomRepository->findOneBy(['id' => $request->get('setting_classroom')], []);
$query = $schoolTeacherCallSheetRepository->createQueryBuilder('entity')
->innerJoin('entity.settingClassroom', 'settingClassroom')
->addSelect('settingClassroom')
->andWhere('settingClassroom.establishment = :establishment')
->setParameter('establishment', $establishment);
if (strlen($request->get('statut')) > 0) {
$query = $query
->andWhere('entity.status = :status')
->setParameter('status', $request->get('statut'));
}
if (strlen($request->get('etat')) > 0) {
$query = $query
->andWhere('entity.is_aproved = :is_aproved')
->setParameter('is_aproved', intval($request->get('etat')));
}
if (null != $settingClassroom) {
$query = $query
->andWhere('entity.settingClassroom = :settingClassroom')
->setParameter('settingClassroom', $settingClassroom);
}
if (null != $school_teacher) {
$query = $query
->andWhere('entity.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $school_teacher);
}
$query = $query
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->orderBy('entity.id', 'DESC')
->getQuery();
$school_teacher_call_sheets = $paginator->paginate(
$query,
$request->query->getInt('page', 1),
1000
);
if (null != $schoolTeacher) {
$query = $schoolTeacherCallSheetRepository->createQueryBuilder('entity')
->innerJoin('entity.settingClassroom', 'settingClassroom')
->addSelect('settingClassroom')
->andWhere('settingClassroom.establishment = :establishment')
->setParameter('establishment', $establishment);
if (strlen($request->get('statut')) > 0) {
$query = $query
->andWhere('entity.status = :status')
->setParameter('status', $request->get('statut'));
}
if (strlen($request->get('etat')) > 0) {
$query = $query
->andWhere('entity.is_aproved = :is_aproved')
->setParameter('is_aproved', intval($request->get('etat')));
}
$query = $query
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $schoolTeacher)
->orderBy('entity.id', 'DESC')
->getQuery();
$school_teacher_call_sheets = $paginator->paginate(
$query,
$request->query->getInt('page', 1),
1000
);
}
$school_teachers = $schoolTeacherRepository->createQueryBuilder('entity')
->innerJoin('entity.schoolWorkingTimeHourLessons', 'schoolWorkingTimeHourLessons')
->addSelect('schoolWorkingTimeHourLessons')
->innerJoin('schoolWorkingTimeHourLessons.settingClassroom', 'classrooms')
->addSelect('classrooms')
->andWhere('classrooms.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
return $this->render('school/school_teacher_call_sheet/index.html.twig', [
'userRepository' => $userRepository,
'school_teacher_call_sheets' => $school_teacher_call_sheets,
'school_teachers' => $school_teachers,
'school_teacher' => $school_teacher,
'schoolTeacher' => $schoolTeacher,
'statut' => $request->get('statut'),
'etat' => $request->get('etat'),
'settingClassroom' => $settingClassroom,
'setting_classrooms' => $settingClassroomRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], ['label' => 'ASC']),
]);
}
/**
* @Route("/new", name="school_teacher_call_sheet_new", methods={"GET","POST"})
*/
public function new(SchoolTeacherRepository $schoolTeacherRepository, ZKBioSyncService $ZKBioSyncService, PayrollSyncService $payrollSyncService, SchoolWorkingTimeHourLessonRepository $schoolWorkingTimeHourLessonRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$user = $this->getUser();
$establishment = $user->getEstablishment();
$rhSalary = $user->getRhSalary();
$schoolTeacher = $schoolTeacherRepository->findOneBy(['salary' => $rhSalary, 'schoolYear' => $schoolYear, 'is_disabled' => 0], []);
if (null == $schoolTeacher) {
$this->addFlash('warning', "Veuillez vous connecter avec un compte enseignant.");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
if($establishment->getIsFaceAttendanceEnabled()) {
// Vérification de pointage de l'enseignant
if (!$ZKBioSyncService->hasPointedToday($rhSalary)) {
$this->addFlash('warning', "Vous n'avez pas encore pointé aujourd'hui, veuillez pointer pour accéder à cette fonctionnalité.");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
/*$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');
}*/
}
$schoolWorkingTimeHourLessons = $schoolWorkingTimeHourLessonRepository->createQueryBuilder('entity')
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $schoolTeacher)
->andWhere('entity.day = :day')
->setParameter('day', DateIntervalManage::FRENCH_DAY[date('D')])
->innerJoin('entity.settingTimeTable', 'settingTimeTable')
->addSelect('settingTimeTable')
->andWhere('settingTimeTable.start <= :start')
->setParameter('start', date('H:i'))
->orderBy('settingTimeTable.endh', 'DESC')
->getQuery()
->getResult();
if (count($schoolWorkingTimeHourLessons) <= 0) {
$this->addFlash('warning', "Aucune page horaire correspondante trouvé dans votre emploie du temps.");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
return $this->renderForm('school/school_teacher_call_sheet/new.html.twig', [
'school_working_time_hour_lessons' => $schoolWorkingTimeHourLessons,
]);
}
/**
* @Route("/{id}/create", name="school_teacher_call_sheet_create", methods={"GET"})
*/
public function create(SchoolWorkingTimeHourLesson $schoolWorkingTimeHourLesson, SchoolTeacherRepository $schoolTeacherRepository, SchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$schoolTeacher = $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear, 'is_disabled' => 0], []);
if (null == $schoolTeacher) {
$this->addFlash('warning', "Veuillez vous connecter avec un compte enseignant.");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
if ($schoolWorkingTimeHourLesson->getSchoolTeacher() != $schoolTeacher) {
$this->addFlash('warning', "Veuillez vous connecter avec au compte enseignant.");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
$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_ree_call', ['id' => $schoolTeacherCallSheet->getId()]);
}
if ($schoolWorkingTimeHourLesson->getSettingTimeTable() != null) {
if ($schoolWorkingTimeHourLesson->getSettingTimeTable()->getEndh() < date('H:i')) {
$this->addFlash('warning', "Impossible, le cours est terminé.");
return $this->redirectToRoute('school_teacher_call_sheet_index');
}
}
$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_ree_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_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', [
'recovery_put_out_amount' => $establishment->getRecoveryPutOutAmount(),
'school_teacher_call_sheet' => $schoolTeacherCallSheet,
'school_teacher_call_sheet_lines' => $schoolTeacherCallSheetLines,
'duDate' => new DateTimeImmutable(),
]);
}
/**
* @Route("/delete-selection", name="school_teacher_call_sheets_selected_delete", methods={"GET"})
*/
public function deleteSelected(Request $request, SchoolTeacherCallSheetRepository $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 ($entity->getStatus() == SchoolTeacherCallSheet::STATUS_BROUILLON) {
foreach ($entity->getSchoolTeacherCallSheetLines() as $key => $schoolTeacherCallSheetLine) {
$entityManager->remove($schoolTeacherCallSheetLine);
}
$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("/{id}/validate", name="school_teacher_call_sheet_validate", methods={"GET"})
*/
public function validate(SchoolTeacherCallSheet $schoolTeacherCallSheet, SMSSender $smsSender, SchoolTeacherAbsenceRepository $schoolTeacherAbsenceRepository): Response
{
if ($schoolTeacherCallSheet->getStatus() == SchoolTeacherCallSheet::STATUS_REJETE) {
$this->addFlash('warning', "Impossible: La fiche a été rejetée, veuillez contacter votre responsable");
return $this->json(['code' => 400, 'message' => "Impossible: La fiche a été rejetée, veuillez contacter votre responsable"], 200);
}
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$schoolTeacherAbsences = $schoolTeacherAbsenceRepository->createQueryBuilder('entity')
->innerJoin('entity.schoolWorkingTimeHourLesson', 'schoolWorkingTimeHourLesson')
->addSelect('schoolWorkingTimeHourLesson')
->andWhere('schoolWorkingTimeHourLesson.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $schoolTeacherCallSheet->getSchoolTeacher())
->andWhere('schoolWorkingTimeHourLesson.day = :day')
->setParameter('day', $schoolTeacherCallSheet->getDay())
->andWhere('schoolWorkingTimeHourLesson.settingTimeTable = :settingTimeTable')
->setParameter('settingTimeTable', $schoolTeacherCallSheet->getSettingTimeTable())
->getQuery()
->getResult();
if (count($schoolTeacherAbsences) > 0) {
$this->addFlash('warning', "Impossible enseignant marqué absent à cette periode");
return $this->json(['code' => 500, 'message' => "Tous les élèves n'ont pas été appelé"], 200);
}
foreach ($schoolTeacherCallSheet->getSchoolTeacherCallSheetLines() as $key => $schoolTeacherCallSheetLine) {
if (!$schoolTeacherCallSheetLine->getIsAbsent() && !$schoolTeacherCallSheetLine->getIsPresente()) {
$this->addFlash('warning', "Tous les élèves n'ont pas été appelés");
return $this->json(['code' => 500, 'message' => "Tous les élèves n'ont pas été appelé"], 200);
}
}
if (null != $schoolTeacherCallSheet->getSettingTimeTable()) {
if ($schoolTeacherCallSheet->getSettingTimeTable()->getDefautDuration() > 0) {
$schoolTeacherCallSheet->setDefautDuration($schoolTeacherCallSheet->getSettingTimeTable()->getDefautDuration());
}
}
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacherCallSheet->setIsValidated(true);
$schoolTeacherCallSheet->setStatus(SchoolTeacherCallSheet::STATUS_VALIDE);
try {
$entityManager->flush();
$this->addFlash('success', "Validation effectué");
return $this->json(['code' => 200, 'message' => "Validation effectué :)"], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Validation non effectué");
return $this->json(['code' => 500, 'message' => "Validation non effectué"], 200);
}
/**
* @Route("/{id}/cancel", name="school_teacher_call_sheet_cancel", methods={"GET"})
*/
public function cancel(SchoolTeacherCallSheet $schoolTeacherCallSheet): Response
{
if ($schoolTeacherCallSheet->getIsAproved()) {
$this->addFlash('warning', "Impossible! fiche déjà approuvée");
return $this->json(['code' => 500, 'message' => "Impossible! fiche déjà approuvée"], 200);
}
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacherCallSheet->setIsValidated(false);
$schoolTeacherCallSheet->setStatus(SchoolTeacherCallSheet::STATUS_BROUILLON);
$schoolTeacherCallSheet->setRejectionReason(null);
try {
$entityManager->flush();
$this->addFlash('success', "Annulation effectué");
return $this->json(['code' => 200, 'message' => "Annulation effectué :)"], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Annulation non effectué");
return $this->json(['code' => 500, 'message' => "Annulation non effectué"], 200);
}
/**
* @Route("/{id}/reject", name="school_teacher_call_sheet_reject", methods={"POST"})
*/
public function reject(Request $request, SchoolTeacherCallSheet $schoolTeacherCallSheet): Response
{
if ($schoolTeacherCallSheet->getIsAproved()) {
$this->addFlash('warning', "Impossible! fiche déjà approuvée");
return $this->json(['code' => 500, 'message' => "Impossible! fiche déjà approuvée"], 200);
}
$rejectionReason = $request->get('rejection_reason');
if (empty($rejectionReason)) {
$this->addFlash('warning', "Le motif de rejet est obligatoire");
return $this->json(['code' => 500, 'message' => "Le motif de rejet est obligatoire"], 200);
}
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacherCallSheet->setIsValidated(false);
$schoolTeacherCallSheet->setStatus(SchoolTeacherCallSheet::STATUS_REJETE);
$schoolTeacherCallSheet->setRejectionReason($rejectionReason);
try {
$entityManager->flush();
$this->addFlash('success', "Fiche rejetée avec succès");
return $this->json(['code' => 200, 'message' => "Fiche rejetée avec succès"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Rejet non effectué");
return $this->json(['code' => 500, 'message' => "Rejet non effectué"], 200);
}
/**
* @Route("/{id}/aproved", name="school_teacher_call_sheet_aproved", methods={"GET"})
*/
public function aproved(SchoolTeacherCallSheet $schoolTeacherCallSheet, SchoolTeacherAbsenceRepository $schoolTeacherAbsenceRepository): Response
{
$schoolTeacherAbsences = $schoolTeacherAbsenceRepository->createQueryBuilder('entity')
->innerJoin('entity.schoolWorkingTimeHourLesson', 'schoolWorkingTimeHourLesson')
->addSelect('schoolWorkingTimeHourLesson')
->andWhere('schoolWorkingTimeHourLesson.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $schoolTeacherCallSheet->getSchoolTeacher())
->andWhere('schoolWorkingTimeHourLesson.day = :day')
->setParameter('day', $schoolTeacherCallSheet->getDay())
->andWhere('schoolWorkingTimeHourLesson.settingTimeTable = :settingTimeTable')
->setParameter('settingTimeTable', $schoolTeacherCallSheet->getSettingTimeTable())
->getQuery()
->getResult();
if (count($schoolTeacherAbsences) > 0) {
$this->addFlash('warning', "Impossible enseignant marqué absent à cette periode");
return $this->json(['code' => 500, 'message' => "Tous les élèves n'ont pas été appelé"], 200);
}
if (!$schoolTeacherCallSheet->getIsValidated() ) {
$this->addFlash('warning', "Impossible! veuillez valider la fiche");
return $this->json(['code' => 500, 'message' => "Impossible! veuillez valider la fiche"], 200);
}
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacherTimeSheet = new SchoolTeacherTimeSheet();
$schoolTeacherTimeSheet->setEstablishment($schoolTeacherCallSheet->getEstablishment());
$schoolTeacherTimeSheet->setSchoolYear($schoolTeacherCallSheet->getSchoolYear());
$schoolTeacherTimeSheet->setCreateDate($schoolTeacherCallSheet->getCreateDate());
$schoolTeacherTimeSheet->setNbHour(1);
if (null != $schoolTeacherCallSheet->getSettingTimeTable()) {
if ($schoolTeacherCallSheet->getSettingTimeTable()->getDefautDuration() > 0) {
$schoolTeacherTimeSheet->setNbHour($schoolTeacherCallSheet->getSettingTimeTable()->getDefautDuration());
}
}
$schoolTeacherTimeSheet->setSchoolMatter($schoolTeacherCallSheet->getSchoolMatter());
$schoolTeacherTimeSheet->setSchoolTeacher($schoolTeacherCallSheet->getSchoolTeacher());
$schoolTeacherTimeSheet->setSchoolWorkingTime($schoolTeacherCallSheet->getSchoolWorkingTime());
$schoolTeacherTimeSheet->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
$schoolTeacherTimeSheet->setSettingClassroom($schoolTeacherCallSheet->getSettingClassroom());
$schoolTeacherTimeSheet->setSettingTimeTable($schoolTeacherCallSheet->getSettingTimeTable());
$entityManager->persist($schoolTeacherTimeSheet);
$schoolTeacherCallSheet->setIsAproved(true);
try {
$entityManager->flush();
$this->addFlash('success', "Approbation effectuée");
return $this->json(['code' => 200, 'message' => "Approbation effectuée :)"], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Approbation non effectuée");
return $this->json(['code' => 500, 'message' => "Approbation non effectuée"], 200);
}
/**
* @Route("/{id}/disaproved", name="school_teacher_call_sheet_disaproved", methods={"GET"})
*/
public function disaproved(SchoolTeacherCallSheet $schoolTeacherCallSheet): Response
{
if (!$schoolTeacherCallSheet->getIsAproved() ) {
$this->addFlash('warning', "Impossible! cette fiche n'est pas encore approuvée");
return $this->json(['code' => 500, 'message' => "Impossible! cette fiche n'est pas encore approuvée"], 200);
}
$entityManager = $this->getDoctrine()->getManager();
foreach ($schoolTeacherCallSheet->getSchoolTeacherTimeSheets() as $key => $schoolTeacherTimeSheet) {
$entityManager->remove($schoolTeacherTimeSheet);
}
$schoolTeacherCallSheet->setIsAproved(false);
try {
$entityManager->flush();
$this->addFlash('success', "Approbation annulé");
return $this->json(['code' => 200, 'message' => "Approbation annulé :)"], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "annulation non effectuée");
return $this->json(['code' => 500, 'message' => "annulation non effectuée"], 200);
}
/**
* @Route("/report-print", name="school_teacher_call_sheet_report_print", methods={"GET"})
*/
public function report_print(Request $request, Pdf $knpSnappyPdf, SchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository, SchoolTeacherRepository $schoolTeacherRepository)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$school_teacher = $schoolTeacherRepository->findOneBy(['id' => $request->get('school_teacher')], []);
$startDate = new DateTimeImmutable($request->get('startDate'));
$endDate = new DateTimeImmutable($request->get('endDate'));
$dayDiff = DateIntervalManage::myDayDiff($startDate, $endDate);
$school_teacher_call_sheets = $schoolTeacherCallSheetRepository->createQueryBuilder('entity')
->innerJoin('entity.schoolTeacher', 'schoolTeacher')
->addSelect('schoolTeacher')
->innerJoin('schoolTeacher.schoolWorkingTimeHourLessons', 'schoolWorkingTimeHourLessons')
->addSelect('schoolWorkingTimeHourLessons')
->innerJoin('schoolWorkingTimeHourLessons.settingClassroom', 'classrooms')
->addSelect('classrooms')
->andWhere('classrooms.establishment = :establishment')
->setParameter('establishment', $establishment);
if (null != $school_teacher) {
$school_teacher_call_sheets = $school_teacher_call_sheets
->andWhere('entity.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $school_teacher);
}
$school_teacher_call_sheets = $school_teacher_call_sheets
->andWhere('entity.create_date BETWEEN :startDate AND :endDate')
->setParameter('startDate', $startDate)
->setParameter('endDate', $endDate)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
//dd($school_teacher_call_sheets);
$school_teachers = $schoolTeacherRepository->createQueryBuilder('entity')
->innerJoin('entity.schoolWorkingTimeHourLessons', 'schoolWorkingTimeHourLessons')
->addSelect('schoolWorkingTimeHourLessons')
->innerJoin('schoolWorkingTimeHourLessons.settingClassroom', 'classrooms')
->addSelect('classrooms')
->andWhere('classrooms.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult()
;
$template = 'school/print/school_teacher_call_sheets.html.twig';
$html = $this->renderView($template, [
'school_teacher' => $school_teacher,
'school_teachers' => $school_teachers,
'startDate' => $startDate,
'endDate' => $endDate,
'dayDiff' => $dayDiff,
'school_year' => $schoolYear,
'school_teacher_call_sheets' => $school_teacher_call_sheets,
'setting' => $establishment,
]);
$footer = $this->renderView('print/footer.html.twig', ['setting' => $establishment]);
$header = $this->renderView('print/header.html.twig', ['setting' => $establishment]);
$options = [
'orientation' => 'Landscape'
//'header-html' => $header
//'footer-html' => $footer
];
$file_name = "RAPPORT_APPEL_" . time() . ".pdf";
try {
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/report-cards/' . $file_name, $options, true);
} catch (\Throwable $th) {
$this->addFlash('info', "Effectué");
}
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'report-cards',
]);
}
/**
* @Route("/month-report-print", name="school_teacher_call_sheet_month_report_print", methods={"GET"})
*/
public function month_report_print(Request $request, Pdf $knpSnappyPdf, SchoolTeacherRepository $schoolTeacherRepository, SettingClassroomRepository $settingClassroomRepository, SettingTimeTableRepository $settingTimeTableRepository)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$schoolTeacher = $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear], []);
$template = 'school/print/school_teacher_call_month_sheets.html.twig';
$html = $this->renderView($template, [
'school_year' => $schoolYear,
'schoolTeacher' => $schoolTeacher,
'month' => $request->get('month'),
'setting_classroom' => $settingClassroomRepository->findOneBy(['id' => $request->get('setting_classroom')]),
'setting_time_tables' => $settingTimeTableRepository->findBy(['establishment' => $establishment], ['label' => 'ASC']),
'setting' => $establishment,
]);
$footer = $this->renderView('print/footer.html.twig', ['setting' => $establishment]);
$header = $this->renderView('print/header.html.twig', ['setting' => $establishment]);
$options = [
'orientation' => 'Portrait',
'page-size' => 'A4',
'footer-html' => $footer,
'header-html' => $header
];
$file_name = "RAPPORT_APPEL_.pdf";
try {
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/report-cards/' . $file_name, $options, true);
} catch (\Throwable $th) {
$this->addFlash('info', "Effectué");
}
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'report-cards',
]);
}
/**
* @Route("/teacher-present", name="school_call_sheet_teacher_present", methods={"GET"})
*/
public function teacher_present(Request $request, Pdf $knpSnappyPdf, SchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository, SchoolWorkingTimeHourLessonRepository $schoolWorkingTimeHourLessonRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$school_working_time_hour_lessons = new ArrayCollection();
$create_date = new DateTimeImmutable($request->get('create_date'));
if ($request->get('submit') == '_submit_') {
$school_working_time_hour_lessons = $schoolWorkingTimeHourLessonRepository->createQueryBuilder('entity')
->andWhere('entity.day = :day')
->setParameter('day', DateIntervalManage::FRENCH_DAY[$create_date->format('D')])
->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->innerJoin('entity.schoolTeacher', 'schoolTeacher')
->addSelect('schoolTeacher')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup())
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
if ($request->get('resulst') == '1') {
$html = $this->renderView('school/print/teacher_present.html.twig', [
/* 'school_teacher_call_sheets' => $school_teacher_call_sheets, */
'school_working_time_hour_lessons' => $school_working_time_hour_lessons,
'schoolTeacherCallSheetRepository' => $schoolTeacherCallSheetRepository,
'create_date' => $create_date,
'school_year' => $schoolYear,
'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 = "PRESENCE_ENSEIGNANT_.pdf";
try {
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/report-cards/' . $file_name, $options, true);
} catch (\Throwable $th) {
$this->addFlash('info', "Effectué");
}
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'report-cards',
]);
}
}
return $this->render('school/school_teacher_call_sheet/teacher_present.html.twig', [
/* 'school_teacher_call_sheets' => $school_teacher_call_sheets, */
'school_working_time_hour_lessons' => $school_working_time_hour_lessons,
'schoolTeacherCallSheetRepository' => $schoolTeacherCallSheetRepository,
'create_date' => $create_date,
]);
}
/**
* @Route("/{aproved-selection", name="school_teacher_call_sheet_aproved_selection", methods={"GET"})
*/
public function aproved_selection(Request $request, SchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository, SchoolTeacherAbsenceRepository $schoolTeacherAbsenceRepository): Response
{
$list = $request->get('entities');
$entityManager = $this->getDoctrine()->getManager();
$errors = 0;
$success = 0;
foreach ($list as $key => $id) {
$schoolTeacherCallSheet = $schoolTeacherCallSheetRepository->findOneBy(['id' => intval($id)], []);
if ($schoolTeacherCallSheet != null) {
$schoolTeacherAbsences = $schoolTeacherAbsenceRepository->createQueryBuilder('entity')
->innerJoin('entity.schoolWorkingTimeHourLesson', 'schoolWorkingTimeHourLesson')
->addSelect('schoolWorkingTimeHourLesson')
->andWhere('schoolWorkingTimeHourLesson.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $schoolTeacherCallSheet->getSchoolTeacher())
->andWhere('schoolWorkingTimeHourLesson.day = :day')
->setParameter('day', $schoolTeacherCallSheet->getDay())
->andWhere('schoolWorkingTimeHourLesson.settingTimeTable = :settingTimeTable')
->setParameter('settingTimeTable', $schoolTeacherCallSheet->getSettingTimeTable())
->getQuery()
->getResult();
if (count($schoolTeacherAbsences) <= 0) {
if ($schoolTeacherCallSheet->getIsValidated() ) {
if (!$schoolTeacherCallSheet->getIsAproved()) {
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacherTimeSheet = new SchoolTeacherTimeSheet();
$schoolTeacherTimeSheet->setEstablishment($schoolTeacherCallSheet->getEstablishment());
$schoolTeacherTimeSheet->setSchoolYear($schoolTeacherCallSheet->getSchoolYear());
$schoolTeacherTimeSheet->setCreateDate($schoolTeacherCallSheet->getCreateDate());
$schoolTeacherTimeSheet->setNbHour(1);
if (null != $schoolTeacherCallSheet->getSettingTimeTable()) {
if ($schoolTeacherCallSheet->getSettingTimeTable()->getDefautDuration() > 0) {
$schoolTeacherTimeSheet->setNbHour($schoolTeacherCallSheet->getSettingTimeTable()->getDefautDuration());
}
}
$schoolTeacherTimeSheet->setSchoolMatter($schoolTeacherCallSheet->getSchoolMatter());
$schoolTeacherTimeSheet->setSchoolTeacher($schoolTeacherCallSheet->getSchoolTeacher());
$schoolTeacherTimeSheet->setSchoolWorkingTime($schoolTeacherCallSheet->getSchoolWorkingTime());
$schoolTeacherTimeSheet->setSchoolTeacherCallSheet($schoolTeacherCallSheet);
$schoolTeacherTimeSheet->setSettingClassroom($schoolTeacherCallSheet->getSettingClassroom());
$schoolTeacherTimeSheet->setSettingTimeTable($schoolTeacherCallSheet->getSettingTimeTable());
$entityManager->persist($schoolTeacherTimeSheet);
$schoolTeacherCallSheet->setIsAproved(true);
$success++;
}
}
}
}
}
try {
$entityManager->flush();
$this->addFlash('success', $success. " fiche(s) approuvée(s)");
return $this->json(['code' => 200, 'message' => $success. " fiche(s) approuvée(s)"], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Approbation non effectuée");
return $this->json(['code' => 500, 'message' => "Approbation non effectuée"], 200);
}
/**
* @Route("/disaproved-selection", name="school_teacher_call_sheet_disaproved_selection", methods={"GET"})
*/
public function disaproved_selection(Request $request, SchoolTeacherCallSheetRepository $schoolTeacherCallSheetRepository, SchoolTeacherAbsenceRepository $schoolTeacherAbsenceRepository): Response
{
$list = $request->get('entities');
$entityManager = $this->getDoctrine()->getManager();
$errors = 0;
$success = 0;
foreach ($list as $key => $id) {
$schoolTeacherCallSheet = $schoolTeacherCallSheetRepository->findOneBy(['id' => intval($id)], []);
if ($schoolTeacherCallSheet != null) {
if ($schoolTeacherCallSheet->getIsAproved()) {
foreach ($schoolTeacherCallSheet->getSchoolTeacherTimeSheets() as $key => $schoolTeacherTimeSheet) {
$entityManager->remove($schoolTeacherTimeSheet);
}
$schoolTeacherCallSheet->setIsAproved(false);
$success++;
}
}
}
try {
$entityManager->flush();
$this->addFlash('success', $success. " fiche(s) désapprouvée(s)");
return $this->json(['code' => 200, 'message' => $success. " fiche(s) désapprouvée(s)"], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectuée");
return $this->json(['code' => 500, 'message' => "Traitement non effectuée"], 200);
}
}