filterByCreatedAt(sprintf("%s-%s-%s 00:00:00", $year, $month, $day), Criteria::GREATER_EQUAL) ->filterByCreatedAt(sprintf("%s-%s-%s 23:59:59", $year, $month, $day), Criteria::LESS_EQUAL); if (null !== $status) { $dayOrdersQuery->filterByStatusId($status, Criteria::IN); } $dayOrders = $dayOrdersQuery->count(); $stats[] = array($day-1, $dayOrders); } return $stats; } public static function getFirstOrdersStats($month, $year) { $numberOfDay = cal_days_in_month(CAL_GREGORIAN, $month, $year); $stats = array(); for ($day=1; $day<=$numberOfDay; $day++) { $dayOrdersQuery = self::create('matching_order') ->filterByCreatedAt(sprintf("%s-%s-%s 00:00:00", $year, $month, $day), Criteria::GREATER_EQUAL) ->filterByCreatedAt(sprintf("%s-%s-%s 23:59:59", $year, $month, $day), Criteria::LESS_EQUAL); $otherOrderJoin = new Join(); $otherOrderJoin->addExplicitCondition(OrderTableMap::TABLE_NAME, 'CUSTOMER_ID', 'matching_order', OrderTableMap::TABLE_NAME, 'CUSTOMER_ID', 'other_order'); $otherOrderJoin->setJoinType(Criteria::LEFT_JOIN); $dayOrdersQuery->addJoinObject($otherOrderJoin, 'other_order_join') ->addJoinCondition('other_order_join', '`matching_order`.`ID` <> `other_order`.`ID`') ->addJoinCondition('other_order_join', '`matching_order`.`CREATED_AT` > `other_order`.`CREATED_AT`'); $dayOrdersQuery->where('ISNULL(`other_order`.`ID`)'); $dayOrders = $dayOrdersQuery->count(); $stats[] = array($day-1, $dayOrders); } return $stats; } /** * @param \DateTime $startDate * @param \DateTime $endDate * @param $includeShipping * * @return int */ public static function getSaleStats(\DateTime $startDate, \DateTime $endDate, $includeShipping) { $orderTaxJoin = new Join(); $orderTaxJoin->addExplicitCondition(OrderProductTableMap::TABLE_NAME, 'ID', null, OrderProductTaxTableMap::TABLE_NAME, 'ORDER_PRODUCT_ID', null); $orderTaxJoin->setJoinType(Criteria::INNER_JOIN); $query = self::create('o') ->filterByCreatedAt(sprintf("%s 00:00:00", $startDate->format('Y-m-d')), Criteria::GREATER_EQUAL) ->filterByCreatedAt(sprintf("%s 23:59:59", $endDate->format('Y-m-d')), Criteria::LESS_EQUAL) ->filterByStatusId("2,3,4", Criteria::IN) ->innerJoinOrderProduct() ->addJoinObject($orderTaxJoin) ; if ($includeShipping) { $query->withColumn("SUM((`order_product`.QUANTITY * IF(`order_product`.WAS_IN_PROMO,`order_product`.PROMO_PRICE+`order_product_tax`.PROMO_AMOUNT,`order_product`.PRICE+`order_product_tax`.AMOUNT)) + `order`.postage )", 'TOTAL'); } else { $query->withColumn("SUM((`order_product`.QUANTITY * IF(`order_product`.WAS_IN_PROMO,`order_product`.PROMO_PRICE+`order_product_tax`.PROMO_AMOUNT,`order_product`.PRICE+`order_product_tax`.AMOUNT)))", 'TOTAL'); } $query->select('TOTAL'); $amount = $query->findOne(); return null === $amount ? 0 : round($amount, 2); } /** * @param \DateTime $startDate * @param \DateTime $endDate * @param $status * * @return int */ public static function getOrderStats(\DateTime $startDate, \DateTime $endDate, $status = array(1,2,3,4)) { return self::create() ->filterByStatusId($status, Criteria::IN) ->filterByCreatedAt(sprintf("%s 00:00:00", $startDate->format('Y-m-d')), Criteria::GREATER_EQUAL) ->filterByCreatedAt(sprintf("%s 23:59:59", $endDate->format('Y-m-d')), Criteria::LESS_EQUAL) ->count(); } } // OrderQuery