Ejemplo n.º 1
0
 public static function getHorairesByLigne($ligne, $date, $heure, $minute, $idTypeSemaine = null)
 {
     if (is_null($idTypeSemaine)) {
         if (!TypeSemaine::getIdType($date)) {
             return false;
         }
         $idTypeSemaine = TypeSemaine::getIdType($date);
     } else {
         $idTypeSemaine = [0 => $idTypeSemaine];
     }
     if ($heure == null || $minute == null) {
         $heureMin = '00:00';
     } else {
         $heureMin = $heure . ':' . $minute;
     }
     $results = [];
     $trouve = false;
     $idSemaine = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->whereIn('idTypeSemaine', $idTypeSemaine)->groupBy('idTypeSemaine')->lists('idTypeSemaine');
     foreach ($idSemaine as $semaine) {
         $arretsAller = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->where('idTypeSemaine', '=', $semaine)->where('sens', '=', '1')->orderBy('ordre1')->groupBy('ordre1')->lists('idArret');
         $arretsRetour = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->where('idTypeSemaine', '=', $semaine)->where('sens', '=', '2')->orderBy('ordre1')->groupBy('ordre1')->lists('idArret');
         $premiereCourse = 50;
         $derniereCourse = 0;
         foreach ($arretsAller as $arret) {
             $horairesArret = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->where('idTypeSemaine', '=', $semaine)->where('idArret', $arret)->where('sens', '=', '1')->where('heure', '>', $heureMin)->orderBy('course', 'asc')->lists('heure', 'course');
             if ($heureMin != '00:00:00') {
                 foreach ($horairesArret as $course => $horaire) {
                     if ($horaire != '00:00:00' && $course < $premiereCourse) {
                         $premiereCourse = $course;
                     }
                     if ($horaire != '00:00:00' && $course > $derniereCourse) {
                         $derniereCourse = $course;
                     }
                 }
             }
             $nomArret = trim(Arret::findNameById($arret));
             $results[$semaine]['aller'][$nomArret] = $horairesArret;
         }
         if ($heureMin != '00:00:00') {
             foreach ($results[$semaine]['aller'] as $nomArret => $horaire) {
                 for ($i = $premiereCourse; $i < $derniereCourse + 1; $i++) {
                     if (!isset($horaire[$i])) {
                         $results[$semaine]['aller'][$nomArret][$i] = '00:00:00';
                     }
                 }
                 foreach ($horaire as $course => $horaireArret) {
                     if ($course < $premiereCourse) {
                         unset($results[$semaine]['aller'][$nomArret][$course]);
                     }
                 }
                 ksort($results[$semaine]['aller'][$nomArret]);
             }
         }
         $premiereCourse = 50;
         $derniereCourse = 0;
         foreach ($arretsRetour as $arret) {
             $horairesArret = DB::table('horaire')->remember(120)->where('idLigne', '=', $ligne)->where('idTypeSemaine', '=', $semaine)->where('idArret', $arret)->where('sens', '=', '2')->where('heure', '>', $heureMin)->orderBy('course', 'asc')->lists('heure');
             if ($heureMin != '00:00:00') {
                 foreach ($horairesArret as $course => $horaire) {
                     if ($horaire != '00:00:00' && $course < $premiereCourse) {
                         $premiereCourse = $course;
                     }
                     if ($horaire != '00:00:00' && $course > $derniereCourse) {
                         $derniereCourse = $course;
                     }
                 }
             }
             $nomArret = trim(Arret::findNameById($arret));
             $results[$semaine]['retour'][$nomArret] = $horairesArret;
         }
         if ($heureMin != '00:00:00') {
             foreach ($results[$semaine]['retour'] as $nomArret => $horaire) {
                 for ($i = $premiereCourse; $i < $derniereCourse + 1; $i++) {
                     if (!isset($horaire[$i])) {
                         $results[$semaine]['retour'][$nomArret][$i] = '00:00:00';
                     }
                 }
                 foreach ($horaire as $course => $horaireArret) {
                     if ($course < $premiereCourse) {
                         unset($results[$semaine]['retour'][$nomArret][$course]);
                     }
                 }
                 ksort($results[$semaine]['retour'][$nomArret]);
             }
         }
     }
     return $results;
 }