crunchbutton/include/library/Crunchbutton/Report/FirstTimeUserGiftCodesUsedPerSchoolPerDay.php

55 lines
2.0 KiB
PHP

<?php
class Crunchbutton_Report_FirstTimeUserGiftCodesUsedPerSchoolPerDay extends Cana_Model {
public function report( $start, $end ){
$pattern = "SELECT c.name AS community,
SUM(1) AS users,
'%s' AS `day`
FROM `order` o
INNER JOIN
(SELECT SUM(1) orders,
phone
FROM `order` o
WHERE DATE_FORMAT(o.date, '%%Y%%m%%d') <= '%s'
GROUP BY o.phone
HAVING orders = 1) orders ON orders.phone = o.phone AND DATE_FORMAT( o.date, '%%Y%%m%%d' ) = '%s'
INNER JOIN
(SELECT o.id_order
FROM `order` o
INNER JOIN credit c ON c.id_order = o.id_order
AND c.type = 'DEBIT'
INNER JOIN credit giftcard ON giftcard.id_credit = c.id_credit_debited_from
AND giftcard.id_promo IS NOT NULL
AND giftcard.credit_type = 'cash'
AND c.credit_type = 'cash' WHERE DATE_FORMAT( o.date, '%%Y%%m%%d' ) = '%s'
) giftcard ON giftcard.id_order = o.id_order
INNER JOIN restaurant_community rc ON rc.id_restaurant = o.id_restaurant
INNER JOIN community c ON rc.id_community = c.id_community
GROUP BY c.name
ORDER BY c.name ASC";
$communities = [];
$days = [];
for( $i = $start; $i <= $end; $i++ ){
$date = strval( $i );
$query = sprintf( $pattern, $date, $date, $date, $date );
$results = c::db()->get( $query );
if( count( $results ) ){
$formatted_date = new DateTime( $date, new DateTimeZone( c::config()->timezone ) );
$formatted_date = $formatted_date->format( 'M jS Y' );
foreach( $results as $result ){
$community = $result->community;
$users = intval( $result->users );
$communities[] = [ 'users' => $users, 'day' => $formatted_date, 'community' => $community ];
$days[] = [ 'users' => $users, 'day' => $formatted_date, 'community' => $community ];
}
}
}
return [ 'days' => $days, 'communities' => $communities ];
}
public function __construct(){}
}