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

\n"; @@ -26,19 +28,22 @@ } } 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 = get_order_ids_by_state($state_mask); $q = new OrderQuery; @@ -47,11 +52,12 @@ # 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 "
\n" . get_order_summary($order) . "
\n"; } + show_pagination($orders); } else echo " none"; } @@ -111,9 +117,9 @@ echo "

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

\n"; } @@ -139,7 +145,7 @@ return $mask; } - function get_order_state_string($mask) { + function get_order_state_query_string($mask) { global $states; $selected = array(); @@ -151,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) { @@ -167,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"; @@ -185,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"; @@ -206,8 +226,7 @@ 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(); @@ -215,7 +234,6 @@ } else $order = new Order; - /* Date. */ echo "\n"; echo " Delivery\n"; @@ -239,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. */ @@ -257,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. */ @@ -269,7 +293,10 @@ 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. */ @@ -288,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"; @@ -305,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"; @@ -316,7 +352,7 @@ echo " State\n"; echo " \n"; echo "\n"; @@ -413,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); @@ -457,6 +494,7 @@ $order->setBeneficiaryId($beneficiary_id); $order->setHubId($hub_id); $order->setParcel($parcel); + $order->setNotes($notes); /* XXX: begin/commit */ try { @@ -490,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; @@ -520,6 +568,7 @@ if (! count($order_states)) return; echo "

Order history

\n"; + echo "

\n"; foreach ($order_states as $order_state) { $date = $order_state->getUpdated(); @@ -531,19 +580,11 @@ 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) { @@ -644,6 +685,10 @@ if (count($args)) { switch ($args[0]) { case "delete": + confirm_delete_order($id); + break; + + case "confirmdelete": delete_order($id); break; }