X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=lib%2Forder.php;h=38a235aa28cf91e5636f49282ddd3a2ac9426454;hb=6bd4ad3daf2cc870d96a3fed9ea9caf6798d2b78;hp=74306d918d8f1d72502fe5f22ab6ab6f36e3e453;hpb=cf4cf65ff0e729c6ba52cede471b7c5ae2b837ba;p=readifood.git diff --git a/lib/order.php b/lib/order.php index 74306d9..38a235a 100644 --- a/lib/order.php +++ b/lib/order.php @@ -40,14 +40,7 @@ function show_orders($offset, $per_page, $requester_ids = null, $beneficiary_ids = null, $state_mask = null) { /* 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); @@ -57,27 +50,7 @@ $orders = $q->orderByDate()->find(); 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"; } } else echo " none"; @@ -222,20 +195,23 @@ } 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; + 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; @@ -271,9 +247,15 @@ echo " Beneficiary\n"; echo " \n"; echo "\n"; @@ -290,10 +272,27 @@ echo "\n"; echo "\n"; - /* Quantity. */ + /* Parcel type. */ echo "\n"; - echo " Quantity (kg)\n"; - echo " "; input("quantity", $order->getQuantity()); echo "\n"; + echo " Parcel size\n"; + echo " \n"; + echo "\n"; + + /* Parcel contents. */ + 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. */ @@ -333,7 +332,7 @@ return; } - echo "
\n"; + form("noprint"); echo "

Place an order:

\n"; echo "\n"; @@ -343,7 +342,38 @@ echo " \n"; echo "\n"; echo "
"; submit("add_order", "Order"); echo "
\n"; - echo "
\n"; + end_form(); + } + + 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()); + + 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); + + echo "\n"; + echo " \n"; + echo "\n"; + echo "
"; submit("add_order", "Order"); echo "
\n"; + end_form(); } function show_add_new_order_form() { @@ -356,7 +386,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) { - global $user_id; + global $user_id, $parcel_sizes, $parcel_contents; #$date = ymd_to_iso8601("date"); $date = $_POST['date']; $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']; 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); @@ -406,11 +440,7 @@ return false; } } - - if (! is_numeric($quantity)) { - echo "

Invalid quantity!

\n"; - return false; - } + else $hub_id = null; if ($new && isset($_POST['recurrence'])) $recurrence = $_POST['recurrence']; if (! $recurrence) $recurrence = 0; @@ -426,7 +456,7 @@ $order->setRequesterId($requester_id); $order->setBeneficiaryId($beneficiary_id); $order->setHubId($hub_id); - $order->setQuantity($quantity); + $order->setParcel($parcel); /* XXX: begin/commit */ try { @@ -499,6 +529,7 @@ $driver_id = $order_state->getDriverId(); if ($driver_id) $driver = get_contact_by_id($driver_id); + else $driver = null; /* XXX */ $state = $order_state->getState(); @@ -519,7 +550,7 @@ 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(); @@ -539,7 +570,7 @@ } echo "\n"; - echo "

\n"; + end_form(); show_order_history($order->getId()); } @@ -598,6 +629,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"; @@ -610,15 +650,9 @@ } 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); ?>