Describe parcels with more detail.
[readifood.git] / lib / order.php
index 5c7e0d8..cb40f63 100644 (file)
   }
 
   function show_order_form($order = null, $area_id = null) {
-    global $states;
+    global $states, $parcel_sizes, $parcel_contents;
 
     if ($order) {
       $q = new OrderStateQuery;
       $order_state = $q->filterByOrderId($order->getId())->orderByUpdated('desc')->limit(1)->findOne();
-      if ($order_state) $state = $order_state->getState();
+      if ($order_state) {
+        $state = $order_state->getState();
+        $driver_id = $order_state->getDriverId();
+      }
     }
     else $order = new Order;
 
     /* Quantity. */
     echo "<tr>\n";
     echo "  <td>Quantity (kg)</td>\n";
-    echo "  <td>"; input("quantity", $order->getQuantity()); echo "</td>\n";
+    echo "  <td>"; input("quantity", sprintf("%0.2f", $order->getQuantity() / 1000)); echo "</td>\n";
+    echo "</tr>\n";
+
+    /* Parcel type. */
+    echo "<tr>\n";
+    echo "  <td>Parcel size</td>\n";
+    echo "  <td><select name=\"parcel_size\">\n";
+    $mask = 1 << (count($parcel_sizes) + 1);
+    for ($i = 0; $i < count($parcel_sizes); $i++) {
+      option("parcel_size", $i << 1, $parcel_sizes[$i], $order->getParcel() % $mask);
+    }
+    echo "</select></td>\n";
+    echo "</tr>\n";
+
+    /* Parcel contents. */
+    echo "<tr>\n";
+    echo "  <td>Parcel contents</td>\n";
+    echo "  <td>";
+    for ($i = count($parcel_sizes); $i < count($parcel_contents); $i++) {
+      echo "  <input type=\"checkbox\" name=\"parcel_$i\"";
+      if ($order->getParcel() & (1 << $i)) echo " checked";
+      echo ">$parcel_contents[$i]\n";
+    }
+    echo "</td>\n";
     echo "</tr>\n";
 
     /* Driver. */
   }
 
   function update_order(&$order, $new = false) {
-    global $user_id;
+    global $user_id, $parcel_sizes, $parcel_contents;
 
     #$date = ymd_to_iso8601("date");
     $date = $_POST['date'];
     if (! $driver_id) $driver_id = null;
     $state = $_POST['state'];
     if (! $state) $state = $GLOBALS['STATE_PLACED'];
+    $parcel = $_POST['parcel_size'];
+    for ($i = count($parcel_sizes); $i < count($parcel_contents); $i++) {
+      if ($_POST['parcel_' . $i] == "on") $parcel |= (1 << $i);
+    }
 
     if ($date) {
       list($y, $m, $d) = explode('-', $date);
       $order->setRequesterId($requester_id);
       $order->setBeneficiaryId($beneficiary_id);
       $order->setHubId($hub_id);
-      $order->setQuantity($quantity);
+      $order->setQuantity($quantity * 1000);
+      $order->setParcel($parcel);
 
       /* XXX: begin/commit */
       try {
 
       $driver_id = $order_state->getDriverId();
       if ($driver_id) $driver = get_contact_by_id($driver_id);
+      else $driver = null;
 
       /* XXX */
       $state = $order_state->getState();