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); } }