255] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id_ticket' => Yii::t('common/ticket', 'Id Ticket'), 'id_user' => Yii::t('common/ticket', 'Id User'), 'id_ticket_type' => Yii::t('common/ticket', 'Id Ticket Type'), 'id_account' => Yii::t('common/ticket', 'Id Account'), 'id_discount' => Yii::t('common/ticket', 'Id Discount'), 'start' => Yii::t('common/ticket', 'Start'), 'end' => Yii::t('common/ticket', 'End'), 'max_usage_count' => Yii::t('common/ticket', 'Max Usage Count'), 'usage_count' => Yii::t('common/ticket', 'Usage Count'), 'status' => Yii::t('common/ticket', 'Status'), 'price_brutto' => Yii::t('common/ticket', 'Price Brutto'), 'comment' => Yii::t('common/ticket', 'Comment'), 'created_at' => Yii::t('common/ticket', 'Created At'), 'updated_at' => Yii::t('common/ticket', 'Updated At'), ]; } public function getCard(){ return $this->hasOne( Card::className(), ["id_card" =>"id_card" ] ); } public function getUser(){ return $this->hasOne( User::className(), ["id" =>"id_user" ] ); } public function getTicketType(){ return $this->hasOne( TicketType::className(), ["id_ticket_type" =>"id_ticket_type" ] ); } public function getDiscount(){ return $this->hasOne( Discount::className(), ["id_discount" =>"id_discount" ] ); } public function getAccount() { return $this->hasOne ( Account::className (), [ 'id_account' => 'id_account' ] ); } public function getAccountName() { $result = ""; $account = $this->account; if ( isset($account) ){ $result = $this->account->name; } return $result; } public function getDiscountName() { $result = ""; $discount = $this->discount; if ( isset($discount) ){ $result = $this->discount->name; } return $result; } public function getTicketTypeName() { $result = ""; $ticketType = $this->ticketType; if ( isset($ticketType) ){ $result = $ticketType->name; } return $result; } public function getUserName() { $result = ""; $user = $this->user; if ( isset($user) ){ $result = $user->username; } return $result; } /** * @param common\models\Card $card the card to which we are looking for * */ public static function readActive($card){ if ( $card == null ) return []; $query = Ticket::find(); $today = date('Y-m-d'); $query->andWhere(['id_card' => $card->id_card]); $query->andWhere( 'start <= :today' ,[ 'today' => $today] ); $query->andWhere( 'end >= :today' ,[ 'today' => $today] ); $query->orderBy([ "created_at" =>SORT_DESC] ); $result = $query->all(); return $result; } 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]); } }