public function query($params)
{
//convert dates to correct format
$fields = $this->parameterFields();
$fields->setValues($params);
$start = $fields->fieldByName("StartPeriod")->dataValue();
$end = $fields->fieldByName("EndPeriod")->dataValue();
//include the entire end day
if ($end) {
$end = date('Y-m-d', strtotime($end) + 86400);
}
$filterperiod = $this->periodfield;
$query = new ShopReport_Query();
$query->setSelect(array("FilterPeriod" => "MIN({$filterperiod})"));
$query->setFrom('"' . $this->dataClass . '"');
if ($start && $end) {
$query->addWhere("{$filterperiod} BETWEEN '{$start}' AND '{$end}'");
} elseif ($start) {
$query->addWhere("{$filterperiod} > '{$start}'");
} elseif ($end) {
$query->addWhere("{$filterperiod} <= '{$end}'");
}
if ($start || $end || !self::config()->display_uncategorised_data || !isset($params['IncludeUncategorised'])) {
$query->addWhere("{$filterperiod} IS NOT NULL");
}
if ($this->grouping) {
switch ($params['Grouping']) {
case "Year":
$query->addGroupBy($this->fd($filterperiod, '%Y'));
break;
case "Month":
default:
$query->addGroupBy($this->fd($filterperiod, '%Y') . "," . $this->fd($filterperiod, '%m'));
break;
case "Day":
$query->addGroupBy($this->fd($filterperiod, '%Y') . "," . $this->fd($filterperiod, '%m') . "," . $this->fd($filterperiod, '%d'));
break;
}
}
$query->setOrderBy("\"FilterPeriod\"", "ASC");
return $query;
}