X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=lib%2Forder.php;h=622ad18c4baf5159d1734b4ef6ca199e6f44908d;hb=018b041d077a8740dde27529a1ffc32f4610b7ef;hp=426606b7889d18c4934c72e75cbbead9bf82b12d;hpb=1bfe6a5fb5a274f0d17845f0c6358f1980f89121;p=readifood.git diff --git a/lib/order.php b/lib/order.php index 426606b..622ad18 100644 --- a/lib/order.php +++ b/lib/order.php @@ -1,10 +1,12 @@ Order placed.

\n"; @@ -26,59 +28,36 @@ } } else if ($_POST['show_in_area']) { + set_last_selected("area_id", $_POST['area_id']); $q = new AreaQuery; $area = $q->findOneById($_POST['area_id']); - header(sprintf("Location: http%s://%s/%s/in/area/%s/%d%s", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, urlencode($area->getName()), $_POST['area_id'], get_order_state_uri(get_order_state_mask()))); + header(sprintf("Location: http%s://%s/%s/in/area/%s/%d%s", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, urlencode($area->getName()), $_POST['area_id'], get_order_state_query_uri(get_order_state_mask()))); exit; } else if ($_POST['show_in_city']) { + set_last_selected("city_id", $_POST['city_id']); $q = new CityQuery; $city = $q->findOneById($_POST['city_id']); - header(sprintf("Location: http%s://%s/%s/in/city/%s/%d%s", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, urlencode($city->getName()), $_POST['city_id'], get_order_state_uri(get_order_state_mask()))); + header(sprintf("Location: http%s://%s/%s/in/city/%s/%d%s", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, urlencode($city->getName()), $_POST['city_id'], get_order_state_query_uri(get_order_state_mask()))); exit; } function show_orders($offset, $per_page, $requester_ids = null, $beneficiary_ids = null, $state_mask = null) { + list($offset, $per_page) = pagination(); /* XXX: Use Propel methods. */ - if (isset($state_mask)) { - $order_ids = array(); - $dbh = Propel::getConnection(); - $sth = $dbh->prepare("select * from OrderState o where updated=(select max(updated) from OrderState where order_id=o.order_id) and state & $state_mask"); - $sth->execute(); - $order_states = OrderStatePeer::populateObjects($sth); - foreach ($order_states as $order_state) $order_ids[] = $order_state->getOrderId(); - } + if (isset($state_mask)) $order_ids = get_order_ids_by_state($state_mask); $q = new OrderQuery; if (isset($requester_ids)) $q->filterByRequesterId($requester_ids); if (isset($beneficiary_ids)) $q->filterByBeneficiaryId($beneficiary_ids); # XXX: Doesn't work. #if (isset($state_mask)) $q->useOrderStateQuery()->addSelectQuery($latest_state, 'latestState')->where("order_id=latestState.order_id")->where("state & $state_mask")->endUse(); if (isset($state_mask)) $q->filterById($order_ids); - $orders = $q->orderByDate()->find(); + $orders = $q->orderByDate('desc')->orderById('desc')->paginate($offset, $per_page); if (count($orders)) { foreach ($orders as $order) { - echo "
\nOrder " . $order->getStrongLink($order->getId()) . ": " . get_order_displayname($order); - if (check_admin(1)) { - echo " " . $order->getDeleteLink(); - } - - /* XXX: Should pull from query. */ - $q = new ContactQuery; - $contact = $q->findOneById($order->getBeneficiaryId()); - if ($contact) { - echo " for " . $contact->getLink(); - $area = get_contact_area($contact); - if ($area) echo " in " . $area->getLink(); - } - - if ($order->getHubId()) { - $q = new HubQuery; - $hub = $q->findOneById($order->getHubId()); - if ($hub) echo " to hub " . $hub->getLink(); - $area = get_hub_area($hub); - if ($area) echo " in " . $area->getLink(); - } + echo "
\n" . get_order_summary($order) . "
\n"; } + show_pagination($orders); } else echo " none"; } @@ -138,9 +117,9 @@ echo "

Restrict to order states:\n"; for ($i = 0; $i < count($states); $i++) { - echo " $states[$i]\n"; + echo ">\n"; } echo "

