<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Helper\Query\FeeQueries;
use App\Helper\Query\SeasonQueries;
use App\Helper\Query\SessionQueries;
use App\Helper\Query\TrainerQueries;
use App\Helper\Query\ParticipationQueries;
use App\Helper\Query\HouseholdQueries;
use App\Helper\Query\GroupQueries;
use App\Settings\Settings;
use App\Helper\FormHelper;
use App\Entity\Participation;
use Doctrine\Persistence\ManagerRegistry;
//use App\Entity\Season;
class ParticipationsController extends AbstractController
{
/**
* @Route("/participations", name="participations")
*/
public function participationsAction()
{
return $this->render('screens/manageParticipationsView.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
'commonData' => Settings::getCommonData()
]);
}
/**
* @Route("/participations/getFees", name="getFees")
*/
public function getActiveFeesAction(ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$fq = new FeeQueries($em, Settings::RETURN_ARRAY);
$fees = $fq->getActiveFees();
return new JsonResponse($fees);
}
/**
* @Route("/participations/getSessionDatesForSeason/{seasonId}", name="getSessionDatesForSeason")
*/
function getSessionDatesForSeasonAction($seasonId, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$sq = new SeasonQueries($em, Settings::RETURN_ARRAY);
$result = $sq->getSessionDatesForSeason($seasonId);
foreach($result as $key => $thisResult) {
date_default_timezone_set ('Europe/Luxembourg');
setlocale(LC_ALL, 'french');
$d = $thisResult['date'];
$result[$key]['dateForDisplay'] = $d->format('d/m/Y - l');
}
return new JsonResponse($result);
}
/**
* @Route("/participations/getGroupsForSeasonAndClubAndSessionDate", name="getGroupsForSeasonAndClubAndSessionDate")
*/
function getGroupsForSeasonAndClubAndSessionDateAction(Request $request, ManagerRegistry $doctrine) {
$seasonId = $request->get('seasonId');
$clubId = $request->get('clubId');
$sessionDate = $request->get('sessionDate');
$em = $doctrine->getManager();
$gq = new GroupQueries($em, Settings::RETURN_ARRAY);
$result = $gq->getGroupsForSeasonAndClubAndSessionDate($seasonId, $clubId, new \DateTime($sessionDate));
return new JsonResponse($result);
}
/**
* @Route("/participations/getPotentialParticipantsForGroup", name="getPotentialParticipantsForGroup")
*/
function getPotentialParticipantsForGroupAction(Request $request, ManagerRegistry $doctrine) {
//TODO : take into account closed participations included in a statement
$groupId = $request->get('groupId');
$sessionDateParameter = $request->get('sessionDate');
$em = $doctrine->getManager();
$sq = new SessionQueries($em, Settings::RETURN_OBJECTS);
$session = $sq->getSessionForGroupAndDate($groupId, new \DateTime($sessionDateParameter));
//var_dump($session->toArray());
assert(is_object($session));
//$sessionDate = FormHelper::mySqlDateToDateObject($session->date);
$sessionDate = $session->getDate();
//var_dump($session->id);
$gq = new GroupQueries($em, Settings::RETURN_ARRAY);
//var_dump("Session ID: ".$session->getId());
$potentialParticipants = $gq->getPotentialParticipantsForGroup($groupId,$session->getId());
//var_dump($potentialParticipants[0]);
/*
$pq = new ParticipationQueries($em, Settings::RETURN_ARRAY);
$participations = $pq->getParticipationsForSession($session->getId());
var_dump($participations);
*/
//var_dump($fee_ids);
//die();
$result = array();
foreach($potentialParticipants as $key => $tp) {
//var_dump($key);
$tpOutput = $tp[Settings::PARTICIPANT];
if ($tp[1]!==null) {
//There is a participation
$tpOutput['present'] = 1;
$participationData = explode("_",$tp[1]);
if ($participationData[Settings::CLOSED] != 0 /*|| $tpOutput['closed'] == 1*/) {
$tpOutput['closed'] = 1;
} else {
$tpOutput['closed'] = 0;
}
//$potentialParticipants[$key]['closed'] = $participations[$key]['closedCount'] || $participations[$key]['active'];
if($participationData[Settings::FEE]==0) {
$tpOutput['free'] = 1;
} else {
$tpOutput['free'] = 0;
}
$result[] = $tpOutput;
} else {
//No participation yet
$regBeginDate = $tpOutput['begindate'];
$regEndDate = $tpOutput['enddate'];
//if(!is_null($regBeginDate)) $regBeginDate = formHelper::mySqlDateToDateObject($regBeginDate);
//if(!is_null($regEndDate)) $regEndDate = formHelper::mySqlDateToDateObject($regEndDate);
//var_dump($regBeginDate);
//var_dump($regEndDate);
if ((!is_null($regEndDate)) && ($sessionDate < $regBeginDate || $sessionDate > $regEndDate)) {
//Don't display inactive registrations
//unset($potentialParticipants[$key]);
} else {
//Registration was active at that time, show it
$tpOutput['present'] = 0;
$tpOutput['free'] = 0;
$tpOutput['closed'] = 0;
$result[] = $tpOutput;
}
}
}
//var_dump($potentialParticipants);
//var_dump($participations);
//var_dump($potentialParticipants);
//var_dump(count($result));
return new JsonResponse($result);
}
/**
* @Route("/participations/getTrainersOfSession", name="getTrainersOfSession")
*/
function getTrainersOfSessionAction(Request $request, ManagerRegistry $doctrine) {
$groupId = $request->get('groupId');
$sessionDate = $request->get('sessionDate');
$em = $doctrine->getManager();
$sq = new SessionQueries($em,Settings::RETURN_OBJECTS);
$session = $sq->getSessionForGroupAndDate($groupId, new \DateTime($sessionDate));
//var_dump($session->toArray());
assert(is_object($session));
//var_dump($session);
$tq = new TrainerQueries($em, Settings::RETURN_ARRAY);
//var_dump($session->getId());
$trainers = $tq->getTrainersOfSession($session->getId());
return new JsonResponse($trainers);
}
/**
* @Route("/participations/getActiveTrainersByName", name="getActiveTrainersByName")
*/
function getActiveTrainersByNameAction(ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
$tq = new TrainerQueries($em, Settings::RETURN_ARRAY);
$trainers = $tq->getActiveTrainersByName();
return new JsonResponse($trainers);
}
/**
* @Route("/participations/saveParticipations", name="saveParticipations")
*/
function saveParticipationsAction(Request $request, ManagerRegistry $doctrine) {
define('REGULAR_FEE_ID',1);
define('REDUCED_FEE_ID',2);
define('FREE_FEE_ID',3);
$em = $doctrine->getManager();
$regularFee = $em->find('App:Fee', REGULAR_FEE_ID);
$reducedFee = $em->find('App:Fee', REDUCED_FEE_ID);
$freeFee = $em->find('App:Fee', FREE_FEE_ID);
$groupId = $request->get('groupId');
$sessionDate = $request->get('sessionDate');
$pda = $request->get('pda');
$trainers = $request->get('trainers');
$sq = new SessionQueries($em, Settings::RETURN_OBJECTS);
$session = $sq->getSessionForGroupAndDate($groupId, $sessionDate);
assert(!is_null($session));
if(is_null($trainers)) {
$trainers=array();
}
//var_dump($parameters['pda']);
foreach($pda as $index => $participationData) {
$thisPersonId = $participationData[0];
$presentFlag = $participationData[1];
$freeFlag = $participationData[2];
if(is_numeric($thisPersonId) && is_numeric($presentFlag) && is_numeric($freeFlag)) {
//var_dump($thisPersonId);
//var_dump($session->id);
//var_dump(Person::hasHouseholdOfPersonReducedFee($thisPersonId));
$pq = new ParticipationQueries($em, Settings::RETURN_OBJECTS);
$hq = new HouseholdQueries($em, Settings::RETURN_OBJECTS);
$thisParticipation = $pq->getParticipationForSessionAndPerson($session->getId(), $thisPersonId);
if(is_array($thisParticipation)) {
//there is a participation
//var_dump($thisParticipation->toArray());
if ($thisParticipation['closedCount'] == 0) {
if ($presentFlag==0) {
//the participation needs to be deleted
$em->remove($thisParticipation[0]);
} else {
//update the feeID
if ($freeFlag==1) {
$thisParticipation[0]->setFee($freeFee);
} else {
if ($hq->hasHouseholdOfPersonReducedFee($thisPersonId)) {
$thisParticipation[0]->setFee($reducedFee);
}
else {
$thisParticipation[0]->setFee($regularFee);
}
}
//var_dump($thisParticipation->toArray());
$em->persist($thisParticipation[0]);
$em->flush();
}
}
} else {
//there is no participation yet
if ($presentFlag==1) {
$thisParticipation = new Participation();
$thisParticipation->setSession($session);
$thisPerson = $em->find('App:Person', $thisPersonId);
$thisParticipation->setPerson($thisPerson);
if ($freeFlag==1) {
$thisParticipation->setFee($freeFee);
} else {
if ($hq->hasHouseholdOfPersonReducedFee($thisPersonId))
$thisParticipation->setFee($reducedFee);
else
$thisParticipation->setFee($regularFee);
}
$em->persist($thisParticipation);
$em->flush();
}
}
}
}
$this->saveTrainers($session, $trainers, $doctrine);
return new JsonResponse('Finished');
}
function saveTrainers($session, $trainersList, ManagerRegistry $doctrine) {
$em = $doctrine->getManager();
//$session = $em->find('App:Session', $sessionId);
assert(is_object($session));
foreach($session->getTrainer() as $thisTrainer) {
$thisTrainer->getSession()->removeElement($session);
//foreach($thisTrainer->getSession() as $thisSession ) {
// var_dump($thisSession->getId());
// }
}
$session->getTrainer()->clear();
$em->flush();
foreach($trainersList as $thisTrainerId) {
$trainer = $em->find('App:Trainer', $thisTrainerId);
$session->getTrainer()->add($trainer);
$trainer->getSession()->add($session);
}
$em->flush();
}
}