X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=lib%2Forder.php;h=95d96bb859e0db9a908779aafd3b5fe9aae8a6a8;hb=46a6490756496e873962e54db2ad1b68921cd3c8;hp=5c7e0d894ba9e3f264530de412ffa74a69ce3a3c;hpb=7910a9551304a4789ba1fde0c85eeaf5bb21003b;p=readifood.git
diff --git a/lib/order.php b/lib/order.php
index 5c7e0d8..95d96bb 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";
+ 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;
@@ -263,7 +239,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. */
@@ -271,11 +250,20 @@
echo " Beneficiary \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());
}
- echo " \n";
+ else {
+ $contacts = get_area_beneficiaries($area_id);
+ foreach ($contacts as $contact) {
+ option("beneficiary_id", $contact->getId(), $contact->getDisplayname(), $order->getBeneficiaryId());
+ }
+ }
+ echo "";
+ $contact = get_contact_by_id($order->getBeneficiaryId(), false);
+ if ($contact) echo " " . get_small_link($contact->getDisplayname(), $contact->getURL());
+ echo "\n";
echo "\n";
/* Hub. */
@@ -287,13 +275,33 @@
foreach ($hubs as $hub) {
option("hub_id", $hub->getId(), $hub->getDisplayname(), $order->getHubId());
}
+ 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";
+ $mask = 1 << count($parcel_sizes);
+ for ($i = 0; $i < count($parcel_sizes); $i++) {
+ option("parcel_size", 1 << $i, $parcel_sizes[$i], $order->getParcel() % $mask);
+ }
echo " \n";
echo " \n";
- /* Quantity. */
+ /* 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. */
@@ -306,7 +314,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";
@@ -333,7 +344,7 @@
return;
}
- 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 " "; submit("add_order", "Order"); echo " \n";
+ echo "\n";
+ echo "
\n";
+ end_form();
}
function show_add_new_order_form() {
@@ -356,7 +398,7 @@
return;
}
- 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);
@@ -409,11 +454,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;
@@ -428,7 +468,7 @@
$order->setRequesterId($requester_id);
$order->setBeneficiaryId($beneficiary_id);
$order->setHubId($hub_id);
- $order->setQuantity($quantity);
+ $order->setParcel($parcel);
/* XXX: begin/commit */
try {
@@ -492,6 +532,7 @@
if (! count($order_states)) return;
echo "Order history \n";
+ echo "\n";
foreach ($order_states as $order_state) {
$date = $order_state->getUpdated();
@@ -501,6 +542,7 @@
$driver_id = $order_state->getDriverId();
if ($driver_id) $driver = get_contact_by_id($driver_id);
+ else $driver = null;
/* XXX */
$state = $order_state->getState();
@@ -511,17 +553,18 @@
}
}
#$state = $states[$order_state->getState()];
- echo "
$username changed order to state $state ";
+ echo "$username changed order to state $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";
+ end_form();
show_order_history($order->getId());
}
@@ -600,6 +643,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";
@@ -612,15 +664,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);
?>