/** * @param $spot * @param $tabNotes : array $tabNotes['Y-m-d'] for next 7 days * @param $mareeDate : prévision de marre que l'on va analyser * return: la note vis à vis de la marée */ static function calculNoteMaree($spot, $tabNotes, $mareeDate) { // vérifie que $mareeDate->getDatePrev() soit dans $tabNotes if (NoteMaree::isInTabNotes($tabNotes, $mareeDate->getDatePrev()) && $spot->getMareeRestriction() != null) { $listePrevisionMaree = $mareeDate->getListPrevision(); if ($listePrevisionMaree != null && count($listePrevisionMaree) >= 2) { // *** Calcul de la formule de la courbe: y = a sin(wt + Phi) + b *** // t=time en seconde, y=hauteur en metre, w: phase 2 pi / T , T: fréquence // résolution de l'équation // *** calcul le temps ou la marée est OK, warn et OK *** $timeMareeOK = 0; $timeMareeWarn = 0; $timeMareeKO = 0; $timeMareeOKTab = array(); $timeMareeWarnTab = array(); $timeMareeKOTab = array(); // pour chaque $restriction de $spot->getMareeRestriction() foreach ($spot->getMareeRestriction() as $mareeRestriction) { // calcul l'heure (minute) d'intersection pour calculer le temps dans l'etat list($timeInState, $timeTab) = MareeTools::calculTimeInState($mareeRestriction, $listePrevisionMaree); $mareeState = $mareeRestriction->getState(); switch ($mareeState) { case "OK": $timeMareeOK += $timeInState; $timeMareeOKTab = $timeTab; break; case "KO": $timeMareeKO += $timeInState; $timeMareeKOTab = $timeTab; break; case "warn": $timeMareeWarn += $timeInState; $timeMareeWarnTab = $timeTab; break; } } // calcul de la note vis à vis de du temps de navigation / temps etat ok, warn et KO $tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["marée"] = NoteMaree::getNote($timeMareeOK, $timeMareeWarn, $timeMareeKO); $tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["maréeTimeOK"] = $timeMareeOKTab; $tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["maréeTimeWarn"] = $timeMareeWarnTab; $tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["maréeTimeKO"] = $timeMareeKOTab; } } return $tabNotes; }
protected function execute(InputInterface $input, OutputInterface $output) { $em = $this->getContainer()->get('doctrine.orm.entity_manager'); // récupere tous les spots $listSpot = $em->getRepository('LaPoizWindBundle:Spot')->findAll(); foreach ($listSpot as $spot) { $output->writeln('<info>Note du Spot ' . $spot->getNom() . ' - </info>'); // On efface les vielles notes (avant aujourd'hui) ManageNote::deleteOldData($spot, $em); $tabNotes = array(); $tabListePrevisionDate = array(); // tableau des liste des PrevisionDate, chaque cellule correspondant à une dateprev // Pour les 7 prochains jours $day = new \DateTime("now"); for ($nbPrevision = 0; $nbPrevision < 7; $nbPrevision++) { $tabNotes[$day->format('Y-m-d')] = -1; $tabListePrevisionDate[$day->format('Y-m-d')] = array(); $day->modify('+1 day'); } $output->writeln('<info> Note la maree </info>'); //********** Marée ********** // récupére la marée du jour // Note la marée en fonction des restrictions $listeMareeFuture = $em->getRepository('LaPoizWindBundle:MareeDate')->getFuturMaree($spot); foreach ($listeMareeFuture as $mareeDate) { $noteDate = ManageNote::getNotesDate($spot, $mareeDate->getDatePrev(), $em); $tabNotes = NoteMaree::calculNoteMaree($spot, $tabNotes, $mareeDate); $keyDate = $mareeDate->getDatePrev()->format('Y-m-d'); $noteMaree = $tabNotes[$keyDate]["marée"]; $noteDate->setNoteMaree($noteMaree); $output->writeln('<info>' . $keyDate . ': ' . $noteMaree . '</info> '); $em->persist($noteDate); } $output->writeln('<info> Note la Météo</info>'); //********** Meteo ********** //list des PrevisionDate pour les prochain jour, pour le spot pour tous les websites $listALlPrevisionDate = $em->getRepository('LaPoizWindBundle:PrevisionDate')->getPrevDateAllWebSiteNextDays($spot); foreach ($listALlPrevisionDate as $previsionDate) { // ajouter au tableau de la cellule du jour de $tabListePrevisionDate $tabListePrevisionDate[$previsionDate->getDatePrev()->format('Y-m-d')][] = $previsionDate; } // Save Note on spot foreach ($tabNotes as $keyDate => $note) { if ($tabListePrevisionDate[$keyDate] != null && count($tabListePrevisionDate[$keyDate]) > 0) { $noteDate = ManageNote::getNotesDate($spot, \DateTime::createFromFormat('Y-m-d', $keyDate), $em); $output->write('<info>' . $keyDate . ': '); $noteDate->setNoteWind(NoteWind::calculNoteWind($tabListePrevisionDate[$keyDate])); $output->write(' wind:' . $noteDate->getNoteWind() . ' - '); $noteDate->setNoteMeteo(NoteMeteo::calculNoteMeteo($tabListePrevisionDate[$keyDate])); $output->write(' meteo:' . $noteDate->getNoteMeteo() . ' - '); $noteDate->setNoteTemp(NoteTemp::calculNoteTemp($tabListePrevisionDate[$keyDate])); $output->write(' temp:' . $noteDate->getNoteTemp()); $output->writeln('</info>'); $em->persist($noteDate); } } //********** Température de l'eau ********** // rien n'existe actuellement // récupére la temperature de l'eau dans la journée (elle ne varie quasi pas // calcul de la note en fonction de la T°C $output->writeln('<info>******************************</info>'); } $em->flush(); }
/** * @Template() * Note les marées * http://localhost/Wind/web/app_dev.php/admin/BO/ajax/spot/maree/note/save/1 */ public function mareeSaveNoteAction($id) { $em = $this->container->get('doctrine.orm.entity_manager'); $spot = $em->find('LaPoizWindBundle:Spot', $id); if (!$spot) { return $this->container->get('templating')->renderResponse('LaPoizWindBundle:Default:errorBlock.html.twig', array('errMessage' => "Spot not find !")); } // On efface les vielles notes (avant aujourd'hui) ManageNote::deleteOldData($spot, $em); $tabNotes = array(); // Pour les 7 prochains jours $day = new \DateTime("now"); for ($nbPrevision = 0; $nbPrevision < 7; $nbPrevision++) { $tabNotes[$day->format('Y-m-d')] = array(); $day->modify('+1 day'); } //********** Marée ********** // récupére la marée du jour // Note la marée en fonction des restrictions $listeMareeFuture = $em->getRepository('LaPoizWindBundle:MareeDate')->getFuturMaree($spot); foreach ($listeMareeFuture as $mareeDate) { $noteDate = ManageNote::getNotesDate($spot, $mareeDate->getDatePrev(), $em); $tabNotes = NoteMaree::calculNoteMaree($spot, $tabNotes, $mareeDate); $noteDate->setNoteMaree($tabNotes[$mareeDate->getDatePrev()->format('Y-m-d')]["marée"]); $em->persist($noteDate); } $em->flush(); return $this->container->get('templating')->renderResponse('LaPoizWindBundle:BackOffice/Spot/Ajax:displayNote.html.twig', array('spot' => $spot, 'message' => "", 'saveSuccess' => true)); }