<?php
$Permissoes=User::getUser(true);

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

    class ClientesVinculadosController extends GxController {

        var $help = 'Esta é a ajuda';

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

        public function actionVincular($CLI_VINCULAR, $CLI_IDCLIENTE) {
            $vincular = Clientes::model()->findByPk($CLI_VINCULAR);
            $cliente = Clientes::model()->findByPk($CLI_IDCLIENTE);
            if (empty($vincular->CLI_IDCLIENTE)) {
                Yii::app()->user->setFlash('error', 'Prospectos/Clientes selecionado para vinculação não existe.');
                if(!empty($cliente->CLI_IDCLIENTE))
                    $this->redirect(array('clientes/view', 'id' => $CLI_IDCLIENTE, 'page' => 'vincular-cliente'));
                else
                    $this->redirect(array('/'));
            }

            if(empty($cliente->CLI_IDCLIENTE)) {
                Yii::app()->user->setFlash('error', 'Prospectos/Clientes selecionado para vinculação não existe.');
                $this->redirect(array('clientes/view', 'id' => $CLI_VINCULAR, 'page' => 'vincular-cliente'));
            }

            if($cliente->CLI_IDCLIENTE == $vincular->CLI_IDCLIENTE) {
                Yii::app()->user->setFlash('error', 'Não é possível sincronizar um prospecto/cliente com ele mesmo.');
                $this->redirect(array('clientes/view', 'id' => $CLI_IDCLIENTE, 'page' => 'vincular-cliente'));
            }

            $jaVinculado = ClientesVinculados::model()->find('VIN_IDCLIENTE =' . $CLI_IDCLIENTE . " and VIN_VINCULO =". $CLI_VINCULAR);
            $jaVinculado2 = ClientesVinculados::model()->find('VIN_IDCLIENTE =' . $CLI_VINCULAR . " and VIN_VINCULO =". $CLI_IDCLIENTE);
            if(!empty($jaVinculado->VIN_VINCULO) && !empty($jaVinculado2)) {
                Yii::app()->user->setFlash('error', 'Estes Prospectos/Clientes já estão vinculados.');
                $this->redirect(array('clientes/view', 'id' => $CLI_IDCLIENTE, 'page' => 'vincular-cliente'));
            }

            $transaction = Yii::app()->db->beginTransaction();
            $commit = true;

            if(empty($jaVinculado->VIN_VINCULO)) {
                $ClienteVincular = new ClientesVinculados;
                $ClienteVincular->VIN_IDCLIENTE  = $CLI_IDCLIENTE;
                $ClienteVincular->VIN_VINCULO  = $CLI_VINCULAR;
                if (!$ClienteVincular->save()) {
                    $commit = false;
                }
            }

            if(empty($jaVinculado2->VIN_VINCULO)) {
                $ClienteVincular = new ClientesVinculados;
                $ClienteVincular->VIN_IDCLIENTE  = $CLI_VINCULAR;
                $ClienteVincular->VIN_VINCULO  = $CLI_IDCLIENTE;
                if (!$ClienteVincular->save()) {
                    $commit = false;
                }
            }

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

            if ($commit) {
                Yii::app()->user->setFlash('success', 'Prospectos/Clientes vinculados com sucesso.');
            } else {
                Yii::app()->user->setFlash('error', 'Ocorreu um erro ao salvar, tente novamente.');
            }
            $this->redirect(array('clientes/view', 'id' => $CLI_IDCLIENTE, 'page' => 'vincular-cliente'));
        }

        public function actionDesvincular($CLI_DESVINCULAR, $CLI_IDCLIENTE) {
            $vincular = Clientes::model()->findByPk($CLI_DESVINCULAR);
            $cliente = Clientes::model()->findByPk($CLI_IDCLIENTE);
            if (empty($vincular->CLI_IDCLIENTE)) {
                Yii::app()->user->setFlash('error', 'Prospectos/Clientes selecionado para desvinculação não existe.');
                if(!empty($cliente->CLI_IDCLIENTE))
                    $this->redirect(array('clientes/view', 'id' => $CLI_IDCLIENTE, 'page' => 'vincular-cliente'));
                else
                    $this->redirect(array('/'));
            }

            if(empty($cliente->CLI_IDCLIENTE)) {
                Yii::app()->user->setFlash('error', 'Prospectos/Clientes selecionado para desvinculação não existe.');
                $this->redirect(array('clientes/view', 'id' => $CLI_DESVINCULAR, 'page' => 'vincular-cliente'));
            }

            $jaVinculado = ClientesVinculados::model()->find('VIN_IDCLIENTE =' . $CLI_IDCLIENTE . " and VIN_VINCULO =". $CLI_DESVINCULAR);
            $jaVinculado2 = ClientesVinculados::model()->find('VIN_IDCLIENTE =' . $CLI_DESVINCULAR . " and VIN_VINCULO =". $CLI_IDCLIENTE);
            if(empty($jaVinculado->VIN_VINCULO) && empty($javinculado2->VIN_VINCULO)) {
                Yii::app()->user->setFlash('error', 'Estes Prospectos/Clientes não estão vinculados.');
                $this->redirect(array('clientes/view', 'id' => $CLI_IDCLIENTE, 'page' => 'vincular-cliente'));
            }

            $transaction = Yii::app()->db->beginTransaction();
            $commit = true;

            if(!empty($jaVinculado->VIN_VINCULO)) {
                if (!$jaVinculado->delete()) {
                    $commit = false;
                }
            }

            if(!empty($jaVinculado2->VIN_VINCULO)) {
                if (!$jaVinculado2->delete()) {
                    $commit = false;
                }
            }

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

            if ($commit) {
                Yii::app()->user->setFlash('success', 'Prospectos/Clientes desvinculados com sucesso.');
            } else {
                Yii::app()->user->setFlash('error', 'Ocorreu um erro ao salvar, tente novamente.');
            }

            $this->redirect(array('clientes/view', 'id' => $CLI_IDCLIENTE, 'page' => 'vincular-cliente'));
        }

        public function actionCreate() {
            if (isset($_POST['vinculados']) && isset($_POST['IdCliente'])) {
                ClientesVinculados::model()->deleteAll('VIN_IDCLIENTE=:RedId OR VIN_VINCULO=:RedId', array(':RedId'=>$_POST['IdCliente']));
                $clientes = explode(',', $_POST['vinculados']);
                foreach ($clientes as $id_cliente) {
                    $model = new ClientesVinculados;
                    $model->VIN_IDCLIENTE  = $_POST['IdCliente'];
                    $model->VIN_VINCULO  = $id_cliente;
                    $model->save();

                    $model2 = new ClientesVinculados;
                    $model2->VIN_IDCLIENTE  = $id_cliente;
                    $model2->VIN_VINCULO  = $_POST['IdCliente'];
                    $model2->save();
                }
            }
            Yii::app()->user->setFlash('success', 'Prospectos/Clientes vinculados com sucesso.');
            $this->redirect(array('clientes/view', 'id' => $_POST['IdCliente'], 'page' => 'vincular-cliente'));
        }

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


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

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

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

        public function actionDelete($id) {
            if (Yii::app()->getRequest()->getIsPostRequest()) {
                $this->loadModel($id, 'ClientesVinculados')->delete();

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

        public function actionIndex() {
            $dataProvider = new CActiveDataProvider('ClientesVinculados');
            $this->render('index', array(
                'dataProvider' => $dataProvider,
            ));
        }

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

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

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

    }

}