readRequests(); $this->success = true; if ( count( $this->requests ) > 0 ){ $connection = \Yii::$app->db; $transaction = $connection->beginTransaction(); try { $this->createUGiroKoteg(); $this->assignRequestsToUgiro(); $this->changeRequestsStatusToSent(); $this->generateFileContent(); $this->saveFile(); if ($this->success) { $transaction->commit(); \Yii::$app->session->setFlash('success',"Fájl létrehozva"); return true; } else { $transaction->rollback(); throw new NotFoundHttpException( "Hiba történt!"); } } catch (\Exception $e) { $transaction->rollback(); throw $e; } }else{ \Yii::$app->session->setFlash('danger', "Megbízások száma 0!"); return false; } } public function changeRequestsStatusToSent(){ foreach ($this->requests as $request){ $request->status = TicketInstallmentRequest::$STATUS_SENT; $this->success &= $request->save(false); } } public function assignRequestsToUgiro(){ $i = 0; foreach ($this->requests as $request){ $i++; $request->number = $i; $request->save(false); $assignment = new UgiroRequestAssignment(); $assignment->id_request = $request->id_ticket_installment_request; $assignment->id_ugiro = $this->koteg->id_ugiro; $this->success &= $assignment->save(false); } } public function createUGiroKoteg(){ $this->koteg = new Ugiro(); $this->koteg->status = Ugiro::$STATUS_SENT; $this->koteg->id_user = \Yii::$app->user->id; $this->koteg->datum = date('Ymd'); $lastNumber = $this->loadLastNumber($this->koteg->datum); $nextNumber = $lastNumber+1; $this->koteg->number = $nextNumber; $this->success &= $this->koteg->save(false); } public function loadLastNumber($datum){ $query = new Query(); $query->select(['coalesce(max(number),0)']); $query->from('ugiro'); $query->andWhere(["datum" => $datum]); return $query->scalar(); } public function readRequests(){ $this->requests = TicketInstallmentRequest::find()->andWhere(['status' => TicketInstallmentRequest::$STATUS_MARKED_TO_SEND])->all(); } public function generateFileContent(){ $this->content = GiroBeszed::createFileContent($this->koteg->number, $this->koteg->datum, $this->requests); } public function saveFile( ) { // $data = static::transliterate($this->content); $data = $this->content; $data = iconv("utf-8","ASCII",$data); $path = Ugiro::$PATH_MEGBIZAS . DIRECTORY_SEPARATOR ."giro" . $this->koteg->id_ugiro."_". date('Ymd' ) .".txt"; $filename = Yii::getAlias('@backend/web').DIRECTORY_SEPARATOR .$path; $dir = Yii::getAlias('@backend/web').DIRECTORY_SEPARATOR .Ugiro::$PATH_MEGBIZAS; $this->koteg->path = $path; $this->koteg->save(false); if(!FileHelper::createDirectory($dir)){ throw new HttpException(500, 'Cannot create "'.$dir.'". Please check write permissions.'); } $myfile = fopen($filename,'a'); fwrite($myfile, $data); fclose($myfile); } public static function transliterate($string) { // if (static::hasIntl()) { // return transliterator_transliterate(BaseInflector::$transliterator, $string); // } else { return str_replace(array_keys(BaseInflector::$transliteration), BaseInflector::$transliteration, $string); // } } /** * @return boolean if intl extension is loaded */ protected static function hasIntl() { return extension_loaded('intl'); } }