<?php

$Permissoes = User::getUser(true);

if ($Permissoes->FUN_TBL_FORMULARIOS == 1) {

    class FormulariosController extends GxController {

        var $help = 'Esta é a ajuda';

        public function actionView($id) {
            $this->render('view', array(
                'model' => $this->loadModel($id, 'Formularios'),
            ));
        }

        public function actionCreate() {
            $model = new Formularios;

            if (isset($_POST['Formularios'])) {
                $model->setAttributes($_POST['Formularios']);

                $transaction = Yii::app()->db->beginTransaction();
                $commit = true;
                if ($model->save()) {
                    if (
                        isset($_POST['Formularios']['FRM_IDPROJETO']) &&
                        is_array($_POST['Formularios']['FRM_IDPROJETO'])
                    ) {
                        foreach ($_POST['Formularios']['FRM_IDPROJETO'] as $FRP_IDPROJETO) {
                            $FRP_IDCOMPLEXIDADE = $_POST['Formularios']['FRM_IDCOMPLEXIDADE'][$FRP_IDPROJETO] ?? null;

                            $FormulariosProjetos = new FormulariosProjetos;
                            $FormulariosProjetos->FRP_IDFORMULARIO = $model->FRM_IDFORMULARIO;
                            $FormulariosProjetos->FRP_IDPROJETO = $FRP_IDPROJETO;
                            $FormulariosProjetos->FRP_IDCOMPLEXIDADE = $FRP_IDCOMPLEXIDADE;
                            if (!$FormulariosProjetos->save()) {
                                $commit = false;
                            }
                        }
                    }
                } else {
                    $commit = false;
                }

                if ($commit) {
                    try {
                        $transaction->commit();
                    } catch (Exception $e) {
                        $transaction->rollback();
                        $commit = true;
                    }
                } else {
                    $transaction->rollback();
                }

                if ($commit) {
                    if (Yii::app()->getRequest()->getIsAjaxRequest())
                        Yii::app()->end();
                    else
                        $this->redirect(array('view', 'id' => $model->FRM_IDFORMULARIO));
                }
            }

            $niveisComplexidade = Complexidades::model()->findAll('CPX_STATUS = 1 ORDER BY CPX_DESCRICAO');
            $niveisComplexidade = CHtml::listData($niveisComplexidade, 'CPX_ID', 'CPX_DESCRICAO');
            $this->render('create', array(
                'model' => $model,
                'niveisComplexidade' => $niveisComplexidade
            ));
        }

        public function actionUpdate($id) {
            $model = $this->loadModel($id, 'Formularios');

            if (isset($_POST['Formularios'])) {
                $model->setAttributes($_POST['Formularios']);

                $transaction = Yii::app()->db->beginTransaction();
                $commit = true;
                if ($model->save()) {
                    if (!empty($model->FormulariosProjetos)) {
                        $count = FormulariosProjetos::model()->deleteAll(
                            'FRP_IDFORMULARIO = ' . $model->FRM_IDFORMULARIO
                        );
                        if ($count != count($model->FormulariosProjetos)) {
                            $commit = false;
                        }
                    }

                    if (
                        isset($_POST['Formularios']['FRM_IDPROJETO']) &&
                        is_array($_POST['Formularios']['FRM_IDPROJETO'])
                    ) {
                        foreach ($_POST['Formularios']['FRM_IDPROJETO'] as $FRP_IDPROJETO) {
                            $FRP_IDCOMPLEXIDADE = $_POST['Formularios']['FRM_IDCOMPLEXIDADE'][$FRP_IDPROJETO] ?? null;

                            $FormulariosProjetos = new FormulariosProjetos;
                            $FormulariosProjetos->FRP_IDFORMULARIO = $model->FRM_IDFORMULARIO;
                            $FormulariosProjetos->FRP_IDPROJETO = $FRP_IDPROJETO;
                            $FormulariosProjetos->FRP_IDCOMPLEXIDADE = $FRP_IDCOMPLEXIDADE;
                            if (!$FormulariosProjetos->save()) {
                                $commit = false;
                            }
                        }
                    }
                } else {
                    $commit = false;
                }

                if ($commit) {
                    try {
                        $transaction->commit();
                    } catch (Exception $e) {
                        $transaction->rollback();
                        $commit = true;
                    }
                } else {
                    $transaction->rollback();
                }

                if ($commit) {
                    $this->redirect(array('view', 'id' => $model->FRM_IDFORMULARIO));
                }

            } elseif (!empty($model->FormulariosProjetos)) {
                $complexidades = array();
                foreach ($model->FormulariosProjetos as $key => $formularioProjeto) {
                    $complexidades[$formularioProjeto->FRP_IDPROJETO] = $formularioProjeto->FRP_IDCOMPLEXIDADE;
                }
                $model->FRM_IDCOMPLEXIDADE = $complexidades;
            }

            $niveisComplexidade = Complexidades::model()->findAll('CPX_STATUS = 1 ORDER BY CPX_DESCRICAO');
            $niveisComplexidade = CHtml::listData($niveisComplexidade, 'CPX_ID', 'CPX_DESCRICAO');
            $this->render('update', array(
                'model' => $model,
                'niveisComplexidade' => $niveisComplexidade
            ));
        }

        public function actionDelete($id) {
            if (Yii::app()->getRequest()->getIsPostRequest()) {
                FormulariosProjetos::model()->deleteAll('FRP_IDFORMULARIO = ' . $id);
                $this->loadModel($id, 'Formularios')->delete();

                if (!Yii::app()->getRequest()->getIsAjaxRequest())
                    $this->redirect(array('admin'));
            } else
                throw new CHttpException(400, 'Sua solicitação é inválida.');
        }

        public function actionAdmin() {
            $model = new Formularios('search');
            $model->unsetAttributes();

            if (isset($_GET['Formularios']))
                $model->setAttributes($_GET['Formularios']);

            $this->render('admin', array(
                'model' => $model,
            ));
        }

    }

}