<?php
namespace App\Controller;
use App\Repository\AntibiotiqueRepository;
use App\Repository\CoAntibiotiqueCalculRepository;
use App\Repository\LangueRepository;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
class DefaultController extends AbstractController
{
private $antibiotiqueRepo;
private $coAntibiotiqueCalculRepo;
private $langueRepo;
public function __construct(
AntibiotiqueRepository $antibiotiqueRepo,
CoAntibiotiqueCalculRepository $coAntibiotiqueCalculRepo,
LangueRepository $langueRepo
){
$this->coAntibiotiqueCalculRepo = $coAntibiotiqueCalculRepo;
$this->antibiotiqueRepo = $antibiotiqueRepo;
$this->langueRepo = $langueRepo;
}
public function abx_bmi_aide_ios(Request $request)
{
return $this->render('aide-ios.html.twig');
}
public function abx_bmi_aide(Request $request)
{
return $this->render('aide.html.twig');
}
public function welcome(Request $request)
{
return $this->redirectToRoute('index');
}
public function index(Request $request)
{
$locale = $this->langueRepo->findByCodeLangue($request->getLocale())->getIdLangue();
$antibiosLangue = $this->antibiotiqueRepo->findAllAntibiotiquesActif();
$antibios = [];
foreach($antibiosLangue as $atb){
$atb = $this->antibiotiqueRepo->findLibById($locale, $atb->getIdAntibiotique());
array_push($antibios, (!empty($atb))?$atb[0]['libelleAntibiotique']:'');
}
sort($antibios);
$antibiogarde = null;
if ($request->get('antibiogarde') != null){
$antibiogarde = $request->get('antibiogarde');
}
return $this->render('base.html.twig', array('antibiotiques' => $antibios, 'antibiogarde' => $antibiogarde));
}
public function calculDosageModule(Request $request, TranslatorInterface $translator)
{
$locale = $this->langueRepo->findByCodeLangue($request->getLocale())->getIdLangue();
$antibiotiqueLib = null;
$antibiotiqueLib = $request->get('antibiotique');
$antibiotiqueId = $this->antibiotiqueRepo->findIdAtbByLib($locale, $antibiotiqueLib);
$familleId = null;
$idsFamille = $this->antibiotiqueRepo->findIdFamilleByIdAtb($antibiotiqueId);
if(count($idsFamille) > 1 ){
foreach($idsFamille as $id){
if($this->antibiotiqueRepo->findDoseStandardByIdAtbAndIdFamAtb($locale, $antibiotiqueId, $id) != []){
$familleId = $id['idFamilleAntibiotique'];
}
}
}else {
$familleId = $this->antibiotiqueRepo->findIdFamilleByIdAtb($antibiotiqueId)[0]['idFamilleAntibiotique'];
}
$sexe = null;
$sexe = $request->get('sexe');
$poids = null;
$poids = $request->get('poids');
$taille = null;
$taille = $request->get('taille');
$dose = null;
$dose = $request->get('dose');
foreach ($request->request as $key => $value)
{
switch ($key) {
case 'antibiotique':
$antibiotiqueId = $this->antibiotiqueRepo->findIdAtbByLib($locale, $value);
$idsFamille = $this->antibiotiqueRepo->findIdFamilleByIdAtb($antibiotiqueId);
if(count($idsFamille) > 1 ){
foreach($idsFamille as $id){
if($this->antibiotiqueRepo->findDoseStandardByIdAtbAndIdFamAtb($locale, $antibiotiqueId, $id) != []){
$familleId = $id['idFamilleAntibiotique'];
}
}
}else {
$familleId = $this->antibiotiqueRepo->findIdFamilleByIdAtb($antibiotiqueId)[0]['idFamilleAntibiotique'];
}
break;
case 'sexe':
$sexe = $value;
break;
case 'poids':
$poids = $value;
break;
case 'taille':
$taille = $value;
break;
case 'dose':
$dose = $value;
break;
default:
break;
}
}
$erreurPoids = null;
$erreurTaille = null;
$erreurDose = null;
$resultat = null;
$erreurPoids = ($poids == '' || $poids == null || $poids == 0) ? 1 : 0 ;
$erreurTaille = ($taille == '' || $taille == null || $taille == 0) ? 1 : 0 ;
$erreurDose = ($dose == '' || $dose == null || $dose == 0) ? 1 : 0 ;
if (!$erreurDose && !$erreurPoids && !$erreurTaille)
{
$datas = $this->algorithmeCalculDosage($antibiotiqueId[0]['idAntibiotique'],$familleId,$sexe,$poids,$taille,$dose, $request, $translator);
if ($datas != null)
{
$resultat = ['antibiotique' => $antibiotiqueId[0]['idAntibiotique'],'famille' => $familleId, 'sexe' => $sexe, 'poids' => $poids, 'taille' => $taille,'dose' => $dose, 'datas' => $datas];
}
else
{
$resultat = "Aucun calcul pour cet antibiotique.";
}
}
return new JsonResponse( array (
'responseCode' => 1,
'content' => $resultat
));
}
private function algorithmeCalculDosage($idDci,$idFamille,$sexe,$poids,$taille,$dose,Request $request, TranslatorInterface $translator)
{
$em = $this->getDoctrine()->getManager();
$calcul = $this->coAntibiotiqueCalculRepo->findAntibiotiqueCalculWithAntibiotiqueAndFamille($idDci,$idFamille); //ex dci:112 - fa:26
$resultat = array();
if ($calcul != null)
{
$situation = $calcul->getSituation();
$libelleAntibiotique = $calcul->getAntibiotique()->getlibelleAntibiotique($request->getLocale());
$libelleFamilleAntibiotique = $calcul->getFamilleAntibiotique()->getLibelleFamilleAntibiotique($request->getLocale());
$resultat["libelleAntibiotique"] = $libelleAntibiotique;
$resultat["libelleFamilleAntibiotique"] = $libelleFamilleAntibiotique;
$resultat["dose"] = $dose;
$resultat["poids"] = $poids;
$resultat["sexe"] = $sexe;
$resultat["taille"] = $taille;
$resultat["situation"] = $situation;
$references = $this->coAntibiotiqueCalculRepo->finReferenceWithIdAntibiotiqueCalcul($calcul->getIdAntibiotiqueCalcul(),$request->getLocale());
// dd($references);
$resultat["reference"] = "";
foreach ($references as $reference)
{
if ($reference["documentPDF"] != null && $reference["documentPDF"] != "") {
if (preg_match("/https?:\/\//", $reference["documentPDF"],$match))
{
$resultat["reference"] .= '- <a href="'.$reference["documentPDF"].'" target="_blank">'.$reference["texte"].'</a><br/>';
}
else
{
$resultat["reference"] .= '- <a href="'.$this->get('router')->generate('abx_bmi_references',array('reference' => $reference["documentPDF"])).'" target="_blank">'.$reference["texte"].'</a><br/>';
}
}
elseif ($reference["texte"] != "") {
$resultat["reference"] .= '- '.$reference["texte"].'<br/>';
}
}
if ($resultat["reference"] == "")
{
$resultat["reference"] = $translator->trans('algorithmeDosage.noReference');
}
//******************************
// Determination de valeur_x_abw
//******************************
$valeur_x_abw = 0;
if (is_numeric($calcul->getYDrogue())) {
$valeur_x_abw = $calcul->getYDrogue();
}
$resultat["x_abw"] = $valeur_x_abw;
//***************************
// Determination de BMI (kg/m²)
//***************************
$bmi = ($poids)/(($taille/100)*($taille/100));
$bmi = $bmi*1;
$resultat["bmi"] = round($bmi,1);
//*****************
// Interprétation BMI
//*****************
if (round($bmi,1) < 18.5) {
$interpretation_bmi = $translator->trans('algorithmeDosage.underweight');
}
elseif (round($bmi,1) < 25) {
$interpretation_bmi = $translator->trans('algorithmeDosage.normalWeight');
}
elseif (round($bmi,1) < 30) {
$interpretation_bmi = $translator->trans('algorithmeDosage.overweight');
}
elseif (round($bmi,1) < 35) {
$interpretation_bmi = $translator->trans('algorithmeDosage.moderateObesityI');
}
elseif (round($bmi,1) < 40) {
$interpretation_bmi = $translator->trans('algorithmeDosage.severeObesityII');
}
elseif (round($bmi,1) < 50) {
$interpretation_bmi = $translator->trans('algorithmeDosage.massiveObesityIII');
}
elseif (round($bmi,1) < 60) {
$interpretation_bmi = $translator->trans('algorithmeDosage.morbidObesity');
}
else $interpretation_bmi = $translator->trans('algorithmeDosage.superObesity');
$resultat["interpretation_bmi"] = $interpretation_bmi;
//******************
// Poids idéal (IBW)
//******************
// homme
// ARRONDI(2,2*RéglagesHomme +3,5*RéglagesHomme * ((taille/100)-1,5);1)
// femme
// ARRONDI(2,2*RéglageFemme +3,5*RéglagesFemme * ((taille/100)-1,5);1)
$ibw = 0;
// homme
if ($sexe == 1) {
$ibw = round(2.2*22.8+3.5*22.8*(($taille/100)-1.5),1);
// $ibw = 49.9+(0.89*($taille-152.4));
}
// femme
elseif ($sexe == 2) {
$ibw = round(2.2*21.3+3.5*21.3*(($taille/100)-1.5),1);
// $ibw = 45.4+(0.89*($taille-152.4));
}
$resultat["ibw"] = $ibw;
//*******************
// Poids ajusté (ABW)
//*******************
$abw = 0;
$abw = $ibw+$valeur_x_abw*($poids-$ibw);
$resultat["abw"] = round($abw,1);
//*******************
// Poids Maigre (LBW)
//*******************
// Homme
// ARRONDI(9270*poids/(6680+(216*bmi));1)
// Femme
// ARRONDI(9270*poids/(8780+(244*bmi));1)
$lbw = 0;
// homme
if ($sexe == 1) {
$lbw = round(9270*$poids/(6680+(216*$bmi)),1);
// $lbw = (1.1*$poids)-(128*(($poids*$poids)/($taille*$taille)));
}
// femme
elseif ($sexe == 2) {
$lbw = round(9270*$poids/(8780+(244*$bmi)),1);
// $lbw = (1.07*$poids)-(148*(($poids*$poids)/($taille*$taille)));
}
$resultat["lbw"] = $lbw;
//*******************
// Recommandation
//*******************
$resultat["situation_bmi"] = $translator->trans('algorithmeDosage.BMI') . round($bmi,1) . " (". $interpretation_bmi .")</b>.";
$resultat["recommandation"] = preg_replace('/<poso ?\/?>(.*?)<\/poso>?/s', '$1', $calcul->getAlgorithme($request->getLocale()));
}
return $resultat;
}
public function checkatb(Request $request, TranslatorInterface $translator)
{
$locale = $this->langueRepo->findByCodeLangue($request->getLocale())->getIdLangue();
$antibiotiqueLib = $request->get('antibiotique');
$antibiotiqueId = $this->antibiotiqueRepo->findIdAtbByLib($locale, $antibiotiqueLib)[0]['idAntibiotique'];
$idsFamille = $this->antibiotiqueRepo->findIdFamilleByIdAtb($antibiotiqueId);
if(count($idsFamille) > 1 ){
foreach($idsFamille as $id){
if($this->antibiotiqueRepo->findDoseStandardByIdAtbAndIdFamAtb($locale, $antibiotiqueId, $id) != []){
$familleId = $id['idFamilleAntibiotique'];
}
}
}else {
$familleId = $this->antibiotiqueRepo->findIdFamilleByIdAtb($antibiotiqueId)[0]['idFamilleAntibiotique'];
}
$datas = $this->antibiotiqueRepo->findDoseStandardByIdAtbAndIdFamAtb($locale, $antibiotiqueId, $familleId);
if ($datas && $datas!=[] && $datas[0]['doseStandard'] != null)
{
$resultat = $datas[0]['doseStandard'];
}
else
{
$resultat = $translator->trans('checkATB.noStandardDose');
}
return new JsonResponse( array (
'responseCode' => 1,
'content' => $resultat
));
}
public function mentions_legales(Request $request){
return $this->render('mentions-legales.html.twig');
}
public function comite_editorial(Request $request){
return $this->render('comite-editorial.html.twig');
}
public function abx_bmi_comite_editorial(Request $request){
return $this->render('abx-bmi-comite-editorial.html.twig');
}
}