add backend ticket stat basics

This commit is contained in:
2015-11-06 08:57:39 +01:00
parent e752352e8a
commit de8991b88f
8 changed files with 206 additions and 73 deletions

View File

@@ -4,6 +4,8 @@ namespace common\models;
use Yii;
use yii\db\ActiveRecord;
use yii\db\Query;
use yii\db\Expression;
/**
* This is the model class for table "ticket".
@@ -148,4 +150,47 @@ class Ticket extends \common\models\BaseFitnessActiveRecord
}
public static function statistic($start,$end){
// $sql = "select
// ticket_type.name,
// count(ticket.id_ticket) as total ,
// sum(case when ticket.end > '2015-11-05' and ticket.start <= '2015-11-05' then 1 else 0 end) as valid,
// sum(case when ticket.created_at < '2015-11-06' and ticket.created_at >= '2015-11-05' then 1 else 0 end) as created,
// sum(case when ticket.created_at < '2015-11-06' and ticket.created_at >= '2015-11-05' then transfer.money else 0 end) as created_money,
// sum(case when ticket.created_at < '2015-11-06' and ticket.created_at >= '2015-11-05' and transfer.paid_at is not null then transfer.money else 0 end) as created_money_paid,
// sum(case when ticket.created_at < '2015-11-06' and ticket.created_at >= '2015-11-05' and transfer.paid_at is null then transfer.money else 0 end) as created_money_not_paid,
// sum(case when ticket.created_at >= '2015-11-06' and ticket.created_at < '2015-11-05' and transfer.paid_at < '2015-11-06' and transfer.paid_at >= '2015-11-05' then transfer.money else 0 end) as dept_paid,
// sum(case when ticket.end < '2015-11-06' and ticket.created_at >= '2015-11-05' then 1 else 0 end) as expired
// from ticket_type
// inner join ticket on ticket.id_ticket_type = ticket_type.id_ticket_type
// inner join transfer on ticket.id_ticket = transfer.id_object and transfer.type = 20
// group by ticket_type.name;";
$query = new Query();
$query->addSelect( [
new Expression( 'ticket_type.id as id'),
new Expression( 'ticket_type.name as name'),
new Expression( 'count(ticket.id_ticket) as total'),
new Expression( "sum( case when ticket.end > ':start' and ticket.start <= ':end' then 1 else 0 end) as valid" ),
new Expression( "sum(case when ticket.created_at < ':end' and ticket.created_at >= ':start' then 1 else 0 end) as created" ),
new Expression( "sum(case when ticket.created_at < ':end' and ticket.created_at >= ':start' then transfer.money else 0 end) as created_money" ),
new Expression( "sum(case when ticket.created_at < '2015-11-06' and ticket.created_at >= '2015-11-05' and transfer.paid_at is not null then transfer.money else 0 end) as created_money_paid" ),
new Expression( "sum(case when ticket.created_at < '2015-11-06' and ticket.created_at >= '2015-11-05' and transfer.paid_at is null then transfer.money else 0 end) as created_money_not_paid" ),
new Expression( "sum(case when ticket.created_at >= '2015-11-06' and ticket.created_at < '2015-11-05' and transfer.paid_at < '2015-11-06' and transfer.paid_at >= '2015-11-05' then transfer.money else 0 end) as dept_paid" ),
new Expression( "sum(case when ticket.end < '2015-11-06' and ticket.created_at >= '2015-11-05' then 1 else 0 end) as expired" ),
]);
$query->from('ticket_type');
$query->innerJoin('ticket', 'ticket.id_ticket_type = ticket_type.id_ticket_type');
$query->innerJoin('transfer', 'ticket.id_ticket = transfer.id_object and transfer.type = 20');
$query->groupBy("ticket_type.id_ticket, ticket_type.name");
$query->params([':start' => $start, ':end' => $end]);
}
}