115 lines
3.4 KiB
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);
|
|
}
|
|
|
|
}
|
|
|
|
|