[ 'class' => \yii\filters\AccessControl::className (), 'rules' => [ // allow authenticated users [ 'actions' => [ 'create', 'index', 'view', 'update', 'index-customer', 'statistics' , 'test' ], 'allow' => true, 'roles' => [ 'admin', 'employee', 'reception' ] ] ] // everything else is denied ] ]; } /** * Lists all Ticket models. * * @return mixed */ public function actionIndex() { $searchModel = new TicketSearch (); $dataProvider = $searchModel->search ( Yii::$app->request->queryParams ); if ( $searchModel->output != 'pdf' && $searchModel->output != 'xls' ){ $searchModel->searchTotals (); $searchModel->users = User::read (); $searchModel->accounts = Account::read (); $searchModel->ticketTypes = TicketType::read (); } if ( $searchModel->output == 'pdf' ){ return $this->downloadIndexPdf($searchModel,$dataProvider); }else if ( $searchModel->output == 'xls'){ return $this->downloadIndexXls($searchModel,$dataProvider); } return $this->render ( 'index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider ] ); } /** * @param $searchModel \backend\models\TicketSearch * @param $dataProvider \yii\data\ActiveDataProvider */ private function downloadIndexXls($searchModel, $dataProvider){ $objPHPExcel = new \PHPExcel (); $sheet = $objPHPExcel->setActiveSheetIndex ( 0 ); $formatter = \Yii::$app->formatter; $admin = User::findOne(\Yii::$app->user->id); $row = 1; $sheet->setCellValue('A'.$row, 'Exportálta'); $sheet->setCellValue('B'.$row, $admin->username); $sheet->setCellValue('C'.$row, 'Exportálás ideje'); $sheet->setCellValue('D'.$row, $formatter->asDatetime(new \DateTime())); $row++; $user = User::findOne($searchModel->id_user); $ticketType = TicketType::findOne($searchModel->id_ticket_type); $account = Account::findOne($searchModel->id_account); $cardNumber = !empty($searchModel->card_number) ? $searchModel->card_number : "Mind"; $ticketStatus = !empty($searchModel->status) ? Ticket::toStatusName($searchModel->status) : "Mind"; $customerIdCustomer = !empty($searchModel->id_customer) ? $searchModel->id_customer : "Mind"; $customerName = !empty($searchModel->customer_name) ? $searchModel->customer_name : "Mind"; $start = isset($searchModel->start) ? $formatter->asDateTime($searchModel->timestampStart) : ''; $end = isset($searchModel->end) ? $formatter->asDateTime($searchModel->timestampEnd) : ''; $ticketIdTicket = !empty($searchModel->id_ticket ) ? $searchModel->id_ticket : 'Mind'; $allDateConditionOn = $searchModel->isAllDateConditionOn(); $ticketIntervalIsValid = ( $allDateConditionOn || "1" == $searchModel->valid_in_interval )? "Igen" : ""; $ticketIntervalIsCreated =( $allDateConditionOn || "1" == $searchModel->created_in_interval) ? "Igen" : ""; $ticketIntervalIsExpire = ( $allDateConditionOn || "1" == $searchModel->expire_in_interval) ? "Igen" : ""; $ticketIntervalIsPaid = ( $allDateConditionOn || "1" == $searchModel->paid_in_interval) ? "Igen" : ""; $sheet->setCellValue('A'.$row, 'Felhasználó'); $sheet->setCellValue('B'.$row, isset($user) ? $user->username : 'Mind'); $sheet->setCellValue('C'.$row, 'Bérlet típus'); $sheet->setCellValue('D'.$row, isset($ticketType) ? $ticketType->name : 'Mind'); $sheet->setCellValue('E'.$row, 'Kassza'); $sheet->setCellValue('F'.$row, isset($account) ? $account->name : 'Mind'); $row++; $sheet->setCellValue('A'.$row, 'Bérlet státusz'); $sheet->setCellValue('B'.$row, $ticketStatus); $sheet->setCellValue('C'.$row, 'Vendég azonosító'); $sheet->setCellValue('D'.$row, $customerIdCustomer); $sheet->setCellValue('E'.$row, 'Vendég neve'); $sheet->setCellValue('F'.$row, $customerName); $row++; $sheet->setCellValue('A'.$row, 'Időszak kezdete'); $sheet->setCellValue('B'.$row, $start); $sheet->setCellValue('C'.$row, 'Időszak vége'); $sheet->setCellValue('D'.$row, $end); $sheet->setCellValue('E'.$row, 'Bérlet azonosító'); $sheet->setCellValue('F'.$row, $ticketIdTicket); $sheet->setCellValue('G'.$row, 'Kártya szám'); $sheet->setCellValue('H'.$row, $cardNumber); $row++; $sheet->setCellValue('A'.$row, 'Érvényes az időszakban'); $sheet->setCellValue('B'.$row, $ticketIntervalIsValid); $sheet->setCellValue('C'.$row, 'Kiadva az időszakban'); $sheet->setCellValue('D'.$row, $ticketIntervalIsCreated); $sheet->setCellValue('E'.$row, 'Lejár az időszakban'); $sheet->setCellValue('F'.$row, $ticketIntervalIsExpire); $sheet->setCellValue('G'.$row, 'Fizetve az időszakban'); $sheet->setCellValue('H'.$row, $ticketIntervalIsPaid); $row++; $sheet->setCellValue('A'.$row, 'B. Azonosító') ->setCellValue('B'.$row, 'Vendég') ->setCellValue('C'.$row, 'Kártya') ->setCellValue('D'.$row, 'Érvényes -tól') ->setCellValue('E'.$row, 'Érvényes -ig') ->setCellValue('F'.$row, 'Létrehozva') ->setCellValue('G'.$row, 'Bérlet típus') ->setCellValue('H'.$row, 'Felhasználó') ->setCellValue('I'.$row, 'Kassza') ->setCellValue('J'.$row, 'Státusz') ->setCellValue('K'.$row, 'Belépések száma') ->setCellValue('L'.$row, 'Maximum belépések száma') ->setCellValue('M'.$row, 'Nála fizették') ->setCellValue('N'.$row, 'Fizetési mód') ->setCellValue('O'.$row, 'Összeg') ->setCellValue('P'.$row, 'Fizetés státusza') ->setCellValue('Q'.$row, 'Vendég azonosító') ; foreach ( $dataProvider->getModels() as $model ) { $row ++; $sheet ->setCellValue('A'.$row, $model['ticket_id_ticket']) ->setCellValue('B'.$row, $model['customer_name']) ->setCellValue('C'.$row, $model['card_number']) ->setCellValue('D'.$row, $formatter->asDate($model['ticket_start'])) ->setCellValue('E'.$row, $formatter->asDate($model['ticket_end'])) ->setCellValue('F'.$row, $formatter->asDateTime($model['ticket_created_at'])) ->setCellValue('G'.$row, $model['ticket_type_name']) ->setCellValue('H'.$row, $model['user_username']) ->setCellValue('I'.$row, $model['account_name']) ->setCellValue('J'.$row, Ticket::toStatusName( $model['ticket_status'])) ->setCellValue('K'.$row, $model['ticket_usage_count']) ->setCellValue('L'.$row, $model['ticket_max_usage_count']) ->setCellValue('M'.$row, $model['paid_by_username']) ->setCellValue('N'.$row, Transfer::toPaymentMethodName( $model['transfer_payment_method'])) ->setCellValue('O'.$row, $model['ticket_price_brutto']) ->setCellValue('P'.$row, Transfer::toStatusName( $model['transfer_status'])) ->setCellValue('Q'.$row, $model['customer_id_customer']) ; } $styleArray = array ( 'font' => array ( 'bold' => true ) ); foreach ( range ( 'A', 'Q' ) as $columnID ) { $sheet->getColumnDimension ( $columnID )->setAutoSize ( true ); $sheet->getStyle ( $columnID . '6' )->applyFromArray ( $styleArray ); } foreach ( ['A','C','E' ,'G']as $columnID ) { for ($i = 1 ; $i < 6; $i++){ $sheet->getStyle ( $columnID . $i )->applyFromArray ( $styleArray ); } } $fileName = "berletek"; $fileName .= "_" . date ( "Ymd_His" ); $fileName .= ".xls"; // Redirect output to a client’s web browser (Excel5) header ( 'Content-Type: application/vnd.ms-excel' ); header ( 'Content-Disposition: attachment;filename="' . $fileName . '"' ); header ( 'Cache-Control: max-age=0' ); // If you're serving to IE 9, then the following may be needed header ( 'Cache-Control: max-age=1' ); // If you're serving to IE over SSL, then the following may be needed header ( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' ); // Date in the past header ( 'Last-Modified: ' . gmdate ( 'D, d M Y H:i:s' ) . ' GMT' ); // always modified header ( 'Cache-Control: cache, must-revalidate' ); // HTTP/1.1 header ( 'Pragma: public' ); // HTTP/1.0 $objWriter = \PHPExcel_IOFactory::createWriter ( $objPHPExcel, 'Excel5' ); $objWriter->save ( 'php://output' ); exit (); } private function downloadIndexPdf($searchModel,$dataProvider){ set_time_limit(0); $formatter = \Yii::$app->formatter; $admin = User::findOne(\Yii::$app->user->id); $exported_at = $formatter->asDatetime(new \DateTime()); $user = User::findOne($searchModel->id_user); $ticketType = TicketType::findOne($searchModel->id_ticket_type); $account = Account::findOne($searchModel->id_account); $ticketStatus = !empty($searchModel->status) ? Ticket::toStatusName($searchModel->status) : "Mind"; $customerIdCustomer = !empty($searchModel->id_customer) ? $searchModel->id_customer : "Mind"; $customerName = !empty($searchModel->customer_name) ? $searchModel->customer_name : "Mind"; $start = isset($searchModel->start) ? $formatter->asDateTime($searchModel->timestampStart) : ''; $end = isset($searchModel->end) ? $formatter->asDateTime($searchModel->timestampEnd) : ''; $ticketIdTicket = !empty($searchModel->id_ticket ) ? $searchModel->id_ticket : 'Mind'; $allDateConditionOn = $searchModel->isAllDateConditionOn(); $ticketIntervalIsValid = ( $allDateConditionOn || "1" == $searchModel->valid_in_interval )? "Igen" : ""; $ticketIntervalIsCreated =( $allDateConditionOn || "1" == $searchModel->created_in_interval) ? "Igen" : ""; $ticketIntervalIsExpire = ( $allDateConditionOn || "1" == $searchModel->expire_in_interval) ? "Igen" : ""; $ticketIntervalIsPaid = ( $allDateConditionOn || "1" == $searchModel->paid_in_interval) ? "Igen" : ""; $username = isset($user) ? $user->username : 'Mind'; $ticketTypeName = isset($ticketType) ? $ticketType->name : 'Mind'; $accountName = isset($account) ? $account->name : 'Mind'; $cardNumber = !empty($searchModel->card_number) ? $searchModel->card_number : "Mind"; $filters = [ 'admin' => $admin->username, 'exported_at' => $exported_at, 'ticketStatus' =>$ticketStatus, 'customerIdCustomer' => $customerIdCustomer, 'customerName' => $customerName, 'start' => $start, 'end' => $end, 'ticketIdTicket' => $ticketIdTicket, 'ticketIntervalIsValid' => $ticketIntervalIsValid, 'ticketIntervalIsCreated' => $ticketIntervalIsCreated, 'ticketIntervalIsExpire' => $ticketIntervalIsExpire, 'ticketIntervalIsPaid' => $ticketIntervalIsPaid, 'username' => $username, 'ticketTypeName' => $ticketTypeName, 'accountName' => $accountName, 'cardNumber' => $cardNumber ]; $fileName = "berletek"; $fileName .= "_" . date ( "Ymd_His" ); $fileName .= ".pdf"; $mpdf = new \mPDF ( 'utf-8', 'A4' ); $mpdf->useSubstitutions = false; $mpdf->simpleTables = true; $mpdf->SetHeader( \Yii::$app->params[ "company_name" ] . " - Bérletek - Létrehozva: " .$admin->username . ", ".\Yii::$app->formatter->asDatetime(time()) ); $mpdf->setFooter ( '{PAGENO} / {nb}' ); $stylesheet = file_get_contents( \Yii::getAlias('@backend/web/css/ticket-index-pdf.css')); // external css $mpdf->WriteHTML($stylesheet,1); $mpdf->WriteHTML ( $this->renderPartial ( '_index_pdf.php', [ 'model' => $searchModel, 'dataProvider' => $dataProvider, 'filters' => $filters ] ) ); $mpdf->Output ( $fileName, 'D' ); exit (); /* return $this->render ( '_index_pdf', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider ] ); */ } /** * Lists all Ticket models. * * @return mixed */ public function actionStatistics() { $searchModel = new TicketSearchStatisitcs(); $searchModel->search ( Yii::$app->request->queryParams ); $searchModel->searchTotals (); $searchModel->users = User::read (); $searchModel->accounts = Account::read (); $searchModel->ticketTypes = TicketType::read (); if ($searchModel->output == 'pdf') { $user = User::findOne ( \Yii::$app->user->id ); $mpdf = new \mPDF ( 'utf-8', 'A4-L' ); $fn = ""; $ov = '_total_content_pdf'; $dt = "_letrehozva_" . date ( "Ymd_His" ) . "_" . $user->username; $interval = ""; $account = ""; $currentUser = ""; $fn = $fn . $interval . $dt . $account . $currentUser . ".pdf"; $mpdf->useSubstitutions = false; $mpdf->simpleTables = true; $mpdf->SetHeader ( \Yii::$app->params ["company_name"] . " - Létrehozva: " . $user->username . ", " . \Yii::$app->formatter->asDatetime ( time () ) ); $mpdf->setFooter ( '{PAGENO} / {nb}' ); $stylesheet = file_get_contents ( \Yii::getAlias ( '@vendor' . '/bower/bootstrap/dist/css/bootstrap.css' ) ); // external css $mpdf->WriteHTML ( $stylesheet, 1 ); $mpdf->WriteHTML ( $this->renderPartial ( 'statistics_pdf', [ 'searchModel' => $searchModel ] ) ); $mpdf->Output ( $fn, 'D' ); exit (); } else { return $this->render ( 'statistics', [ 'searchModel' => $searchModel ] ); } } /** * Lists all Ticket models. * * @param $id * @return mixed * @throws NotFoundHttpException */ public function actionIndexCustomer($id) { $customer = Customer::findOne ( $id ); $card = Card::findOne ( $id ); if ($customer == null) { throw new NotFoundHttpException ( 'The requested page does not exist.' ); } $searchModel = new TicketSearchCustomer(['customer' => $customer]); $searchModel->id_card = $customer->id_customer_card; $dataProvider = $searchModel->search ( Yii::$app->request->queryParams ); //$searchModel->searchTotals (); $searchModel->users = User::read (); $searchModel->accounts = Account::read (); $searchModel->ticketTypes = TicketType::read (); Url::remember(Url::current(),"ticket_index_customer"); return $this->render ( 'index_customer', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, 'customer' => $customer, 'card' => $card ] ); } /** * Displays a single Ticket model. * * @param integer $id * @return mixed */ public function actionView($id) { return $this->render ( 'view', [ 'model' => $this->findModel ( $id ) ] ); } /** * Creates a new Ticket model. * If creation is successful, the browser will be redirected to the 'view' page. * * @return mixed */ public function actionCreate() { $model = new Ticket (); $discounts = Discount::read (); $ticketTypes = TicketType::read (); $accounts = Account::readAccounts (); if ($model->load ( Yii::$app->request->post () ) && $model->save ()) { return $this->redirect ( [ 'view', 'id' => $model->id_ticket ] ); } else { return $this->render ( 'create', [ 'model' => $model, 'discounts' => $discounts, 'ticketTypes' => $ticketTypes, 'accounts' => $accounts ] ); } } /** * Updates an existing Ticket model. * If update is successful, the browser will be redirected to the 'view' page. * * @param integer $id * @return mixed */ public function actionUpdate($id) { $model = TicketUpdate::findOne( $id ); $model->startDate = substr( $model->start ,0 ,10 ); $model->endDate = substr( $model->end ,0 ,10 ); $model->startDate = \Yii::$app->formatter->asDate($model->startDate); $model->endDate = \Yii::$app->formatter->asDate($model->endDate); if ($model->load ( Yii::$app->request->post () ) && $model->save ()) { Helper::flash("success", "Bérlet sikeresen módosítva"); $url = Url::previous("ticket_index_customer"); if ( isset($url) ){ return $this->redirect($url); } return $this->redirect ( [ 'view', 'id' => $model->id_ticket ] ); } else { return $this->render ( 'update', [ 'model' => $model ] ); } } /** * Deletes an existing Ticket model. * If deletion is successful, the browser will be redirected to the 'index' page. * * @param integer $id * @return mixed */ public function actionDelete($id) { $this->findModel ( $id )->delete (); return $this->redirect ( [ 'index' ] ); } public function actionTest(){ // $this->doTestTicketSale(); $this->doTestDetstaProcess(); return $this->render('test'); } protected function doTestDetstaProcess(){ $contract = Contract::findOne(19); $megbizas = $contract->requests[0]; $tetel = new GiroDETSTATetel(); $tetel->visszajelzesInformacio = "02"; $tp = new DetStatTetelProcessor([ 'megbizas' => $megbizas, 'tetel' => $tetel ]); $tp->run(); } protected function doTestTicketSale(){ $ticketType = TicketType::findOne(1); $customer = Customer::findOne(1); $account = Account::findOne(1); $card = $customer->card; $discount = null; $contract = Contract::findOne(19); $megbizas = $contract->requests[0]; $ticketSale = new TicketSale( [ 'ticketType'=> $ticketType, 'customer'=> $customer, 'account'=> $account, 'card'=> $card, 'discount'=> $discount, 'contract'=> $contract, 'ticketInstallmentRequest' => $megbizas ] ); $ticketSale->doSale(); } /** * Finds the Ticket model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * * @param integer $id * @return Ticket the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Ticket::findOne ( $id )) !== null) { return $model; } else { throw new NotFoundHttpException ( 'The requested page does not exist.' ); } } }