123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- /**
- * Created by PhpStorm.
- * User: robin
- * Date: 10/1/16
- * Time: 5:32 PM
- */
-
- namespace App\Business;
-
-
- use App\DataAccess\SchedulesDataAccess;
- use App\Dbo\StopsLiteRoutesLiteDbo;
- use App\Dbo\StopsLiteRoutesLiteDboArray;
- use App\Dbo\StopsSchedulesDbo;
- use Carbon\Carbon;
- use GuzzleHttp\Exception\ClientException;
- use Luticate\Utils\Dbo\LuPaginatedDbo;
-
- class SchedulesBusiness
- {
- public static $days = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"];
- public static $dateFormat = "Y-m-d";
- public static $timeFormat = "H:i:s";
-
- protected static function getDataAccess()
- {
- return new SchedulesDataAccess();
- }
-
- public static function getScheduleTypeForDate(array $config, Carbon $date)
- {
-
- foreach ($config["scheduleTypes"] as $scheduleType) {
- if ($scheduleType["type"] == static::$days[$date->dayOfWeek]) {
- $from = Carbon::createFromFormat(static::$dateFormat, $scheduleType["dateFrom"]);
- $to = Carbon::createFromFormat(static::$dateFormat, $scheduleType["dateTo"]);
- if ($date->between($from, $to)) {
- return $scheduleType;
- }
- }
- }
-
- foreach ($config["scheduleTypes"] as $scheduleType) {
- if ($scheduleType["type"] == static::$days[$date->dayOfWeek]) {
- return $scheduleType;
- }
- }
-
- foreach ($config["scheduleTypes"] as $scheduleType) {
- if ($scheduleType["type"] == "week") {
- $from = Carbon::createFromFormat(static::$dateFormat, $scheduleType["dateFrom"]);
- $to = Carbon::createFromFormat(static::$dateFormat, $scheduleType["dateTo"]);
- if ($date->between($from, $to)) {
- return $scheduleType;
- }
- }
- }
-
- foreach ($config["scheduleTypes"] as $scheduleType) {
- if ($scheduleType["type"] == "week") {
- return $scheduleType;
- }
- }
-
- return $config["scheduleTypes"][0];
- }
-
- public static function getSchedulesForDate(array $schedules, Carbon $date)
- {
- foreach ($schedules as $schedule) {
- if (in_array($date->dayOfWeek, $schedule["week_days"])) {
- return $schedule["schedule"];
- }
- }
- return null;
- }
-
- public static function getSingle(array $scheduleType, StopsLiteRoutesLiteDbo $stop, Carbon $date, int $count)
- {
- $dbo = new StopsSchedulesDbo();
- $dbo->setRouteId($stop->getRouteId());
- $dbo->setStopId($stop->getStopId());
- try {
- $data = static::getDataAccess()->get($scheduleType["resourceId"], "allweek", $stop->getStopId(), $stop->getRouteId());
- }
- catch (ClientException $e) {
- if ($e->getCode() == 404) {
- $dbo->setSchedules([]);
- return $dbo;
- }
- else {
- throw $e;
- }
- }
-
- $schedulesCarbon = [];
- if (!is_null($data["data"]["schedules"])) {
- $schedules = static::getSchedulesForDate($data["data"]["schedules"], $date);
-
- for ($i = 0; $i < count($schedules) && $count > 0; ++$i) {
- $scheduleDate = Carbon::createFromFormat(static::$timeFormat . " " . static::$dateFormat, $schedules[$i] . " " . $date->toDateString());
- if ($scheduleDate->gte($date)) {
- --$count;
- $schedulesCarbon[] = $scheduleDate;
- }
- }
- }
-
- $dbo->setSchedules($schedulesCarbon);
- return $dbo;
- }
-
- public static function getMultiple(StopsLiteRoutesLiteDboArray $stops, Carbon $date, int $count)
- {
- $config = MiscBusiness::getConfig();
-
- $scheduleType = static::getScheduleTypeForDate($config, $date);
-
- $dbos = [];
-
- foreach ($stops->getArray() as $stop) {
- $dbo = static::getSingle($scheduleType, $stop, $date, $count);
- if (count($dbo->getSchedules()) < $count) {
- $count2 = $count - count($dbo->getSchedules());
- $date2 = $date->copy();
- $date2->addDay(1);
- $date2->setTime(0, 0, 0);
- $scheduleType2 = static::getScheduleTypeForDate($config, $date2);
- $dbo2 = static::getSingle($scheduleType2, $stop, $date2, $count2);
- $dbo->setSchedules(array_merge($dbo->getSchedules(), $dbo2->getSchedules()));
- }
- $dbos[] = $dbo;
- }
-
- return new LuPaginatedDbo(count($dbos), $dbos);
- }
- }
|