<?php
namespace App\Controller\School;
use Knp\Snappy\Pdf;
use App\Entity\User;
use DateTimeImmutable;
use App\Entity\SchoolAverage;
use App\Entity\SchoolTeacher;
use App\Entity\SchoolYearPeriode;
use App\Repository\UserRepository;
use App\Entity\SchoolStudentAverage;
use App\Form\School\SchoolAverageType;
use App\Repository\SchoolMatterRepository;
use App\Repository\SchoolAverageRepository;
use App\Repository\SchoolTeacherRepository;
use Knp\Component\Pager\PaginatorInterface;
use App\Entity\SchoolTeacherMatterClassroom;
use App\Form\School\SchoolStudentAverageType;
use Symfony\Component\HttpFoundation\Request;
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\SchoolStudentAverageRepository;
use App\Repository\SchoolTeacherMatterClassroomRepository;
use App\Repository\RegistrationStudentRegistrationRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/**
* @Route("/school/average")
*/
class SchoolAverageController extends AbstractController
{
/**
* @Route("/index", name="school_average_index", methods={"GET"})
*/
public function index(
Request $request,
PaginatorInterface $paginator,
SchoolAverageRepository $schoolAverageRepository,
SchoolTeacherRepository $schoolTeacherRepository,
SchoolYearPeriodeRepository $schoolYearPeriodeRepository,
SchoolMatterRepository $schoolMatterRepository,
SettingClassroomRepository $settingClassroomRepository,
UserRepository $userRepository
): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $this->getUser()->getEstablishment();
$schoolTeacher = $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear, 'is_disabled' => 0], []);
$_schoolTeacher = $schoolTeacherRepository->findOneBy(['id' => $request->get('teacher')], []);
$schoolYearPeriode = $schoolYearPeriodeRepository->findOneBy(['id' => $request->get('school_year_periode')], []);
$schoolMatter = $schoolMatterRepository->findOneBy(['id' => $request->get('matter')], []);
$settingClassroom = $settingClassroomRepository->findOneBy(['id' => $request->get('classroom')], []);
$query = $schoolAverageRepository->createQueryBuilder('entity')
->innerJoin('entity.classroom', 'classroom')
->addSelect('classroom')
->andWhere('classroom.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear);
if ($_schoolTeacher != null) {
$query = $query
->andWhere('entity.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $_schoolTeacher);
}
if ($schoolYearPeriode != null) {
$query = $query
->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
->setParameter('schoolYearPeriode', $schoolYearPeriode);
}
if ($schoolMatter != null) {
$query = $query
->andWhere('entity.matter = :matter')
->setParameter('matter', $schoolMatter);
}
if ($settingClassroom != null) {
$query = $query
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $settingClassroom);
}
$query = $query
->orderBy('entity.id', 'DESC')
->getQuery();
$school_averages = $paginator->paginate(
$query,
$request->query->getInt('page', 1),
1000
);
if (null != $schoolTeacher && !$this->isGranted("ROLE_ADMIN")) {
$query2 = $schoolAverageRepository->createQueryBuilder('entity')
->innerJoin('entity.classroom', 'classroom')
->addSelect('classroom')
->andWhere('classroom.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear);
if ($_schoolTeacher != null) {
$query2 = $query2
->andWhere('entity.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $_schoolTeacher);
}
if ($schoolYearPeriode != null) {
$query2 = $query2
->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
->setParameter('schoolYearPeriode', $schoolYearPeriode);
}
if ($schoolMatter != null) {
$query2 = $query2
->andWhere('entity.matter = :matter')
->setParameter('matter', $schoolMatter);
}
if ($settingClassroom != null) {
$query2 = $query2
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $settingClassroom);
}
$query2 = $query2
->andWhere('entity.schoolTeacher = :schoolTeacher')
->setParameter('schoolTeacher', $schoolTeacher)
->orderBy('entity.id', 'DESC')
->getQuery();
$school_averages = $paginator->paginate(
$query2,
$request->query->getInt('page', 1),
1000
);
}
return $this->render('school/school_average/index.html.twig', [
'school_averages' => $school_averages,
'schoolTeacher' => $schoolTeacher,
'school_year_periodes' => $schoolYearPeriodeRepository->findBy(['establishment' => $user->getEstablishment(), 'schoolYear' => $schoolYear], ['begin_at' => 'ASC']),
'setting_slassrooms' => $settingClassroomRepository->findBy(['establishment' => $user->getEstablishment(), 'schoolYear' => $schoolYear], ['label' => 'ASC']),
'school_matters' => $schoolMatterRepository->findBy(['establishment' => $user->getEstablishment(), 'is_test_matter' => 0], ['label' => 'ASC']),
'school_teachers' => $schoolTeacherRepository->findBy(['establishment' => $user->getEstablishment(), 'schoolYear' => $schoolYear], ['id' => 'DESC']),
'schoolYearPeriode' => $schoolYearPeriode,
'settingClassroom' => $settingClassroom,
'schoolMatter' => $schoolMatter,
'_schoolTeacher' => $_schoolTeacher,
'userRepository' => $userRepository,
]);
}
/**
* @Route("/new", name="school_average_new", methods={"GET","POST"})
*/
public function new(Request $request, SchoolYearPeriodeRepository $schoolYearPeriodeRepository, SchoolTeacherRepository $schoolTeacherRepository, SchoolAverageRepository $schoolAverageRepository, SchoolTeacherMatterClassroomRepository $schoolTeacherMatterClassroomRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$user = $this->getUser();
$establishment = $user->getEstablishment();
$_date = new DateTimeImmutable();
$schoolYearPeriodes = $schoolYearPeriodeRepository->createQueryBuilder('entity')
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.is_average_closed = :is_average_closed')
->setParameter('is_average_closed', 0)
->getQuery()
->getResult();
$schoolTeacher = $schoolTeacherRepository->findOneBy(['salary' => $user->getRhSalary(), 'schoolYear' => $schoolYear, 'is_disabled' => 0], []);
$schoolTeachers = new ArrayCollection();
if (null != $schoolTeacher) {
$schoolTeachers->add($schoolTeacher);
}else {
$schoolTeachers = $schoolTeacherRepository->createQueryBuilder('entity')
->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup())
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.is_disabled = :is_disabled')
->setParameter('is_disabled', 0)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
//$schoolTeachers = $schoolTeacherRepository->findBy(['establishment' => $establishment], []);
}
if (!$this->isGranted("ROLE_OPERATEUR_SAISIE", $user)) {
if (null == $schoolTeacher) {
$this->addFlash('warning', "Impossible: Vous devez êtes enseignant ou opérateur de saisie pour pouvoir créer des notes.");
return $this->redirectToRoute('school_average_index');
}
}
$schoolTeacherMatterClassrooms = new ArrayCollection();
if (null == $schoolTeacher) {
if ($this->isGranted("ROLE_OPERATEUR_SAISIE", $user)) {
$schoolTeacherMatterClassrooms = $schoolTeacherMatterClassroomRepository->findBy(['establishment' => $establishment], []);
}
}else {
$schoolTeacherMatterClassrooms = $schoolTeacher->getSchoolTeacherMatterClassrooms();
}
$schoolAverage = new SchoolAverage();
$form = $this->createForm(SchoolAverageType::class, $schoolAverage)
->add('schoolTeacherMatterClassroom', EntityType::class, [
'class' => SchoolTeacherMatterClassroom::class,
'choices' => $schoolTeacherMatterClassrooms,
'required' => true
])
->add('schoolTeacher', EntityType::class, [
'class' => SchoolTeacher::class,
'choices' => $schoolTeachers,
'required' => true
])
->add('schoolYearPeriode', EntityType::class, [
'class' => SchoolYearPeriode::class,
'choices' => $schoolYearPeriodes,
'required' => true
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$schoolAverage->setEstablishment($establishment);
$schoolAverage->setSchoolYear($schoolYear);
$schoolAverage->setClassroom($schoolAverage->getSchoolTeacherMatterClassroom()->getClassroom());
$schoolAverage->setMatter($schoolAverage->getSchoolTeacherMatterClassroom()->getMatter());
//$schoolAverage->setNoteOn($schoolAverage->getMatter()->getNoteOnReportCard());
$schoolAverage->setLabel('Note '.(count($schoolAverageRepository->findBy(['matter' => $schoolAverage->getMatter(), 'classroom' => $schoolAverage->getClassroom(), 'schoolYearPeriode' => $schoolAverage->getSchoolYearPeriode()], [])) + 1));
$schoolAverage->setCode(rand(100000, 999999).$schoolAverage->getSchoolYearPeriode()->getId().$schoolAverage->getMatter()->getId().$schoolAverage->getClassroom()->getId());
$registrationStudentRegistrations = $schoolAverage->getClassroom()->getRegistereds($schoolYear);
if($schoolAverage->getMatter()->getLv2() == 'AUCUN') {
if($schoolAverage->getMatter()->getArtOrMusique() == null || $schoolAverage->getMatter()->getArtOrMusique() == '') {
/* --- pas une langue vivante 2 --- */
foreach ($registrationStudentRegistrations as $key => $registrationStudentRegistration) {
$schoolStudentAverage = new SchoolStudentAverage();
$schoolStudentAverage->setEstablishment($establishment);
$schoolStudentAverage->setSchoolYear($schoolYear);
$schoolStudentAverage->setSchoolAverage($schoolAverage);
$schoolStudentAverage->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolStudentAverage->setCode('sa-'.rand(100000, 999999).$schoolAverage->getMatter()->getId().$registrationStudentRegistration->getId().$schoolAverage->getSchoolYearPeriode()->getId());
$schoolStudentAverage->setCoefficient(1);
$schoolStudentAverage->setNoteOn($schoolAverage->getNoteOn());
$schoolStudentAverage->setNote(999);
$schoolStudentAverage->setMatter($schoolAverage->getMatter());
$schoolStudentAverage->setIsMatterConduct($schoolAverage->getMatter()->getIsMatterConduct());
$schoolStudentAverage->setSchoolYearPeriode($schoolAverage->getSchoolYearPeriode());
$countSubMatters = 0;
foreach ($schoolAverage->getMatter()->getSchoolSubMatters() as $key => $schoolSubMatter) {
$schoolStudentAverage->setAsSubmatter(true);
$countSubMatters++;
$schoolSubStudentAverage = new SchoolStudentAverage();
$schoolSubStudentAverage->setEstablishment($establishment);
$schoolSubStudentAverage->setSchoolYear($schoolYear);
$schoolSubStudentAverage->setSchoolAverage($schoolAverage);
$schoolSubStudentAverage->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolSubStudentAverage->setCode('sa-'.rand(100000, 999999).$schoolSubMatter->getId().$registrationStudentRegistration->getId().$schoolAverage->getSchoolYearPeriode()->getId());
$schoolSubStudentAverage->setCoefficient(1);
$schoolSubStudentAverage->setNoteOn($schoolAverage->getNoteOn());
$schoolSubStudentAverage->setNote(999);
$schoolSubStudentAverage->setMatter($schoolAverage->getMatter());
$schoolSubStudentAverage->setIsMatterConduct($schoolAverage->getMatter()->getIsMatterConduct());
$schoolSubStudentAverage->setSubMatter($schoolSubMatter);
$schoolSubStudentAverage->setSchoolYearPeriode($schoolAverage->getSchoolYearPeriode());
$entityManager->persist($schoolSubStudentAverage);
}
if ($countSubMatters <= 0) {
$entityManager->persist($schoolStudentAverage);
}
}
}else {
foreach ($registrationStudentRegistrations as $key => $registrationStudentRegistration) {
if ($registrationStudentRegistration->getStudent()->getArtOrMusique() == $schoolAverage->getMatter()->getArtOrMusique()) {
$schoolStudentAverage = new SchoolStudentAverage();
$schoolStudentAverage->setEstablishment($establishment);
$schoolStudentAverage->setSchoolYear($schoolYear);
$schoolStudentAverage->setSchoolAverage($schoolAverage);
$schoolStudentAverage->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolStudentAverage->setCode('sa-'.rand(100000, 999999).$schoolAverage->getMatter()->getId().$registrationStudentRegistration->getId().$schoolAverage->getSchoolYearPeriode()->getId());
$schoolStudentAverage->setCoefficient(1);
$schoolStudentAverage->setNoteOn($schoolAverage->getNoteOn());
$schoolStudentAverage->setNote(999);
$schoolStudentAverage->setMatter($schoolAverage->getMatter());
$schoolStudentAverage->setIsMatterConduct($schoolAverage->getMatter()->getIsMatterConduct());
$schoolStudentAverage->setSchoolYearPeriode($schoolAverage->getSchoolYearPeriode());
$countSubMatters = 0;
foreach ($schoolAverage->getMatter()->getSchoolSubMatters() as $key => $schoolSubMatter) {
$schoolStudentAverage->setAsSubmatter(true);
$countSubMatters++;
$schoolSubStudentAverage = new SchoolStudentAverage();
$schoolSubStudentAverage->setEstablishment($establishment);
$schoolSubStudentAverage->setSchoolYear($schoolYear);
$schoolSubStudentAverage->setSchoolAverage($schoolAverage);
$schoolSubStudentAverage->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolSubStudentAverage->setCode('sa-'.rand(100000, 999999).$schoolSubMatter->getId().$registrationStudentRegistration->getId().$schoolAverage->getSchoolYearPeriode()->getId());
$schoolSubStudentAverage->setCoefficient(1);
$schoolSubStudentAverage->setNoteOn($schoolAverage->getNoteOn());
$schoolSubStudentAverage->setNote(999);
$schoolSubStudentAverage->setMatter($schoolAverage->getMatter());
$schoolSubStudentAverage->setIsMatterConduct($schoolAverage->getMatter()->getIsMatterConduct());
$schoolSubStudentAverage->setSubMatter($schoolSubMatter);
$schoolSubStudentAverage->setSchoolYearPeriode($schoolAverage->getSchoolYearPeriode());
$entityManager->persist($schoolSubStudentAverage);
}
if ($countSubMatters <= 0) {
$entityManager->persist($schoolStudentAverage);
}
}
}
}
}else {
/* --- est une langue vivante 2 --- */
foreach ($registrationStudentRegistrations as $key => $registrationStudentRegistration) {
if (!$registrationStudentRegistration->getIsAbandonned()) {
if ($registrationStudentRegistration->getStudent()->getLv2() == $schoolAverage->getMatter()->getLv2()) {
$schoolStudentAverage = new SchoolStudentAverage();
$schoolStudentAverage->setEstablishment($establishment);
$schoolStudentAverage->setSchoolYear($schoolYear);
$schoolStudentAverage->setSchoolAverage($schoolAverage);
$schoolStudentAverage->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolStudentAverage->setCode('sa-'.rand(100000, 999999).$schoolAverage->getMatter()->getId().$registrationStudentRegistration->getId().$schoolAverage->getSchoolYearPeriode()->getId());
$schoolStudentAverage->setCoefficient(1);
$schoolStudentAverage->setNoteOn($schoolAverage->getNoteOn());
$schoolStudentAverage->setNote(999);
$schoolStudentAverage->setMatter($schoolAverage->getMatter());
$schoolStudentAverage->setIsMatterConduct($schoolAverage->getMatter()->getIsMatterConduct());
$schoolStudentAverage->setSchoolYearPeriode($schoolAverage->getSchoolYearPeriode());
$countSubMatters = 0;
foreach ($schoolAverage->getMatter()->getSchoolSubMatters() as $key => $schoolSubMatter) {
$schoolStudentAverage->setAsSubmatter(true);
$countSubMatters++;
$schoolSubStudentAverage = new SchoolStudentAverage();
$schoolSubStudentAverage->setEstablishment($establishment);
$schoolSubStudentAverage->setSchoolYear($schoolYear);
$schoolSubStudentAverage->setSchoolAverage($schoolAverage);
$schoolSubStudentAverage->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolSubStudentAverage->setCode('sa-'.rand(100000, 999999).$schoolSubMatter->getId().$registrationStudentRegistration->getId().$schoolAverage->getSchoolYearPeriode()->getId());
$schoolSubStudentAverage->setCoefficient(1);
$schoolSubStudentAverage->setNoteOn($schoolAverage->getNoteOn());
$schoolSubStudentAverage->setNote(999);
$schoolSubStudentAverage->setMatter($schoolAverage->getMatter());
$schoolSubStudentAverage->setIsMatterConduct($schoolAverage->getMatter()->getIsMatterConduct());
$schoolSubStudentAverage->setSubMatter($schoolSubMatter);
$schoolSubStudentAverage->setSchoolYearPeriode($schoolAverage->getSchoolYearPeriode());
$entityManager->persist($schoolSubStudentAverage);
}
if ($countSubMatters <= 0) {
$entityManager->persist($schoolStudentAverage);
}
}
}
}
}
$entityManager->persist($schoolAverage);
try {
$entityManager->flush();
$this->addFlash('success', "Une note à été ajoutée.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'ajout de la note.");
$this->addFlash('info', $th->getMessage());
return $this->redirectToRoute('school_average_new');
}
return $this->redirectToRoute('school_average_edit', ['id' => $schoolAverage->getId()]);
}
return $this->renderForm('school/school_average/new.html.twig', [
'school_average' => $schoolAverage,
'schoolTeacher' => $schoolTeacher,
'form' => $form,
]);
}
/**
* @Route("/{id}/edit", name="school_average_edit", methods={"GET","POST"})
*/
public function edit(Request $request, SchoolAverage $schoolAverage, UserRepository $userRepository, SchoolStudentAverageRepository $schoolStudentAverageRepository, RegistrationStudentRegistrationRepository $registrationStudentRegistrationRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$user = $this->getUser();
$establishment = $user->getEstablishment();
foreach ($schoolAverage->getSchoolStudentAverages() as $key => $schoolStudentAverage) {
$schoolStudentAverage->setNoteOn($schoolAverage->getNoteOn());
}
$entityManager = $this->getDoctrine()->getManager();
try {
$entityManager->flush();
} catch (\Throwable $th) {
$this->addFlash('info', $th->getMessage());
}
$form = $this->createForm(SchoolAverageType::class, $schoolAverage)
->remove('classroom')
->remove('matter')
->remove('schoolYearPeriode');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
try {
$entityManager->flush();
$this->addFlash('success', "Une classe à été ajoutée.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'ajout de la classe.");
$this->addFlash('info', $th->getMessage());
}
return $this->redirectToRoute('school_average_edit', ['id' => $schoolAverage->getId()]);
}
$schoolStudentAverages = $schoolStudentAverageRepository->createQueryBuilder('entity')
->innerJoin('entity.registrationStudentRegistration', 'registrationStudentRegistration')
->addSelect('registrationStudentRegistration')
->innerJoin('registrationStudentRegistration.student', 'student')
->addSelect('student')
->andWhere('entity.schoolAverage = :schoolAverage')
->setParameter('schoolAverage', $schoolAverage)
->getQuery()
->getResult();
$school_student_averages = new ArrayCollection();
foreach ($schoolStudentAverages as $key => $schoolStudentAverage) {
$school_student_averages->add([
'id' => $schoolStudentAverage->getId(),
'code' => $schoolStudentAverage->getRegistrationStudentRegistration()->getStudent()->getRegistrationNumber(),
'name' => $schoolStudentAverage->getRegistrationStudentRegistration()->getStudent()->getName(),
'classroom' => $schoolStudentAverage->getRegistrationStudentRegistration()->getClassroom()->getLabel(),
'note' => $schoolStudentAverage->getNote(),
'noteOn' => $schoolStudentAverage->getNoteOn(),
'asSubmatter' => $schoolStudentAverage->getAsSubmatter(),
'subMatter' => $schoolStudentAverage->getSubMatter() ? $schoolStudentAverage->getSubMatter()->getLabel() : null,
'entity' => $schoolStudentAverage,
]);
}
$iterator = $school_student_averages->getIterator();
$iterator->uasort(function ($first, $second) {
if ($first === $second) {
return 0;
}
return $first['name'] < $second['name'] ? -1 : 1;
});
$school_student_averages = new ArrayCollection(iterator_to_array($iterator));
$registrationStudentRegistrations = $registrationStudentRegistrationRepository->createQueryBuilder('entity')
->innerJoin('entity.student', 'student')
->addSelect('student')
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $schoolAverage->getClassroom())
->orderBy('student.last_name', 'ASC')
->getQuery()
->getResult();
$registration_student_registrations = new ArrayCollection();
foreach ($registrationStudentRegistrations as $key => $registrationStudentRegistration) {
if (!$registrationStudentRegistration->getIsAbandonned()) {
if (null == $schoolStudentAverageRepository->findOneBy(['registrationStudentRegistration' => $registrationStudentRegistration, 'schoolAverage' => $schoolAverage], [])) {
if($schoolAverage->getMatter()->getLv2() == 'AUCUN' || $registrationStudentRegistration->getStudent()->getLv2() == $schoolAverage->getMatter()->getLv2()){
if ($schoolAverage->getMatter()->getArtOrMusique() == null || $schoolAverage->getMatter()->getArtOrMusique() == '' || $registrationStudentRegistration->getStudent()->getArtOrMusique() == $schoolAverage->getMatter()->getArtOrMusique()) {
$registration_student_registrations->add($registrationStudentRegistration);
}
}
}
}
}
$schoolStudentAverage = new SchoolStudentAverage();
$schoolStudentAverage->setNote(999);
$school_student_average_form = $this->createForm(SchoolStudentAverageType::class, $schoolStudentAverage)
->add('registrationStudentRegistration', EntityType::class, [
'class' => RegistrationStudentRegistration::class,
'choices' => $registration_student_registrations,
'required' => true
]);
$school_student_average_form->handleRequest($request);
if ($school_student_average_form->isSubmitted() && $school_student_average_form->isValid()) {
$schoolStudentAverage->setSchoolAverage($schoolAverage);
$schoolStudentAverage->setCoefficient($schoolAverage->getCoefficient());
$schoolStudentAverage->setEstablishment($schoolAverage->getEstablishment());
$schoolStudentAverage->setSchoolYear($schoolAverage->getSchoolYear());
$schoolStudentAverage->setSchoolYearPeriode($schoolAverage->getSchoolYearPeriode());
$schoolStudentAverage->setNoteOn($schoolAverage->getNoteOn());
$schoolStudentAverage->setMatter($schoolAverage->getMatter());
$schoolStudentAverage->setCode('sa-'.time().$schoolAverage->getId().$schoolStudentAverage->getRegistrationStudentRegistration()->getId());
$registrationStudentRegistration = $schoolStudentAverage->getRegistrationStudentRegistration();
if (null != $schoolStudentAverageRepository->findOneBy(['registrationStudentRegistration' => $registrationStudentRegistration, 'schoolAverage' => $schoolAverage], [])) {
$this->addFlash('warning', "Cette note existe déjà.");
return $this->redirectToRoute('school_average_edit', ['id' => $schoolAverage->getId()]);
}
if ($schoolStudentAverage->getNote() > $schoolStudentAverage->getNoteOn() && $schoolStudentAverage->getNote() != 999) {
$this->addFlash('warning', "Note invalide");
return $this->redirectToRoute('school_average_edit', ['id' => $schoolAverage->getId()]);
}
if (0 > $schoolStudentAverage->getNote()) {
$this->addFlash('warning', "Note invalide");
return $this->redirectToRoute('school_average_edit', ['id' => $schoolAverage->getId()]);
}
$countSubMatters = 0;
foreach ($schoolAverage->getMatter()->getSchoolSubMatters() as $key => $schoolSubMatter) {
$schoolStudentAverage->setAsSubmatter(true);
$countSubMatters++;
$schoolSubStudentAverage = new SchoolStudentAverage();
$schoolSubStudentAverage->setEstablishment($establishment);
$schoolSubStudentAverage->setSchoolYear($schoolYear);
$schoolSubStudentAverage->setSchoolAverage($schoolAverage);
$schoolSubStudentAverage->setRegistrationStudentRegistration($registrationStudentRegistration);
$schoolSubStudentAverage->setCode('sa-'.time().$schoolSubMatter->getId().$schoolAverage->getId().$registrationStudentRegistration->getId());
$schoolSubStudentAverage->setCoefficient(1);
$schoolSubStudentAverage->setNoteOn($schoolAverage->getNoteOn());
$schoolSubStudentAverage->setNote(999);
$schoolSubStudentAverage->setMatter($schoolAverage->getMatter());
$schoolSubStudentAverage->setIsMatterConduct($schoolAverage->getMatter()->getIsMatterConduct());
$schoolSubStudentAverage->setSubMatter($schoolSubMatter);
$schoolSubStudentAverage->setSchoolYearPeriode($schoolAverage->getSchoolYearPeriode());
$entityManager->persist($schoolSubStudentAverage);
}
if (count($schoolAverage->getMatter()->getSchoolSubMatters()) <= 0) {
$entityManager->persist($schoolStudentAverage);
}
try {
$entityManager->flush();
$this->addFlash('success', "Une note à été ajoutée.");
} catch (\Throwable $th) {
$this->addFlash('warning', "Une erreure est survenue lors de l'ajout de la noteg.");
$this->addFlash('info', $th->getMessage());
}
return $this->redirectToRoute('school_average_edit', ['id' => $schoolAverage->getId()]);
}
return $this->renderForm('school/school_average/edit.html.twig', [
'school_average' => $schoolAverage,
'form' => $form,
'schoolStudentAverage' => $schoolStudentAverage,
'school_student_average_form' => $school_student_average_form,
'school_student_averages' => $school_student_averages,
'userRepository' => $userRepository,
]);
}
/**
* @Route("/delete-selection", name="school_averages_selected_delete", methods={"GET"})
*/
public function deleteSelected(Request $request, SchoolAverageRepository $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->getIsValidated()) {
foreach ($entity->getSchoolStudentAverages() as $key => $schoolStudentAverage) {
$entityManager->remove($schoolStudentAverage);
}
$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_average_validate", methods={"GET"})
*/
public function validate(SchoolAverage $entity): Response
{
$entityManager = $this->getDoctrine()->getManager();
foreach ($entity->getSchoolStudentAverages() as $key => $schoolStudentAverage) {
if (intval($schoolStudentAverage->getNote()) > $schoolStudentAverage->getNoteOn() && intval($schoolStudentAverage->getNote()) != 999) {
return $this->json(['code' => 500, 'message' => "Veuillez verifier que toutes les notes sont valides ou 999 si l'élève est non classé."], 200);
}
}
$entity->setIsValidated(true);
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}/cancel", name="school_average_cancel", methods={"GET"})
*/
public function cancel(SchoolAverage $entity): Response
{
$entityManager = $this->getDoctrine()->getManager();
$entity->setIsValidated(false);
try {
$entityManager->flush();
$this->addFlash('success', "Traitement effectué");
return $this->json(['code' => 200, 'message' => "Traitement effectué :)"], 200);
} catch (\Throwable $th) {
//$th->getMessage()
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectué");
return $this->json(['code' => 500, 'message' => "Traitement non effectué"], 200);
}
/**
* @Route("/api/teacher-matter", name="api_school_average_teacher_matter", methods={"GET"})
*/
public function apiGetTeacherMatter(Request $request, SchoolTeacherRepository $schoolTeacherRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$establishment = $user->getEstablishment();
$schoolYear = $user->getSchoolYear();
$teacherId = intval($request->get('api_teacherId'));
$teacher = $schoolTeacherRepository->findOneBy(['id' => $teacherId, 'is_disabled' => 0], []);
$schoolTeacherMatterClassrooms = new ArrayCollection();
if ($teacher != null) {
foreach ($teacher->getSchoolTeacherMatterClassrooms() as $key => $schoolTeacherMatterClassroom) {
if (!$schoolTeacherMatterClassroom->getMatter()->getIsTestMatter() && !$schoolTeacherMatterClassroom->getIsDisabled()) {
if ($schoolTeacherMatterClassroom->getClassroom()->getEstablishment() == $establishment) {
if ($schoolTeacherMatterClassroom->getClassroom()->getSchoolYear() == $schoolYear) {
$schoolTeacherMatterClassrooms->add([
'id' => $schoolTeacherMatterClassroom->getId(),
'label' => '['.$schoolTeacherMatterClassroom->getClassroom()->getLabel().' - '.$schoolTeacherMatterClassroom->getClassroom()->getSchoolYear()->getCode().'] '.$schoolTeacherMatterClassroom->getMatter()->getLabel()
]);
}
}
}
}
}else{
return $this->json(['code' => 500, 'message' => "not found :)"], 200);
}
return $this->json([
'code' => 200, 'message' => "found :)",
'schoolTeacherMatterClassrooms' => $schoolTeacherMatterClassrooms,
], 200);
}
/**
* @Route("/api/get-teacher-classrooms", name="api_school_average_get_teacher_classrooms", methods={"GET"})
*/
public function apiGetTeacherClassrooms(Request $request, SchoolTeacherRepository $schoolTeacherRepository): Response
{
$teacherId = $request->get('api_teacherId');
$classrooms = new ArrayCollection();
$matters = new ArrayCollection();
$teacher = $schoolTeacherRepository->findOneBy(['id' => intval($teacherId), 'is_disabled' => 0], []);
foreach ($teacher->getClassrooms() as $key => $settingClassroom) {
$classrooms->add([
'id' => $settingClassroom->getId(),
'label' => $settingClassroom->getLabel(),
]);
}
return $this->json([
'code' => 200,
'message' => "found :)",
'classrooms' => $classrooms
],
200);
}
/**
* @Route("/transcript-grades", name="school_average_transcript_grades", methods={"GET"})
*/
public function transcript_grades(Pdf $knpSnappyPdf, Request $request, SchoolMatterRepository $schoolMatterRepository, RegistrationStudentRegistrationRepository $registrationStudentRegistrationRepository, SettingClassroomRepository $settingClassroomRepository, SchoolYearPeriodeRepository $schoolYearPeriodeRepository, SchoolAverageRepository $schoolAverageRepository){
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $this->getUser()->getEstablishment();
$settingClassroom = $settingClassroomRepository->findOneBy(['id' => $request->get('classroom')], []);
$schoolYearPeriode = $schoolYearPeriodeRepository->findOneBy(['id' => $request->get('school_year_periode')], []);
$schoolMatter = $schoolMatterRepository->findOneBy(['id' => $request->get('matter')], []);
$schoolAverages = $schoolAverageRepository->createQueryBuilder('entity')
->andWhere('entity.schoolYearPeriode = :schoolYearPeriode')
->setParameter('schoolYearPeriode', $schoolYearPeriode)
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $settingClassroom)
->andWhere('entity.matter = :matter')
->setParameter('matter', $schoolMatter)
->orderBy('entity.label', 'ASC')
->getQuery()
->getResult();
$registrationStudentRegistrations = $registrationStudentRegistrationRepository->createQueryBuilder('entity')
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.classroom = :classroom')
->setParameter('classroom', $settingClassroom)
->innerJoin('entity.student', 'student')
->addSelect('student')
->andWhere('student.is_archived = :is_archived')
->setParameter('is_archived', 0)
->orderBy('student.last_name', 'ASC')
->getQuery()
->getResult();
$html = $this->renderView('school/school_average/print/transcript_grades.html.twig', [
'school_averages' => $schoolAverages,
'registration_student_registrations' => $registrationStudentRegistrations,
'settingClassroom' => $settingClassroom,
'schoolYearPeriode' => $schoolYearPeriode,
'schoolMatter' => $schoolMatter,
'school_year' => $schoolYear,
'setting' => $establishment,
]);
$file_name = "RELEVE_NOTE_.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',
]);
}
/**
* @Route("/{id}/folow", name="school_average_folow", methods={"GET","POST"})
*/
public function folow(SchoolTeacherRepository $schoolTeacherRepository, SchoolYearPeriode $schoolYearPeriode): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$schoolTeachers = $schoolTeacherRepository->createQueryBuilder('entity')
->innerJoin('entity.establishment', 'establishment')
->addSelect('establishment')
->andWhere('establishment.establishmentGroup = :establishmentGroup')
->setParameter('establishmentGroup', $establishment->getEstablishmentGroup())
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.is_disabled = :is_disabled')
->setParameter('is_disabled', 0)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
return $this->renderForm('school/school_average/folow.html.twig', [
'school_year_periode' => $schoolYearPeriode,
'school_teachers' => $schoolTeachers,
]);
}
}