diff --git a/backend/controllers/ContractController.php b/backend/controllers/ContractController.php index f434a1c..73d8248 100644 --- a/backend/controllers/ContractController.php +++ b/backend/controllers/ContractController.php @@ -12,166 +12,238 @@ use backend\models\ContractCustomerSearch; use common\models\Customer; use yii\db\Query; use backend\models\ContractRequestSearch; +use common\models\TicketInstallmentRequest; +use common\models\Ticket; +use common\models\Transfer; +use yii\base\Exception; +use common\components\RoleDefinition; /** * ContractController implements the CRUD actions for Contract model. - * + * * TODO: FIX CONTROLLER */ -class ContractController extends Controller -{ - public function behaviors() { - return [ - 'access' => [ - 'class' => \yii\filters\AccessControl::className(), +class ContractController extends Controller { + public function behaviors() { + return [ + 'access' => [ + 'class' => \yii\filters\AccessControl::className (), 'rules' => [ // allow authenticated users - [ + [ 'actions' => [ ], 'allow' => true, - 'roles' => ['admin','employee','reception'], - ], - // everything else is denied - ], - ], + 'roles' => [ + 'admin', + 'employee', + 'reception' + ] + ] + ] + // everything else is denied + + ] ]; } - - /** - * Lists all Contract models. - * @return mixed - */ - public function actionIndex() - { - $searchModel = new ContractSearch(); - $dataProvider = $searchModel->search(Yii::$app->request->queryParams); - - return $this->render('index', [ - 'searchModel' => $searchModel, - 'dataProvider' => $dataProvider, - ]); - } - /** - * Lists all Contract models. - * @return mixed - */ - public function actionIndexCustomer($id) - { - $model = Customer::findOne($id); - - if ( !isset($model)){ - throw new NotFoundHttpException('The requested page does not exist.'); - } - - $searchModel = new ContractCustomerSearch(['customer' => $model]); - $dataProvider = $searchModel->search(Yii::$app->request->queryParams); - - return $this->render('index-customer', [ - 'searchModel' => $searchModel, - 'dataProvider' => $dataProvider, - ]); - } - - /** - * Displays a single Contract model. - * @param integer $id - * @return mixed - */ - public function actionView($id) - { - return $this->render('view', [ - 'model' => $this->findModel($id), - ]); - } - - /** - * Creates a new Contract model. - * If creation is successful, the browser will be redirected to the 'view' page. - * @return mixed - */ - public function actionCreate() - { - $model = new Contract(); - - if ($model->load(Yii::$app->request->post()) && $model->save()) { - return $this->redirect(['view', 'id' => $model->id_contract]); - } else { - return $this->render('create', [ - 'model' => $model, - ]); - } - } - - /** - * Updates an existing Contract model. - * If update is successful, the browser will be redirected to the 'view' page. - * @param integer $id - * @return mixed - */ - public function actionUpdate($id) - { - $model = $this->findModel($id); - - if ($model->load(Yii::$app->request->post()) && $model->save()) { - return $this->redirect(['view', 'id' => $model->id_contract]); - } else { - return $this->render('update', [ - 'model' => $model, - ]); - } - } - - /** - * Deletes an existing Contract 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 actionDetails( $id ) - { - $contract = Contract::findOne($id); - //ticket_installment_request - - - if ( !isset($contract)){ - throw new NotFoundHttpException('The requested page does not exist.'); - } - - $searchModel = new ContractRequestSearch( - ['contract' => $contract] - ); - -// $searchModel->contract = $contract; - - $dataProvider = $searchModel->search(Yii::$app->request->queryParams); - - return $this->render('details', [ - 'searchModel' => $searchModel, - 'dataProvider' => $dataProvider, - ]); - } - - /** - * Finds the Contract model based on its primary key value. - * If the model is not found, a 404 HTTP exception will be thrown. - * @param integer $id - * @return Contract the loaded model - * @throws NotFoundHttpException if the model cannot be found - */ - protected function findModel($id) - { - if (($model = Contract::findOne($id)) !== null) { - return $model; - } else { - throw new NotFoundHttpException('The requested page does not exist.'); - } - } + + /** + * Lists all Contract models. + * + * @return mixed + */ + public function actionIndex() { + $searchModel = new ContractSearch (); + $dataProvider = $searchModel->search ( Yii::$app->request->queryParams ); + + return $this->render ( 'index', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider + ] ); + } + /** + * Lists all Contract models. + * + * @return mixed + */ + public function actionIndexCustomer($id) { + $model = Customer::findOne ( $id ); + + if (! isset ( $model )) { + throw new NotFoundHttpException ( 'The requested page does not exist.' ); + } + + $searchModel = new ContractCustomerSearch ( [ + 'customer' => $model + ] ); + $dataProvider = $searchModel->search ( Yii::$app->request->queryParams ); + + return $this->render ( 'index-customer', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider + ] ); + } + + /** + * Displays a single Contract model. + * + * @param integer $id + * @return mixed + */ + public function actionView($id) { + return $this->render ( 'view', [ + 'model' => $this->findModel ( $id ) + ] ); + } + + /** + * Creates a new Contract model. + * If creation is successful, the browser will be redirected to the 'view' page. + * + * @return mixed + */ + public function actionCreate() { + $model = new Contract (); + + if ($model->load ( Yii::$app->request->post () ) && $model->save ()) { + return $this->redirect ( [ + 'view', + 'id' => $model->id_contract + ] ); + } else { + return $this->render ( 'create', [ + 'model' => $model + ] ); + } + } + + /** + * Updates an existing Contract model. + * If update is successful, the browser will be redirected to the 'view' page. + * + * @param integer $id + * @return mixed + */ + public function actionUpdate($id) { + $model = $this->findModel ( $id ); + + if ($model->load ( Yii::$app->request->post () ) && $model->save ()) { + return $this->redirect ( [ + 'view', + 'id' => $model->id_contract + ] ); + } else { + return $this->render ( 'update', [ + 'model' => $model + ] ); + } + } + + /** + * Deletes an existing Contract 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 ); + + if ( !RoleDefinition::isAdmin() ){ + throw new Exception ( "A szerződés nem törölhető" ); + } + + if ($model->flag != Contract::$FLAG_ACTIVE) { + throw new Exception ( "A szerződés nem törölhető" ); + } + + $parts = TicketInstallmentRequest::find ()->andWhere ( [ + 'not in', + 'status', + [ + TicketInstallmentRequest::$STATUS_CANCELED, + TicketInstallmentRequest::$STATUS_PENDING + ] + ] )->all (); + + if (count ( $parts ) > 0) { + throw new Exception ( "Már van feldolgozott részlet, nem lehet törölni" ); + } + + $tx = \Yii::$app->db->beginTransaction (); + + try { + + Contract::updateAll ( [ + 'flag' => Contract::$FLAG_DELETED + ], [ + 'id_contract' => $model->id_contract + ] ); + + TicketInstallmentRequest::updateAll ( [ + 'status' => TicketInstallmentRequest::$STATUS_CANCELED + ], [ + 'id_contract' => $model->id_contract + ] ); + $ticket = Ticket::find ()->andWhere ( [ + 'id_contract' => $model->id_contract + ] )->one (); + + $transfer = Transfer::find ()->andWhere ( [ + 'type' => Transfer::TYPE_TICKET + ] )->andWhere ( [ + 'id_object' => $ticket->id_ticket + ] )->one (); + + $transfer->storno (); + + $tx->commit (); + // $tx->rollBack(); + } catch ( \Exception $e ) { + $tx->rollBack (); + echo $e->getMessage (); + throw $e; + } + + return $this->redirect ( [ + 'index' + ] ); + } + public function actionDetails($id) { + $contract = Contract::findOne ( $id ); + // ticket_installment_request + + if (! isset ( $contract )) { + throw new NotFoundHttpException ( 'The requested page does not exist.' ); + } + + $searchModel = new ContractRequestSearch ( [ + 'contract' => $contract + ] ); + + // $searchModel->contract = $contract; + + $dataProvider = $searchModel->search ( Yii::$app->request->queryParams ); + + return $this->render ( 'details', [ + 'model' => $contract, + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider + ] ); + } + + /** + * Finds the Contract model based on its primary key value. + * If the model is not found, a 404 HTTP exception will be thrown. + * + * @param integer $id + * @return Contract the loaded model + * @throws NotFoundHttpException if the model cannot be found + */ + protected function findModel($id) { + if (($model = Contract::findOne ( $id )) !== null) { + return $model; + } else { + throw new NotFoundHttpException ( 'The requested page does not exist.' ); + } + } } diff --git a/backend/views/contract/details.php b/backend/views/contract/details.php index d526232..395bba7 100644 --- a/backend/views/contract/details.php +++ b/backend/views/contract/details.php @@ -1,9 +1,87 @@ -Részletek +
| + Vendég + | ++ customer->name ;?> + | +
|---|---|
| + Kártyaszám + | ++ customer->card->number ;?> + | +
Szerződés nem törölhető!
"; + } +} + +?> +