<?php
namespace App\Controller\School;
use Knp\Snappy\Pdf;
use App\Entity\User;
use App\Entity\ReportCard;
use App\Entity\SchoolMatter;
use App\Entity\SettingLevel;
use App\Entity\SchoolReportCard;
use App\Entity\SchoolYearPeriode;
use App\Form\School\ReportCardType;
use App\Entity\SchoolAverageReportCard;
use App\Entity\SchoolReportCardAbsence;
use App\Repository\ReportCardRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Form\School\SchoolReportCardType;
use App\Service\StudentAverageCalculator;
use App\Repository\SchoolMatterRepository;
use App\Repository\SettingLevelRepository;
use App\Repository\SchoolTeacherRepository;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\SchoolMatterTypeRepository;
use App\Repository\SchoolReportCardRepository;
use App\Repository\SettingClassroomRepository;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\RegistrationStudentRegistration;
use App\Repository\SchoolYearPeriodeRepository;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Repository\SchoolAbsenceAndDelayRepository;
use App\Repository\SchoolAverageReportCardRepository;
use App\Repository\SchoolReportCardAbsenceRepository;
use App\Repository\SchoolAbsenceAndDelaySettingRepository;
use App\Repository\RegistrationStudentRegistrationRepository;
use App\Service\StudentAverageReportCardCalculator;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
/**
* @Route("/report/card")
*/
class ReportCardController extends AbstractController
{
/**
* @Route("/index", name="report_card_index", methods={"GET"})
*/
public function index(Request $request, PaginatorInterface $paginator, ReportCardRepository $reportCardRepository, SchoolTeacherRepository $schoolTeacherRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$schoolTeacher = $schoolTeacherRepository->findOneBy(['establishment' => $establishment, 'salary' => $user->getRhSalary()], []);
$report_cards = $paginator->paginate(
$reportCardRepository->createQueryBuilder('entity')
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->orderBy('entity.id', 'DESC')
->getQuery(),
$request->query->getInt('page', 1),
1000
);
return $this->render('school/report_card/index.html.twig', [
'report_cards' => $report_cards,
]);
}
/**
* @Route("/new", name="report_card_new", methods={"GET","POST"})
*/
public function new(Request $request, SchoolYearPeriodeRepository $schoolYearPeriodeRepository, SettingLevelRepository $settingLevelRepository, ReportCardRepository $reportCardRepository, StudentAverageCalculator $studentAverageCalculator): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$schoolYearPeriodes = $schoolYearPeriodeRepository->findBy(['schoolYear' => $schoolYear, 'establishment' => $establishment, 'is_closed' => 0]);
$levels = $settingLevelRepository->findBy(['establishment' => $establishment], ['label' => 'ASC']);
$reportCard = new ReportCard();
$form = $this->createForm(ReportCardType::class, $reportCard)
->add('schoolYearPeriode', EntityType::class, [
'class' => SchoolYearPeriode::class,
'choices' => $schoolYearPeriodes,
'required' => true
])
->add('level', EntityType::class, [
'class' => SettingLevel::class,
'choices' => $levels,
'required' => true
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
if (null != $reportCardRepository->findOneBy(['schoolYearPeriode' => $reportCard->getSchoolYearPeriode(), 'level' => $reportCard->getLevel()], [])) {
$this->addFlash('warning', "Ce bulletin existe déjà.");
return $this->redirectToRoute('report_card_new');
}
$reportCard->setEstablishment($establishment);
$reportCard->setSchoolYear($schoolYear);
$reportCard->setCode('B'.rand(100000, 999999).$reportCard->getSchoolYearPeriode()->getId().$reportCard->getLevel()->getId());
$reportCard->setCoefficient($reportCard->getSchoolYearPeriode()->getCoefficient());
foreach ($reportCard->getLevel()->getSettingClassrooms() as $key => $classroom) {
if ($classroom->getSchoolYear() == $schoolYear) {
$index = 1;
foreach ($classroom->getRegistereds($schoolYear) as $key => $registrationStudentRegistration) {
if (!$registrationStudentRegistration->isAbandonne()) {
$schoolReportCard = new SchoolReportCard();
$schoolReportCard->setClassroom($classroom);
$schoolReportCard->setCode('BE'.$reportCard->getCode().$registrationStudentRegistration->getId());
$schoolReportCard->setCoefficient($reportCard->getCoefficient());
$schoolReportCard->setEstablishment($establishment);
$schoolReportCard->setLabel($reportCard->getLabel());
$schoolReportCard->setOrderNum($index);
$schoolReportCard->setReportCard($reportCard);
$schoolReportCard->setNoteOn($reportCard->getNoteOn());
$schoolReportCard->setSchoolYear($schoolYear);
$schoolReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
$schoolReportCard->setStudentRegistration($registrationStudentRegistration);
$schoolReportCard->setType('normal');
$entityManager->persist($schoolReportCard);
foreach ($classroom->getLevel()->getSchoolMatters() as $key => $matter) {
if (!$matter->getIsTestMatter()) {
if ($matter->getNoteOnReportCard() <= 0) {
$this->addFlash('warning', "Veuillez configurer correctement la matière: ".$matter->getLabel()." 'Noté sur Bulletin' doit être defini.");
return $this->redirectToRoute('report_card_new');
}
if ($schoolReportCard->getStudentRegistration()->asMatterDone($matter, $reportCard)) {
$schoolAverageReportCard = new SchoolAverageReportCard();
$schoolAverageReportCard->setCode('MY'.$schoolReportCard->getCode().$matter->getId());
//$schoolAverageReportCard->setAverage($schoolReportCard->getStudentRegistration()->computePeriodeAverage($matter, $reportCard, $schoolAverageReportCard));
$schoolAverageReportCard->setAverage($studentAverageCalculator->calculateSubjectAverage($registrationStudentRegistration, $matter, $reportCard->getSchoolYearPeriode()));
$schoolAverageReportCard->setClassroom($classroom);
$schoolAverageReportCard->setCoefficient($matter->getCoefficient());
$schoolAverageReportCard->setCoefficientXAverage($schoolAverageReportCard->getAverage() * $schoolAverageReportCard->getCoefficient());
$schoolAverageReportCard->setEstablishment($establishment);
$schoolAverageReportCard->setMatter($matter);
$schoolAverageReportCard->setIsMatterConduct($matter->getIsMatterConduct());
$schoolAverageReportCard->setNoteOn($matter->getNoteOnReportCard());
$schoolAverageReportCard->setOrderNum($matter->getOrderNum());
$schoolAverageReportCard->setReportCard($schoolReportCard);
$schoolAverageReportCard->setSchoolYear($schoolYear);
$schoolAverageReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
$schoolAverageReportCard->setStudentRegistration($registrationStudentRegistration);
$countSubMatters = 0;
foreach ($matter->getSchoolSubMatters() as $key => $schoolSubMatter) {
$schoolAverageReportCard->setAsSubmatter(true);
//if ($schoolReportCard->getStudentRegistration()->asMatterDone($matter, $reportCard)) {
$schoolSubAverageReportCard = new SchoolAverageReportCard();
$schoolSubAverageReportCard->setCode('SMY'.$schoolReportCard->getCode().$schoolSubMatter->getId());
//$schoolSubAverageReportCard->setAverage($schoolReportCard->getStudentRegistration()->computeSubPeriodeAverage($schoolSubMatter, $reportCard, $schoolAverageReportCard));
$schoolSubAverageReportCard->setAverage($studentAverageCalculator->calculateSubMatterAverage($registrationStudentRegistration, $schoolSubMatter, $reportCard->getSchoolYearPeriode()));
$schoolSubAverageReportCard->setClassroom($classroom);
$schoolSubAverageReportCard->setCoefficient($schoolSubMatter->getCoefficient());
$schoolSubAverageReportCard->setCoefficientXAverage($schoolSubAverageReportCard->getAverage() * $schoolSubAverageReportCard->getCoefficient());
$schoolSubAverageReportCard->setEstablishment($establishment);
$schoolSubAverageReportCard->setMatter($matter);
$schoolSubAverageReportCard->setIsMatterConduct($matter->getIsMatterConduct());
$schoolSubAverageReportCard->setSubMatter($schoolSubMatter);
$schoolSubAverageReportCard->setNoteOn($schoolSubMatter->getNotedOn());
$schoolSubAverageReportCard->setOrderNum($matter->getOrderNum());
$schoolSubAverageReportCard->setReportCard($schoolReportCard);
$schoolSubAverageReportCard->setSchoolYear($schoolYear);
$schoolSubAverageReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
$schoolSubAverageReportCard->setStudentRegistration($registrationStudentRegistration);
$entityManager->persist($schoolSubAverageReportCard);
//}
}
//if ($countSubMatters <= 0) {
$entityManager->persist($schoolAverageReportCard);
//}
}
}
}
$index++;
}
}
}
}
$entityManager->persist($reportCard);
try {
$entityManager->flush();
$this->addFlash('success', "Enrégistrement effectué.");
} 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('report_card_new');
}
return $this->redirectToRoute('report_card_edit', ['id' => $reportCard->getId()]);
}
return $this->renderForm('school/report_card/new.html.twig', [
'report_card' => $reportCard,
'form' => $form,
]);
}
/**
* @Route("/{id}/edit", name="report_card_edit", methods={"GET","POST"})
*/
public function edit(Request $request, StudentAverageReportCardCalculator $studentAverageReportCardCalculator, StudentAverageCalculator $studentAverageCalculator, SchoolReportCardAbsenceRepository $schoolReportCardAbsenceRepository, ReportCard $reportCard, RegistrationStudentRegistrationRepository $registrationStudentRegistrationRepository, SchoolReportCardRepository $schoolReportCardRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$registrationStudentRegistrations = $registrationStudentRegistrationRepository->createQueryBuilder('entity')
->innerJoin('entity.classroom', 'classroom')
->addSelect('classroom')
->innerJoin('entity.student', 'student')
->addSelect('student')
->andWhere('classroom.level = :level')
->setParameter('level', $reportCard->getLevel())
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.status != :status')
->setParameter('status', RegistrationStudentRegistration::STATUS_ABANDONNE)
->orderBy('student.last_name', 'ASC')
->getQuery()
->getResult();
$entityManager = $this->getDoctrine()->getManager();
$form = $this->createForm(ReportCardType::class, $reportCard);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
try {
$entityManager->flush();
$this->addFlash('success', "Enrégistrement effectué.");
} 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('report_card_edit', ['id' => $reportCard->getId()]);
}
$schoolReportCard = new SchoolReportCard();
$schoolReportCardForm = $this->createForm(SchoolReportCardType::class, $schoolReportCard)
->add('studentRegistration', EntityType::class, [
'class' => RegistrationStudentRegistration::class,
'choices' => $registrationStudentRegistrations
])
->remove('coefficient')
->remove('note_on');
$schoolReportCardForm->handleRequest($request);
if ($schoolReportCardForm->isSubmitted() && $schoolReportCardForm->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$schoolReportCard->setEstablishment($establishment);
$schoolReportCard->setSchoolYear($schoolYear);
$schoolReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
$schoolReportCard->setClassroom($schoolReportCard->getStudentRegistration()->getClassroom());
$schoolReportCard->setReportCard($reportCard);
$schoolReportCard->setNoteOn($reportCard->getNoteOn());
$schoolReportCard->setCoefficient($reportCard->getCoefficient());
$schoolReportCard->setCode('BE'.$reportCard->getCode().$schoolReportCard->getStudentRegistration()->getId());
$schoolReportCard->setLabel($reportCard->getLabel());
$schoolReportCard->setOrderNum($reportCard->getOrderNum());
$schoolReportCard->setType("normal");
foreach ($schoolReportCard->getClassroom()->getLevel()->getSchoolMatters() as $key => $matter) {
if ($schoolReportCard->getStudentRegistration()->asMatterDone($matter, $reportCard)) {
$schoolAverageReportCard = new SchoolAverageReportCard();
$schoolAverageReportCard->setCode('MY'.$schoolReportCard->getCode().$matter->getId());
//$schoolAverageReportCard->setAverage($schoolReportCard->getStudentRegistration()->computePeriodeAverage($matter, $reportCard, $schoolAverageReportCard));
$schoolAverageReportCard->setAverage($studentAverageCalculator->calculateSubjectAverage($schoolReportCard->getStudentRegistration(), $matter, $reportCard->getSchoolYearPeriode()));
$schoolAverageReportCard->setClassroom($schoolReportCard->getClassroom());
$schoolAverageReportCard->setCoefficient($matter->getCoefficient());
$schoolAverageReportCard->setCoefficientXAverage($schoolAverageReportCard->getAverage() * $schoolAverageReportCard->getCoefficient());
$schoolAverageReportCard->setEstablishment($establishment);
$schoolAverageReportCard->setMatter($matter);
$schoolAverageReportCard->setIsMatterConduct($matter->getIsMatterConduct());
$schoolAverageReportCard->setNoteOn($matter->getNotedOn());
$schoolAverageReportCard->setOrderNum($matter->getOrderNum());
$schoolAverageReportCard->setReportCard($schoolReportCard);
$schoolAverageReportCard->setSchoolYear($schoolYear);
$schoolAverageReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
$schoolAverageReportCard->setStudentRegistration($schoolReportCard->getStudentRegistration());
$countSubMatters = 0;
foreach ($matter->getSchoolSubMatters() as $key => $schoolSubMatter) {
$schoolAverageReportCard->setAsSubmatter(true);
//if ($schoolReportCard->getStudentRegistration()->asMatterDone($matter, $reportCard)) {
$schoolSubAverageReportCard = new SchoolAverageReportCard();
$schoolSubAverageReportCard->setCode('SMY'.$schoolReportCard->getCode().$schoolSubMatter->getId());
//$schoolSubAverageReportCard->setAverage($schoolReportCard->getStudentRegistration()->computeSubPeriodeAverage($schoolSubMatter, $reportCard, $schoolAverageReportCard));
$schoolSubAverageReportCard->setAverage($studentAverageCalculator->calculateSubMatterAverage($schoolReportCard->getStudentRegistration(), $schoolSubMatter, $reportCard->getSchoolYearPeriode()));
$schoolSubAverageReportCard->setClassroom($schoolReportCard->getClassroom());
$schoolSubAverageReportCard->setCoefficient($schoolSubMatter->getCoefficient());
$schoolSubAverageReportCard->setCoefficientXAverage($schoolSubAverageReportCard->getAverage() * $schoolSubAverageReportCard->getCoefficient());
$schoolSubAverageReportCard->setEstablishment($establishment);
$schoolSubAverageReportCard->setMatter($matter);
$schoolSubAverageReportCard->setIsMatterConduct($matter->getIsMatterConduct());
$schoolSubAverageReportCard->setSubMatter($schoolSubMatter);
$schoolSubAverageReportCard->setNoteOn($schoolSubMatter->getNotedOn());
$schoolSubAverageReportCard->setOrderNum($matter->getOrderNum());
$schoolSubAverageReportCard->setReportCard($schoolReportCard);
$schoolSubAverageReportCard->setSchoolYear($schoolYear);
$schoolSubAverageReportCard->setSchoolYearPeriode($reportCard->getSchoolYearPeriode());
$schoolSubAverageReportCard->setStudentRegistration($schoolReportCard->getStudentRegistration());
$entityManager->persist($schoolSubAverageReportCard);
//}
}
//if ($countSubMatters <= 0) {
$entityManager->persist($schoolAverageReportCard);
//}
}
}
$entityManager->persist($schoolReportCard);
try {
$entityManager->flush();
$this->addFlash('success', "Enrégistrement effectué.");
} 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('report_card_edit', ['id' => $reportCard->getId()]);
}
$schoolReportCards = $schoolReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.studentRegistration', 'studentRegistration')
->addSelect('studentRegistration')
->innerJoin('studentRegistration.student', 'student')
->addSelect('student')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $reportCard)
->orderBy('student.first_name', 'ASC')
->orderBy('student.last_name', 'ASC')
->getQuery()
->getResult();
$school_report_cards = new ArrayCollection();
foreach ($schoolReportCards as $key => $schoolReportCard) {
//dd($studentAverageReportCardCalculator->calculateClassStatistics($schoolReportCard->getClassroom(), $reportCard));
if (!$reportCard->getIsValidated()) {
foreach ($schoolReportCard->getSchoolAverageReportCards() as $key => $schoolAverageReportCard) {
// Vérifier si c'est une sous-matière ou une matière principale
if ($schoolAverageReportCard->getSubMatter() !== null) {
// C'est une sous-matière, calculer sa moyenne spécifique
$schoolAverageReportCard->setAverage($studentAverageCalculator->calculateSubMatterAverage($schoolReportCard->getStudentRegistration(), $schoolAverageReportCard->getSubMatter(), $reportCard->getSchoolYearPeriode()));
} else {
// C'est une matière principale, calculer sa moyenne
$schoolAverageReportCard->setAverage($studentAverageCalculator->calculateSubjectAverage($schoolReportCard->getStudentRegistration(), $schoolAverageReportCard->getMatter(), $reportCard->getSchoolYearPeriode()));
}
}
$schoolReportCard->setReportCardAverage($studentAverageReportCardCalculator->calculateGeneralAverage($schoolReportCard));
$schoolReportCard->setTotalAverage($studentAverageReportCardCalculator->calculateTotalAverage($schoolReportCard));
$schoolReportCard->setTotalCoefficient($studentAverageReportCardCalculator->calculateTotalCoefficient($schoolReportCard));
$schoolReportCard->setSmallestAverage($studentAverageReportCardCalculator->calculateClassStatistics($schoolReportCard->getClassroom(), $reportCard)['min_average']);
$schoolReportCard->setSstrongestAverage($studentAverageReportCardCalculator->calculateClassStatistics($schoolReportCard->getClassroom(), $reportCard)['max_average']);
$schoolReportCard->setClassAverage($studentAverageReportCardCalculator->calculateClassStatistics($schoolReportCard->getClassroom(), $reportCard)['class_average']);
$schoolReportCardAbsence = $studentAverageReportCardCalculator->calculateAbsences($schoolReportCard->getStudentRegistration(), $reportCard);
$schoolReportCard->setUnjustifiedAbsence($schoolReportCardAbsence['unjustified_absence']);
$schoolReportCard->setJustifiedAbsence($schoolReportCardAbsence['justified_absence']);
// $schoolReportCardAbsence = $schoolReportCardAbsenceRepository->findOneBy(['schoolYearPeriode' => $reportCard->getSchoolYearPeriode(), 'studentRegistration' => $schoolReportCard->getStudentRegistration()], []);
//if (null != $schoolReportCardAbsence) {
// $schoolReportCard->setUnjustifiedAbsence($schoolReportCardAbsence->getUnjustifiedAbsence());
// $schoolReportCard->setJustifiedAbsence($schoolReportCardAbsence->getJustifiedAbsence());
//}
}
$school_report_cards->add([
'id' => $schoolReportCard->getId(),
'code' => $schoolReportCard->getStudentRegistration()->getStudent()->getRegistrationNumber(),
'name' => $schoolReportCard->getStudentRegistration()->getStudent()->getName(),
'classroom' => $schoolReportCard->getStudentRegistration()->getClassroom()->getLabel(),
'reportCardAverage' => $schoolReportCard->getReportCardAverage(),
'isValidated' => $schoolReportCard->getIsValidated(),
'isUnclassified' => $schoolReportCard->isUnclassified(),
]);
}
try {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->flush();
} catch (\Throwable $th) {
//throw $th;
}
$school_report_cards_array = $school_report_cards->toArray();
uasort($school_report_cards_array, function ($first, $second) {
if ($first === $second) {
return 0;
}
return $first['name'] < $second['name'] ? -1 : 1;
});
$school_report_cards = new ArrayCollection($school_report_cards_array);
return $this->renderForm('school/report_card/edit.html.twig', [
'school_report_cards' => $school_report_cards,
'report_card' => $reportCard,
'form' => $form,
'school_report_card' => $schoolReportCard,
'school_report_card_form' => $schoolReportCardForm,
]);
}
/**
* @Route("/delete-selection", name="report_cards_selected_delete", methods={"GET"})
*/
public function deleteSelected(Request $request, ReportCardRepository $entityRepository): Response
{
$list = $request->get('entities');
$entityManager = $this->getDoctrine()->getManager();
$errors = 0;
$success = 0;
foreach ($list as $key => $id) {
$entity = $entityRepository->findOneBy(['id' => intval($id)], []);
if ($entity != null) {
if (!$entity->getIsValidated()) {
foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
foreach ($schoolReportCard->getSchoolAverageReportCards() as $key => $schoolAverageReportCard) {
$entityManager->remove($schoolAverageReportCard);
}
foreach ($schoolReportCard->getSchoolAssessmentByClassByMatters() as $key => $schoolAssessmentByClassByMatter) {
$entityManager->remove($schoolAssessmentByClassByMatter);
}
foreach ($schoolReportCard->getSchoolAssessmentByClasses() as $key => $schoolAssessmentByClasse) {
$entityManager->remove($schoolAssessmentByClasse);
}
foreach ($schoolReportCard->getSchoolAssessmentByLevelByMatters() as $key => $schoolAssessmentByLevelByMatter) {
$entityManager->remove($schoolAssessmentByLevelByMatter);
}
foreach ($schoolReportCard->getSchoolAssessmentByLevels() as $key => $schoolAssessmentByLevel) {
$entityManager->remove($schoolAssessmentByLevel);
}
$entityManager->remove($schoolReportCard);
}
foreach ($entity->getSchoolAssessments() as $key => $schoolAssessmentByLevel) {
$entityManager->remove($schoolAssessmentByLevel);
}
$entityManager->remove($entity);
$success++;
}else {
$errors++;
}
}else {
$errors++;
}
}
try {
$entityManager->flush();
$this->addFlash('success', $success." éléments on été supprimés");
return $this->json(['code' => 200, 'message' => $success." éléments on été supprimés"], 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="report_card_validate", methods={"GET"})
*/
public function validate(ReportCard $entity): Response
{
foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
$schoolReportCard->setIsValidated(true);
}
$entityManager = $this->getDoctrine()->getManager();
$entity->setIsValidated(true);
try {
$entityManager->flush();
$this->addFlash('success', "Traitement effectué");
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectué");
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/cancel", name="report_card_cancel", methods={"GET"})
*/
public function cancel(ReportCard $entity): Response
{
$entityManager = $this->getDoctrine()->getManager();
foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
$schoolReportCard->setIsValidated(false);
}
$entity->setIsValidated(false);
try {
$entityManager->flush();
$this->addFlash('success', "Traitement effectué");
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectué");
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/compute-conduct-average", name="report_card_compute_conduct_average", methods={"GET"})
*/
public function computeConductAverage(ReportCard $entity, SchoolAbsenceAndDelayRepository $schoolAbsenceAndDelayRepository, SchoolAbsenceAndDelaySettingRepository $schoolAbsenceAndDelaySettingRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$schoolAbsenceAndDelaySetting = $schoolAbsenceAndDelaySettingRepository->findOneBy(['establishment' => $entity->getEstablishment()], []);
//calcule des moyenne de conduite
foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
if (!$schoolReportCard->getIsValidated()) {
if ($entity->getEstablishment()->getType() != $entity->getEstablishment()::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES){
$justifiedAbsence = $schoolAbsenceAndDelayRepository->createQueryBuilder('entity')
->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
->setParameter('schoolYearPeriode', $schoolReportCard->getSchoolYearPeriode())
->andWhere('entity.studentRegistration = :studentRegistration')
->setParameter('studentRegistration', $schoolReportCard->getStudentRegistration())
->andWhere('entity.situation = :situation')
->setParameter('situation', 'ABSENCE')
->andWhere('entity.duration_type = :duration_type')
->setParameter('duration_type', 'HEURE')
->andWhere('entity.is_justify = :is_justify')
->setParameter('is_justify', 1)
->select('SUM(entity.duration)')
->getQuery()
->getSingleScalarResult();
$unJustifiedAbsence = $schoolAbsenceAndDelayRepository->createQueryBuilder('entity')
->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
->setParameter('schoolYearPeriode', $schoolReportCard->getSchoolYearPeriode())
->andWhere('entity.studentRegistration = :studentRegistration')
->setParameter('studentRegistration', $schoolReportCard->getStudentRegistration())
->andWhere('entity.situation = :situation')
->setParameter('situation', 'ABSENCE')
->andWhere('entity.duration_type = :duration_type')
->setParameter('duration_type', 'HEURE')
->andWhere('entity.is_justify = :is_justify')
->setParameter('is_justify', 0)
->select('SUM(entity.duration)')
->getQuery()
->getSingleScalarResult();
$schoolReportCard->setJustifiedAbsence($justifiedAbsence);
$schoolReportCard->setUnJustifiedAbsence($unJustifiedAbsence);
}
}
}
try {
$entityManager->flush();
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectué");
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/compute-average", name="report_card_compute_average", methods={"GET"})
*/
public function computeAverage(ReportCard $entity, SchoolAverageReportCardRepository $schoolAverageReportCardRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
//calcule des moyenne
foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
if (!$schoolReportCard->getIsValidated()) {
if ($entity->getEstablishment()->getType() == $entity->getEstablishment()::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES){
$reportCardAverage = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.reportCard', 'reportCard')
->addSelect('reportCard')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $schoolReportCard)
->andWhere('entity.average < :average')
->setParameter('average', 999)
//->select('SUM(entity.average * (entity.note_on / reportCard.note_on)) / (SUM(entity.note_on / reportCard.note_on))')
->select('SUM(entity.average) / (SUM(entity.note_on / reportCard.note_on))')
->getQuery()
->getSingleScalarResult();
$schoolReportCard->setReportCardAverage($reportCardAverage);
}else {
$sumAverages = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.matter', 'matter')
->addSelect('matter')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $schoolReportCard)
->andWhere('entity.average != :average')
->setParameter('average', 999)
->andWhere('entity.as_submatter = :as_submatter')
->setParameter('as_submatter', 0)
->select('SUM(entity.average * entity.coefficient)')
->getQuery()
->getSingleScalarResult();
$sumCoefficients = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.matter', 'matter')
->addSelect('matter')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $schoolReportCard)
->andWhere('entity.average != :average')
->setParameter('average', 999)
->andWhere('entity.as_submatter = :as_submatter')
->setParameter('as_submatter', 0)
->select('SUM(entity.coefficient)')
->getQuery()
->getSingleScalarResult();
$schoolReportCard->setTotalAverage($sumAverages);
$schoolReportCard->setTotalCoefficient($sumCoefficients);
$schoolReportCard->setReportCardAverage(0);
if ($sumCoefficients > 0) {
$schoolReportCard->setReportCardAverage($sumAverages / $sumCoefficients);
}
}
}
}
try {
$entityManager->flush();
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectué");
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/compute-min-max-average", name="report_card_compute_min_max_average", methods={"GET"})
*/
public function computeMinMaxAverage(ReportCard $entity, SchoolReportCardRepository $schoolReportCardRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
//min max moyenne de la classe
foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
$minAverage = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.is_unclassified = :is_unclassified')
->setParameter('is_unclassified', 0)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->select('MIN(entity.report_card_average)')
->getQuery()
->getSingleScalarResult();
$schoolReportCard->setSmallestAverage($minAverage);
$maxAverage = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.is_unclassified = :is_unclassified')
->setParameter('is_unclassified', 0)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->select('MAX(entity.report_card_average)')
->getQuery()
->getSingleScalarResult();
$schoolReportCard->setSstrongestAverage($maxAverage);
$classAverage = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.is_unclassified = :is_unclassified')
->setParameter('is_unclassified', 0)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->select('AVG(entity.report_card_average)')
->getQuery()
->getSingleScalarResult();
$schoolReportCard->setClassAverage($classAverage);
$classAnnualAverage = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolReportCard->getSchoolYear())
->andWhere('entity.is_unclassified = :is_unclassified')
->setParameter('is_unclassified', 0)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->select('AVG(entity.annual_average)')
->getQuery()
->getSingleScalarResult();
$schoolReportCard->setClassAnnualAverage($classAnnualAverage);
}
try {
$entityManager->flush();
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/compute-rank", name="report_card_compute_rank", methods={"GET"})
*/
public function computeRank(ReportCard $entity, SchoolReportCardRepository $schoolReportCardRepository, SchoolAverageReportCardRepository $schoolAverageReportCardRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$index = 1;
foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
// rang de la periode
foreach ($schoolReportCard->getReportCard()->getLevel()->getSchoolMatters() as $key => $schoolMatter) {
$schoolAverageReportCards = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.reportCard', 'schoolReportCard')
->addSelect('schoolReportCard')
->andWhere('schoolReportCard.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->andWhere('entity.matter = :matter')
->setParameter('matter', $schoolMatter)
->andWhere('entity.average < :maxAverage')
->setParameter('maxAverage', 999)
->orderBy('entity.average', 'DESC')
->getQuery()
->getResult();
$countSchoolAverageReportCard = 1;
$countExSchoolAverageReportCard = 1;
$moyPrecedent = -1;
foreach ($schoolAverageReportCards as $key => $schoolAverageReportCard) {
if ($schoolAverageReportCard->getAverage() >= 999 || $schoolAverageReportCard->getCoefficient() <= 0 || $schoolAverageReportCard->getNoteOn() <= 0) {
$schoolAverageReportCard->setRank('NC');
}else {
if ($schoolAverageReportCard->getSubMatter() == null) {
if ($schoolAverageReportCard->getAverage() == $moyPrecedent) {
if ($countSchoolAverageReportCard == 1) {
if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolAverageReportCard->setRank($countExSchoolAverageReportCard.'ère EX');
}else {
$schoolAverageReportCard->setRank($countExSchoolAverageReportCard.'er EX');
}
}else {
$schoolAverageReportCard->setRank($countExSchoolAverageReportCard.'è EX');
}
}else {
if ($countSchoolAverageReportCard == 1) {
if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolAverageReportCard->setRank($countSchoolAverageReportCard.'ère');
}else {
$schoolAverageReportCard->setRank($countSchoolAverageReportCard.'er');
}
}else {
$schoolAverageReportCard->setRank($countSchoolAverageReportCard.'è');
}
$countExSchoolAverageReportCard = $countSchoolAverageReportCard;
}
$countSchoolAverageReportCard++;
$moyPrecedent = $schoolAverageReportCard->getAverage();
}
}
}
}
foreach ($schoolReportCard->getClassroom()->getLevel()->getSchoolSubMatters() as $key => $schoolSubMatter) {
$schoolAverageReportCards = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.reportCard', 'schoolReportCard')
->addSelect('schoolReportCard')
->andWhere('schoolReportCard.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->andWhere('entity.subMatter = :subMatter')
->setParameter('subMatter', $schoolSubMatter)
->andWhere('entity.average < :maxAverage')
->setParameter('maxAverage', 999)
->orderBy('entity.average', 'DESC')
->getQuery()
->getResult();
$countSubSchoolAverageReportCard = 1;
$countExSubSchoolAverageReportCard = 1;
$moySubPrecedent = -1;
foreach ($schoolAverageReportCards as $key => $schoolAverageReportCard) {
if ($schoolAverageReportCard->getAverage() >= 999 || $schoolAverageReportCard->getCoefficient() <= 0 || $schoolAverageReportCard->getNoteOn() <= 0) {
$schoolAverageReportCard->setRank('NC');
}else {
if ($schoolAverageReportCard->getAverage() == $moySubPrecedent) {
if ($countSubSchoolAverageReportCard == 1) {
if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolAverageReportCard->setRank($countExSubSchoolAverageReportCard.'ère EX');
}else {
$schoolAverageReportCard->setRank($countExSubSchoolAverageReportCard.'er EX');
}
}else {
$schoolAverageReportCard->setRank($countExSubSchoolAverageReportCard.'è EX');
}
}else {
if ($countSubSchoolAverageReportCard == 1) {
if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolAverageReportCard->setRank($countSubSchoolAverageReportCard.'ère');
}else {
$schoolAverageReportCard->setRank($countSubSchoolAverageReportCard.'er');
}
}else {
$schoolAverageReportCard->setRank($countSubSchoolAverageReportCard.'è');
}
$countExSubSchoolAverageReportCard = $countSubSchoolAverageReportCard;
}
$countSubSchoolAverageReportCard++;
$moySubPrecedent = $schoolAverageReportCard->getAverage();
}
}
}
$schoolReportCards = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.is_unclassified = :is_unclassified')
->setParameter('is_unclassified', 0)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->orderBy('entity.report_card_average', 'DESC')
->getQuery()
->getResult();
$count = 1;
$countEx = 1;
$moyPre = -1;
foreach ($schoolReportCards as $key => $schoolReportCard) {
if ($schoolReportCard->isUnclassified()) {
$schoolReportCard->setRank('NC');
$schoolReportCard->setIsUnclassified(true);
}else{
if ($schoolReportCard->getReportCardAverage() == $moyPre) {
if ($count == 1) {
if ($schoolReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolReportCard->setRank($countEx.'ère EX');
}else {
$schoolReportCard->setRank($countEx.'er EX');
}
}else {
$schoolReportCard->setRank($countEx.'è EX');
}
}else {
if ($count == 1) {
if ($schoolReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolReportCard->setRank($count.'ère');
}else {
$schoolReportCard->setRank($count.'er');
}
}else {
$schoolReportCard->setRank($count.'è');
}
$countEx = $count;
}
$count++;
$moyPre = $schoolReportCard->getReportCardAverage();
}
}
$index++;
}
try {
$entityManager->flush();
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/print", name="report_card_print", methods={"GET"})
*/
public function printReportCards(Request $request, Pdf $knpSnappyPdf, ReportCard $reportCard, SchoolMatterTypeRepository $schoolMatterTypeRepository, SchoolReportCardRepository $schoolReportCardRepository, SettingClassroomRepository $classroomRepository)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$setting = $reportCard->getEstablishment();
$template = 'school/print/primaireRepordCards.html.twig';
if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
$template = 'school/print/secondaireRepordCards.html.twig';
}
$classroomId = $request->query->get('classroom_id');
$classroom = $classroomId ? $classroomRepository->find($classroomId) : null;
$schoolReportCards = $schoolReportCardRepository->findByReportCardFiltered($reportCard, $classroom);
$html = $this->renderView($template, [
'report_card' => $reportCard,
'school_report_cards' => $schoolReportCards,
'school_year' => $schoolYear,
'school_matter_types' => $schoolMatterTypeRepository->findBy(['establishment' => $setting], ['order_num' => 'ASC']),
'setting' => $setting,
]);
$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
];
$file_name = 'BULLETINS_'.$reportCard->getCode().".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("/{id}/compute-annual-matter-average", name="report_card_compute_annual_matter_average", methods={"GET"})
*/
public function computeAnnualMatterAverage(ReportCard $reportCard, SchoolAverageReportCardRepository $schoolAverageReportCardRepository, SchoolReportCardRepository $schoolReportCardRepository, SchoolMatterRepository $schoolMatterRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
// Pour les matières
$donnees = new ArrayCollection();
foreach ($schoolMatterRepository->findBy(['establishment' => $reportCard->getEstablishment()], []) as $key => $schoolMatter) {
if (!$schoolMatter->getIsTestMatter()) {
foreach ($schoolMatter->getSchoolSubMatters() as $key => $schoolSubMatter) {
foreach ($reportCard->getSchoolReportCards() as $key => $schoolReportCard) {
$subSchoolAverageReportCard = $schoolAverageReportCardRepository->findOneBy(['studentRegistration' => $schoolReportCard->getStudentRegistration(), 'reportCard' => $schoolReportCard, 'subMatter' => $schoolSubMatter], []);
$xAverage = 0;
$coefficient = 0;
$xschoolAverageReportCards = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.reportCard', 'reportCard')
->addSelect('reportCard')
->andWhere('entity.studentRegistration = :studentRegistration')
->setParameter('studentRegistration', $schoolReportCard->getStudentRegistration())
->andWhere('entity.subMatter = :subMatter')
->setParameter('subMatter', $schoolSubMatter)
->andWhere('entity.average < :average')
->setParameter('average', 999)
->getQuery()
->getResult();
foreach ($xschoolAverageReportCards as $key => $xschoolAverageReportCard) {
$xAverage += ($xschoolAverageReportCard->getAverage() * $xschoolAverageReportCard->getReportCard()->getReportCard()->getCoefficient());
$coefficient += $xschoolAverageReportCard->getReportCard()->getReportCard()->getCoefficient();
}
if (null != $subSchoolAverageReportCard && $coefficient > 0) {
$subSchoolAverageReportCard->setAnnualAverage($xAverage / $coefficient);
}
}
}
foreach ($reportCard->getSchoolReportCards() as $key => $schoolReportCard) {
$schoolAverageReportCard = $schoolAverageReportCardRepository->findOneBy(['studentRegistration' => $schoolReportCard->getStudentRegistration(), 'reportCard' => $schoolReportCard, 'matter' => $schoolMatter, 'subMatter' => null], []);
$xAverage = 0;
$coefficient = 0;
$xschoolAverageReportCards = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.reportCard', 'reportCard')
->addSelect('reportCard')
->andWhere('entity.studentRegistration = :studentRegistration')
->setParameter('studentRegistration', $schoolReportCard->getStudentRegistration())
->andWhere('entity.matter = :matter')
->setParameter('matter', $schoolMatter)
->andWhere('entity.average < :average')
->setParameter('average', 999)
->getQuery()
->getResult();
foreach ($xschoolAverageReportCards as $key => $xschoolAverageReportCard) {
if ($xschoolAverageReportCard->getSubMatter() == null) {
$xAverage += ($xschoolAverageReportCard->getAverage() * $xschoolAverageReportCard->getReportCard()->getReportCard()->getCoefficient());
$coefficient += $xschoolAverageReportCard->getReportCard()->getReportCard()->getCoefficient();
}
}
if (null != $schoolAverageReportCard && $coefficient > 0) {
$schoolAverageReportCard->setAnnualAverage($xAverage / $coefficient);
}
}
try {
$entityManager->flush();
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
}
}
try {
$entityManager->flush();
return $this->json(['code' => 200, 'message' => "Moyenne annuelle Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectué");
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/compute-annual-report-card-average", name="report_card_compute_annual_report_card_average", methods={"GET"})
*/
public function computeAnnualReportCardAverage(ReportCard $reportCard, SchoolReportCardRepository $schoolReportCardRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
foreach ($reportCard->getSchoolReportCards() as $key => $schoolReportCard) {
$schoolReportCards = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.studentRegistration = :studentRegistration')
->setParameter('studentRegistration', $schoolReportCard->getStudentRegistration())
->getQuery()
->getResult();
foreach ($schoolReportCards as $key => $schoolReportCard) {
$xAverage = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.studentRegistration = :studentRegistration')
->setParameter('studentRegistration', $schoolReportCard->getStudentRegistration())
->andWhere('entity.report_card_average > :report_card_average')
->setParameter('report_card_average', 0)
->select('SUM(entity.report_card_average * entity.coefficient)')
->getQuery()
->getSingleScalarResult();
$coefficient = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.studentRegistration = :studentRegistration')
->setParameter('studentRegistration', $schoolReportCard->getStudentRegistration())
->andWhere('entity.report_card_average > :report_card_average')
->setParameter('report_card_average', 0)
->select('SUM(entity.coefficient)')
->getQuery()
->getSingleScalarResult();
if ($coefficient > 0) {
$schoolReportCard->setAnnualAverage($xAverage / $coefficient );
}
}
}
try {
$entityManager->flush();
return $this->json(['code' => 200, 'message' => "Moyenne annuel Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectué");
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/compute-annual-rank", name="report_card_compute_annual_rank", methods={"GET"})
*/
public function computeAnnualRank(ReportCard $entity, SchoolReportCardRepository $schoolReportCardRepository, SchoolAverageReportCardRepository $schoolAverageReportCardRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$index = 1;
$donnees = new ArrayCollection();
$index = 1;
foreach ($entity->getSchoolReportCards() as $key => $schoolReportCard) {
// rang de la periode
foreach ($schoolReportCard->getReportCard()->getLevel()->getSchoolMatters() as $key => $schoolMatter) {
$schoolAverageReportCards = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.reportCard', 'schoolReportCard')
->addSelect('schoolReportCard')
->andWhere('schoolReportCard.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->andWhere('entity.matter = :matter')
->setParameter('matter', $schoolMatter)
->orderBy('entity.annual_average', 'DESC')
->getQuery()
->getResult();
$countSchoolAverageReportCard = 1;
$countExSchoolAverageReportCard = 1;
$moyPrecedent = -1;
foreach ($schoolAverageReportCards as $key => $schoolAverageReportCard) {
if ($schoolAverageReportCard->getAnnualAverage() > 20) {
$schoolAverageReportCard->setAnnualRank('NC');
}else {
if ($schoolAverageReportCard->getSubMatter() == null) {
if ($schoolAverageReportCard->getAnnualAverage() == $moyPrecedent) {
if ($countSchoolAverageReportCard == 1) {
if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolAverageReportCard->setAnnualRank($countExSchoolAverageReportCard.'ère EX');
}else {
$schoolAverageReportCard->setAnnualRank($countExSchoolAverageReportCard.'er EX');
}
}else {
$schoolAverageReportCard->setAnnualRank($countExSchoolAverageReportCard.'è EX');
}
}else {
if ($countSchoolAverageReportCard == 1) {
if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolAverageReportCard->setAnnualRank($countSchoolAverageReportCard.'ère');
}else {
$schoolAverageReportCard->setAnnualRank($countSchoolAverageReportCard.'er');
}
}else {
$schoolAverageReportCard->setAnnualRank($countSchoolAverageReportCard.'è');
}
$countExSchoolAverageReportCard = $countSchoolAverageReportCard;
}
$countSchoolAverageReportCard++;
$moyPrecedent = $schoolAverageReportCard->getAnnualAverage();
}
}
}
}
foreach ($schoolReportCard->getClassroom()->getLevel()->getSchoolSubMatters() as $key => $schoolSubMatter) {
$schoolAverageReportCards = $schoolAverageReportCardRepository->createQueryBuilder('entity')
->innerJoin('entity.reportCard', 'schoolReportCard')
->addSelect('schoolReportCard')
->andWhere('schoolReportCard.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolReportCard->getClassroom())
->andWhere('entity.subMatter = :subMatter')
->setParameter('subMatter', $schoolSubMatter)
->orderBy('entity.annual_average', 'DESC')
->getQuery()
->getResult();
$countSubSchoolAverageReportCard = 1;
$countExSubSchoolAverageReportCard = 1;
$moySubPrecedent = -1;
foreach ($schoolAverageReportCards as $key => $schoolAverageReportCard) {
if ($schoolAverageReportCard->getAverage() >= 999 || $schoolAverageReportCard->getCoefficient() <= 0 || $schoolAverageReportCard->getNoteOn() <= 0) {
$schoolAverageReportCard->setAnnualRank('NC');
}else {
if ($schoolAverageReportCard->getAverage() == $moySubPrecedent) {
if ($countSubSchoolAverageReportCard == 1) {
if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolAverageReportCard->setAnnualRank($countExSubSchoolAverageReportCard.'ère EX');
}else {
$schoolAverageReportCard->setAnnualRank($countExSubSchoolAverageReportCard.'er EX');
}
}else {
$schoolAverageReportCard->setAnnualRank($countExSubSchoolAverageReportCard.'è EX');
}
}else {
if ($countSubSchoolAverageReportCard == 1) {
if ($schoolAverageReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolAverageReportCard->setAnnualRank($countSubSchoolAverageReportCard.'ère');
}else {
$schoolAverageReportCard->setAnnualRank($countSubSchoolAverageReportCard.'er');
}
}else {
$schoolAverageReportCard->setAnnualRank($countSubSchoolAverageReportCard.'è');
}
$countExSubSchoolAverageReportCard = $countSubSchoolAverageReportCard;
}
$countSubSchoolAverageReportCard++;
$moySubPrecedent = $schoolAverageReportCard->getAverage();
}
}
}
}
foreach ($entity->getLevel()->getSettingClassrooms() as $key => $classroom) {
$schoolReportCards = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $classroom)
->orderBy('entity.annual_average', 'DESC')
->getQuery()
->getResult();
$count = 1;
$countEx = 1;
$moySubPre = -1;
foreach ($schoolReportCards as $key => $schoolReportCard) {
if ($schoolReportCard->getAnnualAverage() == $moySubPre) {
if ($count == 1) {
if ($schoolReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolReportCard->setAnnualRank($countEx.'ère EX');
}else {
$schoolReportCard->setAnnualRank($countEx.'er EX');
}
}else {
$schoolReportCard->setAnnualRank($countEx.'è EX');
}
}else {
if ($count == 1) {
if ($schoolReportCard->getStudentRegistration()->getStudent()->getGender() == 'FEMININ') {
$schoolReportCard->setAnnualRank($count.'ère');
}else {
$schoolReportCard->setAnnualRank($count.'er');
}
}else {
$schoolReportCard->setAnnualRank($count.'è');
}
$countEx = $count;
}
$count++;
$moySubPre = $schoolReportCard->getAnnualAverage();
}
$index++;
}
try {
$entityManager->flush();
return $this->json(['code' => 200, 'message' => "Ran annuel Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/maternelle-print", name="report_card_maternelle_print", methods={"GET"})
*/
public function printMaternelleReportCards(Request $request, Pdf $knpSnappyPdf, ReportCard $reportCard, SchoolMatterTypeRepository $schoolMatterTypeRepository, SchoolReportCardRepository $schoolReportCardRepository, SettingClassroomRepository $classroomRepository)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$setting = $reportCard->getEstablishment();
$template = 'school/print/maternelleRepordCards.html.twig';
$classroomId = $request->query->get('classroom_id');
$classroom = $classroomId ? $classroomRepository->find($classroomId) : null;
$schoolReportCards = $schoolReportCardRepository->findByReportCardFiltered($reportCard, $classroom);
$html = $this->renderView($template, [
'report_card' => $reportCard,
'school_report_cards' => $schoolReportCards,
'school_year' => $schoolYear,
'school_matter_types' => $schoolMatterTypeRepository->findBy(['establishment' => $setting], ['order_num' => 'ASC']),
'setting' => $setting,
]);
$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
];
$file_name = 'BULLETINS_MATERNELLE_'.$reportCard->getCode().".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("/{id}/last-maternelle-print", name="report_card_last_maternelle_print", methods={"GET"})
*/
public function printLastMaternelleReportCards(Request $request, Pdf $knpSnappyPdf, ReportCard $reportCard, SchoolMatterTypeRepository $schoolMatterTypeRepository, SchoolReportCardRepository $schoolReportCardRepository, SettingClassroomRepository $classroomRepository)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$setting = $reportCard->getEstablishment();
$template = 'school/print/maternelleLastRepordCards.html.twig';
$classroomId = $request->query->get('classroom_id');
$classroom = $classroomId ? $classroomRepository->find($classroomId) : null;
$schoolReportCards = $schoolReportCardRepository->findByReportCardFiltered($reportCard, $classroom);
$html = $this->renderView($template, [
'report_card' => $reportCard,
'school_report_cards' => $schoolReportCards,
'school_year' => $schoolYear,
'school_matter_types' => $schoolMatterTypeRepository->findBy(['establishment' => $setting], ['order_num' => 'ASC']),
'setting' => $setting,
]);
$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
];
$file_name = 'BULLETINS_ANNUELS_MATERNELLE_'.$reportCard->getCode().".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("/{id}/last-print", name="report_card_last_print", methods={"GET"})
*/
public function printLastReportCards(Request $request, Pdf $knpSnappyPdf, ReportCard $reportCard, SchoolMatterTypeRepository $schoolMatterTypeRepository, SchoolReportCardRepository $schoolReportCardRepository, SettingClassroomRepository $classroomRepository)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$setting = $reportCard->getEstablishment();
$template = 'school/print/primaireLastRepordCards.html.twig';
if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
$template = 'school/print/secondaireLastRepordCards.html.twig';
}
$classroomId = $request->query->get('classroom_id');
$classroom = $classroomId ? $classroomRepository->find($classroomId) : null;
$schoolReportCards = $schoolReportCardRepository->findByReportCardFiltered($reportCard, $classroom);
$html = $this->renderView($template, [
'report_card' => $reportCard,
'school_report_cards' => $schoolReportCards,
'schoolReportCardRepository' => $schoolReportCardRepository,
'school_year' => $schoolYear,
'school_matter_types' => $schoolMatterTypeRepository->findBy(['establishment' => $setting], ['order_num' => 'ASC']),
'setting' => $setting,
]);
$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
];
$file_name = 'BULLETINS_ANNUELS_'.$reportCard->getCode().".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("/{id}/blank-note-card-print", name="report_card_blank_note_card_print", methods={"GET"})
*/
public function printBlankNoteCard(Pdf $knpSnappyPdf, ReportCard $reportCard)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$setting = $reportCard->getEstablishment();
$template = 'school/print/blankNoteCard.html.twig';
if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
$template = 'school/print/blankNoteCard.html.twig';
}
$html = $this->renderView($template, [
'report_card' => $reportCard,
'school_year' => $schoolYear,
'setting' => $setting,
]);
$footer = $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
$header = $this->renderView('print/header.html.twig', ['setting' => $setting,]);
$options = [
'orientation' => 'Landscape',
'header-html' => $header,
'footer-html' => $footer
];
$file_name = 'FICHE_DE_NOTES_VIDE_'.$reportCard->getCode().".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("/{id}/note-card-print", name="report_card_note_card_print", methods={"GET"})
*/
public function printNoteCard(Pdf $knpSnappyPdf, ReportCard $reportCard)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$setting = $reportCard->getEstablishment();
$template = 'school/print/noteCard.html.twig';
if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
$template = 'school/print/noteCard.html.twig';
}
$html = $this->renderView($template, [
'report_card' => $reportCard,
'school_year' => $schoolYear,
'setting' => $setting,
]);
$footer = $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
$header = $this->renderView('print/header.html.twig', ['setting' => $setting,]);
$options = [
'orientation' => 'Landscape',
'header-html' => $header,
'footer-html' => $footer
];
$file_name = 'FICHE_DE_NOTES_'.$reportCard->getCode().".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("/{id}/assessment-slip-print", name="report_card_assessment_slip_print", methods={"GET"})
*/
public function printAssessmentSlip(Pdf $knpSnappyPdf, ReportCard $reportCard)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$setting = $reportCard->getEstablishment();
$template = 'school/print/assessmentSlip.html.twig';
if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
$template = 'school/print/assessmentSlip.html.twig';
}
$html = $this->renderView($template, [
'report_card' => $reportCard,
'school_year' => $schoolYear,
'setting' => $setting,
]);
$footer = $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
$header = $this->renderView('print/header.html.twig', ['setting' => $setting,]);
$options = [
'orientation' => 'Landscape',
'header-html' => $header,
'footer-html' => $footer
];
$file_name = 'BORDEREAU_EVALUATION_'.$reportCard->getCode().".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("/{id}/compute-level-average", name="report_card_compute_level_average", methods={"GET"})
*/
public function computeLevelAverage(ReportCard $entity, SchoolReportCardRepository $schoolReportCardRepository): Response
{
$entityManager = $this->getDoctrine()->getManager();
$levelAverage = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.is_unclassified = :is_unclassified')
->setParameter('is_unclassified', 0)
->select('AVG(entity.report_card_average)')
->getQuery()
->getSingleScalarResult();
$minAverage = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.is_unclassified = :is_unclassified')
->setParameter('is_unclassified', 0)
->select('MIN(entity.report_card_average)')
->getQuery()
->getSingleScalarResult();
$maxAverage = $schoolReportCardRepository->createQueryBuilder('entity')
->andWhere('entity.reportCard = :reportCard')
->setParameter('reportCard', $entity)
->andWhere('entity.is_unclassified = :is_unclassified')
->setParameter('is_unclassified', 0)
->select('MAX(entity.report_card_average)')
->getQuery()
->getSingleScalarResult();
$entity->setLevelAverage($levelAverage);
$entity->setReportCardAverage($levelAverage);
$entity->setSmallestAverage($minAverage);
$entity->setStrongestAverage($maxAverage);
try {
$entityManager->flush();
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/{id}/annul-assessment-slip-print", name="report_card_annual_assessment_slip_print", methods={"GET"})
*/
public function printAnnualAssessmentSlip(Pdf $knpSnappyPdf, ReportCard $reportCard)
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$setting = $reportCard->getEstablishment();
$template = 'school/print/annual_assessment_slip.html.twig';
if ($setting->getType() != $setting::ESTABLISHMENT_PRESCOLAIRE_PRIMAIRE_TYPES) {
$template = 'school/print/annual_assessment_slip.html.twig';
}
$html = $this->renderView($template, [
'report_card' => $reportCard,
'school_year' => $schoolYear,
'setting' => $setting,
]);
$footer = $this->renderView('print/footer.html.twig', ['setting' => $setting,]);
$header = $this->renderView('print/header.html.twig', ['setting' => $setting,]);
$options = [
'orientation' => 'Landscape',
'header-html' => $header,
'footer-html' => $footer
];
$file_name = "BORDEREAU_EVALUATION_ANNUELLE_.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("/absence", name="report_card_absence", methods={"GET"})
*/
public function absence(Pdf $knpSnappyPdf, Request $request, ReportCardRepository $reportCardRepository, SchoolYearPeriodeRepository $schoolYearPeriodeRepository, SettingClassroomRepository $settingClassroomRepository, EntityManagerInterface $entityManager, SchoolReportCardAbsenceRepository $schoolReportCardAbsenceRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$requestedOutput = $request->query->get('output', $request->query->get('action', 'show'));
$schoolYearPeriode = $schoolYearPeriodeRepository->findOneBy(['establishment' => $establishment, 'id' => $request->get('schoolYearPeriode')], []);
$schoolYearPeriodes = $schoolYearPeriodeRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], []);
$settingClassrooms = $settingClassroomRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], []);
$settingClassroomId = $request->get('settingClassroom');
$settingClassroom = null;
if (null !== $settingClassroomId && '' !== $settingClassroomId && '0' !== (string) $settingClassroomId) {
$settingClassroom = $settingClassroomRepository->findOneBy(['establishment' => $establishment, 'id' => $settingClassroomId], []);
}
$reportCards = [];
if (null !== $schoolYearPeriode) {
$reportCards = $reportCardRepository->findBy(['establishment' => $establishment, 'schoolYearPeriode' => $schoolYearPeriode], []);
}
if (null != $schoolYearPeriode) {
$selectedClassrooms = null !== $settingClassroom ? [$settingClassroom] : $settingClassrooms;
foreach ($selectedClassrooms as $selectedClassroom) {
foreach ($selectedClassroom->getRegistereds($schoolYear) as $key => $studentRegistration) {
if (null == $schoolReportCardAbsenceRepository->findOneBy(['schoolYearPeriode' => $schoolYearPeriode, 'studentRegistration' => $studentRegistration], [])) {
$schoolReportCardAbsence = new SchoolReportCardAbsence();
$schoolReportCardAbsence->setEstablishment($establishment);
$schoolReportCardAbsence->setSchoolYear($schoolYear);
$schoolReportCardAbsence->setSchoolYearPeriode($schoolYearPeriode);
$schoolReportCardAbsence->setStudentRegistration($studentRegistration);
$schoolReportCardAbsence->setClassroom($selectedClassroom);
$schoolReportCardAbsence->setTotalAbsence($schoolReportCardAbsence->getNbHAbsence($schoolYearPeriode->getBeginAt(), $schoolYearPeriode->getEndAt()));
$schoolReportCardAbsence->setUnjustifiedAbsence($schoolReportCardAbsence->getNbHAbsence($schoolYearPeriode->getBeginAt(), $schoolYearPeriode->getEndAt()));
$schoolReportCardAbsence->setJustifiedAbsence(0);
$entityManager->persist($schoolReportCardAbsence);
}
}
}
}
try {
$entityManager->flush();
} catch (\Throwable $th) {
//throw $th;
}
$schoolReportCardAbsences = [];
if (null !== $schoolYearPeriode) {
$queryBuilder = $schoolReportCardAbsenceRepository->createQueryBuilder('entity')
->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
->setParameter('schoolYearPeriode', $schoolYearPeriode)
->innerJoin('entity.studentRegistration', 'studentRegistration')
->addSelect('studentRegistration')
->innerJoin('studentRegistration.student', 'student')
->addSelect('student')
->orderBy('student.last_name', 'asc')
->addOrderBy('student.first_name', 'asc');
if (null !== $settingClassroom) {
$queryBuilder
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $settingClassroom);
}
$schoolReportCardAbsences = $queryBuilder
->getQuery()
->getResult();
}
if ('excel' === $requestedOutput) {
$sortedSchoolReportCardAbsences = $schoolReportCardAbsences;
usort($sortedSchoolReportCardAbsences, function (SchoolReportCardAbsence $left, SchoolReportCardAbsence $right) {
$absenceComparison = ($left->getUnjustifiedAbsence() ?? 0) <=> ($right->getUnjustifiedAbsence() ?? 0);
if (0 !== $absenceComparison) {
return $absenceComparison;
}
$classroomComparison = strcmp((string) $left->getClassroom(), (string) $right->getClassroom());
if (0 !== $classroomComparison) {
return $classroomComparison;
}
return strcmp($left->getStudentRegistration()->getName(), $right->getStudentRegistration()->getName());
});
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$index = 1;
$sheet->setCellValue('A' . $index, 'RANG');
$sheet->setCellValue('B' . $index, 'NOM ET PRENOMS');
$sheet->setCellValue('C' . $index, 'MATRICULE');
$sheet->setCellValue('D' . $index, 'CLASSE');
$sheet->setCellValue('E' . $index, 'PERIODE');
$sheet->setCellValue('F' . $index, 'TOTAL H. ABSENCE');
$sheet->setCellValue('G' . $index, 'TOTAL H. JUSTIFIE');
$sheet->setCellValue('H' . $index, 'TOTAL H. NON JUSTIFIE');
$index++;
foreach ($sortedSchoolReportCardAbsences as $loopIndex => $schoolReportCardAbsence) {
$sheet->setCellValue('A' . $index, $loopIndex + 1);
$sheet->setCellValue('B' . $index, $schoolReportCardAbsence->getStudentRegistration()->getName());
$sheet->setCellValue('C' . $index, $schoolReportCardAbsence->getStudentRegistration()->getStudent()->getRegistrationNumber());
$sheet->setCellValue('D' . $index, (string) $schoolReportCardAbsence->getClassroom());
$sheet->setCellValue('E' . $index, (string) $schoolReportCardAbsence->getSchoolYearPeriode());
$sheet->setCellValue('F' . $index, $schoolReportCardAbsence->getTotalAbsence());
$sheet->setCellValue('G' . $index, $schoolReportCardAbsence->getJustifiedAbsence());
$sheet->setCellValue('H' . $index, $schoolReportCardAbsence->getUnjustifiedAbsence());
$index++;
}
foreach (range('A', 'H') as $column) {
$sheet->getColumnDimension($column)->setAutoSize(true);
}
$sheet->setTitle('ABSENCES');
$writer = new Xlsx($spreadsheet);
$classroomLabel = null !== $settingClassroom ? preg_replace('/[^A-Za-z0-9_-]/', '_', (string) $settingClassroom) : 'TOUTES_CLASSES';
$periodeLabel = null !== $schoolYearPeriode ? preg_replace('/[^A-Za-z0-9_-]/', '_', (string) $schoolYearPeriode) : 'SANS_PERIODE';
$fileName = 'ABSENCE_BULLETIN_' . $periodeLabel . '_' . $classroomLabel . '.xlsx';
$temp_file = sys_get_temp_dir() . DIRECTORY_SEPARATOR . uniqid('absence_bulletin_', true) . '.xlsx';
$writer->save($temp_file);
$response = new BinaryFileResponse($temp_file);
$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $fileName);
$response->deleteFileAfterSend(true);
return $response;
}
if ('print' === $requestedOutput) {
$html = $this->renderView('school/report_card/print/absence.html.twig', [
'school_report_card_absences' => $schoolReportCardAbsences,
'report_cards' => $reportCards,
'school_year_periodes' => $schoolYearPeriodes,
'school_year_periode' => $schoolYearPeriode,
'setting_classrooms' => $settingClassrooms,
'setting_classroom' => $settingClassroom,
'school_year' => $schoolYear,
'setting' => $establishment,
]);
$file_name = "ABSENCE_BULLETIN_.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
];
try {
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/recovery/' . $file_name, $options, true);
} catch (\Throwable $th) {
$this->addFlash('info', "Une erreur c'est produite");
}
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'recovery',
]);
}
return $this->render('school/report_card/absence.html.twig', [
'school_report_card_absences' => $schoolReportCardAbsences,
'report_cards' => $reportCards,
'school_year_periodes' => $schoolYearPeriodes,
'school_year_periode' => $schoolYearPeriode,
'setting_classrooms' => $settingClassrooms,
'setting_classroom' => $settingClassroom,
'requested_output' => $requestedOutput,
]);
}
}