From 00845260948d3af81e5e73fde83c9108ed45b85b Mon Sep 17 00:00:00 2001 From: Schneider Roland Date: Fri, 8 Jan 2016 19:09:42 +0100 Subject: [PATCH] add account state changes --- .../controllers/AccountStateController.php | 116 +++++++++++++- backend/controllers/TransferController.php | 6 + backend/views/account-state/index.php | 1 + backend/views/account-state/view.php | 142 +++++++++++++----- backend/views/layouts-orig/main.php | 9 +- backend/views/layouts/content.php | 9 +- .../accountstate/AccountStateMail.php | 67 +++++++++ common/config/params.php | 2 + common/mail/account_state.php | 87 +++++++++++ .../controllers/AccountStateController.php | 33 +++- 10 files changed, 414 insertions(+), 58 deletions(-) create mode 100644 common/components/accountstate/AccountStateMail.php create mode 100644 common/mail/account_state.php diff --git a/backend/controllers/AccountStateController.php b/backend/controllers/AccountStateController.php index 2fcad74..2d79718 100644 --- a/backend/controllers/AccountStateController.php +++ b/backend/controllers/AccountStateController.php @@ -10,6 +10,7 @@ use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; use common\models\Account; use common\models\User; +use common\components\DailyListing; /** * AccountStateController implements the CRUD actions for AccountState model. @@ -17,6 +18,24 @@ use common\models\User; class AccountStateController extends \backend\controllers\BackendController { + public function behaviors() + { + return [ + 'access' => [ + 'class' => \yii\filters\AccessControl::className(), + 'rules' => [ + // allow authenticated users + [ + 'actions' => ['create','index','view','update','delete'], + 'allow' => true, + 'roles' => ['admin','employee','reception'], + ], + // everything else is denied + ], + ], + ]; + } + /** * Lists all AccountState models. * @return mixed @@ -30,7 +49,6 @@ class AccountStateController extends \backend\controllers\BackendController $users = User::read(); - return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, @@ -44,12 +62,65 @@ class AccountStateController extends \backend\controllers\BackendController * @param integer $id * @return mixed */ - public function actionView($id) - { - return $this->render('view', [ - 'model' => $this->findModel($id), - ]); - } +/* + * Displays a single AccountState model. + * @param integer $id + * $var common\models\AccountState $accountState + * @return mixed + */ + public function actionView($id) { + echo "view"; + $accountState = $this->findModel ( $id ); + $output = Yii::$app->getRequest ()->getQueryParam ( 'output' ); + $details = null; + if ($accountState->isTypeClose ()) { + + $prev; + if ($accountState->type == AccountState::TYPE_CLOSE) { + if (isset ( $accountState->prev_state )) { + $prev = AccountState::findOne ( $accountState->prev_state ); + } + if (isset ( $prev )) { + $accountState->start_date = $prev->created_at; + } + } + $details = new DailyListing(); + $details->loadAccountState ( $accountState ); + + $details->readTotalEasy (); + $details->readTotalDetailed (); + $details->readTotalMedium (); + } + + if ($output == 'pdf') { + $user = User::findOne(\Yii::$app->user->id); + $mpdf=new \mPDF('utf-8', 'A4-L'); + $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("@common/views/account-state/account_state_pdf", [ + 'model' => $accountState, + 'details' => $details + ])); + $type = $accountState->isTypeOpen() ? "kassza_nyitas" : "kassza_zaras"; + $dt= "_letrehozva_".date("Ymd_His"). "_" . $user->username; + $fn= $type .$dt.".pdf"; + $mpdf->Output($fn, 'D'); + + } else { + + return $this->render ( 'view', [ + 'model' => $accountState, + 'details' => $details + ] ); + } + } /** * Creates a new AccountState model. @@ -88,6 +159,37 @@ class AccountStateController extends \backend\controllers\BackendController } } + + /** + * Deletes an existing AccountState model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * + * @param integer $id + * @return mixed + */ + public function actionDelete($id) { + $model = $this->findModel ( $id ); + + $delete = true; + if ( $model->isTypeOpen() ){ + $closeStates = AccountState::find()->andWhere( ['prev_state' => $model->id_account_state] )->all(); + + if ( count($closeStates) > 0){ + $delete = false; + \Yii::$app->session->setFlash('error', ['Nem lehet törölni a nyitást, mert van kapcsolódó zárás!']); + throw new \Exception('Nem lehet törölni a nyitást, mert van kapcsolódó zárás!'); + } + + } + + if ( $delete == true ){ + $model->delete(); + \Yii::$app->session->setFlash ( 'success', 'Kassza művelet törölve' ); + } + + return $this->redirect ( ["index"] ); + } + /** * Deletes an existing AccountState model. * If deletion is successful, the browser will be redirected to the 'index' page. diff --git a/backend/controllers/TransferController.php b/backend/controllers/TransferController.php index dac05e7..d4d15a1 100644 --- a/backend/controllers/TransferController.php +++ b/backend/controllers/TransferController.php @@ -117,6 +117,10 @@ class TransferController extends \backend\controllers\BackendController $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($ov, [ 'searchModel' => $searchModel, ])); @@ -184,6 +188,8 @@ class TransferController extends \backend\controllers\BackendController $mpdf=new \mPDF('utf-8', 'A4-L'); + $stylesheet = file_get_contents( \Yii::getAlias('@vendor'.'/bower/bootstrap/dist/css/bootstrap.css')); // external css + $mpdf->WriteHTML($stylesheet,1); $mpdf->WriteHTML($this->renderPartial('_result_sale', [ 'searchModel' => $searchModel, ])); diff --git a/backend/views/account-state/index.php b/backend/views/account-state/index.php index e2a5fd9..c8d2c87 100644 --- a/backend/views/account-state/index.php +++ b/backend/views/account-state/index.php @@ -17,6 +17,7 @@ $this->params['breadcrumbs'][] = $this->title; render('_search', ['model' => $searchModel,'accounts' => $accounts,'users' => $users,]); ?> + $dataProvider, 'columns' => [ diff --git a/backend/views/account-state/view.php b/backend/views/account-state/view.php index 61cc88e..aeaab98 100644 --- a/backend/views/account-state/view.php +++ b/backend/views/account-state/view.php @@ -2,55 +2,117 @@ use yii\helpers\Html; use yii\widgets\DetailView; +use common\components\total\TotalEasyWidget; +use common\components\total\TotalDetailedProductsWidget; +use common\components\total\TotalDetailedTicketsWidget; +use common\components\total\TotalDetailedMoneyMovementWidget; +use common\components\accountstate\BankNotesWidget; +use common\components\total\TotalMediumTicketsWidget; +use common\components\total\TotalMediumProductsWidget; +use common\components\total\TotalMediumMoneyMovementsWidget; +use common\components\total\TotalDifferenceWidget; +use yii\base\Widget; +use common\models\AccountState; +use yii\helpers\Url; +use common\components\accountstate\AccountStateWidget; /* @var $this yii\web\View */ /* @var $model common\models\AccountState */ - -$this->title = $model->id_account_state; -$this->params['breadcrumbs'][] = ['label' => Yii::t('backend/account-state', 'Account States'), 'url' => ['index']]; +if ( $model ->type == AccountState::TYPE_OPEN ){ + $this->title = "Kassza nyitás"; +}else{ + $this->title = "Kassza zárás"; +} +$this->params['breadcrumbs'][] = ['label' => Yii::t('frontend/account-state', 'Account States'), 'url' => ['index']]; $this->params['breadcrumbs'][] = $this->title; ?> + +

