<?php

$Permissoes = User::getUser(true);

if ($Permissoes->FUN_TBL_PROSPECTOS == 1 or
    $Permissoes->FUN_TBL_ATENDIMENTOS == 1 or
    $Permissoes->FUN_TBL_CONTROLE_POSVENDAS == 1 or
    $Permissoes->FUN_TBL_CONTROLE_IMPLANTACAO == 1 or
    in_array($Permissoes->FUN_PRM_PRIVILEGIO, array(1, 7, 11, 20, 21))) {

    class ClientesController extends GxController
    {
        public function actionAdmin()
        {
            $model = new Clientes('search');
            $model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

            if (isset($_GET['Clientes'])) {
                $model->setAttributes($_GET['Clientes']);
            }
            $this->render('admin', array(
                'model' => $model,
                )
            );
        }

        public function actionSavview($id)
        {
            if(User::getUser()->FUN_TBL_ATENDIMENTOS != 1)
            {
                User::blockAction('Você não tem permissão para acessar esta página.');
            }
            $this->render('sav_view', array(
                'model' => $this->loadModel($id, 'Clientes'),
            ));
        }

        public function actionView($id)
        {
            if(User::getUser()->FUN_TBL_PROSPECTOS != 1)
            {
                User::blockAction('Você não tem permissão para acessar esta página.');
            }
            $model = $this->loadModel($id, 'Clientes');
            $arquivo = new Arquivos;
            $arquivo->limitExtension = array('pdf', 'png', 'jpeg', 'jpg');
            if(isset($_POST['Arquivos']) && is_array($_POST['Arquivos'])) {
                $arquivo->scenario = 'contrato';
                $arquivo->setAttributes($_POST['Arquivos']);
                $upload = array(
                    'name'     => $_FILES['Arquivos']['name']['ARQ_ARQUIVO'],
                    'type'     => $_FILES['Arquivos']['type']['ARQ_ARQUIVO'],
                    'tmp_name' => $_FILES['Arquivos']['tmp_name']['ARQ_ARQUIVO'],
                    'error'    => $_FILES['Arquivos']['error']['ARQ_ARQUIVO'],
                    'size'     => $_FILES['Arquivos']['size']['ARQ_ARQUIVO'],
                );
                $arquivo->ARQ_ARQUIVO    = $upload;
                $arquivo->ARQ_MODEL      = 'Clientes';
                $arquivo->ARQ_FOREIGNKEY = $model->CLI_IDCLIENTE;
                if($arquivo->upload() && $arquivo->save()) {
                    $arquivo = new Arquivos;
                    Yii::app()->user->setFlash('success', 'Arquivo salvo com sucesso.');
                } else {
                    Yii::app()->user->setFlash('error', 'Houve um erro ao tentar salvar o arquivo, por favor tente novamente.');
                }
                $this->redirect(array('view', 'id' => $model->CLI_IDCLIENTE,'page' => 'anexar-documentos'));
            }
            $this->render('view', array('model' => $model, 'arquivo' => $arquivo));
        }

        private function proximaVisitaComercial($cliente, $id_usuario, $old_date = false)
        {
            if (strpos($cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL, '-')) {
                $cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL = Util::formatDataBr($cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL);
            }

            $Atendimento = false;
            if ($old_date) {
                $Atendimento = Atendimentos::model()->find("ATD_IDCLIENTE = ".$cliente->CLI_IDCLIENTE." and ATD_TIPO = 'V' and ATD_DTCADASTRO = '".$old_date."' and ATD_SITUACAO = 'A'");
            }
            if (!$Atendimento) {
                $Atendimento = new Atendimentos;
                $Atendimento->validate();
                $Atendimento->ATD_IDCLIENTE      = (int) $cliente->CLI_IDCLIENTE;
                $Atendimento->ATD_DTLANCAMENTO   = date('Y-m-d H:i:s');
                $Atendimento->ATD_IDFUNCIONARIO  = $id_usuario;
                $Atendimento->ATD_IDUSUARIO      = User::getId();
                $Atendimento->ATD_TIPO           = 'V';
                $Atendimento->ATD_DTCADASTRO     = $cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL;
                $Atendimento->ATD_HORAINICIO     = date('H:i').':00';
                $Atendimento->ATD_HORAFINAL      = date("H:i:s", mktime(date('H'), date('i')+1, date('s'), 1, 10, 2012));
                $Atendimento->ATD_TOTALHORAS     = '00:01:00';
                $Atendimento->ATD_IDMOTIVO       = 70;
                $Atendimento->ATD_NIVELINTERESSE = $cliente->CLI_NIVELINTERESSE;
                $Atendimento->ATD_OBS            = 'Lembrete: Entrar em contato nesta data.';
                $Atendimento->ATD_SITUACAO       = 'A';
                $Atendimento->ATD_CONTATO        = $cliente->CLI_CONTATO;
                $Atendimento->save(false, array('ATD_IDCLIENTE', 'ATD_DTLANCAMENTO', 'ATD_IDFUNCIONARIO', 'ATD_IDUSUARIO', 'ATD_TIPO', 'ATD_DTCADASTRO', 'ATD_HORAINICIO', 'ATD_HORAFINAL', 'ATD_TOTALHORAS', 'ATD_IDMOTIVO', 'ATD_NIVELINTERESSE', 'ATD_OBS', 'ATD_SITUACAO', 'ATD_CONTATO'));
                Yii::app()->user->setFlash('info', 'Atendimento código '.$Atendimento->ATD_IDATENDIMENTO.' agendado para o dia '.Util::formatDataBr($Atendimento->ATD_DTCADASTRO).'.');
            } else {
                $atualizacoes = array();
                // data usuário que alterou
                $atualizacoes[] = '<span class="color-atd color-green">Data:</span> '.$Atendimento->ATD_DTCADASTRO.' <span class="color-atd color-blue">para</span> '.$cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL;
                if ($Atendimento->ATD_IDFUNCIONARIO != $id_usuario) {
                    $atendente_old  = Funcionarios::model()->findByPk($Atendimento->ATD_IDFUNCIONARIO);
                    $atendente_new  = Funcionarios::model()->findByPk($id_usuario);
                    $atualizacoes[] = '<span class="color-atd color-green">Vendedor:</span> '.$atendente_old.' <span class="color-atd color-blue">para</span> '.$atendente_new;
                }
                if(empty($Atendimento->ATD_CONTATO) && !empty($cliente->CLI_CONTATO)) {
                    $atualizacoes[] = '<span class="color-atd color-green">Contato:</span> Não informado <span class="color-atd color-blue">para</span> '.$cliente->CLI_CONTATO;
                }
                $Atendimento->ATD_UPDATE = $Atendimento->ATD_UPDATE.'<br /><br />Atualizado em <span class="color-atd color-red">'.date('d/m/Y H:i:s').'</span> por <span class="color-atd color-red">'.User::getName().'</span>:<br />'.implode('<br />', $atualizacoes);

                $old                            = $Atendimento->ATD_DTCADASTRO;
                $Atendimento->ATD_DTCADASTRO    = $cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL;
                $Atendimento->ATD_IDFUNCIONARIO = $id_usuario;
                if(empty($Atendimento->ATD_CONTATO) && !empty($cliente->CLI_CONTATO)) {
                    $Atendimento->ATD_CONTATO = $cliente->CLI_CONTATO;
                }
                $salvo = $Atendimento->save(false, array('ATD_DTCADASTRO', 'ATD_IDFUNCIONARIO', 'ATD_UPDATE', 'ATD_CONTATO'));
                Yii::app()->user->setFlash('info', 'Atendimento código '.$Atendimento->ATD_IDATENDIMENTO.' reagendado do dia '.$old.' para o dia '.Util::formatDataBr($Atendimento->ATD_DTCADASTRO).'.');
            }
            $cliente->updateLastVisitaComercial();
            $cliente->updateLastAtividadeComercial();
            $cliente->updateNextVisitaComercial();
        }

        private function cancelaProximaVisitaComercial($cliente, $old_date)
        {
            if (strpos($cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL, '-')) {
                $cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL = Util::formatDataBr($cliente->CLI_DT_PROXIMA_VISITA_COMERCIAL);
            }

            $Atendimento = false;
            if ($old_date) {
                $Atendimento = Atendimentos::model()->find("ATD_IDCLIENTE = ".$cliente->CLI_IDCLIENTE." and ATD_TIPO = 'V' and ATD_DTCADASTRO = '".$old_date."' and ATD_SITUACAO = 'A'");
            }
            if ($Atendimento) {
                $atualizacoes = array();
                // data usuário que alterou
                $atualizacoes[]          = '<span class="color-atd color-green">Situação:</span> Agendada <span class="color-atd color-blue">para</span> Cancelada';
                $Atendimento->ATD_UPDATE = $Atendimento->ATD_UPDATE.'<br /><br />Atualizado em <span class="color-atd color-red">'.date('d/m/Y H:i:s').'</span> por <span class="color-atd color-red">'.User::getName().'</span>:<br />'.implode('<br />', $atualizacoes);

                $Atendimento->ATD_SITUACAO = 'C';
                $salvo                     = $Atendimento->save(false, array('ATD_SITUACAO', 'ATD_UPDATE'));
                Yii::app()->user->setFlash('info', 'Atendimento código '.$Atendimento->ATD_IDATENDIMENTO.' cancelado.');
            }
            $cliente->updateLastVisitaComercial();
            $cliente->updateLastAtividadeComercial();
            $cliente->updateNextVisitaComercial();
        }

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

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

                $model->CLI_CNPJCPF = str_replace("([^0-9])", "", $model->CLI_CNPJCPF);
                $model->CLI_SITUACAO = 'P';

                if ($model->save()) {
                    if (!empty($model->CLE_EMAIL)) {
                        foreach ($model->CLE_EMAIL as $value) {
                            if (!empty($value)) {
                                $novo_email = new ClientesEmailsAdicionais;
                                $novo_email->CLE_IDCLIENTE = $model->CLI_IDCLIENTE;
                                $novo_email->CLE_EMAIL = $value;
                                $novo_email->save();
                            }
                        }
                    }
                    if ($model->CLI_DT_PROXIMA_VISITA_COMERCIAL != '' && $model->CLI_DT_PROXIMA_VISITA_COMERCIAL != '0000-00-00') {
                        $this->proximaVisitaComercial($model, $model->CLI_IDVENDEDOR);
                    }

                    Yii::app()->user->setFlash('success', 'Prospecto cadastrado com sucesso.');

                    if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                        Yii::app()->end();
                    } else {

                        $this->redirect(array('view', 'id' => $model->CLI_IDCLIENTE));
                    }
                }
            }

            $this->render('create', array('model' => $model, 'bloqueia_edicao_email' => false));
        }

        public function actionPosvendas_View($id)
        {
            if (!User::getUser()->FUN_TBL_CONTROLE_POSVENDAS) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }
            $model = $this->loadModel($id, 'Clientes');

            if (!$model->isAllowed()) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }
            $this->render('posvendas_view', array('model' => $model));
        }
        
        public function actionPosvendas_Admin()
        {
            if (!User::getUser()->FUN_TBL_CONTROLE_POSVENDAS) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }
            $model = new Clientes('searchPosVendas');
            $model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

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

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

        public function actionImplantacao_View($id) {
            if (!User::getUser()->FUN_TBL_CONTROLE_IMPLANTACAO) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }

            $model = $this->loadModel($id, 'Clientes');

            if (!$model->isAllowed()) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }

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

        public function actionImplantacao_Admin() {
            if (!User::getUser()->FUN_TBL_CONTROLE_IMPLANTACAO) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }
            $model = new Clientes('searchImplantacao');
            $model->unsetAttributes();

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

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

        public function actionTrocarStatus($id)
        {
            $cliente = $this->loadModel($id, 'Clientes');
            if(!$cliente->canUpdateStatus()) {
                User::blockAction('Você não tem permissão de atualizar o status deste prospecto/cliente');
            }
            $model = new ClientesSituacoes;
            if (isset($_POST['ClientesSituacoes'])) {
                $model->setAttributes($_POST['ClientesSituacoes']);
                $model->CST_IDCLIENTE = $cliente->CLI_IDCLIENTE;
                $model->CST_DATA = date('Y-m-d H:i:s');
                $model->CST_IDFUNCIONARIO = User::getId();
                if($model->CST_SITUACAO == $cliente->CLI_SITUACAO) {
                    $model->addError('CST_SITUACAO', 'Status informado é o mesmo já presente no prospecto/cliente.');

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

                    if ($model->save()) {
                        $atendimento = new Atendimentos;
                        $atendimento->ATD_IDCLIENTE     = $cliente->CLI_IDCLIENTE;
                        $atendimento->ATD_IDFUNCIONARIO = User::getId();
                        $atendimento->ATD_IDUSUARIO     = User::getId();
                        $atendimento->ATD_DTLANCAMENTO  = date('Y-m-d H:i:s');
                        $atendimento->ATD_DTCADASTRO    = date('d/m/Y');
                        $atendimento->ATD_HORAINICIO    = date('H:i:s');
                        $atendimento->ATD_HORAFINAL     = date('H:i:s', strtotime('+1 minute'));
                        $atendimento->ATD_TOTALHORAS    = '00:01:00';
                        $atendimento->ATD_IDMOTIVO      = $cliente->getMotivoByStatus($model->CST_SITUACAO);
                        $atendimento->ATD_SITUACAO      = 'R';
                        $atendimento->ATD_TIPO          = 'O';
                        $atendimento->ATD_IDMOTIVO_FN    = $model->CST_IDMOTIVO_FN;
                        $atendimento->ATD_AUTOMATICO    = 1;
                        $obs = "ATIVIDADE LANÇADA AUTOMATICAMENTE PELO CRM \r\n \r\n";
                        $obs .= Util::formatUpdatedField(
                            "Status do cliente alterado de",
                            Util::getStatusCliente($cliente->CLI_SITUACAO),
                            Util::getStatusCliente($model->CST_SITUACAO)
                        );
                        $obs .= "\r\nDescrição: \r\n " . $model->CST_DESCRICAO;

                        $atendimento->ATD_OBS = $obs;

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

                        if ($commit) {
                            Yii::app()->user->setFlash('success', 'Status alterado com sucesso.');
                        } else {
                            Yii::app()->user->setFlash('danger', 'Ocorreu um erro, tente novamente.');
                        }

                        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                            Yii::app()->end();
                        } else {
                            if (
                                !in_array(User::getPrivilegio(), array(1, 7, 11)) &&
                                User::getUser()->FUN_PRM_STATUS == 0 &&
                                in_array($model->CST_SITUACAO, ['CV', 'A', 'I', 'PI'])
                            ) {
                                $this->redirect(array('view', 'id' => $model->CST_IDCLIENTE));
                            }
                            $this->redirect(array('trocarStatus', 'id' => $model->CST_IDCLIENTE));
                        }
                    }
                }
            } else {
                $model->CST_SITUACAO = $cliente->CLI_SITUACAO;
                $model->CST_IDMOTIVO_FN = $cliente->CLI_IDMOTIVO_FN;
                $model->CST_IDCLIENTE = $cliente->CLI_IDCLIENTE;
            }
            $this->render('abas/trocar_status', array('model' => $model, 'cliente' => $cliente));
        }

        public function actionPosvendas_Grafico()
        {
            if (!User::getUser()->FUN_TBL_CONTROLE_IMPLANTACAO && !User::getUser()->FUN_TBL_CONTROLE_POSVENDAS) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }

            $model = new Clientes('searchPosVendas');
            $model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

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

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

        public function actionPosvendas_Relatorio()
        {
            if (!User::getUser()->FUN_TBL_CONTROLE_IMPLANTACAO && !User::getUser()->FUN_TBL_CONTROLE_POSVENDAS) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }
            $model = new Clientes('searchRelatorioPosVendas');
            $model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

            if (isset($_GET['Clientes'])) {
                $model->setAttributes($_GET['Clientes']);
            }

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

        public function actionPosvendas_Excel()
        {
            if (!User::getUser()->FUN_TBL_CONTROLE_IMPLANTACAO && !User::getUser()->FUN_TBL_CONTROLE_POSVENDAS) {
                User::blockAction("Você não tem permissão para acessar esta tela");
            }
            $model = new Clientes('searchRelatorioPosVendas');
            if (isset($_GET['Clientes'])) {
                $model->setAttributes($_GET['Clientes']);
            }
            $search = $model->searchRelatorioPosVendas();
            $dataProvider = $model->searchRelatorioPosVendas($search->totalItemCount);

            $data = $dataProvider->getData();
            Yii::app()->request->sendFile(
                'relatorio-pos-vendas-'. date('Ymd-His') . '.xlsx',
                $this->renderPartial('posvendas_excel', array(
                    'model' => $model,
                    'data' => $data,
                ), true),
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true
            );
        }

        public function actionCancelamentos_Grafico()
        {
            $model = new Clientes('searchCancelamentos');
            $model->unsetAttributes();
            if (isset($_POST['Clientes'])) {
                $model->setAttributes($_POST['Clientes']);
            }

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

        public function actionCancelamentos_Relatorio()
        {
            $model = new Clientes('searchCancelamentos');
            $model->unsetAttributes();
            if (isset($_POST['Clientes'])) {
                $model->setAttributes($_POST['Clientes']);
            }

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

        public function actionCancelamentos_Excel()
        {
            $model = new Clientes('searchCancelamentos');
            if (isset($_GET['Clientes'])) {
                $model->setAttributes($_GET['Clientes']);
            }

            $search = $model->searchCancelamentos();
            $dataProvider = $model->searchCancelamentos($search->totalItemCount);

            $data = $dataProvider->getData();
            Yii::app()->request->sendFile(
                'relatorio-cancelamentos-'. date('Ymd-His') . '.xlsx',
                $this->renderPartial('cancelamentos_excel', array(
                    'model' => $model,
                    'data' => $data,
                ), true),
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true
            );
        }

        public function actionVincular($INT_CODIGO, $CLI_VINCULAR)
        {
            if (isset($INT_CODIGO) and isset($CLI_VINCULAR)) {
                $Interessados = $this->loadModel($INT_CODIGO, 'Interessados');
                $model        = $this->loadModel($CLI_VINCULAR, 'Clientes');

                if (!$Interessados->isAllowed()) {
                    User::blockAction('Este interessado não pertence a sua região ou Unidade de negócios');
                }

                if (!$model->isAllowed()) {
                    User::blockAction('Este cliente não pertence a sua região ou Unidade de negócios');
                }

                if(!empty($Interessados->INT_IDPROSPECTO)) {
                    Yii::app()->user->setFlash('error', 'Não é possível realizar esta ação.');
                    $this->redirect(array('clientes/view', 'id' => $Interessados->INT_IDPROSPECTO));
                }
                $allow = false;
                if (in_array($Interessados->INT_TIPO, ["P", "O"])) {
                    $allow = in_array($model->CLI_SITUACAO, array_keys(Util::getStatusClienteList(array("I", "A", "PI"))));
                } elseif ($Interessados->INT_TIPO == "C") {
                    $allow = $model->CLI_TIPOPESSOA == "C";
                } else {
                    $allow = $Interessados->INT_TIPO == $model->CLI_SITUACAO;
                }
                if (!$allow) {
                    Yii::app()->user->setFlash('error', 'Somente é possível vincular interessados a clientes com a mesmo status do interessado, ou seja, interessados do tipo prospecto com prospectos, do tipo cliente ativo com clientes ativos e do tipo cliente inativo com cliente inativos.');
                    $this->redirect(array('interessados/view', 'id' => $Interessados->INT_CODIGO));
                }

                $Interessados->vinculado($CLI_VINCULAR);

                $model3 = new Atendimentos;
                $model3->validate();
                $model3->ATD_IDCLIENTE     = $model->CLI_IDCLIENTE;
                $model3->ATD_IDFUNCIONARIO = User::getId();
                $model3->ATD_IDUSUARIO     = User::getId();
                $model3->ATD_DTLANCAMENTO  = date('Y-m-d H:i:s');
                $model3->ATD_DTCADASTRO    = date('d/m/Y');
                $model3->ATD_HORAINICIO    = date('H:i:s');
                $model3->ATD_HORAFINAL     = date('H:i:s', strtotime('+1 minute'));
                $model3->ATD_TOTALHORAS    = '00:01:00';
                $model3->ATD_IDMOTIVO      = (!empty($model->CLI_IDMOTIVO)?$model->CLI_IDMOTIVO:70);
                $model3->ATD_SITUACAO      = 'R';
                $model3->ATD_TIPO          = 'O';
                $model3->ATD_AUTOMATICO    = 1;
                $model3->ATD_CONTATO       = $Interessados->INT_NOME;
                $model3->ATD_OBS           = "ATIVIDADE LANÇADA AUTOMATICAMENTE PELO CRM \r\n \r\n Interessado $Interessados->INT_CODIGO vinculado a prospecto / cliente nesta data. \r\n Usuário que cadastrou o interessado: $Interessados->Usuario \r\n Data de cadastro do interessado: $Interessados->INT_DATA \r\n \r\n Observações registradas sobre o interessado: \r\n $Interessados->INT_OBSERVACOES";
                $model3->save(false, array('ATD_DTLANCAMENTO', 'ATD_TIPO', 'ATD_IDMOTIVO', 'ATD_DTCADASTRO', 'ATD_HORAINICIO', 'ATD_HORAFINAL', 'ATD_TOTALHORAS', 'ATD_IDFUNCIONARIO', 'ATD_SITUACAO', 'ATD_IDCLIENTE', 'ATD_OBS', 'ATD_AUTOMATICO', 'ATD_IDUSUARIO', 'ATD_CONTATO'));
                Yii::app()->user->setFlash('success', 'Interessado código '.$Interessados->INT_CODIGO.' vinculado a prospecto / cliente código '.$model->CLI_IDCLIENTE.' com sucesso.');
                $this->redirect(array('view', 'id' => $model->CLI_IDCLIENTE));
            }
        }

        public function actionImport($id)
        {
            $model        = new Clientes;
            $Interessados = $this->loadModel($id, 'Interessados');

            if ($Interessados->INT_IDPROSPECTO != 0) {
                Yii::app()->user->setFlash('error', 'Não é possível realizar esta ação.');
                $this->redirect(array('clientes/view&id='.$Interessados->INT_IDPROSPECTO));
            }

            if (!$Interessados->isAllowed()) {
                User::blockAction('Este interessado não pertence a sua região ou Unidade de negócios');
            }

            if (!in_array($Interessados->INT_TIPO, ["C", "P", "O"])) {
                $tipo = $Interessados->INT_TIPO == 'A'?'ativo':'inativo';

                Yii::app()->user->setFlash('error', 'Este interessado é do tipo cliente '.$tipo.', o mesmo não pode ser transformado em prospecto, somente pode ser vinculado a um cliente '.$tipo.'.');
                $this->redirect(array('interessados/view', 'id' => $Interessados->INT_CODIGO));
            }

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

                $OBS = $model->CLI_OBS;
                $model->CLI_OBS = '';

                $model->CLI_CNPJCPF = str_replace("([^0-9])", "", $model->CLI_CNPJCPF);
                $model->CLI_SITUACAO = 'P';
                if ($model->save()) {
                    if ($model->CLI_DT_PROXIMA_VISITA_COMERCIAL != '' && $model->CLI_DT_PROXIMA_VISITA_COMERCIAL != '0000-00-00') {
                        $this->proximaVisitaComercial($model, $model->CLI_IDVENDEDOR);
                    }
                    $Interessados->transformado($model->CLI_IDCLIENTE);

                    $model3 = new Atendimentos;
                    $model3->validate();
                    $model3->ATD_IDCLIENTE     = $model->CLI_IDCLIENTE;
                    $model3->ATD_IDFUNCIONARIO = User::getId();
                    $model3->ATD_IDUSUARIO     = User::getId();
                    $model3->ATD_DTLANCAMENTO  = date('Y-m-d H:i:s');
                    $model3->ATD_DTCADASTRO    = date('d/m/Y');
                    $model3->ATD_HORAINICIO    = date('H:i:s');
                    $model3->ATD_HORAFINAL     = date('H:i:s', strtotime('+1 minute'));
                    $model3->ATD_TOTALHORAS    = '00:01:00';
                    $model3->ATD_IDMOTIVO      = (!empty($model->CLI_IDMOTIVO)?$model->CLI_IDMOTIVO:70);
                    $model3->ATD_SITUACAO      = 'R';
                    $model3->ATD_TIPO          = 'O';
                    $model3->ATD_AUTOMATICO    = 1;
                    $model3->ATD_CONTATO       = $model->CLI_CONTATO;
                    if(empty($model3->ATD_CONTATO)) {
                        $model3->ATD_CONTATO = $Interessados->INT_NOME;
                    }
                    $model3->ATD_OBS           = "ATIVIDADE LANÇADA AUTOMATICAMENTE PELO CRM \r\n \r\n Interessado ".$Interessados->INT_CODIGO." convertido em prospecto. \r\n Usuário que cadastrou o interessado: ".$Interessados->Usuario."\r\n Data de cadastro do interessado: ".$Interessados->getData('d/m/Y H:i:s')."\r\n \r\n Observações registradas sobre o interessado: \r\n".$Interessados->INT_OBSERVACOES;
                    $model3->save(false, array('ATD_DTLANCAMENTO', 'ATD_TIPO', 'ATD_IDMOTIVO', 'ATD_DTCADASTRO', 'ATD_HORAINICIO', 'ATD_HORAFINAL', 'ATD_TOTALHORAS', 'ATD_IDFUNCIONARIO', 'ATD_SITUACAO', 'ATD_IDCLIENTE', 'ATD_OBS', 'ATD_CONTATO', 'ATD_AUTOMATICO', 'ATD_IDUSUARIO'));

                    Yii::app()->user->setFlash('success', 'Interessado convertido em prospecto com sucesso.');

                    if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                        Yii::app()->end();
                    } else {

                        $this->redirect(array('view', 'id' => $model->CLI_IDCLIENTE));
                    }
                }
            }
            $this->render('create', array('model' => $model, 'Interessado' => $id));
        }

        public function actionUpdatedatas($id)
        {
            $model = $this->loadModel($id, 'Clientes');
            $old   = $this->loadModel($id, 'Clientes');
            if (User::isAdmin() or User::getPrivilegio() == 7 || (User::getPrivilegio() == 11 and User::canUpdate())) {
                if (isset($_POST['Clientes'])) {
                    $model->setAttributes($_POST['Clientes']);

                    if ($model->save(false, array('CLI_DTATIVACAO', 'CLI_DTCONTRATO'))) {
                        $this->camposEditadosCliente($model, $old);

                        Yii::app()->user->setFlash('success', 'Dados alterados com sucesso.');
                        $this->redirect(array('view', 'id' => $model->CLI_IDCLIENTE, 'page' => 'produto'));
                    }
                }
                $this->render('updatedatas', array('model' => $model));
            } else {
                Yii::app()->user->setFlash('error', 'Você não tem permissão para executar esta ação');
                $this->redirect(array('view', 'id' => $model->CLI_IDCLIENTE, 'page' => 'produto'));
            }
        }

        public function actionUpdate($id)
        {
            $model            = $this->loadModel($id, 'Clientes');
            $old              = $this->loadModel($id, 'Clientes');
            $OLD_DTPROXVISITA = Util::formatDataMysql($model->CLI_DT_PROXIMA_VISITA_COMERCIAL);
            $Save             = false;

            $id_motivos = array(1, 3, 4, 6, 7, 8, 10, 11, 15, 21);
            $motivos_array = implode(", ", $id_motivos);
            $bloqueia_edicao_email = Contratos::model()->exists('COT_IDCLIENTE = '.$id.' AND COT_STATUS IN ('.$motivos_array.')');

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

                $model->CLI_CNPJCPF = @preg_replace("([^0-9])", "", $model->CLI_CNPJCPF);

                if (!in_array(User::getPrivilegio(), [1, 7, 11]) && in_array($model->CLI_SITUACAO, ['A', 'I'])) {
                    $camposPermitidos = array(
                        'CLI_IDVENDEDOR',
                        'CLI_IDCONTADOR',
                        'CLI_CONTATO',
                        'CLI_POSSUIEMAIL',
                        'CLI_EMAIL',
                        'CLI_EMAIL_AREA_CLIENTES',
                        'CLE_EMAIL',
                        'CLI_HOMEPAGE',
                        'CLI_FONE1',
                        'CLI_FONE2',
                        'CLI_FONE3',
                        'CLI_FAX',
                        'CLI_DT_PROXIMA_VISITA_COMERCIAL',
                        'CLI_OBS'
                    );

                    $camposIgnorar = array_diff(array_keys($model->attributes), $camposPermitidos);
                    foreach ($camposIgnorar as $ignorar) {
                        $model->{$ignorar} = $old->{$ignorar};
                    }
                }

                $model->isNewRecord = false;
                $Save = $model->save();
                if ($Save) {
                    if (!empty($model->CLE_EMAIL)) {
                        $emailsAdicionais = array();
                        if (!empty($model->ClientesEmailsAdicionais)) {
                            $emailsAdicionais = CHtml::listData(
                                $model->ClientesEmailsAdicionais,
                                'CLE_EMAIL',
                                'CLE_EMAIL'
                            );
                        }
                        foreach ($model->CLE_EMAIL as $value) {
                            if (!empty($value) && !in_array($value, $emailsAdicionais)) {
                                $novo_email = new ClientesEmailsAdicionais;
                                $novo_email->CLE_IDCLIENTE = $model->CLI_IDCLIENTE;
                                $novo_email->CLE_EMAIL = $value;
                                $novo_email->save();
                            }
                        }
                    }
                }

                if ($Save == true) {
                    $this->camposEditadosCliente($model, $old);

                    Yii::app()->user->setFlash('success', 'Dados do cliente atualizados com sucesso.');
                    if ($model->CLI_DT_PROXIMA_VISITA_COMERCIAL != $OLD_DTPROXVISITA) {
                        if ($model->CLI_DT_PROXIMA_VISITA_COMERCIAL != '') {
                            $id_vendedor = $model->CLI_IDVENDEDOR;
                            if (User::isVendedor()) {
                                $id_vendedor = User::getId();
                            }
                            $this->proximaVisitaComercial($model, $id_vendedor, $OLD_DTPROXVISITA);
                        } else {
                            $this->cancelaProximaVisitaComercial($model, $OLD_DTPROXVISITA);
                        }
                    }
                    $this->redirect(array('view', 'id' => $model->CLI_IDCLIENTE));
                }
            } elseif (!empty($model->ClientesEmailsAdicionais)) {
                foreach ($model->ClientesEmailsAdicionais as $key => $email) {
                    $model->CLE_EMAIL[$key+1] = $email->CLE_EMAIL;
                }
            }

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

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

                if (!Yii::app()->getRequest()->getIsAjaxRequest()) {
                    $this->redirect(array('admin'));
                }
            } else {

                throw new CHttpException(400, 'Sua solicitação é inválida.');
            }
        }

        public function actionRelatorioClientes()
        {
            $model = new Clientes('search');
            $model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

            if (isset($_GET['Clientes'])) {
                $model->setAttributes($_GET['Clientes']);
            }

            if (isset($_GET['exportar']) && $_GET['exportar'] == 1) {

                if (isset($_GET['format'])){
                    $this->actionExportEmails($model, $_GET['format']);
                } else {
                    $this->actionGenerateExcel($model);
                }
            }

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

        public function actionGenerateExcel($model = false)
        {
            if ($model == false) {
                $model = new Clientes('search');
                if (isset($_GET['Clientes'])) {
                    $model->setAttributes($_GET['Clientes']);
                }
            }

            $search = $model->search();
            $dataProvider = $model->search($search->totalItemCount);

            if ($dataProvider === false) {
                throw new CHttpException(400, 'Sua solicitação é inválida. Você não definiu nenhum critério de busca ou seus critérios expiraram por terem sido gerados há mais de 60 minutos');
            }
            $data = $dataProvider->getData();

            Yii::app()->request->sendFile(
                'relatorio-prospectos-clientes-'. date('Ymd-His') . '.xlsx',
                $this->renderPartial('excelReport', array(
                    'dataProvider' => $dataProvider,
                    'data' => $data
                ), true),
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true
            );
        }

        public function actionExportEmails($model = false, $format = false)
        {
            if($model == false){
                $model = new Clientes('search');
            }
            if (!$format || !in_array($format, array('txt', 'csv'))) {
                throw new CHttpException(400, 'Formato não especificado ou inválido.');
            }

            $search = $model->search();
            $dataProvider = $model->search($search->totalItemCount);

            if ($dataProvider === false) {
                throw new CHttpException(400, 'Sua solicitação é inválida. Você não definiu nenhum critério de busca ou seus critérios expiraram por terem sido gerados há mais de 60 minutos');
            }

            $data = $dataProvider->getData();

            Yii::app()->request->sendFile('emails-prospectos-clientes-'.date('d-m-Y-H-i-s').'.'.$format,
                                          $this->renderPartial('export_emails',
                                          array('dataProvider' => $dataProvider,
                                                'data' => $data,
                                                'format' => $format), true));
        }

        public function actionTelefonista()
        {
            $model = new Clientes('search');
            $model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

            if (isset($_GET['Clientes']))
                $model->setAttributes($_GET['Clientes']);
            $model->CLI_SITUACAO = array('A', 'I', 'FP');

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

        public function actionSavadmin()
        {
            $model = new Clientes('search');
            $model->unsetAttributes();

            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }

            if (isset($_GET['Clientes'])){
                $model->setAttributes($_GET['Clientes']);
            }

            if (isset($_GET['exportar']) && $_GET['exportar'] == 1) {
                $this->actionExportEmails($model, $_GET['format']);
            }

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

        public function actionVerDados($CLI_IDCLIENTE, $campo)
        {
            $Cliente = $this->loadModel($CLI_IDCLIENTE, 'Clientes');
            if ($campo == 'CLI_CONTATO') {
                echo $Cliente->CLI_CONTATO;
            }
            if ($campo == 'CLI_EMAIL') {
                echo $Cliente->CLI_EMAIL;
            }
            if ($campo == 'CLI_IDVERSAO') {
                if (!empty($Cliente->CLI_IDVERSAO)) {
                    $retorno['versao'] = $Cliente->CLI_IDVERSAO;
                    $retorno['projeto'] = $Cliente->Versao->Projetos[0]->PRO_IDPROJETO;

                    echo CJSON::encode($retorno);
                }
            }
        }

        public function actionSolicitarSenha($id)
        {
            if (in_array(User::getPrivilegio(), [1, 6, 7, 16, 19, 20])) {
                $cliente = $this->loadModel($id, 'Clientes');
                if ($cliente->temAcessoAreaClientes()) {
                    $senha = filter_input(INPUT_POST, 'senha');
                    $confirmacao = filter_input(INPUT_POST, 'confirmacaoSenha');
                    if (isset($senha) && isset($confirmacao)) {
                        if ($senha == $confirmacao) {
                            $transaction = Yii::app()->db->beginTransaction();
                            $commit = true;

                            $cliente->CLI_SENHA = password_hash($senha, PASSWORD_DEFAULT);
                            if ($cliente->save(false, ['CLI_SENHA'])) {
                                if (!$cliente->registraAtendimentoSolicitacaoSenha('email')) {
                                    $commit = false;
                                }
                            } else {
                                $commit = false;
                            }

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

                            if ($commit) {
                                Yii::app()->user->setFlash('success', 'Senha alterada com sucesso!');
                            } else {
                                Yii::app()->user->setFlash('error', 'Ocorreu um erro ao salvar!');
                            }
                        } else {
                            Yii::app()->user->setFlash('error', 'As senhas não conferem!');
                        }
                    }

                    $token = Tokens::model()->find("user_id = {$id} AND used = 0 AND created AND (created BETWEEN NOW() - INTERVAL 1 DAY AND NOW())");
                    if (!$token) {
                        $token = new Tokens;

                        $token->user_id = $id;
                        $token->type  = "reset_pwd";
                        $token->generateKey();
                        $token->content = " ";
                        $token->used = 0;
                        $token->unlimited = 0;
                        $token->created = date('Y-m-d H:i:s');
                        $token->modified = date('Y-m-d H:i:s');
                        if (!$token->save()) {
                            throw new CHttpException(400, 'Ocorreu um erro na solicitação!');
                        }
                    }

                    $this->render('solicitar_senha', array(
                        'cliente' => $cliente,
                        'token' => $token
                    ));
                } else {
                    User::blockAction('O cliente informado não tem acesso a área do cliente!');
                }
            } else {
                User::blockAction('Você não tem permissão para acessar esta página.');
            }
        }

        public function actionEnviarEmailSenha()
        {
            if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                $idCliente = $_POST['cliente'];

                $cliente = Clientes::model()->findByPk($idCliente);
                $token = $this->actionGetTokenAreaDoCliente($idCliente, true);
                if ($cliente && $token) {
                    $enviou = MailTemplates::solicitacaoSenhaCliente($cliente, $token);
                    if ($enviou) {
                        if ($cliente->registraAtendimentoSolicitacaoSenha('email')) {
                            echo "sucesso";
                        } else {
                            echo "erro";
                        }
                    } else {
                        echo "erro";
                    }
                } else {
                    throw new CHttpException(400, 'Sua solicitação é inválida.');
                }
            } else {
                throw new CHttpException(400, 'Sua solicitação é inválida.');
            }
        }

        public function actionGetTokenAreaDoCliente($id, $interno = false)
        {
            if (Yii::app()->getRequest()->getIsAjaxRequest() || $interno) {
                $cliente = Clientes::model()->findByPk($id);
                if ($cliente) {
                    $transaction = Yii::app()->db->beginTransaction();
                    $commit = true;

                    $token = Tokens::model()->find("user_id = {$id} AND used = 0 AND created AND (created BETWEEN NOW() - INTERVAL 1 DAY AND NOW())");
                    if (!$token) {
                        $token = new Tokens;

                        $token->user_id = $id;
                        $token->type  = "reset_pwd";
                        $token->generateKey();
                        $token->content = " ";
                        $token->used = 0;
                        $token->unlimited = 0;
                        $token->created = date('Y-m-d H:i:s');
                        $token->modified = date('Y-m-d H:i:s');
                        if (!$token->save()) {
                            $commit = false;
                        }
                    }

                    if (!$interno) {
                        if (!$cliente->registraAtendimentoSolicitacaoSenha('link')) {
                            $commit = false;
                        }
                    }

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

                    if ($commit) {
                        if (!$interno) {
                            echo $token->getLinkRecuperacao();
                        } else {
                            return $token;
                        }
                    } else {
                        if (!$interno) {
                            throw new CHttpException(400, 'Ocorreu um erro na solicitação!');
                        } else {
                            return false;
                        }
                    }
                } else {
                    if (!$interno) {
                        throw new CHttpException(400, 'Sua solicitação é inválida.');
                    } else {
                        return false;
                    }
                }
            } else {
                throw new CHttpException(400, 'Sua solicitação é inválida.');
            }
        }

        public function actionAcessarCliente($id)
        {

            if (in_array(User::getPrivilegio(), [1, 6, 7, 16, 19, 20])) {

                $cliente = $this->loadModel($id, 'Clientes');
                if ($cliente->temAcessoAreaClientes()) {

                    $atendimento = new Atendimentos;
                    $atendimento->scenario = 'acessar_cliente';

                    if (isset($_POST['Atendimentos'])) {

                        $crypt = new Encryption;
                        $initializationVector = uniqid(160);

                        $cliente->CLI_INITIALIZATION_VECTOR = $initializationVector;
                        $cliente->save(false, array('CLI_INITIALIZATION_VECTOR'));

                        $cryptAccess = $crypt->encrypt($initializationVector, $cliente->CLI_CNPJCPF);

                        $atendimento->saveAtdAcessoCliente($cliente->CLI_IDCLIENTE, $_POST['Atendimentos']['ATD_OBS']);

                        $this->redirect(URL_AREA_CLIENTES."/loginCrm/".$cryptAccess."/".$initializationVector);

                    } else {
                        $this->render('acessar_cliente', array('cliente' => $cliente,
                                                               'atendimento' => $atendimento,
                                                              ));
                    }

                } else {
                    User::blockAction('O cliente informado não tem acesso a área do cliente!');
                }
            } else {
                User::blockAction('Você não tem permissão para acessar esta página.');
            }
        }

        public function actionConsultaCnpj($cnpj, $dias = 30)
        {
            $cnpj = Util::unmask($cnpj);
            if (Util::isCnpj($cnpj)) {
                $client = new GuzzleHttp\Client;

                $continue = true;
                $message = false;
                $message2 = false;
                try {
                    $response = $client->request(
                        'GET',
                        "https://www.receitaws.com.br/v1/cnpj/{$cnpj}/days/{$dias}",
                        [
                            'timeout' => ($dias > 0) ? 50 : 120,
                            'connect_timeout' => ($dias > 0) ? 50 : 120,
                            'headers' => [
                                'Authorization' => 'Bearer b176e10345e17ad4b853fd9c7ccf1b4ca298236ca9cdddf847f7987c52d876e2'
                            ]
                        ]
                    );
                } catch (GuzzleHttp\Exception\ConnectException $e) {
                    try {
                        $response = $client->request(
                            'GET',
                            "https://www.receitaws.com.br/v1/cnpj/{$cnpj}/days/0",
                            [
                                'timeout' => ($dias > 0) ? 50 : 120,
                                'connect_timeout' => ($dias > 0) ? 50 : 120,
                                'headers' => [
                                    'Authorization' => 'Bearer b176e10345e17ad4b853fd9c7ccf1b4ca298236ca9cdddf847f7987c52d876e2'
                                ]
                            ]
                        );
                    } catch (GuzzleHttp\Exception\ConnectException $e) {
                        $message = "Erro: Tempo máximo de requisição excedido, tente novamente.";
                        if(User::isAdmin()) {
                            $message .= "<br /><br /><b>Mais informações: </b>{$e->getMessage()}";
                        }
                        $continue = false;
                    } catch (GuzzleHttp\Exception\ServerException $e) {
                        $message = "Erro: O servidor ainda está processando a consulta, tente novamente em alguns instantes.";
                        if(User::isAdmin()) {
                            $message .= "<br /><br /><b>Mais informações: </b>{$e->getMessage()}";
                        }
                        $continue = false;
                    } catch (Exception $e) {
                        $continue = false;
                        $message = "Ocorreu um erro na consulta!";
                        if(User::isAdmin()) {
                            $message .= "<br /><br /><b>Mais informações: </b>{$e->getMessage()}";
                        }
                        $message2 = $e->getMessage();
                    }
                } catch (GuzzleHttp\Exception\ServerException $e) {
                    $message = "Erro: O servidor ainda está processando a consulta, tente novamente em alguns instantes.";
                    if(User::isAdmin()) {
                        $message .= "<br /><br /><b>Mais informações: </b>{$e->getMessage()}";
                    }
                    $continue = false;
                } catch (Exception $e) {
                    $continue = false;
                    $message = "Ocorreu um erro na consulta!";
                    if(User::isAdmin()) {
                        $message .= "<br /><br /><b>Mais informações: </b>{$e->getMessage()}";
                    }
                }

                if ($continue && $response->getStatusCode() == 200) {
                    $json = (string) $response->getBody();

                    $dados = CJSON::decode($json);

                    $dados['atualizacao_antiga'] = false;

                    $dataAtualizacao = new DateTime($dados['ultima_atualizacao']);
                    if ($dataAtualizacao) {
                        $dataAtual = DateTime::createFromFormat('d/m/Y', date('d/m/Y'));

                        $diff = $dataAtual->diff($dataAtualizacao);
                        $meses = $diff->m + ($diff->y * 12);
                        $dias = $diff->d + ($meses * 30);
                        if ($dias > 7) {
                            $dados['atualizacao_antiga'] = true;
                        }
                    }

                    $json = CJSON::encode($dados);

                    $registroConsulta = new ConsultasCnpj;

                    $registroConsulta->CPJ_DOCUMENTO = $cnpj;
                    $registroConsulta->CPJ_JSON = $json;
                    $registroConsulta->CPJ_TIPO_CONSULTA = $dados['billing']['database'];
                    $registroConsulta->CPJ_DATA_CONSULTA = date('Y-m-d H:i:s');
                    $registroConsulta->CPJ_DATA_ATUALIZACAO = date("Y-m-d H:i:s", strtotime($dados['ultima_atualizacao']));
                    $registroConsulta->save();

                    die($json);
                } else {
                    if (!$message) {
                        $message = "Ocorreu um erro na consulta!";
                    }
                }
            } else {
                $message = "CNPJ Inválido!";
            }
            $return = ['status' => 'ERROR', 'message' => $message];
            echo CJSON::encode($return);
        }

        public function actionGetOpcoesIndicacao()
        {
            if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                $term = filter_input(INPUT_GET, 'term', FILTER_DEFAULT);
                $field = filter_input(INPUT_GET, 'field', FILTER_DEFAULT);
                $id = filter_input(INPUT_GET, 'id', FILTER_DEFAULT);
                $tiposSelecionados = filter_input(INPUT_GET, 'tiposSelecionados', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
                if (!$tiposSelecionados) {
                    $tiposSelecionados[] = filter_input(INPUT_GET, 'tiposSelecionados', FILTER_DEFAULT);
                }

                $term         = Util::secureForSelect($term);
                $term_decoded = Util::secureForSelect($term, true);

                $conditions = array();

                $like = array();
                $like[] = "CLI_NOME LIKE '%{$term}%'";
                $like[] = "CLI_NOME LIKE '%{$term_decoded}%'";
                $like[] = "CLI_FANTASIA LIKE '%{$term}%'";
                $like[] = "CLI_FANTASIA LIKE '%{$term_decoded}%'";

                $conditions[] = '(' . implode(' OR ', $like) . ')';

                if (
                    !empty($tiposSelecionados) &&
                    (
                        in_array('todos', $tiposSelecionados) ||
                        in_array(51, $tiposSelecionados) ||
                        in_array(52, $tiposSelecionados) ||
                        in_array(53, $tiposSelecionados) ||
                        in_array(71, $tiposSelecionados)
                    )
                ) {
                    $tipos = array();
                    foreach ($tiposSelecionados as $tipo) {
                        if (in_array($tipo, ['todos', 51, 52, 53, 71])) {
                            if ($tipo == 51) {
                                $tipos = array_merge($tipos, ["F", "J", "R"]);
                            } elseif ($tipo == 52) {
                                $tipos = array_merge($tipos, ["C"]);
                            } elseif ($tipo == 53) {
                                $tipos = array_merge($tipos, ["E", "S", "P", "F", "J"]);
                            } elseif ($tipo == 71) {
                                $tipos = array_merge($tipos, ["F", "J", "R"]);
                            } else {
                                $tipos = array_merge($tipos, ["F", "J", "R", "C", "E", "S", "P"]);
                            }
                        }
                    }
                    $tipos = implode("', '", $tipos);
                    $conditions[] = "CLI_TIPOPESSOA IN ('{$tipos}')";
                } else {
                    echo json_encode([]);
                    die;
                }

                if ($tiposSelecionados == 71 || $tiposSelecionados == [71]) {
                    $conditions[] = "CLI_SITUACAO = 'A'";
                } elseif ($tiposSelecionados == 51 || $tiposSelecionados == [51]) {
                    $conditions[] = "CLI_SITUACAO IN ('A', 'I', 'AI')";
                }

                $clientes = Clientes::model()->findAll(
                    array(
                        'condition' => implode(' AND ', $conditions),
                        'limit' => 50,
                        'order' => $field,
                        'select' => $id ? 't.*' : $field,
                        'distinct' => ($id) ? false : true,
                    )
                );
                $list = array();

                if($id) {
                    foreach ($clientes as $key => $cliente) {
                        $list[] = array(
                            'id' => $cliente->{$id},
                            'text' => $cliente->{$field} . ($id ? ' (' . $cliente->Cidade . ' - ' . $cliente->Cidade->CID_UF . ')' : ''),
                        );
                    }
                    echo CJSON::encode($list);
                } else {
                    foreach ($clientes as $key => $cliente) {
                        $list[] = '"'.$cliente->{$field}.'"';
                    }

                    echo "[" . implode(',', $list) . "]";
                }

                Yii::app()->end();
            } else {
                throw new CHttpException(400, 'Sua solicitação é inválida.');
            }
        }
        public function actionLoadDadosCliente()
        {
            if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                $codCliente = filter_input(INPUT_POST, 'id');
                $cliente = Clientes::model()->findByPk($codCliente);

                $retorno = array(
                    'valor' => '',
                    'produto' => '',
                    'usuarios' => '',
                    'revenda' => '',
                    'vendedor' => '',
                    'motivo' => '',
                    'data_contratacao' => '',
                    'data_rescisao' => '',
                );
                if ($cliente) {

                    if (!empty($cliente->CLI_VLRMENSAL)) {
                        $retorno['valor'] = Util::formatMoeda($cliente->CLI_VLRMENSAL);
                    }

                    if (!empty($cliente->CLI_PRODUTO)) {
                        $retorno['produto'] = $cliente->CLI_PRODUTO;
                    }

                    if (!empty($cliente->CLI_QTDUSUARIOS)) {
                        $retorno['usuarios'] = $cliente->CLI_QTDUSUARIOS;
                    }

                    $revenda = $cliente->getRevendaResponsavel2();
                    $retorno['revenda'] = $revenda->REV_IDREVENDA;

                    $retorno['vendedor'] = $cliente->CLI_IDVENDEDOR;
                    if (!empty($cliente->CLI_IDRESCISAO)) {
                        $retorno['motivo'] = $cliente->CLI_IDRESCISAO;
                    }
                    $retorno['data_contratacao'] = $cliente->CLI_DTCONTRATO;
                    if (!empty($cliente->CLI_DTRESCISAO)) {
                        $retorno['data_rescisao'] = $cliente->CLI_DTRESCISAO;
                    }

                }

                echo json_encode($retorno);
            } else {
                throw new CHttpException(400, 'Sua solicitação é inválida.');
            }
        }
        public function actionAtualizacaoAutomatica($id, $retorno = "view")
        {
            $model = $this->loadModel($id, 'Clientes');
            if ($model->podeAlterarAtualizacaoAutomatica()) {
                $model->CLI_ATUALIZACAO_AUTOMATICA = $model->CLI_ATUALIZACAO_AUTOMATICA ? 0 : 1;
                if ($model->save(false, ['CLI_ATUALIZACAO_AUTOMATICA'])) {
                    Yii::app()->user->setFlash('success', 'Cliente atualizado com sucesso!');
                } else {
                    Yii::app()->user->setFlash('success', 'Erro ao salvar!');
                }
                $this->redirect(array($retorno, 'id' => $model->CLI_IDCLIENTE, 'page' => 'produto'));
            } else {
                throw new CHttpException(400, 'Sua solicitação é inválida.');
            }
        }

        private function camposEditadosCliente($model, $old)
        {
            $model = $this->loadModel($model->CLI_IDCLIENTE, 'Clientes');
            if ($campos = $model->getCamposEditados($old)) {
                $model->atendimentoEdicaoCliente($old);

                if ($campos) {
                    $teve_atualizacao = false;
                    $atualizacoes = array();
                    foreach ($campos as $campo) {
                        $nome_campo = $campo['nome'];
                        $edicao = new LogsEdicao();

                        $edicao->LOG_MODEL = "Clientes";
                        $edicao->LOG_FOREIGNKEY = $model->CLI_IDCLIENTE;
                        $edicao->LOG_CAMPO = $nome_campo;
                        $edicao->LOG_VALOR_ANTERIOR = $old->{$nome_campo};
                        $edicao->LOG_VALOR_ATUALIZADO = $model->{$nome_campo};
                        if (in_array($model->CLI_SITUACAO, ['A', 'I'])) {
                            $edicao->LOG_SINCRONIZACAO = 1;
                        }

                        $edicao->save();

                        unset($edicao);

                        $lista_campos = array('CLI_TIPOPESSOA','CLI_NOME','CLI_FANTASIA','CLI_CNPJCPF','CLI_INSCR_EST', 
                            'CLI_SIMPLES','CLI_ENDERECO','CLI_NUMERO','CLI_COMPLEMENTO','CLI_BAIRRO','CLI_CIDADE',
                            'CLI_CEP','CLI_EMAIL','CLI_HOMEPAGE','CLI_FONE1','CLI_FONE2','CLI_FONE3','CLI_FAX');

                        if(in_array($nome_campo, $lista_campos)) {
                            $atualizacoes[] = Util::formatUpdatedField(
                                $model->getAttributeLabel($nome_campo),
                                $old->{$nome_campo},
                                empty($model->{$nome_campo}) ? '<strong>Excluído</strong>' : $model->{$nome_campo}
                            );
                            $atualizacoes[] = '<br />';
                            $teve_atualizacao = true;
                        }
                    }

                    if($teve_atualizacao) {
                        $situacao = array('A', 'I');
                        if(in_array($model->CLI_SITUACAO, $situacao)) {
                            $texto_atualizacoes = '';
                            foreach ($atualizacoes as $value) {
                                $texto_atualizacoes .= $value;
                            }

                            $pendencia = new Pendencias;
                            $pendencia->PEN_DATACADASTRO  = date('d/m/Y H:i:s');
                            $pendencia->PEN_IDFUNCIONARIO = User::getId();
                            $pendencia->PEN_IDPROJETO = '20';
                            $pendencia->PEN_IDLOCAL = '2';
                            $pendencia->PEN_TITULO = 'Alterado dados cadastrais de cliente';
                            $pendencia->PEN_IDPRIORIDADE = '5';
                            $pendencia->PEN_IDMOTIVO = '452';
                            $pendencia->PEN_IDFORMULARIO = '405';
                            $pendencia->PEN_TXTSOLICITACAO = '<p>Alterado dados de cadastro de cliente.</p><br/>
                            Código: '.$model->CLI_IDCLIENTE.'<br/>Nome: '.$model->CLI_NOME.'<br/>'.$texto_atualizacoes;

                            if(empty($pendencia->PEN_IDVERSAO)) {
                                $criteriaVersao = $criteria=new CDbCriteria();
                                $criteria->addCondition('VRP_IDPROJETO = "20" and VER_DTLIBERACAO <= NOW() AND VER_SITUACAO = "A"');
                                $criteria->order = 'VER_DTLIBERACAO DESC';
                                $criteria->with = array('Versao');
                                $Versao = VersoesProjetos::model()->with('Versao')->find($criteria);
                                if(isset($Versao->Versao->VER_IDVERSAO)) {
                                    $pendencia->PEN_IDVERSAO = $Versao->Versao->VER_IDVERSAO;
                                }
                            }

                            if($pendencia->save()) {
                                $modelAtividade                      = new PendenciasAtividades;
                                $modelAtividade->PAT_IDPENDENCIA     = $pendencia->PEN_IDPENDENCIA;
                                $modelAtividade->PAT_DATACADASTRO    = date('d/m/Y H:i:s');
                                $modelAtividade->PAT_IDAUTOR         = $pendencia->PEN_IDFUNCIONARIO;
                                $modelAtividade->PAT_IDLOCAL         = $pendencia->PEN_IDLOCAL;
                                $modelAtividade->PAT_IDMOTIVO        = $pendencia->PEN_IDMOTIVO;
                                $modelAtividade->PAT_IDFORMULARIO    = $pendencia->PEN_IDFORMULARIO;
                                $modelAtividade->PAT_IDPRIORIDADE    = $pendencia->PEN_IDPRIORIDADE;
                                $modelAtividade->PAT_IDVERSAO        = $pendencia->PEN_IDVERSAO;
                                $modelAtividade->PAT_SITUACAO        = 'A';
                                $modelAtividade->PAT_IDSETOR         = '5';
                                $modelAtividade->PAT_DESCRICAO       = 'Pendência cadastrada, em análise.';
                                $modelAtividade->save(false, array('PAT_IDPENDENCIA', 'PAT_DATACADASTRO', 'PAT_IDAUTOR', 'PAT_IDLOCAL', 'PAT_IDMOTIVO', 'PAT_IDVERSAO', 'PAT_IDFORMULARIO', 'PAT_IDPRIORIDADE', 'PAT_SITUACAO','PAT_IDSETOR', 'PAT_DESCRICAO')); 

                                $atendimento = new Atendimentos;
                                $atendimento->ATD_IDCLIENTE     = $model->CLI_IDCLIENTE;
                                $atendimento->ATD_DTLANCAMENTO  = date('Y-m-d H:i:s');
                                $atendimento->ATD_IDUSUARIO     = User::getId();
                                $atendimento->ATD_DTCADASTRO    = date('d/m/Y');
                                $atendimento->ATD_HORAINICIO    = date('H:i:s');
                                $atendimento->ATD_HORAFINAL     = date('H:i:s', strtotime('+1 minute'));
                                $atendimento->ATD_TIPO           = 'O';
                                $atendimento->ATD_TOTALHORAS     = '00:01:00';
                                $atendimento->ATD_IDMOTIVO       = 70;
                                $atendimento->ATD_NIVELINTERESSE = $model->CLI_NIVELINTERESSE;
                                $atendimento->ATD_OBS            = "ATIVIDADE LANÇADA AUTOMATICAMENTE PELO CRM \r\n \r\n 
                                Alterado dados cadastrais do cliente: \r\n \r\n".$texto_atualizacoes;
                                $atendimento->ATD_SITUACAO       = 'A';
                                $atendimento->ATD_CONTATO        = $model->CLI_CONTATO;
                                $atendimento->save(false, array('ATD_IDCLIENTE', 'ATD_DTLANCAMENTO', 'ATD_IDUSUARIO', 'ATD_TIPO', 'ATD_DTCADASTRO', 'ATD_HORAINICIO', 'ATD_HORAFINAL', 'ATD_TOTALHORAS', 'ATD_IDMOTIVO', 'ATD_NIVELINTERESSE', 'ATD_OBS', 'ATD_SITUACAO', 'ATD_CONTATO'));
                                Yii::app()->user->setFlash('info', 'Atendimento código '.$atendimento->ATD_IDATENDIMENTO.' registrado nas atividades do cliente.');
                            } 
                        }
                    }

                }

            }
        }
    }

} else {

    class ClientesController extends GxController {

        public function actionTelefonista()
        {
            $model = new Clientes('search');
            $model->unsetAttributes();

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

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

        public function actionVerDados($CLI_IDCLIENTE, $campo)
        {
            $Cliente = $this->loadModel($CLI_IDCLIENTE, 'Clientes');
            if ($campo == 'CLI_CONTATO') {
                echo $Cliente->CLI_CONTATO;
            }
            if ($campo == 'CLI_EMAIL') {
                echo $Cliente->CLI_EMAIL;
            }
        }

        public function actionCancelamentos_Grafico()
        {
            $model = new Clientes('searchCancelamentos');
            $model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }
            if (isset($_POST['Clientes']))
                $model->setAttributes($_POST['Clientes']);

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

        public function actionCancelamentos_Relatorio()
        {
            $model = new Clientes('searchCancelamentos');
            $model->unsetAttributes();
            if (empty($model->TOKEN)) {
                $model->TOKEN = Util::uid();
            }
            if (isset($_POST['Clientes']))
                $model->setAttributes($_POST['Clientes']);

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

        public function actionCancelamentos_Excel()
        {
            $model = new Clientes('searchCancelamentos');
            if (isset($_GET['Clientes'])) {
                $model->setAttributes($_GET['Clientes']);
            }

            $search = $model->searchCancelamentos();
            $dataProvider = $model->searchCancelamentos($search->totalItemCount);

            $data = $dataProvider->getData();
            Yii::app()->request->sendFile(
                'relatorio-cancelamentos-'. date('Ymd-His') . '.xlsx',
                $this->renderPartial('cancelamentos_excel', array(
                    'model' => $model,
                    'data' => $data,
                ), true),
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true
            );
        }

        public function actionExportEmails($token = false, $tela = false, $format = false)
        {
            if (!$format || !in_array($format, array('txt', 'csv'))) {
                throw new CHttpException(400, 'Formato não especificado ou inválido.');
            }
            if ($tela != 'relatorio_clientes' && $tela != 'atendimentos_visitas') {
                throw new CHttpException(400, 'Sua solicitação é inválida.');
            }

            // $dataProvider = Yii::app()->cache->get($token);

            $search = $model->search();
            $dataProvider = $model->search($search->totalItemCount);

            if ($dataProvider === false) {
                throw new CHttpException(400, 'Sua solicitação é inválida. Você não definiu nenhum critério de busca ou seus critérios expiraram por terem sido gerados há mais de 60 minutos');
            }
            $data = $dataProvider->getData();
            Yii::app()->request->sendFile('emails-prospectos-clientes-'.date('d-m-Y-H-i-s').'.'.$format, $this->renderPartial('export_emails', array('dataProvider' => $dataProvider, 'data' => $data, 'format' => $format), true));
        }

        public function actionAtualizacaoAutomatica($id, $retorno = "view")
        {
            $model = $this->loadModel($id, 'Clientes');
            if ($model->podeAlterarAtualizacaoAutomatica()) {
                $model->CLI_ATUALIZACAO_AUTOMATICA = $model->CLI_ATUALIZACAO_AUTOMATICA ? 0 : 1;
                if ($model->save(false, ['CLI_ATUALIZACAO_AUTOMATICA'])) {
                    Yii::app()->user->setFlash('success', 'Cliente atualizado com sucesso!');
                } else {
                    Yii::app()->user->setFlash('success', 'Erro ao salvar!');
                }
                $this->redirect(array($retorno, 'id' => $model->CLI_IDCLIENTE, 'page' => 'produto'));
            } else {
                throw new CHttpException(400, 'Sua solicitação é inválida.');
            }
        }
    }

}
