public function testGetSchedules() { $rows = [["transfer_pattern" => 1000, "transfer_leg" => 2000, "service" => 3000, "origin" => "PDW", "destination" => "TON", "departure_time" => 4000, "arrival_time" => 4005, "operator" => "LN", "type" => "train"], ["transfer_pattern" => 1000, "transfer_leg" => 2000, "service" => 3001, "origin" => "PDW", "destination" => "TON", "departure_time" => 4010, "arrival_time" => 4015, "operator" => "LN", "type" => "train"], ["transfer_pattern" => 1000, "transfer_leg" => 2001, "service" => 3010, "origin" => "TON", "destination" => "HIB", "departure_time" => 4000, "arrival_time" => 4005, "operator" => "LN", "type" => "train"], ["transfer_pattern" => 1000, "transfer_leg" => 2001, "origin" => "HIB", "destination" => "TBW", "service" => 3010, "departure_time" => 4005, "arrival_time" => 4010, "operator" => "LN", "type" => "train"], ["transfer_pattern" => 1000, "transfer_leg" => 2001, "service" => 3011, "origin" => "TON", "destination" => "HIB", "departure_time" => 4005, "arrival_time" => 4010, "operator" => "LN", "type" => "train"], ["transfer_pattern" => 1000, "transfer_leg" => 2001, "service" => 3011, "origin" => "HIB", "destination" => "TBW", "departure_time" => 4010, "arrival_time" => 4015, "operator" => "LN", "type" => "train"], ["transfer_pattern" => 1001, "transfer_leg" => 2010, "service" => 3100, "origin" => "PDW", "destination" => "TBW", "departure_time" => 4000, "arrival_time" => 4005, "operator" => "LN", "type" => "train"], ["transfer_pattern" => 1001, "transfer_leg" => 2010, "service" => 3101, "origin" => "PDW", "destination" => "TBW", "departure_time" => 4010, "arrival_time" => 4015, "operator" => "LN", "type" => "train"]]; $expected = [new TransferPatternSchedule([new TransferPatternLeg([new Leg([new TimetableConnection("PDW", "TON", 4000, 4005, 3000, "LN")]), new Leg([new TimetableConnection("PDW", "TON", 4010, 4015, 3001, "LN")])]), new TransferPatternLeg([new Leg([new TimetableConnection("TON", "HIB", 4000, 4005, 3010, "LN"), new TimetableConnection("HIB", "TBW", 4005, 4010, 3010, "LN")]), new Leg([new TimetableConnection("TON", "HIB", 4005, 4010, 3011, "LN"), new TimetableConnection("HIB", "TBW", 4010, 4015, 3011, "LN")])])]), new TransferPatternSchedule([new TransferPatternLeg([new Leg([new TimetableConnection("PDW", "TBW", 4000, 4005, 3100, "LN")]), new Leg([new TimetableConnection("PDW", "TBW", 4010, 4015, 3101, "LN")])])])]; $factory = new TransferPatternScheduleFactory(); $actual = $factory->getSchedulesFromTimetable($rows); $this->assertEquals($expected, $actual); }
/** * Return the schedules including the calling points of each leg * * @param $origin * @param $destination * @param $startTimestamp * @return TransferPatternSchedule[] */ public function getTimetableWithCallingPoints($origin, $destination, $startTimestamp) { $dow = lcfirst(gmdate('l', $startTimestamp)); $stmt = $this->db->prepare("\n SELECT \n leg.transfer_pattern as transfer_pattern,\n leg.id as transfer_leg,\n tt.service,\n tt.origin,\n tt.destination,\n TIME_TO_SEC(tt.departureTime) as departureTime,\n TIME_TO_SEC(tt.arrivalTime) as arrivalTime,\n tt.operator,\n tt.type\n FROM transfer_pattern\n JOIN transfer_pattern_leg leg ON transfer_pattern.id = leg.transfer_pattern\n JOIN timetable_connection dept ON leg.origin = dept.origin\n JOIN timetable_connection arrv ON leg.destination = arrv.destination AND dept.service = arrv.service\n JOIN timetable_connection tt ON tt.service = dept.service AND tt.departureTime >= dept.departureTime AND tt.arrivalTime <= arrv.arrivalTime\n WHERE arrv.arrivalTime > dept.departureTime\n AND transfer_pattern.origin = :origin\n AND transfer_pattern.destination = :destination\n AND dept.departureTime >= :departureTime\n AND dept.startDate <= :startDate AND dept.endDate >= :startDate\n AND dept.{$dow} = 1\n ORDER BY leg.transfer_pattern, leg.id, arrv.arrivalTime, tt.service, tt.departureTime\n "); $stmt->execute(['departureTime' => gmdate("H:i:s", $startTimestamp), 'startDate' => gmdate("Y-m-d", $startTimestamp), 'origin' => $origin, 'destination' => $destination]); $factory = new TransferPatternScheduleFactory(); return $factory->getSchedulesFromTimetable($stmt->fetchAll(PDO::FETCH_ASSOC)); }