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); list($tabDataNbHoureNav, $tabDataMeteo) = NbHoureNav::createTabNbHoureNav($spot, $em); $tabNbHoureNav = NbHoureNav::calculateNbHourNav($tabDataNbHoureNav); $output->writeln('<info> *** Nb Heure nav ***</info>'); // Save nbHoure on spot foreach ($tabNbHoureNav as $keyDate => $tabWebSite) { $output->writeln('<info>' . $keyDate . ': '); $nbHoureNavCalc = 0; $nbSiteCalc = 0; foreach ($tabWebSite as $keyWebSite => $nbHoureNav) { $output->writeln('<info> ' . $keyWebSite . ' : ' . $nbHoureNav . '</info> '); $noteDates = ManageNote::getNotesDate($spot, \DateTime::createFromFormat('Y-m-d', $keyDate), $em); $nbHoureNavObj = ManageNote::getNbHoureNav($noteDates, $keyWebSite, $em); $nbHoureNavObj->setNbHoure($nbHoureNav); $em->persist($nbHoureNavObj); $em->persist($noteDates); if ($nbHoureNav > 0) { $nbSiteCalc++; $nbHoureNavCalc += $nbHoureNav; } } if ($nbSiteCalc > 0) { $output->writeln('<info> ' . $keyDate . ' : ' . $nbHoureNavCalc . ' / ' . $nbSiteCalc . ' = ' . $nbHoureNavCalc / $nbSiteCalc . '</info> '); $noteDates->setNbHoureNavCalc($nbHoureNavCalc / $nbSiteCalc); $em->persist($noteDates); } } $output->writeln('<info> *** Meteo ***</info>'); // Save meteo $tabMeteo = NbHoureMeteo::calculateMeteoNav($tabDataMeteo); foreach ($tabMeteo as $keyDate => $tabMeteoDay) { $output->writeln('<info> Calcule Meteo of ' . $keyDate . '</info> '); $noteDates = ManageNote::getNotesDate($spot, \DateTime::createFromFormat('Y-m-d', $keyDate), $em); $noteDates->setTempMax($tabMeteoDay["tempMax"]); $noteDates->setTempMin($tabMeteoDay["tempMin"]); $noteDates->setMeteoBest($tabMeteoDay["meteoBest"]); $noteDates->setMeteoWorst($tabMeteoDay["meteoWorst"]); $em->persist($noteDates); } $output->writeln('<info> *** T C de l eau ***</info>'); //********** Température de l'eau ********** try { $tabTempWater = null; $tabTempWater = TempWaterGetData::getTempWaterFromSpot($spot, $output); } catch (\Exception $e) { $output->writeln('<warn>' . $e->getMessage() . '</warn>'); $output->writeln('<warn> * End Warn * </warn>'); } if ($tabTempWater != null) { $currentDay = new \DateTime("now"); foreach ($tabTempWater as $numJourFromToday => $tempWater) { $noteDates = ManageNote::getNotesDate($spot, clone $currentDay, $em); $noteDates->setTempWater($tempWater); $em->persist($noteDates); $currentDay = date_add($currentDay, new \DateInterval('P1D')); // Jour suivant } } $output->writeln('<info>******************************</info>'); } $em->flush(); }
/** * @Template() * * http://localhost/Wind/web/app_dev.php/admin/BO/ajax/spot/dataHoureNav/1 */ public function tabDataHoureNavAction($id = null) { $em = $this->container->get('doctrine.orm.entity_manager'); $spot = $em->find('LaPoizWindBundle:Spot', $id); if (!$spot) { return $this->render('LaPoizWindBundle:Default:errorBlock.html.twig', array('errMessage' => "Spot not find !")); } list($tabDataNbHoureNav, $tabDataMeteo) = NbHoureNav::createTabNbHoureNav($spot, $em); return $this->render('LaPoizWindBundle:BackOffice/Test:dataNbHoureNav.html.twig', array('spot' => $spot, 'tabNbHoure' => $tabDataNbHoureNav, 'tabDataMeteo' => $tabDataMeteo, 'message' => "", 'saveSuccess' => true)); }
/** * @param $tabNbHoureNavData: tableau provenant de createTabNbHoureNav * @return tableau du nombre de nav en fonction des sites de prévision */ static function calculateNbHourNav($tabNbHoureNavData) { $isMarée = false; $tabNbHoureNav = array(); foreach ($tabNbHoureNavData as $date => $jourTab) { $tabNbHoureNav[$date] = array(); $tabSitePrev = array(); foreach ($jourTab as $houre => $hourTab) { if (sizeof($hourTab) > 1) { // pas uniquement la marée foreach ($hourTab as $key => $data) { if ($key != "marée") { // $data => tab de prevision avec orientation et wind if (!array_key_exists($key, $tabSitePrev)) { // inexistant dans le tableau des websites de prevision $tabSitePrev[$key] = array(); if ($houre > NbHoureNav::HEURE_MATIN) { // Premiere heure prevision n'est pas celle du début de la journée de kite -> on met celle de la premiere heure de prev $prevHour = NbHoureNav::HEURE_MATIN; $prevWind = $data["wind"]; $prevOrientation = $data["orientation"]; NbHoureNav::calculateNbHoureWindBetween2Houres($tabSitePrev[$key], $prevHour, $prevOrientation, $prevWind, $houre, $data["orientation"], $data["wind"]); } } else { $prevHour = $tabSitePrev[$key]["prevHoure"]; $prevWind = $tabSitePrev[$key]["prevWind"]; $prevOrientation = $tabSitePrev[$key]["prevOrientation"]; NbHoureNav::calculateNbHoureWindBetween2Houres($tabSitePrev[$key], $prevHour, $prevOrientation, $prevWind, $houre, $data["orientation"], $data["wind"]); } NbHoureNav::setPreviousData($tabSitePrev[$key], $houre, $data["wind"], $data["orientation"]); } else { $isMarée = true; } } } } // $tabSitePrev est remplis des nb Heures de nav en fonction du vent (force et orientation) pour chaque website renseigné if ($isMarée) { // Il y a des contraintes de marée // Il faut les croiser avec les prev de vent foreach ($jourTab as $houre => $hourTab) { //$coefMarée=array_key_exists("marée",$hourTab)?$hourTab["marée"]:1; // A virer une fois l'erreur de datePrev des maree trouvé $coefMarée = $hourTab["marée"]; foreach ($tabSitePrev as $webSiteKey => $hourTab) { if (!array_key_exists($webSiteKey, $tabNbHoureNav[$date])) { $tabNbHoureNav[$date][$webSiteKey] = 0; } if (!array_key_exists($houre, $tabSitePrev[$webSiteKey])) { // si dernier prev n'est pas à NbHoureNav::HEURE_SOIR => remplir avec derniere valeur enregistré $tabSitePrev[$webSiteKey][$houre] = end($tabSitePrev[$webSiteKey]); } $tabNbHoureNav[$date][$webSiteKey] += $coefMarée * $tabSitePrev[$webSiteKey][$houre]; } } } else { // Pas de contrainte de marée for ($numHour = NbHoureNav::HEURE_MATIN; $numHour <= NbHoureNav::HEURE_SOIR; $numHour++) { foreach ($tabSitePrev as $webSiteKey => $hourTab) { if (!array_key_exists($webSiteKey, $tabNbHoureNav[$date])) { $tabNbHoureNav[$date][$webSiteKey] = 0; } if (!array_key_exists($houre, $tabSitePrev[$webSiteKey])) { // si dernier prev n'est pas à NbHoureNav::HEURE_SOIR => remplir avec derniere valeur enregistré $tabSitePrev[$webSiteKey][$houre] = end($tabSitePrev[$webSiteKey]); } $tabNbHoureNav[$date][$webSiteKey] += $tabSitePrev[$webSiteKey][$houre]; } } } } return $tabNbHoureNav; }