Account for bus stations in myway timeliness calculate
Account for bus stations in myway timeliness calculate

--- a/include/db/route-dao.inc.php
+++ b/include/db/route-dao.inc.php
@@ -31,7 +31,7 @@
 }
 function getRoutesByShortName($routeShortName) {
     global $conn;
-    $query = "Select * from routes where route_short_name = :routeShortName";
+    $query = "Select distinct route_id, route_short_name from routes where route_short_name = :routeShortName";
     debug($query, "database");
     $query = $conn->prepare($query);
     $query->bindParam(":routeShortName", $routeShortName);
@@ -42,6 +42,22 @@
     }
     return $query->fetchAll();
 }
+
+function getRouteHeadsigns($routeID) {
+    global $conn;
+    $query = "select distinct trip_headsign,direction_id from routes join trips on trips.route_id = routes.route_id
+join stop_times on stop_times.trip_id = trips.trip_id ";
+    debug($query, "database");
+    $query = $conn->prepare($query);
+    $query->bindParam(":routeID", $routeID);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+return $query->fetchAll();
+}
+
 function getRouteByFullName($routeFullName) {
     global $conn;
     $query = "Select * from routes where route_short_name||route_long_name = :routeFullName LIMIT 1";

--- a/include/db/trip-dao.inc.php
+++ b/include/db/trip-dao.inc.php
@@ -56,7 +56,7 @@
 
 function getTripStopTimes($tripID) {
     global $conn;
-    $query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code,
+    $query = "SELECT stop_times.trip_id,trip_headsign,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code,
 	stop_sequence,service_id,trips.route_id,route_short_name,route_long_name
 FROM stop_times
 join trips on trips.trip_id = stop_times.trip_id
@@ -83,127 +83,6 @@
     }
     return Array();
 }
