<?php
namespace App\Controller\School;
use Knp\Snappy\Pdf;
use App\Entity\User;
use DateTimeImmutable;
use App\Service\SMSSender;
use Informagenie\OrangeSDK;
use App\Entity\CommunicationMessage;
use App\Entity\SchoolTeacherCallSheetLine;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\SettingClassroomRepository;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\SchoolTeacherCallSheetLineRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/**
* @Route("/school/teacher-call-sheet-line")
*/
class SchoolTeacherCallSheetLineController extends AbstractController
{
/**
* @Route("/{id}/set-to-present", name="school_teacher_call_sheet_line_set_to_present", methods={"GET"})
*/
public function setToPresent(SchoolTeacherCallSheetLine $schoolTeacherCallSheetLine): Response
{
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacherCallSheetLine->setIsPresente(true);
$schoolTeacherCallSheetLine->setIsAbsent(false);
try {
$entityManager->flush();
//$this->addFlash('success', "Traitement effectué");
return $this->json([
'code' => 200,
'message' => "Présent(e)",
'tr' => "#tr-".$schoolTeacherCallSheetLine->getId(),
'td' => "#td-".$schoolTeacherCallSheetLine->getId(),
'btnPresent' => "#btn-present-".$schoolTeacherCallSheetLine->getId(),
'isCanBeSaved' => $schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->isCanBeSaved()
], 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}/set-to-absent", name="school_teacher_call_sheet_line_set_to_absent", methods={"GET"})
*/
public function setToAbsent(SchoolTeacherCallSheetLine $schoolTeacherCallSheetLine): Response
{
$entityManager = $this->getDoctrine()->getManager();
$schoolTeacherCallSheetLine->setIsPresente(false);
$schoolTeacherCallSheetLine->setIsAbsent(true);
try {
$entityManager->flush();
//$this->addFlash('success', "Traitement effectué");
return $this->json([
'code' => 200,
'message' => "Absent(e)",
'tr' => "#tr-".$schoolTeacherCallSheetLine->getId(),
'td' => "#td-".$schoolTeacherCallSheetLine->getId(),
'btnAbsent' => "#btn-absent-".$schoolTeacherCallSheetLine->getId(),
'isCanBeSaved' => $schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->isCanBeSaved()
], 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("/student-present-ns", name="school_call_sheet_line_student_present_ns", methods={"GET"})
*/
public function student_present_ns(Request $request, Pdf $knpSnappyPdf, SchoolTeacherCallSheetLineRepository $schoolTeacherCallSheetLineRepository, SettingClassroomRepository $settingClassroomRepository): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $this->getUser()->getEstablishment();
$create_date = new DateTimeImmutable($request->get('create_date'));
$settingClassroom = $settingClassroomRepository->findOneBy(['id' => $request->get('setting_classroom')], []);
$school_teacher_call_sheet_lines = $schoolTeacherCallSheetLineRepository->createQueryBuilder('entity')
->innerJoin('entity.schoolTeacherCallSheet', 'schoolTeacherCallSheet')
->addSelect('schoolTeacherCallSheet')
->andWhere('schoolTeacherCallSheet.create_date = :create_date')
->setParameter('create_date', $create_date);
if (null != $settingClassroom) {
$school_teacher_call_sheet_lines = $school_teacher_call_sheet_lines
->andWhere('schoolTeacherCallSheet.settingClassroom = :settingClassroom')
->setParameter('settingClassroom', $settingClassroom);
}
$school_teacher_call_sheet_lines = $school_teacher_call_sheet_lines
->andWhere('entity.establishment = :establishment')
->setParameter('establishment', $establishment)
->andWhere('entity.schoolYear = :schoolYear')
->setParameter('schoolYear', $schoolYear)
->andWhere('entity.is_presente = :is_presente')
->setParameter('is_presente', 1)
->orderBy('entity.id', 'DESC')
->getQuery()
->getResult();
if ($request->get('resulst') == '1') {
$html = $this->renderView('school/print/student_present_ns.html.twig', [
'school_teacher_call_sheet_lines' => $school_teacher_call_sheet_lines,
'setting_classroom' => $settingClassroom,
'create_date' => $create_date,
'school_year' => $schoolYear,
'setting' => $establishment,
]);
$footer = $this->renderView('print/footer.html.twig', ['setting' => $establishment]);
$header = $this->renderView('print/header.html.twig', ['setting' => $establishment]);
$options = [
'orientation' => 'Portrait',
'header-html' => $header,
'footer-html' => $footer
];
$file_name = "ELEVES_PRES_NON_AJOUR_.pdf";
try {
$knpSnappyPdf->generateFromHtml($html, $this->getParameter('app.app_directory').'/downloads/report-cards/' . $file_name, $options, true);
} catch (\Throwable $th) {
$this->addFlash('info', "Effectué");
}
return $this->redirectToRoute('preview', [
'file' => $file_name,
'dir' => 'report-cards',
]);
}
return $this->render('school/school_teacher_call_sheet_line/student_present_ns.html.twig', [
'school_teacher_call_sheet_lines' => $school_teacher_call_sheet_lines,
'setting_classroom' => $settingClassroom,
'create_date' => $create_date,
'setting_classrooms' => $settingClassroomRepository->findBy(['establishment' => $establishment, 'schoolYear' => $schoolYear], ['label' => 'ASC']),
]);
}
/**
* @Route("/set-presents", name="school_teacher_call_sheet_line_set_to_presents", methods={"GET"})
*/
public function set_to_presents(Request $request, SchoolTeacherCallSheetLineRepository $schoolTeacherCallSheetLineRepository): Response
{
$list = $request->get('entities');
$entityManager = $this->getDoctrine()->getManager();
$errors = 0;
$success = 0;
foreach ($list as $key => $id) {
$schoolTeacherCallSheetLine = $schoolTeacherCallSheetLineRepository->findOneBy(['id' => intval($id)], []);
if ($schoolTeacherCallSheetLine != null) {
if (!$schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->getIsAproved()) {
$schoolTeacherCallSheetLine->setIsAbsent(false);
$schoolTeacherCallSheetLine->setIsPresente(true);
$success++;
}
}
}
try {
$entityManager->flush();
$this->addFlash('success', $success. " élève(s) marqué(s) présent(s)");
return $this->json(['code' => 200, 'message' => $success. " élève(s) marqué(s) présent(s)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectuée");
return $this->json(['code' => 500, 'message' => "Traitement non effectuée"], 200);
}
/**
* @Route("/set-absents", name="school_teacher_call_sheet_line_set_to_absents", methods={"GET"})
*/
public function set_to_absents(Request $request, SchoolTeacherCallSheetLineRepository $schoolTeacherCallSheetLineRepository): Response
{
$list = $request->get('entities');
$entityManager = $this->getDoctrine()->getManager();
$errors = 0;
$success = 0;
foreach ($list as $key => $id) {
$schoolTeacherCallSheetLine = $schoolTeacherCallSheetLineRepository->findOneBy(['id' => intval($id)], []);
if ($schoolTeacherCallSheetLine != null) {
if (!$schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->getIsAproved()) {
$schoolTeacherCallSheetLine->setIsAbsent(true);
$schoolTeacherCallSheetLine->setIsPresente(false);
$success++;
}
}
}
try {
$entityManager->flush();
$this->addFlash('success', $success. " élève(s) marqué(es) absent(es)");
return $this->json(['code' => 200, 'message' => $success. " élève(s) marqué(es) absent(es)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectuée");
return $this->json(['code' => 500, 'message' => "Traitement non effectuée"], 200);
}
/**
* @Route("/send-adsense-sms", name="school_teacher_call_sheet_line_send_adsense_sms", methods={"GET"})
*/
public function send_adsense_sms(Request $request, SchoolTeacherCallSheetLineRepository $schoolTeacherCallSheetLineRepository, SMSSender $smsSender): Response
{
/**@var User $user */
$user = $this->getUser();
$schoolYear = $user->getSchoolYear();
$establishment = $user->getEstablishment();
$list = $request->get('entities');
$entityManager = $this->getDoctrine()->getManager();
$errors = 0;
$success = 0;
foreach ($list as $key => $id) {
$schoolTeacherCallSheetLine = $schoolTeacherCallSheetLineRepository->findOneBy(['id' => intval($id)], []);
if ($schoolTeacherCallSheetLine != null) {
$schoolTeacherCallSheet = $schoolTeacherCallSheetLine->getSchoolTeacherCallSheet();
if (!$schoolTeacherCallSheetLine->getSchoolTeacherCallSheet()->getIsAproved()) {
if ($establishment->getIsSendAbsenceSms()){
$sms = new OrangeSDK(CommunicationMessage::SENDER_ID);
//foreach ($schoolTeacherCallSheet->getSchoolTeacherCallSheetLines() as $key => $schoolTeacherCallSheetLine) {
if ($schoolTeacherCallSheetLine->getIsAbsent()) {
$message = "";
$contacts = [];
$contacts[] = '225'.str_replace(' ', '',trim($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getNotificationPhoneNumber()));
$contact = '225'.str_replace(' ', '',trim($schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getNotificationPhoneNumber()));
$message = $schoolTeacherCallSheetLine->getRegistrationStudentRegistration()->getStudent()->getName()." A ETE ABSENT ";
$message = $message . " de ".$schoolTeacherCallSheet->getSettingTimeTable()->getLabel() ;
$message = $message . " AU COURS DE " . $schoolTeacherCallSheet->getSchoolMatter()->getLabel();
$message = $message . " CE " . $schoolTeacherCallSheet->getCreateDate()->format('d-m-Y');
if ($establishment->getSmsGateway() == 'OCI') {
$oci_response = $sms->message($message)
->as($establishment->getOciSmsSender())
->from($establishment->getOciSmsPhone())
->to(intval($contact));
try {
$oci_response->send();
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$communicationMessage = new CommunicationMessage();
$communicationMessage->setCode($contact.$schoolTeacherCallSheetLine->getId());
$communicationMessage->setContacts($contacts);
$communicationMessage->setContent($message);
$communicationMessage->setEstablishment($establishment);
$communicationMessage->setType($smsSender::UNICODE_CHARSET);
$entityManager->persist($communicationMessage);
}else {
$response = $smsSender->sendSmsByEstablishment($establishment, $message, $contacts, $smsSender::UNICODE_CHARSET);
$responses = explode(':', $response);
$code = trim($responses[1]);
$communicationMessage = new CommunicationMessage();
$communicationMessage->setCode($code);
$communicationMessage->setContacts($contacts);
$communicationMessage->setContent($message);
$communicationMessage->setEstablishment($establishment);
$communicationMessage->setType($smsSender::UNICODE_CHARSET);
$entityManager->persist($communicationMessage);
}
}
//}
}
$success++;
}
}
}
try {
$entityManager->flush();
$this->addFlash('success', $success. " SMS envoyé(s)");
return $this->json(['code' => 200, 'message' => $success. " SMS envoyé(s)"], 200);
} catch (\Throwable $th) {
$this->addFlash('warning', $th->getMessage());
}
$this->addFlash('warning', "Traitement non effectuée");
return $this->json(['code' => 500, 'message' => "Traitement non effectuée"], 200);
}
}