}
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;
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";
/* Referrer. */
echo " <td>Beneficiary</td>\n";
echo " <td><select name=\"beneficiary_id\">\n";
option("beneficiary_id", null, "");
- $contacts = get_area_beneficiaries($area_id);
- foreach ($contacts as $contact) {
- option("beneficiary_id", $contact->getId(), $contact->getDisplayname(), $order->getBeneficiaryId());
+ if (! $order->getId() && $order->getBeneficiaryId()) {
+ $contact = get_contact_by_id($order->getBeneficiaryId());
+ if ($contact) option("beneficiary_id", $order->getBeneficiaryId(), $contact->getDisplayname(), $order->getBeneficiaryId());
+ }
+ else {
+ $contacts = get_area_beneficiaries($area_id);
+ foreach ($contacts as $contact) {
+ option("beneficiary_id", $contact->getId(), $contact->getDisplayname(), $order->getBeneficiaryId());
+ }
}
echo "</select></td>\n";
echo "</tr>\n";
echo "</select></td>\n";
echo "</tr>\n";
- /* Quantity. */
+ /* 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>Quantity (kg)</td>\n";
- echo " <td>"; input("quantity", $order->getQuantity()); echo "</td>\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. */
echo "</form>\n";
}
+ function show_contact_order_form($contact) {
+ if (! check_admin(1)) return;
+
+ $area = get_contact_area($contact);
+ if (! $area) {
+ echo "<p>No valid <a href=\"/area\">area</a> for contact!</p>\n";
+ return;
+ }
+
+ $order = new Order;
+ $order->setBeneficiaryId($contact->getId());
+
+ echo "<form method=\"POST\" action=\"" . $_SERVER['REQUEST_URI'] . "\">\n";
+ echo "<p>Placing order for " . $contact->getStrongLink() . ".";
+ $parcel = $contact->getParcel();
+ if ($parcel) {
+ echo " Suggested parcel type is <span class=\"strong\">" . get_contact_parcel_string($contact) . "</span>";
+ $order->setParcel($parcel);
+ }
+ echo "</p>\n";
+
+ echo "<table>\n";
+ show_order_form($order, $area_id);
+
+ echo "<tr>\n";
+ echo " <td colspan=2>"; submit("add_order", "Order"); echo "</td></tr>\n";
+ echo "</tr>\n";
+ echo "</table>\n";
+ echo "</form>\n";
+ }
+
function show_add_new_order_form() {
if (! check_admin(1)) return;
}
function update_order(&$order, $new = false) {
- global $user_id;
+ global $user_id, $parcel_sizes, $parcel_contents;
#$date = ymd_to_iso8601("date");
$date = $_POST['date'];
$hub_id = $_POST['hub_id'];
$quantity = $_POST['quantity'];
$driver_id = $_POST['driver_id'];
+ 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) $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);
return false;
}
}
+ else $hub_id = null;
if (! is_numeric($quantity)) {
echo "<p>Invalid quantity!</p>\n";
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->setParcel($parcel);
- $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;
$driver_id = $order_state->getDriverId();
if ($driver_id) $driver = get_contact_by_id($driver_id);
+ else $driver = null;
/* XXX */
$state = $order_state->getState();
break;
}
}
+ else if ($parameters[0] == "place") {
+ if ($parameters[1] == "for") {
+ if ($parameters[2] == "beneficiary") {
+ if ($parameters[4]) $contact = get_contact_by_id($parameters[4]);
+ if (! $contact) $contact = get_contact_by_name(urldecode($parameters[3]));
+ if ($contact) show_contact_order_form($contact);
+ }
+ }
+ }
}
list($ignored, $id, $args) = parse_parameters($parameters);
//echo "<p>$name($id) " . print_r($args, true) . "</p>\n";