card = Card::readCard($this->number); $query = new Query(); $this->daysPassed = $query ->select( [ 'datediff(current_date, card.inactivated_at ) ' ] ) ->from(Card::tableName()) ->andWhere(['id_card' => $this->card->id_card]) ->scalar(); $query = new Query(); $this->tickets = $query ->select( [ 'ticket.id_ticket as id_ticket', 'ticket.start as start', 'ticket.end as end', 'ticket.created_at as created_at', 'ticket.usage_count as usage_count', 'ticket.max_usage_count as max_usage_count', 'date_add( ticket.end, INTERVAL datediff(current_date, card.inactivated_at) DAY ) as end2' ] ) ->from(Ticket::tableName()) ->innerJoin(Card::tableName(), 'card.id_card = ticket.id_card') ->andWhere(['ticket.id_card' => $this->card->id_card]) ->andWhere( ['or', ['and', ['<=','ticket.start',$this->card->inactivated_at ], ['>=','ticket.end',$this->card->inactivated_at ] ], ['>=','ticket.start',$this->card->inactivated_at ], ] ) ->orderBy( [ 'ticket.start' => SORT_DESC ] ) ->all(); } public function loadTicketsDataProvider() { $this->loadTicketsToActivate(); return new ArrayDataProvider( [ 'allModels' => $this->tickets, 'sort' => false, 'pagination' => false ] ); } /** * @return bool * @throws \Exception */ public function activate() { if (!$this->validate()) { return false; } $tx = \Yii::$app->db->beginTransaction(); assert(isset($tx)); try { Yii::$app->db->createCommand(Ticket::$SQL_UPDATE_TICKETS_END_DATE_ON_CARD_ACTIVATION . " AND id_card = '" . $this->card->id_card . "'")->execute(); Card::updateAll( [ 'status' => Card::STATUS_ACTIVE, ], [ 'status' => Card::STATUS_INACTIVE, 'id_card' => $this->card->id_card ] ); Card::updateFlagStatus(); $tx->commit(); } catch (\Exception $exception) { $tx->rollBack(); throw $exception; } Yii::$app->session->setFlash('success', 'Kártya aktiválva'); return true; } }