예제 #1
0
 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();
 }
예제 #2
0
 /**
  * @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));
 }
예제 #3
0
 /**
  * @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;
 }