public function storeTypeSemaine() { $nature = '0000000X'; $libelle = Input::get('libelle'); $type = new TypeSemaine(); Input::get('lun') ? $nature[0] = 1 : 0; Input::get('mar') ? $nature[1] = 1 : 0; Input::get('mer') ? $nature[2] = 1 : 0; Input::get('jeu') ? $nature[3] = 1 : 0; Input::get('ven') ? $nature[4] = 1 : 0; Input::get('sam') ? $nature[5] = 1 : 0; Input::get('scol') ? $nature[7] = "S" : 0; Input::get('vac') && $nature[7] == "S" ? $nature[7] = "T" : Input::get('vac') ? $nature[7] = "V" : 0; // (Input::get('periode') == "scol") ? $nature[7] = "S" : 0; // (Input::get('periode') == "vac") ? $nature[7] = "V" : 0; // (Input::get('periode') == "scolvac") ? $nature[7] = "T" : 0; $type->libelleTypeSemaine = $libelle; $type->nature = $nature; $type->save(); Session::flash('flash_msg', "Le nouveau type de semaine a bien été ajouté."); Session::flash('flash_type', "success"); return Redirect::to(URL::previous()); }
/** * Retourne le(s) ID(s) du type de la semaine correspondant à la date en parametre dans un tableau */ public static function getIdType($date) { $isHoliday = Periode::isHoliday($date); $day = Periode::getDay($date); $types = TypeSemaine::all(); $results = []; // Si le jour n'est pas dimanche if ($day != "0") { $day--; // On diminue de 1 pour correspondre à la position de la valeur dans nature } else { $day = "6"; // La position dans nature est de 6 } // Parcourir tous les types de semaine foreach ($types as $type) { // Initialisation des variables à chaque itération $isDayOk = false; $isPeriodOk = false; $found = false; // Vérification du "1" à la place du jour de la date (-1 puisque provenant de getdate()) if ($type->nature[$day] == "1") { $isDayOk = true; } // Vérification de V / S / T en fonction de la période (vacances ou non) if ($isHoliday) { if ($type->nature[7] == "V" || $type->nature[7] == "T") { $isPeriodOk = true; } } else { if ($type->nature[7] == "S" || $type->nature[7] == "T") { $isPeriodOk = true; } } // Si une période correspond if ($isDayOk && $isPeriodOk) { // Trouvé à vrai et on remplit le tableau de résultas $found = true; array_push($results, $type->idTypeSemaine); } } if ($found) { return $results; } else { // Retourne faux si aucune période ne correspond return false; } }
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; }