Show reports covering the period from "; /* Default to last month. */ list($y, $m, $d) = explode('-', date('Y-m-d', time())); $latest = "$y-$m-$d"; $now = mktime(0, 0, 0, $m, $d, $y); $first = mktime(0, 0, 0, $m, 1, $y); $last = $first - 86400; $date = date('Y-m-d', $last); if (is_null($to)) $to = $date; list($y, $m, $d) = explode('-', $date); $first = mktime(0, 0, 0, $m, 1, $y); if (is_null($from)) $from = date('Y-m-d', $first); $date = $first; for ($i = 0; $i < 2; $i++) { $date -= 86400; list ($y, $m, $d) = explode('-', date('Y-m-d', $date)); $date = mktime(0, 0, 0, $m, 1, $y); } $oldest = date('Y-m-d', $date); $then = $date; echo " to \n"; submit("show_reports", "Show"); end_form(); } function check_report_dates($from, $to) { list($y, $m, $d) = explode('-', $from); if (! checkdate($m, $d, $y)) { echo "

Invalid report start date!

\n"; return false; } $start = mktime(0, 0, 0, $m, $d, $y); list($y, $m, $d) = explode('-', $to); if (! checkdate($m, $d, $y)) { echo "

Invalid report end date!

\n"; return false; } $end = mktime(0, 0, 0, $m, $d, $y); if ($end < $start) { echo "

Report end date is earlier than start date!

\n"; return false; } return true; } function show_requester_report(&$order_ids) { echo "

Orders by referrer

\n"; $q = new OrderQuery; $q->filterById($order_ids); $q->withColumn('count(*)', 'count'); $q->groupByRequesterId()->addDescendingOrderByColumn('count'); $rows = $q->find(); echo "\n"; /* XXX Join! */ foreach ($rows as $row) { echo "\n"; $requester = get_contact_by_id($row->getRequesterId()); printf(" \n", $row->getCount(), htmlspecialchars($requester->getDisplayname())); echo "\n"; } echo "
%d %s
\n"; } function show_reports($from, $to) { if (! check_report_dates($from, $to)) return; echo "

Showing reports for the period $from to $to.

\n"; /* Get orders. */ $order_ids = array(); /* XXX: Order 51 changed to state delivered in May then updated in June. */ $dbh = Propel::getConnection(); $sth = $dbh->prepare("select * from OrderState o where updated=(select min(updated) from OrderState where order_id=o.order_id and state & " . $GLOBALS['STATE_DELIVERED'] . ") and updated between '$from' and '$to'"); $sth->execute(); $order_states = OrderStatePeer::populateObjects($sth); foreach ($order_states as $order_state) $order_ids[] = $order_state->getOrderId(); $q = new OrderQuery; $q->filterById($order_ids); if (! count($order_ids)) { echo "

No results!

\n"; return; } show_requester_report($order_ids); } if (count($parameters)) { if ($parameters[0] == "from") { $from = $parameters[1]; if ($parameters[2] == "to") $to = $parameters[3]; show_reports($from, $to); } } show_reports_form($from, $to); ?>