Show deliveries on arbitrary dates.
authorIain Patterson <me@iain.cx>
Tue, 30 Apr 2013 16:44:39 +0000 (12:44 -0400)
committerIain Patterson <me@iain.cx>
Tue, 30 Apr 2013 16:44:39 +0000 (12:44 -0400)
Allow showing drivers and deliveries scheduled on dates other than today.

lib/delivery.php

index dddf2a2..4c7c4f0 100644 (file)
@@ -1,19 +1,33 @@
 <?php
 
-  /* Find orders scheduled for delivery today. */
-  function get_orders_for_today() {
+  if (isset($_POST['show_date'])) {
+    header(sprintf("Location: http%s://%s/%s/date/%s", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, $_POST['date']));
+    exit;
+  }
+
+  /* Find orders scheduled for delivery on a certain date. */
+  function get_orders_for_date($date) {
     $order_ids = array();
 
+    /* $date is in Y-m-d format. */
+    list($y, $m, $d) = explode('-', $date);
+    $then = mktime(0, 0, 0, $m, $d, $y);
+
     $q = new OrderQuery();
-    $orders = $q->filterByDate(time('Y-m-d'))->find();
+    $orders = $q->filterByDate($then)->find();
     if (count($orders)) {
       foreach ($orders as $order) $order_ids[] = $order->getId();
     }
-    else echo "<p>No deliveries today.</p>\n";
+    else echo "<p>No deliveries for $date.</p>\n";
 
     return $order_ids;
   }
 
+  /* Find orders scheduled for delivery today. */
+  function get_orders_for_today() {
+    return get_orders_for_date(date('Y-m-d'), time());
+  }
+
   /* Find drivers with deliveries today. */
   function get_drivers_by_order_id($order_ids) {
     $driver_ids = array();
@@ -53,7 +67,7 @@
     return $order_ids;
   }
 
-  function show_driver_forms($driver_ids) {
+  function show_driver_forms($driver_ids, $date = null) {
     global $module;
 
     if (! count($driver_ids)) return;
       return;
     }
 
-    echo "<p>Drivers with deliveries scheduled:";
+    echo "<p>Drivers with deliveries scheduled on ";
+    if ($date) echo $date;
+    else echo date('Y-m-d', time());
+    echo ":";
     foreach ($contacts as $contact) {
-      printf("<br>\n<a href=\"/$module/driver/%s/%d\">%s</a>", urlencode($contact->getDisplayname()), $contact->getId(), htmlspecialchars($contact->getDisplayname()));
+      printf("<br>\n<a href=\"/$module/%sdriver/%s/%d\">%s</a>", ($date) ? "date/$date/" : "", urlencode($contact->getDisplayname()), $contact->getId(), htmlspecialchars($contact->getDisplayname()));
     }
   }
 
-  function show_driver_schedule($driver_name = null, $driver_id = null) {
+  function show_driver_schedule($driver_name = null, $driver_id = null, $date = null) {
     if (isset($driver_id)) $contact = get_contact_by_id($driver_id);
     else if (isset($driver_name)) $contact = get_contact_by_name($driver_name);
     if (! $contact) {
       return;
     }
 
-    echo "<h3>Delivery schedule for <strong>" . htmlspecialchars($contact->getDisplayname()) . "</strong></h3>\n";
-    $order_ids = get_driver_schedule_by_order_id($contact->getId(), get_orders_for_today());
+    echo "<h3>Delivery schedule for <strong>" . htmlspecialchars($contact->getDisplayname()) . "</strong> on ";
+    if ($date) {
+      $order_ids = get_orders_for_date($date);
+      echo $date;
+    }
+    else {
+      $order_ids = get_orders_for_today();
+      echo date('Y-m-d', time());
+    }
+    echo "</h3>\n";
+
     $q = new OrderQuery;
-    $orders = $q->filterById($order_ids)->find();
+    $orders = $q->filterById(get_driver_schedule_by_order_id($contact->getId(), $order_ids))->find();
     foreach ($orders as $order) {
       $contact = get_contact_by_id($order->getBeneficiaryId());
       if (! $contact) continue;
     }
   }
 
+  function show_delivery_date_form($date = null) {
+    echo "<form method=\"POST\" action=\"" . $_SERVER['REQUEST_URI'] . "\">\n";
+    echo "<p>Show deliveries for\n";
+    show_date_form("date", $date);
+    submit("show_date", "Show");
+    echo "</form>\n";
+  }
+
+  $date = null;
   list($ignored, $id, $args) = parse_parameters($parameters);
-  if (count($args)) show_driver_schedule($args[0], $args[1]);
+  if ($parameters[0] == "date") {
+    if ($args[0]) {
+      if (preg_match('/^[1-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]$/', $args[0])) $date = $args[0];
+      array_shift($args);
+    }
+  }
+
+  if ($args[0] == "driver") array_shift($args);
+  if (count($args)) show_driver_schedule($args[0], $args[1], $date);
   else {
-    $order_ids = get_orders_for_today();
+    if ($date) $order_ids = get_orders_for_date($date);
+    else $order_ids = get_orders_for_today();
+
     if ($order_ids) $driver_ids = get_drivers_by_order_id($order_ids);
-    if ($driver_ids) show_driver_forms($driver_ids);
+    if ($driver_ids) show_driver_forms($driver_ids, $date);
+    show_delivery_date_form($date);
   }
 
 ?>