title) ?>

+ + hasDifferenceToPrevState() ){ + if ( $model->hasMinus()){ + ?> + + + + + $model]) ?> + + 'glyphicon glyphicon-download-alt'])." Pdf", Url::current(['output' =>'pdf']) ,['class' => 'btn btn-primary btn-pdf']); + ?> + + hasDifferenceToPrevState() ){ + ?> +

Különbözet

+ $model] ); + + } + +?> + type == AccountState::TYPE_CLOSE ){?> +
-

- $model->id_account_state], ['class' => 'btn btn-primary']) ?> - $model->id_account_state], [ - 'class' => 'btn btn-danger', - 'data' => [ - 'confirm' => Yii::t('backend/account-state', 'Are you sure you want to delete this item?'), - 'method' => 'post', - ], - ]) ?> -

+ + - $model, - 'attributes' => [ - 'id_account_state', - 'id_account', - 'type', - 'money', - 'banknote_5_ft', - 'banknote_10_ft', - 'banknote_20_ft', - 'banknote_50_ft', - 'banknote_100_ft', - 'banknote_200_ft', - 'banknote_500_ft', - 'banknote_1000_ft', - 'banknote_2000_ft', - 'banknote_5000_ft', - 'banknote_10000_ft', - 'banknote_20000_ft', - 'id_user', - 'created_at', - 'updated_at', - 'comment', - 'prev_state', - 'prev_money', - ], - ]) ?> + +
+
+ $details]);?> +
+
+

