ninebadge/src/ninebadge-1.0/src/Controller/RestController.php

115 lines
3.4 KiB
PHP

<?php
namespace App\Controller;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\Controller\Annotations as FOSRest;
use Swagger\Annotations as SWG;
use App\Entity\Tallyday as Tallyday;
class RestController extends AbstractFOSRestController
{
private $output=[];
private $cpt;
/**
* Start / Stop timer
*
*
* @FOSRest\Post("/rest/timer")
* @SWG\Response(
* response=200,
* description="Start / Stop Timer"
* )
* )
* @SWG\Parameter(
* name="key",
* in="formData",
* required=true,
* description="User APIKey",
* type="string"
* )
*/
public function timer(Request $request) {
set_time_limit(0);
ini_set('memory_limit', '1024M');
// Initalisation Manager
$em = $this->getDoctrine()->getManager();
// Récupération des parametres
$key=$request->get("key");
// Rechercher l'utilisateur associé à la clé
$user = $em->getRepository("App:User")->findOneBy(["apikey"=>$key]);
if(!$user) {
$view = $this->view("API Key inconnue", 403);
return $this->handleView($view);
}
$datenow=new \DateTime("now");
$datenow->setTime ( $datenow->format("H"), $datenow->format("i"), 0 );
// On recherche le dernier pointage de la journée
$data = $em->getRepository("App:Tallyday")->findOneBy(["user"=>$user,"dateof"=>$datenow],["datestart"=>"DESC"]);
// Si pas d'entrée ou si la dernière entrée à une date de fin, c'est que l'on ouvre un créneau
if(!$data||$data->getDateend()) {
$data = new Tallyday();
$data->setDateof(new \DateTime("now"));
$data->setUser($this->getUser());
$data->setValidateuser(false);
$data->setValidatemaster(false);
$data->setIsbreakday(false);
$data->setDatestart($datenow);
}
// Sinon c'est que l'on ferme un creneau
elseif($data) {
$data->setDateend($datenow);
}
// Sinon pas normal
else {
$view = $this->view("Incohérence dans vos créneaux horaires", 404);
return $this->handleView($view);
}
// On vérifie quand meme la cohérance des crénaux
if(!$em->getRepository("App:Tallyday")->vefifTallytime($data)) {
$view = $this->view("Incohérence dans vos créneaux horaires", 404);
return $this->handleView($view);
}
// C'est ok on fluh
$em->persist($data);
$em->flush();
// Calcul du temps de la journée
$datas = $em->getRepository("App:Tallyday")->findTallyday($user,clone $datenow);
$e = new \DateTime('00:00');
$f = clone $e;
foreach($datas as $data) {
$e->add($data->getTimeday());
}
$interval = $f->diff($e);
$timeday = (($interval->days*24) + $interval->h).":".sprintf("%02s",$interval->i);
$output = [
"timeday" => $timeday,
"capitaltime" => $em->getRepository("App:Tallyday")->getCapitaltime($user),
];
$view = $this->view($output, 200);
return $this->handleView($view);
}
}