-
-/* DEPRECIATED 
-  function getTimeInterpolatedTrip($tripID, $range = "") {
-  global $conn;
-  $query = "SELECT stop_times.trip_id,arrival_time,stop_times.stop_id,stop_lat,stop_lon,stop_name,stop_code,
-  stop_sequence,service_id,trips.route_id,route_short_name,route_long_name
-  FROM stop_times
-  join trips on trips.trip_id = stop_times.trip_id
-  join routes on trips.route_id = routes.route_id
-  join stops on stops.stop_id = stop_times.stop_id
-  WHERE trips.trip_id = :tripID $range ORDER BY stop_sequence";
-  debug($query, "database");
-  $query = $conn->prepare($query);
-  $query->bindParam(":tripID", $tripID);
-  $query->execute();
-  if (!$query) {
-  databaseError($conn->errorInfo());
-  return Array();
-  }
-  $stopTimes = $query->fetchAll();
-  $cur_timepoint = Array();
-  $next_timepoint = Array();
-  $distance_between_timepoints = 0.0;
-  $distance_traveled_between_timepoints = 0.0;
-  $rv = Array();
-  foreach ($stopTimes as $i => $stopTime) {
-  if ($stopTime['arrival_time'] != "") {
-  // is timepoint
-  $cur_timepoint = $stopTime;
-  $distance_between_timepoints = 0.0;
-  $distance_traveled_between_timepoints = 0.0;
-  if ($i + 1 < sizeof($stopTimes)) {
-  $k = $i + 1;
-  $distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]);
-  while ($stopTimes[$k]["arrival_time"] == "" && $k + 1 < sizeof($stopTimes)) {
-  $k += 1;
-  // echo "k".$k;
-  $distance_between_timepoints += distance($stopTimes[$k - 1]["stop_lat"], $stopTimes[$k - 1]["stop_lon"], $stopTimes[$k]["stop_lat"], $stopTimes[$k]["stop_lon"]);
-  }
-  $next_timepoint = $stopTimes[$k];
-  }
-  $rv[] = $stopTime;
-  } else {
-  // is untimed point
-  // echo "i".$i;
-  $distance_traveled_between_timepoints += distance($stopTimes[$i - 1]["stop_lat"], $stopTimes[$i - 1]["stop_lon"], $stopTimes[$i]["stop_lat"], $stopTimes[$i]["stop_lon"]);
-  // echo "$distance_traveled_between_timepoints / $distance_between_timepoints<br>";
-  $distance_percent = $distance_traveled_between_timepoints / $distance_between_timepoints;
-  if ($next_timepoint["arrival_time"] != "") {
-  $total_time = strtotime($next_timepoint["arrival_time"]) - strtotime($cur_timepoint["arrival_time"]);
-  // echo strtotime($next_timepoint["arrival_time"])." - ".strtotime($cur_timepoint["arrival_time"])."<br>";
-  $time_estimate = ($distance_percent * $total_time) + strtotime($cur_timepoint["arrival_time"]);
-  $stopTime["arrival_time"] = date("H:i:s", $time_estimate);
-  } else {
-  $stopTime["arrival_time"] = $cur_timepoint["arrival_time"];
-  }
-  $rv[] = $stopTime;
-  }
-  }
-  // var_dump($rv);
-  return $rv;
-  }
-
-  function getTripPreviousTimePoint($tripID, $stop_sequence) {
-  global $conn;
-  $query = " SELECT trip_id,stop_id,
-  stop_sequence
-  FROM stop_times
-  WHERE trip_id = :tripID and stop_sequence < :stop_sequence
-  and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence DESC LIMIT 1";
-  debug($query, "database");
-  $query = $conn->prepare($query);
-  $query->bindParam(":tripID", $tripID);
-  $query->bindParam(":stop_sequence", $stop_sequence);
-  $query->execute();
-  if (!$query) {
-  databaseError($conn->errorInfo());
-  return Array();
-  }
-  return $query->fetch(PDO :: FETCH_ASSOC);
-  }
-
-  function getTripNextTimePoint($tripID, $stop_sequence) {
-  global $conn;
-  $query = " SELECT trip_id,stop_id,
-  stop_sequence
-  FROM stop_times
-  WHERE trip_id = :tripID and stop_sequence > :stop_sequence
-  and stop_times.arrival_time IS NOT NULL ORDER BY stop_sequence LIMIT 1";
-  debug($query, "database");
-  $query = $conn->prepare($query);
-  $query->bindParam(":tripID", $tripID);
-  $query->bindParam(":stop_sequence", $stop_sequence);
-  $query->execute();
-  if (!$query) {
-  databaseError($conn->errorInfo());
-  return Array();
-  }
-  return $query->fetch(PDO :: FETCH_ASSOC);
-  }
-
-
-
-  function getTimeInterpolatedTripAtStop($tripID, $stop_sequence) {
-  global $conn;
-  // limit interpolation to between nearest actual points.
-  $prevTimePoint = getTripPreviousTimePoint($tripID, $stop_sequence);
-  $nextTimePoint = getTripNextTimePoint($tripID, $stop_sequence);
-  // echo " prev {$lowestDelta['stop_sequence']} next {$nextTimePoint['stop_sequence']} ";
-  $range = "";
-  if ($prevTimePoint != "")
-  $range .= " AND stop_sequence >= '{$prevTimePoint['stop_sequence']}'";
-  if ($nextTimePoint != "")
-  $range .= " AND stop_sequence <= '{$nextTimePoint['stop_sequence']}'";
-  foreach (getTimeInterpolatedTrip($tripID, $range) as $tripStop) {
-  if ($tripStop['stop_sequence'] == $stop_sequence)
-  return $tripStop;
-  }
-  return Array();
-  } */
-
 function getTripStartTime($tripID) {
     global $conn;
     $query = "Select * from stop_times

--- a/myway/index.php
+++ b/myway/index.php
@@ -16,7 +16,7 @@
  */
 include ('../include/common.inc.php');
 
-include_header("Busness R&amp;D", "index");
+include_header("MyWay Balance and Timeliness Survey Results", "index");
 if ($_SESSION['authed'] == true) {
     echo '<ul data-role="listview" data-theme="e" data-groupingtheme="e">
 		<li data-role="list-divider" > Admin Features </li>
@@ -35,6 +35,9 @@
 <ul data-role="listview" data-theme="e" data-groupingtheme="e">
 
     <li data-role="list-divider" > MyWay Timeliness Graphs </li>
+    
+    <li><a href="myway_timeliness_overview.php"><h3>Timeliness Overview</h3>
+            <p>Displays statistics on timeliness split by day/time/month/stop etc.</p></a></li>
     <li><a href="myway_timeliness.php"><h3>Timeliness over Day</h3>
             <p>Displays the deviation from the timetable over the day</p></a></li>
     <li><a href="myway_timeliness_freqdist.php"><h3>Frequency Distribution of Time Deviation</h3>

--- a/myway/myway_timeliness.php
+++ b/myway/myway_timeliness.php
@@ -30,7 +30,7 @@
         var midnight = d.getTime();
 
 <?php
-$query = "select * from myway_timingdeltas where abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas)  order by route_full_name;";
+$query = "select * from myway_timingdeltas where abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas) order by route_name;";
 $query = $conn->prepare($query);
 $query->execute();
 if (!$query) {
@@ -41,11 +41,12 @@
 $labels = Array();
 $lastRoute = "";
 foreach ($query->fetchAll() as $delta) {
-    $routeName = $delta['route_full_name'];
-    if (strstr($routeName, " 3"))
+    $routeName = $delta['route_name'];
+    if (preg_match('/z/',$routeName)) {
         $routeName = "312-319";
-    else
+    } else {
         $routeName = preg_replace('/\D/', '', $routeName);
+    }
     if ($routeName != $lastRoute) {
         $i++;
         echo "    var d$i = [];";
@@ -78,7 +79,7 @@
             yaxis: {
                 tickFormatter: yformatter
             },
-            grid: { hoverable: true, clickable: true, labelMargin: 32   },
+            grid: { hoverable: true, clickable: true, labelMargin: 32   }
         });
         var o;
         o = plot.pointOffset({ x: midnight+ (9*60*60*1000), y: -1.2});

--- a/myway/myway_timeliness_calculate.php
+++ b/myway/myway_timeliness_calculate.php
@@ -50,10 +50,6 @@
     //var_dump($obsv);
     echo "<h3>Observation {$obsv['observation_id']}:</h1>
 <small>{$obsv['myway_stop']} @ {$obsv['time']} on {$obsv['myway_route']}</small><br>";
-    if ($obsv["stop_id"] == "") {
-        echo "error, stop '{$obsv['myway_stop']}' unknown";
-        continue;
-    }
     // convert timestamp into time of day and date
 // timezones from http://www.postgresql.org/docs/8.0/static/datetime-keywords.html
     $time = date("H:i:s", strtotime($obsv['time']));
@@ -61,7 +57,12 @@
     $search_time = date("H:i:s", strtotime($obsv['time']) - (30 * 60)); // 30 minutes margin
     $date = date("c", strtotime($obsv['time']));
     $timing_period = service_period(strtotime($date));
+    if (isset($obsv["stop_id"]) && $obsv["stop_id"] != "" ) {
     $potentialStops = Array(getStop($obsv["stop_id"]));
+    } else {
+        echo "Potential stops are a bus station<br>";
+        $potentialStops = getStops("",  trim(str_replace(Array("Arrival","Arrivals","Arrive Platform 3 Set down only.","Arrive","Set Down Only"), "", $obsv["myway_stop"])));
+    }
     //:get myway_stops records
     //:search by starts with stopcode and starts with street if street is not null
     //no result, skip and display error
@@ -108,6 +109,7 @@
                                 "timeDiff" => $timeDiff,
                                 "stop_id" => $potentialStop['stop_id'],
                                 "stop_sequence" => $trip['stop_sequence'],
+                                "route_name" => "{$potentialRoute['route_short_name']} {$potentialRoute['route_long_name']} {$trip['direction']}",
                                 "route_id" => $trip['route_id']
                             );
                             echo "Found trip {$trip['trip_id']} at stop {$potentialStop['stop_id']} (#{$potentialStop['stop_name']}, sequence #{$trip['stop_sequence']})<br>";
@@ -130,17 +132,25 @@
     usort($timeDeltas, "abssort");
     $lowestDelta = $timeDeltas[0]["timeDiff"];
     if (sizeof($timeDeltas) != 0) {
+        if (abs($lowestDelta) > 9999) {
+             echo "Difference of " . round($lowestDelta / 60, 2) . " minutes is too high. Will not record this observation<br>";
+        } else {
         echo "Lowest difference of " . round($lowestDelta / 60, 2) . " minutes will be recorded for this observation<br>";
         
         $observation_id = $obsv['observation_id'];
+        
+        $route_name = $timeDeltas[0]["route_name"];
         $route_id = $timeDeltas[0]["route_id"];
         $stop_id = $timeDeltas[0]["stop_id"];
+        $myway_stop = $obsv["myway_stop"];
         $stop_sequence = $timeDeltas[0]["stop_sequence"];
-        $stmt = $conn->prepare("insert into myway_timingdeltas (observation_id, route_id, stop_id, timing_delta, time, date, timing_period, stop_sequence)
-				      values (:observation_id, :route_id, :stop_id, :timing_delta, :time, :date, :timing_period, :stop_sequence)");
+        $stmt = $conn->prepare("insert into myway_timingdeltas (observation_id, route_id, stop_id, timing_delta, time, date, timing_period, stop_sequence,myway_stop,route_name)
+				      values (:observation_id, :route_id, :stop_id, :timing_delta, :time, :date, :timing_period, :stop_sequence,:myway_stop,:route_name)");
         $stmt->bindParam(':observation_id', $observation_id);
         $stmt->bindParam(':route_id', $route_id);
+        $stmt->bindParam(':route_name', $route_name);
         $stmt->bindParam(':stop_id', $stop_id);
+        $stmt->bindParam(':myway_stop', $myway_stop);
         $stmt->bindParam(':timing_delta', $lowestDelta);
         $stmt->bindParam(':time', $time_tz);
         $stmt->bindParam(':date', $date);
@@ -153,6 +163,7 @@
         }
         var_dump($conn->errorInfo());
         flush();
+        }
     }
     flush();
 }

--- a/myway/myway_timeliness_overview.php
+++ b/myway/myway_timeliness_overview.php
@@ -77,8 +77,7 @@
 
     <th>Stop </th>
     <?php
-    $query = "select myway_stop, avg(timing_delta), stddev(timing_delta), count(*)  from myway_timingdeltas INNER JOIN myway_observations
-ON myway_observations.observation_id=myway_timingdeltas.observation_id group by myway_stop having  count(*) > 1 order by myway_stop";
+    $query = "select myway_stop, avg(timing_delta), stddev(timing_delta), count(*)  from myway_timingdeltas group by myway_stop having  count(*) > 1 order by myway_stop";
     $query = $conn->prepare($query);
     $query->execute();
     if (!$query) {
@@ -91,7 +90,7 @@
     ?>
     <th>Route </th>
     <?php
-    $query = "select route_full_name, avg(timing_delta), stddev(timing_delta), count(*) from myway_timingdeltas  group by route_full_name having  count(*) > 1 order by route_full_name";
+    $query = "select route_name, avg(timing_delta), stddev(timing_delta), count(*) from myway_timingdeltas  group by route_name having  count(*) > 1 order by route_name";
     $query = $conn->prepare($query);
     $query->execute();
     if (!$query) {

--- a/myway/myway_timeliness_reconcile.php
+++ b/myway/myway_timeliness_reconcile.php
@@ -17,7 +17,7 @@
 include ('../include/common.inc.php');
 auth();
 foreach ($_REQUEST as $key => $value) {
-    if (strstr($key, "route") && !strstr($value, "Select")) {
+      if (strstr($key, "route") && !strstr($value, "Select")) {
         $myway_route = str_replace("route", "", $key);
         $route_id = $value;
         $query = "update myway_routes set route_id = :route_id where myway_route = :myway_route";
@@ -100,6 +100,46 @@
 ';
     echo '<hr>';
 }
+echo '<h2>Routes</h2>';
+/* routes
+  remove alpha char, search present dropdown */
+$query = "Select * from myway_routes where route_short_name is NUll;";
+debug($query, "database");
+$query = $conn->prepare($query);
+$query->execute();
+if (!$query) {
+    databaseError($conn->errorInfo());
+    return Array();
+}
+foreach ($query->fetchAll() as $myway_route) {
+    echo "<h3>{$myway_route[0]}</h3>";
+    $query = "Select * from myway_observations where myway_route = :route order by time";
+    debug($query, "database");
+    $query = $conn->prepare($query);
+    $query->bindParam(":route", $myway_route[0]);
+    $query->execute();
+    if (!$query) {
+        databaseError($conn->errorInfo());
+        return Array();
+    }
+    foreach ($query->fetchAll() as $myway_obvs) {
+        echo $myway_obvs['myway_stop'] . $myway_obvs['time'] . "<br>";
+    }
+    $searchRouteNo = preg_replace("/[A-Z]/", "", $myway_route[0]);
+    echo $searchRouteNo;
+    echo '<form id="inputform' . $myway_route[0] . '">
+<select name="route' . $myway_route[0] . '" onchange=\'$.post("myway_timeliness_reconcile.php", $("#inputform' . $myway_route[0] . '").serialize())\'>
+<option>Select a from/to pair...</option>';
+    foreach (getRoutesByShortName($searchRouteNo) as $routeResult) {
+        foreach(getRouteHeadsigns($routeResult['route_id']) as $headsign ) {
+        echo "<option value=\"{$routeResult['route_short_name']}{$routeResult['route_long_name']}\">
+        {$routeResult['route_short_name']}{$routeResult['route_long_name']} {$headsign['trip_headsign']}</option>\n";
+        }
+        
+    }
+    echo "</select></form>";
+    echo '<hr>';
+}
 include_footer();
 ?>
 

--- a/myway/myway_timeliness_route.json.php
+++ b/myway/myway_timeliness_route.json.php
@@ -23,9 +23,9 @@
 {
 "label": "<?php echo $_REQUEST['routeid']; ?>",
 "data": <?php
-$query = "select * from myway_timingdeltas where route_full_name = :route_full_name AND abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas)  order by stop_sequence;";
+$query = "select * from myway_timingdeltas where route_name = :route_name AND abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas)  order by stop_sequence;";
 $query = $conn->prepare($query);
-$query->bindParam(':route_full_name', $_REQUEST['routeid'], PDO::PARAM_STR, 42);
+$query->bindParam(':route_name', $_REQUEST['routeid'], PDO::PARAM_STR, 42);
 
 $query->execute();
 if (!$query) {

--- a/myway/myway_timeliness_route.php
+++ b/myway/myway_timeliness_route.php
@@ -24,7 +24,7 @@
 <form method="get" action="">
     <select id="routeid" name="routeid">
         <?php
-        $query = "select distinct route_full_name from myway_routes where myway_route != '' order by route_full_name";
+        $query = "select distinct route_name from myway_timingdeltas order by route_name";
         $query = $conn->prepare($query);
         $query->execute();
         if (!$query) {
@@ -32,7 +32,7 @@
             return Array();
         }
         foreach ($query->fetchAll() as $route) {
-            echo "<option value=\"{$route['route_full_name']}\">{$route['route_full_name']}</option>";
+            echo "<option value=\"{$route['route_name']}\">{$route['route_name']}</option>";
         };
         ?>    </select>
     <center><div id="placeholder" style="width:900px;height:550px"></div></center>

--- a/myway/myway_timeliness_stop.json.php
+++ b/myway/myway_timeliness_stop.json.php
@@ -23,11 +23,10 @@
 {
 "label": "<?php echo $_REQUEST['stopid']; ?>",
 "data": <?php
-$query = "select * from myway_timingdeltas INNER JOIN myway_observations
-ON myway_observations.observation_id=myway_timingdeltas.observation_id
+$query = "select * from myway_timingdeltas
    where myway_stop = :myway_stop
    AND abs(timing_delta) < 2*(select stddev(timing_delta) from myway_timingdeltas)
-   order by myway_timingdeltas.time;";
+   order by time;";
 $query = $conn->prepare($query);
 $query->bindParam(':myway_stop', $_REQUEST['stopid'], PDO::PARAM_STR, 42);
 

--- a/myway/myway_timeliness_stop.php
+++ b/myway/myway_timeliness_stop.php
@@ -24,7 +24,7 @@
 <form method="get" action="">
     <select id="stopid" name="stopid">
         <?php
-        $query = "select distinct myway_stop from myway_stops where myway_stop != '' order by myway_stop";
+        $query = "select distinct myway_stop from myway_timingdeltas where myway_stop != '' order by myway_stop";
         $query = $conn->prepare($query);
         $query->execute();
         if (!$query) {