ShopPeriodReport::query PHP Method

query() public method

public query ( $params )
    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;
    }

Usage Example

 public function query($params)
 {
     $query = parent::query($params);
     $query->addSelect("\"Discount\".*")->selectField("\"Title\"", "Name")->selectField("COUNT(DISTINCT \"Order\".\"ID\")", 'Entered')->addLeftJoin("Product_OrderItem_Discounts", "\"Product_OrderItem_Discounts\".\"DiscountID\" = \"Discount\".\"ID\"")->addLeftJoin("OrderDiscountModifier_Discounts", "\"OrderDiscountModifier_Discounts\".\"DiscountID\" = \"Discount\".\"ID\"")->addInnerJoin("OrderAttribute", implode(" OR ", array("\"Product_OrderItem_Discounts\".\"Product_OrderItemID\" = \"OrderAttribute\".\"ID\"", "\"OrderDiscountModifier_Discounts\".\"OrderDiscountModifierID\" = \"OrderAttribute\".\"ID\"")))->addInnerJoin("Order", "\"OrderAttribute\".\"OrderID\" = \"Order\".\"ID\"");
     $query->setGroupBy("\"Discount\".\"ID\"");
     $query->setLimit("50");
     return $query;
 }
All Usage Examples Of ShopPeriodReport::query