<?php
namespace App\Event;
use App\Entity\Attachment;
use App\Entity\Exercise;
use App\Entity\Result;
use App\Entity\Patient;
use App\Entity\Sequence;
use App\Entity\Test;
use App\Entity\TestRequest;
use App\Entity\CogniFullTest;
use App\Entity\Sample;
use App\Entity\TestResult;
use App\Entity\Upload;
use App\Service\QuestGenerator;
use CMEN\GoogleChartsBundle\GoogleCharts\Charts\ColumnChart;
use CMEN\GoogleChartsBundle\GoogleCharts\Charts\ComboChart;
use CMEN\GoogleChartsBundle\GoogleCharts\Charts\GeoChart;
use CMEN\GoogleChartsBundle\GoogleCharts\Charts\Map;
//use Dmishh\SettingsBundle\Manager\SettingsManager;
use CMEN\GoogleChartsBundle\GoogleCharts\Options\VAxis;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\EasyAdminEvents;
//use Knp\Snappy\Pdf;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use App\Service\MutationDiscovery;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Twig\Environment;
use Gedmo\Timestampable\Traits\TimestamableEntity;
class EasyAdminSubscriber implements EventSubscriberInterface {
private $token_storage;
private $dna_tools;
private $entity_manager;
private $patient_updater;
private $settings_manager;
private $translator;
private $quest_generator;
public function __construct(SluggerInterface $slugger, QuestGenerator $quest_generator, ParameterBagInterface $parameter_bag, TranslatorInterface $translator, TokenStorageInterface $token_storage, EntityManagerInterface $entity_manager, RequestStack $request, Environment $twig, SessionInterface $session) {
$this->token_storage = $token_storage;
$this->entity_manager = $entity_manager;
$this->request = $request;
$this->twig = $twig;
$this->session = $session;
$this->translator = $translator;
$this->slugger = $slugger;
$this->parameter_bag = $parameter_bag;
$this->quest_generator = $quest_generator;
}
public static function getSubscribedEvents() {
return [
EasyAdminEvents::PRE_UPDATE => 'onPreUpdate',
EasyAdminEvents::PRE_PERSIST => 'onPreUpdate',
EasyAdminEvents::POST_SHOW => 'onPostShow',
];
}
public function onPreUpdate(GenericEvent $event) {
$entity = $event->getSubject();
if ($entity instanceof Exercise) {
}
if ($entity instanceof Patient) {
}
}
public function onPostShow(GenericEvent $event)
{
$entity = $event->getSubject();
if ($entity instanceof Result) {
$results_array = $entity->getValue();
//$results_evaluated = $this->quest_generator->generateFullResult($results_array);
//$entity->setResultsEvaluated($results_evaluated);
//dd($entity);
}
if ($entity instanceof Patient) {
$results = $entity->getResults();
// intermittent claudication chart
$chart_array[] = ['Date', 'Claudication Distance', 'Average Speed'];
if (count($results) > 0) {
foreach ($results as $result) {
$intermittentClaudicationDistance = $result->getIntermittentClaudicationDistance();
$averageSpeed = $result->getAverageSpeed();
$testDate = $result->getCreatedAt()->format('Y-m-d');
$chart_array[] = [$testDate, (int)$intermittentClaudicationDistance, (double)$averageSpeed];
}
}
$chart = new ComboChart();
$chart->getData()->setArrayToDataTable($chart_array);
$chart->getOptions()->setTitle('Claudication Distance and average speed');
$vAxis1 = new VAxis();
$vAxis1->setTitle('Claudication Distance');
$vAxis1->setMinValue(0);
$vAxis2 = new VAxis();
$vAxis2->setTitle('Average Speed');
$vAxis2->setMinValue(0);
$chart->getOptions()->setVAxes([$vAxis1, $vAxis2]);
$chart->getOptions()->getHAxis()->setTitle('Day');
$series1 = new \CMEN\GoogleChartsBundle\GoogleCharts\Options\ComboChart\Series();
$series1->setType('bars');
$series1->setTargetAxisIndex(0);
$series1->setColor('#6174D1');
$series2 = new \CMEN\GoogleChartsBundle\GoogleCharts\Options\ComboChart\Series();
$series2->setType('line');
$series2->setTargetAxisIndex(1);
$series2->setColor('#CD3C63');
$series2->setCurveType('function');
$chart->getOptions()->setSeries([$series1, $series2]);
$chart->getOptions()->setWidth(1000);
$chart->getOptions()->setHeight(500);
$charts['icd_as'] = $chart;
// Distance chart
$chart_array1[] = ['Date','Distance'];
if (count($results) > 0) {
foreach ($results as $result) {
$Distance = $result->getDistance();
$testDate = $result->getCreatedAt()->format('Y-m-d');
$chart_array1[] = [$testDate, (int)$Distance];
}
}
$chart1 = new ColumnChart();
$chart1->getData()->setArrayToDataTable($chart_array1);
$chart1->getOptions()->setTitle('Distance');
$chart1->getOptions()->getHAxis()->setTitle('Day');
$series1 = new \CMEN\GoogleChartsBundle\GoogleCharts\Options\ColumnChart\Series();
$series1->setTargetAxisIndex(0);
$series1->setColor('#6174D1');
$chart1->getOptions()->setSeries([$series1]);
$chart1->getOptions()->setWidth(1000);
$chart1->getOptions()->setHeight(500);
$charts['distance'] = $chart1;
// Average Time to stop
$chart_array2[] = ['Date','Average time to stop'];
if (count($results) > 0) {
foreach ($results as $result) {
$TimeToStopAverage = $result->getTimeToStopAverage();
$testDate = $result->getCreatedAt()->format('Y-m-d');
$chart_array2[] = [$testDate, (int)$TimeToStopAverage];
}
}
$chart2 = new ColumnChart();
$chart2->getData()->setArrayToDataTable($chart_array2);
$chart2->getOptions()->setTitle('Average time to stop');
$chart2->getOptions()->getHAxis()->setTitle('Day');
$series2 = new \CMEN\GoogleChartsBundle\GoogleCharts\Options\ColumnChart\Series();
$series2->setTargetAxisIndex(0);
$series2->setColor('#6174D1');
$chart2->getOptions()->setSeries([$series2]);
$chart2->getOptions()->setWidth(1000);
$chart2->getOptions()->setHeight(500);
$charts['average_time_to_stop'] = $chart2;
// Total stop time
$chart_array3[] = ['Date','Total stop time'];
if (count($results) > 0) {
foreach ($results as $result) {
$TotalStopTime = $result->getTotalStopTime();
$testDate = $result->getCreatedAt()->format('Y-m-d');
$chart_array3[] = [$testDate, (int)$TotalStopTime];
}
}
$chart3 = new ColumnChart();
$chart3->getData()->setArrayToDataTable($chart_array3);
$chart3->getOptions()->setTitle('Total stop time');
$chart3->getOptions()->getHAxis()->setTitle('Day');
$series3 = new \CMEN\GoogleChartsBundle\GoogleCharts\Options\ColumnChart\Series();
$series3->setTargetAxisIndex(0);
$series3->setColor('#6174D1');
$chart3->getOptions()->setSeries([$series3]);
$chart3->getOptions()->setWidth(1000);
$chart3->getOptions()->setHeight(500);
$charts['total_stop_time'] = $chart3;
$entity->setCharts($charts);
}
}
}