\n"; } @@ -166,7 +145,7 @@ return $mask; } - function get_order_state_string($mask) { + function get_order_state_query_string($mask) { global $states; $selected = array(); @@ -178,13 +157,13 @@ return implode("+", $selected); } - function get_order_state_uri($mask) { + function get_order_state_query_uri($mask) { global $all_states; if (is_null($mask)) return ""; if ($mask == $all_states) return ""; - return "/state/" . get_order_state_string($mask); + return "/state/" . get_order_state_query_string($mask); } function show_order_areas_form($city_id = null) { @@ -194,9 +173,16 @@ return; } + $candidates = array(); + foreach ($areas as $area) { + if (! count(get_area_contacts($area->getId()))) continue; + $candidates[] = $area; + } + if (! count($candidates)) return; + echo "

Show orders in area\n"; echo "\n"; @@ -212,9 +198,16 @@ return; } + $candidates = array(); + foreach ($cities as $city) { + if (! count(get_city_contacts($city->getId()))) continue; + $candidates[] = $city; + } + if (! count($candidates)) return; + echo "

Show orders in city\n"; echo "\n"; @@ -222,19 +215,18 @@ } function show_order_forms($city_id, $state_mask) { - echo "

\n"; + form("noprint standout"); show_order_state_form($state_mask); show_order_areas_form($city_id); show_order_cities_form($city_id); - echo "
\n"; + end_form(); } function show_order_form($order = null, $area_id = null) { global $states, $parcel_sizes, $parcel_contents; if ($order) { - $q = new OrderStateQuery; - $order_state = $q->filterByOrderId($order->getId())->orderByUpdated('desc')->limit(1)->findOne(); + $order_state = get_order_state($order); if ($order_state) { $state = $order_state->getState(); $driver_id = $order_state->getDriverId(); @@ -242,7 +234,6 @@ } else $order = new Order; - /* Date. */ echo "\n"; echo " Delivery\n"; @@ -266,7 +257,10 @@ foreach ($contacts as $contact) { option("requester_id", $contact->getId(), $contact->getDisplayname(), $order->getRequesterId()); } - echo "\n"; + echo ""; + $contact = get_contact_by_id($order->getRequesterId(), false); + if ($contact) echo " " . get_small_link($contact->getDisplayname(), $contact->getURL()); + echo "\n"; echo "\n"; /* Beneficiary. */ @@ -284,7 +278,10 @@ option("beneficiary_id", $contact->getId(), $contact->getDisplayname(), $order->getBeneficiaryId()); } } - echo "\n"; + echo ""; + $contact = get_contact_by_id($order->getBeneficiaryId(), false); + if ($contact) echo " " . get_small_link($contact->getDisplayname(), $contact->getURL()); + echo "\n"; echo "\n"; /* Hub. */ @@ -296,16 +293,19 @@ foreach ($hubs as $hub) { option("hub_id", $hub->getId(), $hub->getDisplayname(), $order->getHubId()); } - echo "\n"; + echo ""; + $hub = get_hub_by_id($order->getHubId(), false); + if ($hub) echo " " . get_small_link($hub->getDisplayname(), $hub->getURL()); + echo "\n"; echo "\n"; /* Parcel type. */ echo "\n"; echo " Parcel size\n"; echo " \n"; echo "\n"; @@ -315,13 +315,19 @@ 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"; echo "\n"; + /* Notes. */ + echo "\n"; + echo " Notes\n"; + echo " "; textarea("notes", $order->getNotes()); echo "\n"; + echo "\n"; + /* Driver. */ echo "\n"; echo " Driver\n"; @@ -332,7 +338,10 @@ foreach ($contacts as $contact) { option("driver_id", $contact->getId(), $contact->getDisplayname(), $driver_id); } - echo "\n"; + echo ""; + $contact = get_contact_by_id($driver_id, false); + if ($contact) echo " " . get_small_link($contact->getDisplayname(), $contact->getURL()); + echo "\n"; } else echo " No drivers!\n"; echo "\n"; @@ -343,7 +352,7 @@ echo " State\n"; echo " \n"; echo "\n"; @@ -359,7 +368,7 @@ return; } - echo "
\n"; + form("noprint"); echo "

Place an order:

