Allow placing recurring orders.
[readifood.git] / lib / order.php
index 8b1bbcd..74306d9 100644 (file)
     if (isset($contact_id)) $contact = get_contact_by_id($contact_id);
     else if ($contact_name) $contact = get_contact_by_name($contact_name);
     if ($contact) {
-      echo "<p>Orders from requester " . $contact->getLink() . ":";
+      echo "<p>Orders from referrer " . $contact->getLink() . ":";
       return show_orders($offset, $per_page, $contact->getId(), null, $state_mask);
     }
     else echo "<p>No such contact!</p>\n";
     echo "<tr>\n";
     echo "  <td>Delivery</td>\n";
     /* XXX: Find suitable dates from area. */
-    echo "  <td>"; show_date_form("date", $order->getDate()); echo "</td>\n";
+    echo "  <td>";
+    show_date_form("date", $order->getDate());
+    if (! $order->getDate()) {
+      echo " and recur for <select name=\"recurrence\">\n";
+      for ($i = 0; $i < 4; $i++) option("recurrence", $i, $i);
+      echo "</select> weeks";
+    }
+    echo "</td>\n";
     echo "</tr>\n";
 
-    /* Requester. */
+    /* Referrer. */
     echo "<tr>\n";
-    echo "  <td>Requester</td>\n";
+    echo "  <td>Referrer</td>\n";
     echo "  <td><select name=\"requester_id\">\n";
     option("requester_id", null, "");
     $contacts = get_area_requesters();
     $state = $_POST['state'];
     if (! $state) $state = $GLOBALS['STATE_PLACED'];
 
-    if (! $date) $date = time();
+    if ($date) {
+      list($y, $m, $d) = explode('-', $date);
+      $then = mktime(0, 0, 0, $m, $d, $y);
+    }
+    else $then = time();
     /* XXX: check date */
 
     $requester = get_contact_by_id($requester_id);
     if (! $requester) {
-      echo "<p>Invalid requester!</p>\n";
+      echo "<p>Invalid referrer!</p>\n";
       return false;
     }
 
       return false;
     }
 
-    $order->setDate($date);
-    $order->setRequesterId($requester_id);
-    $order->setBeneficiaryId($beneficiary_id);
-    $order->setHubId($hub_id);
-    $order->setQuantity($quantity);
+    if ($new && isset($_POST['recurrence'])) $recurrence = $_POST['recurrence'];
+    if (! $recurrence) $recurrence = 0;
 
-    try {
-      $order->save();
+    $now = time();
+    for ($i = 0; $i <= $recurrence; $i++) {
+      if ($i) {
+        echo "<p>Creating recurrence $i.</p>\n";
+        $order = new Order;
+      }
 
-      $order_state = new OrderState;
-      $order_state->setUpdated(time());
-      $order_state->setOrderId($order->getId());
-      $order_state->setUserId($user_id);
-      $order_state->setDriverId($driver_id);
-      $order_state->setState($state);
+      $order->setDate($then + 7 * 86400 * $i);
+      $order->setRequesterId($requester_id);
+      $order->setBeneficiaryId($beneficiary_id);
+      $order->setHubId($hub_id);
+      $order->setQuantity($quantity);
 
-      $order_state->save();
-    }
-    catch (Exception $e) {
-      if ($new) echo "<p>Error placing order.</p>\n";
-      else echo "<p>Error updating order.</p>\n";
-      return false;
+      /* XXX: begin/commit */
+      try {
+        $order->save();
+
+        $order_state = new OrderState;
+        $order_state->setUpdated($now);
+        $order_state->setOrderId($order->getId());
+        $order_state->setUserId($user_id);
+        $order_state->setDriverId($driver_id);
+        $order_state->setState($state);
+
+        $order_state->save();
+      }
+      catch (Exception $e) {
+        if ($new) echo "<p>Error placing order.</p>\n";
+        else echo "<p>Error updating order.</p>\n";
+        echo "<p>" . $e->getMessage() . "</p>\n";
+        return false;
+      }
     }
 
     return true;
       }
     }
     else if ($parameters[0] == "from") {
-      /* /order/from/requester/Iain+Patterson/4 */
+      /* /order/from/referrer/Iain+Patterson/4 */
       switch ($parameters[1]) {
-        case "requester":
+        case "referrer":
           $contact_id = $parameters[3];
           $q = new ContactQuery;
           $contact = $q->findOneById($contact_id);