<?php

$Permissoes = User::getUser(true);

/**
 * @name Regras de Negócio
 */
class RegrasNegocioController extends GxController
{
    /**
     * Listar Regras de negócio
     * @name Listar Regras
     * @screen Regras de Negócio
     * @actionType Listagem
     * @param  int $grupo
     */
    public function actionAdmin($grupo)
    {
        $model = new RegrasNegocio('search');
        $grupo = $this->loadModel($grupo, 'RegrasGrupos');
        $model->REN_GRUPO = $grupo->REG_ID;

        $RegrasNegocio = filter_input(INPUT_GET, 'RegrasNegocio', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if ($RegrasNegocio) {
            $model->setAttributes($RegrasNegocio);
        }
        $tiposAcoes = $grupo->getTiposAcoes();

        $origem = $grupo->getOrigem(false, false);

        $dataProvider = $model->search();
        $this->render('admin', array(
            'model' => $model,
            'dataProvider' => $dataProvider,
            'grupo' => $grupo,
            'origem' => $origem,
            'tiposAcoes' => $tiposAcoes,
        ));
    }

    /**
     * Visualizar regra de negócio
     * @name Visualizar Regra
     * @screen Regras de Negócio
     * @actionType Visualização
     * @param  int $id
     */
    public function actionView($id)
    {
        $this->render('view', array(
            'model' => $this->loadModel($id, 'RegrasNegocio'),
        ));
    }

    /**
     * Cadastrar Regra de negócio
     * @name Cadastrar Regra
     * @screen Regras de Negócio
     * @actionType Formulário
     * @param  int $grupo
     */
    public function actionCreate($grupo)
    {
        $model = new RegrasNegocio('search');
        $grupo = $this->loadModel($grupo, 'RegrasGrupos');
        $model->REN_GRUPO = $grupo->REG_ID;
        $RegrasNegocio = filter_input(INPUT_POST, 'RegrasNegocio', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if ($RegrasNegocio) {
            $model->setAttributes($RegrasNegocio);
            $model->encodeJson();

            if ($model->save()) {
                Yii::app()->user->setFlash('success', 'Regra cadastrada com sucesso!');
                $this->redirect(array('view', 'id' => $model->REN_ID));
            } else {
                Yii::app()->user->setFlash('danger', 'Erro ao salvar!');
            }
        }

        $origem = $grupo->getOrigem();
        $restricoesDisponiveis = $grupo->getCondicoes();
        $tiposAcoes = $grupo->getTiposAcoes();
        $acoesDisponiveis = $model->getAcoes($tiposAcoes);

        $this->render('create', array(
            'model' => $model,
            'grupo' => $grupo,
            'origem' => $origem,
            'restricoesDisponiveis' => $restricoesDisponiveis,
            'acoesDisponiveis' => $acoesDisponiveis
        ));
    }

    /**
     * Edição da regra de negócio
     * @name Editar Regra
     * @screen Regras de Negócio
     * @actionType Formulário
     * @param  int $id
     */
    public function actionUpdate($id)
    {
        $model = $this->loadModel($id, 'RegrasNegocio');
        $grupo = $model->Grupo;

        $model->decodeJson(true);

        $restricoesDisponiveis = $grupo->getCondicoes($grupo);
        $origem = $grupo->getOrigem();
        $tiposAcoes = $grupo->getTiposAcoes();
        $acoesDisponiveis = $model->getAcoes($tiposAcoes);

        $RegrasNegocio = filter_input(INPUT_POST, 'RegrasNegocio', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if ($RegrasNegocio) {
            $model->setAttributes($RegrasNegocio);
            if (empty($RegrasNegocio['CONDICOES'])) {
                $model->CONDICOES = null;
            }
            if (empty($RegrasNegocio['EXCECOES'])) {
                $model->EXCECOES = null;
            }

            $model->encodeJson();

            if ($model->save()) {
                Yii::app()->user->setFlash('success', 'Regra atualizada com sucesso!');
                $this->redirect(array('view', 'id' => $model->REN_ID));
            } else {
                Yii::app()->user->setFlash('danger', 'Erro ao salvar!');
            }
        }

        $this->render('update', array(
            'model' => $model,
            'grupo' => $grupo,
            'origem' => $origem,
            'restricoesDisponiveis' => $restricoesDisponiveis,
            'acoesDisponiveis' => $acoesDisponiveis
        ));
    }

    /**
     * Exclusão da regra de negócio
     * @name Deletar Regra
     * @screen Regras de Negócio
     * @actionType Exclusão
     * @param  int $id
     */
    public function actionDelete($id)
    {
        if (Yii::app()->getRequest()->getIsPostRequest()) {
            $model = $this->loadModel($id, 'RegrasNegocio');
            $model->delete();

            if (!Yii::app()->getRequest()->getIsAjaxRequest()) {
                Yii::app()->user->setFlash('success', 'Regra excluída com sucesso!');
                $this->redirect(Yii::app()->createUrl('regrasNegocio/admin', array('grupo' =>$model->REN_GRUPO)));
            }
        } else {
            throw new CHttpException(400, 'Sua solicitação é inválida.');
        }
    }

    /**
     * Consulta de colunas de listagem
     * @name Consulta Colunas Listagem
     * @screen Regras de Negócio
     * @actionType Consulta
     * @param  int $tela
     */
    public function actionGetColunas($tela)
    {
        $colunas = RegrasNegocio::getColunasModel($tela);
        if ($colunas !== false) {
            echo CJSON::encode($colunas);
        } else {
            throw new CHttpException(400, 'Sua solicitação é inválida.');
        }
    }
}