\n"; echo "\n"; @@ -369,7 +378,7 @@ echo " \n"; echo "\n"; echo "
"; submit("add_order", "Order"); echo "
\n"; - echo "
\n"; + end_form(); } function show_contact_order_form($contact) { @@ -384,8 +393,14 @@ $order = new Order; $order->setBeneficiaryId($contact->getId()); - echo "
\n"; - echo "

Place an order:

\n"; + form("standout"); + 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); @@ -394,7 +409,7 @@ echo " \n"; echo "\n"; echo "
"; submit("add_order", "Order"); echo "
\n"; - echo "
\n"; + end_form(); } function show_add_new_order_form() { @@ -407,7 +422,7 @@ return; } - echo "
\n"; + form("noprint standout"); echo "

Place an order in "; submit("show_add_order", "Proceed"); echo "

\n"; - echo "
\n"; + end_form(); } function update_order(&$order, $new = false) { @@ -426,7 +441,6 @@ $requester_id = $_POST['requester_id']; $beneficiary_id = $_POST['beneficiary_id']; $hub_id = $_POST['hub_id']; - $quantity = $_POST['quantity']; $driver_id = $_POST['driver_id']; if (! $driver_id) $driver_id = null; $state = $_POST['state']; @@ -435,6 +449,7 @@ for ($i = count($parcel_sizes); $i < count($parcel_contents); $i++) { if ($_POST['parcel_' . $i] == "on") $parcel |= (1 << $i); } + $notes = $_POST['notes']; if ($date) { list($y, $m, $d) = explode('-', $date); @@ -464,11 +479,6 @@ } else $hub_id = null; - if (! is_numeric($quantity)) { - echo "

Invalid quantity!

\n"; - return false; - } - if ($new && isset($_POST['recurrence'])) $recurrence = $_POST['recurrence']; if (! $recurrence) $recurrence = 0; @@ -484,6 +494,7 @@ $order->setBeneficiaryId($beneficiary_id); $order->setHubId($hub_id); $order->setParcel($parcel); + $order->setNotes($notes); /* XXX: begin/commit */ try { @@ -517,6 +528,16 @@ return $order->getId(); } + function confirm_delete_order($id = null) { + if (! check_admin(1, "delete an order")) return; + + if (isset($id)) $order = get_order_by_id($id); + if (! $order) return false; + + echo "

Confirm deletion

\n"; + echo "

You must confirm deletion of order $id: " . $order->getDeleteLink(true) . "

\n"; + } + function delete_order($id = null) { if (! check_admin(1, "delete an order")) return; @@ -547,6 +568,7 @@ if (! count($order_states)) return; echo "

Order history

\n"; + echo "

\n"; foreach ($order_states as $order_state) { $date = $order_state->getUpdated(); @@ -558,26 +580,18 @@ if ($driver_id) $driver = get_contact_by_id($driver_id); else $driver = null; - /* XXX */ - $state = $order_state->getState(); - for ($i = 0; $i < count($states); $i++) { - if ((1 << $i) == $state) { - $state = $states[$i]; - break; - } - } - #$state = $states[$order_state->getState()]; - echo "

$username changed order to state $state"; + echo "$username changed order to state " . get_order_state_string($order_state) . ""; if ($driver) echo " for driver " . $driver->getDisplayname(); - echo " on $date.

\n"; + echo " on $date.
\n"; } + echo "

\n"; } function show_order(&$id = null) { if (isset($id)) $order = get_order_by_id($id); if (! $order) return; - echo "
\n"; + form(); echo "

Order: " . $order->getId() . ""; if (check_admin(1)) { echo " " . $order->getDeleteLink(); @@ -597,7 +611,7 @@ } echo "\n"; - echo "

\n"; + end_form(); show_order_history($order->getId()); } @@ -671,21 +685,19 @@ if (count($args)) { switch ($args[0]) { case "delete": + confirm_delete_order($id); + break; + + case "confirmdelete": delete_order($id); break; } } else if (isset($id)) show_order($id); else if ($state_mask) show_orders(0, 10, null, null, $state_mask); - else { - /* XXX: Shown after adding. */ - show_order_forms($city_id, $state_mask); - show_add_new_order_form($city_id); - } - if (count($parameters)) { - show_order_forms($city_id, $state_mask); - } + show_order_forms($city_id, $state_mask); + show_add_new_order_form($city_id); ?>