Közepes összesítés

+

Bérletek típus szerint

+ $details]);?> +

Termékek név szerint

+ $details]);?> +

Pénzmozgások típus szerint

+ $details]);?> +
+
+

Részletek

+ $details]);?> + $details]);?> + $details]);?> +
+
+

Címletek

+ $model]);?> +
+
+ +

Címletek

+ $model]);?> + + +
\ No newline at end of file diff --git a/backend/views/layouts-orig/main.php b/backend/views/layouts-orig/main.php index 88466f6..3fc5a7d 100644 --- a/backend/views/layouts-orig/main.php +++ b/backend/views/layouts-orig/main.php @@ -53,14 +53,7 @@ $items = $adminMenu->run(); isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?> - - true, - 'type' => AlertBlock::TYPE_GROWL, - 'delay' => '1' - ]); - ?> + diff --git a/backend/views/layouts/content.php b/backend/views/layouts/content.php index e7c991c..f4c502f 100644 --- a/backend/views/layouts/content.php +++ b/backend/views/layouts/content.php @@ -1,6 +1,7 @@
@@ -15,7 +16,13 @@ use dmstr\widgets\Alert;
- + true, + 'type' => AlertBlock::TYPE_GROWL, + 'delay' => '1' + ]); + ?>
diff --git a/common/components/accountstate/AccountStateMail.php b/common/components/accountstate/AccountStateMail.php new file mode 100644 index 0000000..cf7bf77 --- /dev/null +++ b/common/components/accountstate/AccountStateMail.php @@ -0,0 +1,67 @@ +model ->isTypeClose ()) { + + $prev; + if ($this->model ->type == AccountState::TYPE_CLOSE) { + if (isset ( $accountState->prev_state )) { + $prev = AccountState::findOne ( $accountState->prev_state ); + } + if (isset ( $prev )) { + $this->model ->start_date = $prev->created_at; + } + } + $details = new DailyListing(); + $details->loadAccountState ( $this->model ); + + $details->readTotalEasy (); + $details->readTotalDetailed (); + $details->readTotalMedium (); + } + + $user = User::findOne($this->model->id_user); + $account = Account::findOne($this->model->id_account); + $subject = $this->model->isTypeOpen() ? "Kassza nyitás " : "Kassza zárás"; + $subject .= " - " . $user->username ." - ". $account->name; + + $mail = \Yii::$app->mailer->compose('account_state', [ + 'model' => $this->model, + 'details' => $details + ]); + $mail->setFrom('noreplay@fitnessadmin.hu') + ->setTo( \Yii::$app->params['notify_mail'] ) + ->setSubject($subject ) + ->send(); + + } + + + + +} \ No newline at end of file diff --git a/common/config/params.php b/common/config/params.php index 74b1f61..ad18215 100644 --- a/common/config/params.php +++ b/common/config/params.php @@ -7,4 +7,6 @@ return [ 'company' => 'movar',//gyor 'company_name' => "Freimann Kft.", 'product_visiblity' => 'account',// on reception which products to display. account or global + 'notify_mail' => ['rocho02@gmail.com' ], + 'mail_account_state_open' => true, ]; diff --git a/common/mail/account_state.php b/common/mail/account_state.php new file mode 100644 index 0000000..c0c627d --- /dev/null +++ b/common/mail/account_state.php @@ -0,0 +1,87 @@ +type == AccountState::TYPE_OPEN ){ + $this->title = "Kassza nyitás"; +}else{ + $this->title = "Kassza zárás"; +} +?> + + +
+ +

title) ?>

