<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;//A voir
use App\Entity\Note;
use Symfony\Component\HttpFoundation\JsonResponse;//A voir
use Symfony\Contracts\Translation\TranslatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;//A voir
use Symfony\Component\HttpFoundation\Request;
use Knp\Component\Pager\PaginatorInterface;
use App\Repository\ATBGRepository;
use App\Repository\AbbreviationLangueRepository;
use App\Repository\AbbreviationRepository;
use App\Repository\ActualiteRepository;
use App\Repository\AntibiotiqueRepository;
use App\Repository\CasCliniquesCategorieRepository;
use App\Repository\CasCliniquesQuestionRepository;
use App\Repository\CasCliniquesReponseRepository;
use App\Repository\CasCliniquesReponseUtilisateurRepository;
use App\Repository\CelluleRepository;
use App\Repository\CelluleTitreCompletRepository;
use App\Repository\CoAntibiotiqueCalculRepository;
use App\Repository\ContenuRepository;
use App\Repository\EtablissementRepository;
use App\Repository\FamilleAntibiotiqueRepository;
use App\Repository\FavorisRepository;
use App\Repository\InformationHopitalRepository;
use App\Repository\InformationReferenceRepository;
use App\Repository\InformationRepository;
use App\Repository\IntervenantSessioneppRepository;
use App\Repository\LangueRepository;
use App\Repository\MicroorganismeRepository;
use App\Repository\NoteRepository;
use App\Repository\ParametreRepository;
use App\Repository\PaysRepository;
use App\Repository\PersonnalisationRepository;
use App\Repository\PersonnalisationSpectreRepository;
use App\Repository\QualiteRepository;
use App\Repository\ReferenceHopitalRepository;
use App\Repository\ReferenceRepository;
use App\Repository\SessioneppRepository;
use App\Repository\SessioneppUrlRepository;
use App\Repository\SpecialiteRepository;
use App\Repository\SpectreRepository;
use App\Repository\TicketPatientRepository;
use App\Repository\TypeInformationRepository;
use App\Repository\UtilisateurRepository;
use App\Repository\VersionRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Psr\Container\ContainerInterface;
use App\Controller\ReferencesController;
use App\Service\ContentHandler;
use App\Service\StatistiquesService;
class BlocnotesController extends ATBGController
{
/**
* @var ContainerHandler
*/
private $gestionBalises;
/**
* @var StatistiquesService
*/
private $statService;
/**
* @var Container
*/
protected $container;
public function __construct(
private AbbreviationLangueRepository $abbreviationLangueRepo,
private AbbreviationRepository $abbreviationRepo,
private ActualiteRepository $actualiteRepo,
private AntibiotiqueRepository $antibiotiqueRepo,
private CasCliniquesCategorieRepository $casCliniquesCategorieRepo,
private CasCliniquesQuestionRepository $casCliniquesQuestionRepo,
private CasCliniquesReponseRepository $casCliniquesReponseRepo,
private CasCliniquesReponseUtilisateurRepository $casCliniquesReponseUtilisateurRepo,
private CelluleRepository $celluleRepo,
private CelluleTitreCompletRepository $celluleTitreCompletRepo,
private CoAntibiotiqueCalculRepository $coAntibiotiqueCalculRepo,
private ContenuRepository $contenuRepo,
private EtablissementRepository $etablissementRepo,
private FamilleAntibiotiqueRepository $familleAntibiotiqueRepository,
private FavorisRepository $favorisRepo,
private InformationHopitalRepository $informationHopitalRepo,
private InformationReferenceRepository $informationReferenceRepo,
private InformationRepository $informationRepo,
private IntervenantSessioneppRepository $intervenantSessioneppRepo,
private LangueRepository $langueRepo,
private MicroorganismeRepository $microorganismeRepo,
private NoteRepository $noteRepo,
private ParametreRepository $parametreRepo,
private PaysRepository $paysRepo,
private PersonnalisationRepository $personnalisationRepo,
private PersonnalisationSpectreRepository $personnalisationSpectreRepo,
private QualiteRepository $qualiteRepo,
private ReferenceHopitalRepository $referenceHopitalRepo,
private ReferenceRepository $referenceRepo,
private SessioneppRepository $sessioneppRepo,
private SessioneppUrlRepository $sessioneppUrlRepo,
private SpecialiteRepository $specialiteRepo,
private SpectreRepository $spectreRepo,
private TicketPatientRepository $ticketPatientRepo,
private TypeInformationRepository $typeInformationRepo,
private UtilisateurRepository $utilisateurRepo,
private VersionRepository $versionRepo,
private TranslatorInterface $translator,
private ReferencesController $referenceService,
ContainerInterface $container,
StatistiquesService $statService,
ContentHandler $gestionBalises
){
$this->container = $container;
$this->gestionBalises = $gestionBalises;
$this->statService = $statService;
}
private function listeNotes($id, $twig_name, Request $request, PaginatorInterface $paginator)
{
// en version webedition, pas de bloc notes
if ($this->getParameter('version_antibiogarde') == 'web_edition')
{
return $this->redirectToRoute('situations_cliniques_home');
}
$em = $this->getDoctrine()->getManager();
$session = $request->getSession();
$client_id_adada = $session->get('client_id_adada');
$query = $this->noteRepo->findBy(['clientIdAdada' => $client_id_adada],['dateNote' => 'desc']);
//$query = $em->createQuery('SELECT n FROM Note n WHERE n.clientIdAdada = '.$client_id_adada.' ORDER BY n.dateNote DESC');
//$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query,
$request->query->getInt('page', 1),
15
);
$currentnote = false;
if ($id == 0)
{
if ($pagination->getTotalItemCount() > 0)
{
$items = $pagination->getItems();
$currentnote = $items[0];
}
}
else
{
$currentnote = $this->noteRepo->findNoteWithIdNote($id,$client_id_adada);
if ($currentnote == null)
{
return $this->redirect($this->get('router')->generate('bloc_notes_home'));
}
}
return $this->render('Blocnotes/' . $twig_name, array('pagination' => $pagination, 'currentnote' => $currentnote));
}
/**
* Require ROLE_AUTHENTICATED only for this action
*
* @IsGranted("ROLE_AUTHENTICATED")
*/
public function index(Request $request, PaginatorInterface $paginator)
{
return $this->listeNotes(0, 'home.html.twig', $request, $paginator);
}
/**
* Require ROLE_AUTHENTICATED only for this action
*
* @IsGranted("ROLE_AUTHENTICATED")
*/
public function display($id, Request $request, PaginatorInterface $paginator)
{
$returned = parent::suppression_parametres_get($request);
if ($returned != null)
{
return $returned;
}
$path = $request->getUri();
$libelle_page = $this->gestionBalises->full_title_with_url($path);
$this->statService->addStatistique($id,$path,$libelle_page);
return $this->listeNotes($id, 'index.html.twig', $request, $paginator);
}
/**
* Require ROLE_REFERENT only for this action
*
* @IsGranted("ROLE_REFERENT")
*/
public function edit(Request $request, $id, $submit = false)
{
$errors = array();
$em = $this->getDoctrine()->getManager();
$session = $request->getSession();
$client_id_adada = $session->get('client_id_adada');
if ($id > 0)
$note = $this->noteRepo->findNoteWithIdNote($id,$client_id_adada);
else
$note = new Note();
$render_references = '';
$references = $note->getReferencesHopital();
$message = '';
if ($submit)
{
$note->setTitreNote(trim($request->request->get('titreNote')));
$note->setTexteNote($this->gestionBalises->format_from_tinymce_to_bdd(trim($request->request->get('texteNote'))));
if ($note->getDateNote() == null)
$note->setDateNote(new \DateTime('now'));
if ( $note->getTitreNote() == '')
$errors['titreNote'] = $this->translator->trans("bloc_note_titre_obligatoire");
else if (strlen($note->getTitreNote()) > 255)
$errors['titreNote'] = $this->translator->trans("bloc_note_titre_max255");
if ($note->getTexteNote() == '')
$errors['texteNote'] = $this->translator->trans("bloc_note_texte_obligatoire");
$errors_references = array();
$references = $this->referenceService->parseReferences($request, $this->container, $em, $errors_references);
if (count($errors_references) == 0 && count($errors) == 0)
{
$session = $request->getSession();
$client_id_adada = $session->get('client_id_adada');
$note->setClientIdAdada($client_id_adada);
foreach ($references as $reference) {
if ($reference->getIdReference() == null)
$note->addReferenceHopital($reference);
}
if ($note->getIdNote() == null)
{
$note->setAuteurNote($session->get('nom_auteur_utilisateur'));
$em->persist($note);
}
$em->flush();
$this->referenceService->validateUpload($request, $this->container);
// $stmt = $em->getConnection()->prepare('call purgeInfoHopitalOrphan();');
// $stmt->execute();
$message = $this->translator->trans("bloc_note_modifications_ok");
}
$errors['references'] = $errors_references;
}
$render_references = $this->referenceService->renderReferences($this->container, $em, $references, $errors_references, $note->getIdNote());
return $this->render('Blocnotes/form.html.twig', array('note' => $note, 'errors' => $errors, 'references' => $render_references, 'message' => $message));
}
/**
* Require ROLE_REFERENT only for this action
*
* @IsGranted("ROLE_REFERENT")
*/
public function delete($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$em = $this->getDoctrine()->getManager();
$session = $request->getSession();
$client_id_adada = $session->get('client_id_adada');
$responseCode = 0;
//$references = $this->referenceHopitalRepo->findReferenceWithIdBlocNote($id,$client_id_adada);
$references = $this->referenceHopitalRepo->findBy(['clientIdAdada' => $client_id_adada, 'Note' => $id]);
if (count($references) > 0)
{
$responseCode = 1;
}
else
{
$note = $this->noteRepo->findNoteWithIdNote($id,$client_id_adada);
if ($note != null)
{
$note->emptyReferencesHopital();
$em->flush();
$em->remove($note);
$em->flush();
}
}
return new JsonResponse( array (
'responseCode' => $responseCode,
'content' => ''
));
}
/**
* Require ROLE_REFERENT only for this action
*
* @IsGranted("ROLE_REFERENT")
*/
public function add(Request $request)
{
return $this->edit($request, 0);
}
/**
* Require ROLE_REFERENT only for this action
*
* @IsGranted("ROLE_REFERENT")
*/
public function form(Request $request, $id)
{
return $this->edit($request, $id, true);
}
}