X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=lib%2Forder.php;h=f1911c587521c57883c76591fcf792e23ec328eb;hb=a2e796d4502f96c1ec0e85dd22c7eccf7d1d9ac3;hp=8b1bbcd1c68137911260d69ba75a413d13d36acc;hpb=6fdbfe32798452ec1c0fdbda57edabb892518409;p=readifood.git diff --git a/lib/order.php b/lib/order.php index 8b1bbcd..f1911c5 100644 --- a/lib/order.php +++ b/lib/order.php @@ -101,7 +101,7 @@ 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 "

Orders from requester " . $contact->getLink() . ":"; + echo "

Orders from referrer " . $contact->getLink() . ":"; return show_orders($offset, $per_page, $contact->getId(), null, $state_mask); } else echo "

No such contact!

\n"; @@ -230,12 +230,15 @@ } 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; @@ -244,12 +247,19 @@ echo "\n"; echo " Delivery\n"; /* XXX: Find suitable dates from area. */ - echo " "; show_date_form("date", $order->getDate()); echo "\n"; + echo " "; + show_date_form("date", $order->getDate()); + if (! $order->getDate()) { + echo " and recur for weeks"; + } + echo "\n"; echo "\n"; - /* Requester. */ + /* Referrer. */ echo "\n"; - echo " Requester\n"; + echo " Referrer\n"; echo " \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 "\n"; echo "\n"; @@ -283,10 +299,27 @@ echo "\n"; echo "\n"; - /* Quantity. */ + /* Parcel type. */ + echo "\n"; + echo " Parcel size\n"; + echo " \n"; + echo "\n"; + + /* Parcel contents. */ echo "\n"; - echo " Quantity (kg)\n"; - echo " "; input("quantity", $order->getQuantity()); echo "\n"; + echo " Parcel contents\n"; + echo " "; + for ($i = count($parcel_sizes); $i < count($parcel_contents); $i++) { + echo " getParcel() & (1 << $i)) echo " checked"; + echo ">$parcel_contents[$i]\n"; + } + echo "\n"; echo "\n"; /* Driver. */ @@ -339,6 +372,37 @@ echo "\n"; } + function show_contact_order_form($contact) { + if (! check_admin(1)) return; + + $area = get_contact_area($contact); + if (! $area) { + echo "

No valid area for contact!

\n"; + return; + } + + $order = new Order; + $order->setBeneficiaryId($contact->getId()); + + echo "
\n"; + echo "

Placing order for " . $contact->getStrongLink() . "."; + $parcel = $contact->getParcel(); + if ($parcel) { + echo " Suggested parcel type is " . get_contact_parcel_string($contact) . ""; + $order->setParcel($parcel); + } + echo "

\n"; + + echo "\n"; + show_order_form($order, $area_id); + + echo "\n"; + echo " \n"; + echo "\n"; + echo "
"; submit("add_order", "Order"); echo "
\n"; + echo "
\n"; + } + function show_add_new_order_form() { if (! check_admin(1)) return; @@ -361,7 +425,7 @@ } function update_order(&$order, $new = false) { - global $user_id; + global $user_id, $parcel_sizes, $parcel_contents; #$date = ymd_to_iso8601("date"); $date = $_POST['date']; @@ -370,15 +434,24 @@ $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); if (! $requester) { - echo "

Invalid requester!

\n"; + echo "

Invalid referrer!

\n"; return false; } @@ -395,34 +468,48 @@ return false; } } + else $hub_id = null; if (! is_numeric($quantity)) { echo "

Invalid quantity!

\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 "

Creating recurrence $i.

\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 "

Error placing order.

\n"; - else echo "

Error updating order.

\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 "

Error placing order.

\n"; + else echo "

Error updating order.

\n"; + echo "

" . $e->getMessage() . "

\n"; + return false; + } } return true; @@ -475,6 +562,7 @@ $driver_id = $order_state->getDriverId(); if ($driver_id) $driver = get_contact_by_id($driver_id); + else $driver = null; /* XXX */ $state = $order_state->getState(); @@ -553,9 +641,9 @@ } } 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); @@ -574,6 +662,15 @@ 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 "

$name($id) " . print_r($args, true) . "

\n";