+ + hasDifferenceToPrevState() ){ + if ( $model->hasMinus()){ + ?> + + + + + $model]) ?> + + + hasDifferenceToPrevState() ){ + ?> +

Különbözet

+ $model] ); + + } + +?> + type == AccountState::TYPE_CLOSE ){?> + + $details]);?> +

Közepes összesítés

+

Bérletek típus szerint

+ $details]);?> +

Termékek név szerint

+ $details]);?> +

Pénzmozgások típus szerint

+ $details]);?> + +

Címletek

+ $model]);?> + + +
\ No newline at end of file diff --git a/frontend/controllers/AccountStateController.php b/frontend/controllers/AccountStateController.php index 54d67f2..4c184b2 100644 --- a/frontend/controllers/AccountStateController.php +++ b/frontend/controllers/AccountStateController.php @@ -11,6 +11,7 @@ use yii\filters\VerbFilter; use common\models\Account; use common\components\DailyListing; use common\models\User; +use common\components\accountstate\AccountStateMail; /** * AccountStateController implements the CRUD actions for AccountState model. @@ -77,6 +78,12 @@ class AccountStateController extends Controller { $model->id_account = Account::readDefault (); if ($model->load ( Yii::$app->request->post () ) && $model->save ()) { // return $this->redirect(['view', 'id' => $model->id_account_state]); + + + $mail = new AccountStateMail(['model' => $model]); + $mail->sednMail(); + + return $this->redirect ( [ 'index' ] ); @@ -105,6 +112,11 @@ class AccountStateController extends Controller { $model->id_user = Yii::$app->user->id; $model->id_account = Account::readDefault (); if ($model->load ( Yii::$app->request->post () ) && $model->save ()) { + + + $mail = new AccountStateMail(['model' => $model]); + $mail->sednMail(); + return $this->redirect ( [ 'index' ] ); @@ -179,8 +191,20 @@ class AccountStateController extends Controller { * @return mixed */ public function actionDelete($id) { - $this->findModel ( $id )->delete (); - \Yii::$app->session->setFlash ( 'success', 'Kassza művelet törölve' ); + $model = $this->findModel ( $id ); + $delete = true; + if ( $model->isTypeOpen() ){ + $closeStates = AccountState::find()->andWhere(['prev_state' => $model->id_account_state])->all(); + if ( count($closeStates) > 0){ +// throw new \Exception("Nem lehet törölni a nyitást, mert van kapcsolódó zárás!"); + \Yii::$app->session->setFlash ( 'error', "Nem lehet törölni a nyitást, mert van kapcsolódó zárás!" ); + $delete = false; + } + } + if ( $delete == true){ + $model->delete(); + \Yii::$app->session->setFlash ( 'success', 'Kassza művelet törölve' ); + } return $this->redirect ( Yii::$app->request->referrer ); } /* @@ -219,6 +243,11 @@ class AccountStateController extends Controller { $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("@common/views/account-state/account_state_pdf", [ 'model' => $accountState, 'details' => $details