<?php

$Permissoes = User::getUser(true);

class FechamentosComercialController extends GxController
{
    // classe temporária
    public function actionCadastrarAntigasNegociacoes()
    {
        if (User::getPrivilegio() == 1) {
            for ($ano=2017; $ano <= 2019; $ano++) {
                $novosClientes = $this->getNegociacoesNovosClientes($ano);
                if ($novosClientes) {
                    foreach ($novosClientes as $novoCliente) {
                        $existe = FechamentosNegociacoes::model()->find("
                            FEN_IDCLIENTE = {$novoCliente['CLI_IDCLIENTE']} AND
                            FEN_IDCONTRATO = {$novoCliente['COT_IDCONTRATO']}
                        ");
                        if (!$existe) {
                            $negociacao = new FechamentosNegociacoes;
                            $negociacao->FEN_IDCLIENTE = $novoCliente['CLI_IDCLIENTE'];
                            $negociacao->FEN_IDCONTRATO = $novoCliente['COT_IDCONTRATO'];
                            $negociacao->FEN_TIPO_NEGOCIACAO = FechamentosNegociacoes::CLIENTES_NOVOS;
                            $negociacao->FEN_IDREVENDA = $novoCliente['COT_IDREVENDA'];

                            $valorMensal = number_format((float) $novoCliente['COT_VLRMENSAL'], 2, '.', '');
                            $negociacao->FEN_VLRNEGOCIADO = $valorMensal;

                            $valorImplantacao = number_format((float) $novoCliente['COT_VLRIMPLANTACAO'], 2, '.', '');
                            $negociacao->FEN_VLRIMPLANTACAO = $valorImplantacao;

                            $negociacao->FEN_IDPRODUTO = $novoCliente['COT_IDPRODUTO'];
                            $negociacao->FEN_NROUSUARIOS = $novoCliente['COT_NROUSUARIOS'];
                            $negociacao->FEN_IDVENDEDOR = $novoCliente['COT_IDVENDEDOR'];
                            $negociacao->FEN_IDMOTIVO = $novoCliente['COT_CLI_IDMOTIVO'];
                            $negociacao->FEN_DTCONTRATACAO = $novoCliente['COT_DTATIVACAO'];
                            $negociacao->FEN_DTCADASTRO = date('Y-m-d H:i:s');
                            $negociacao->FEN_STATUS = FechamentosNegociacoes::STATUS_ATIVO;

                            $transaction = Yii::app()->db->beginTransaction();
                            $commit = true;
                            if ($negociacao->save()) {
                                $itens = ContratosItens::model()->findAll("CTI_IDCONTRATO = {$negociacao->FEN_IDCONTRATO}");
                                if ($itens) {
                                    foreach ($itens as $item) {
                                        $negociacaoItem = new FechamentosNegociacoesItens;
                                        $negociacaoItem->FNI_IDNEGOCIACAO = $negociacao->FEN_IDNEGOCIACAO;
                                        $negociacaoItem->FNI_IDMODULO = $item->CTI_IDPRODUTO;
                                        if (!$negociacaoItem->save()) {
                                            $commit = false;
                                        }
                                    }
                                }
                            } else {
                                $commit = false;
                            }

                            if ($commit) {
                                $transaction->commit();
                            } else {
                                $transaction->rollback();
                                echo "Ocorreu um erro ao salvar a negociação do contrato {$novoCliente['COT_IDCONTRATO']} <br>";
                            }
                        }
                    }
                }
                ///
                $adendos = $this->getNegociacoesAdendos($ano);
                if ($adendos) {
                    foreach ($adendos as $adendo) {
                        $existe = FechamentosNegociacoes::model()->find("
                            FEN_IDCLIENTE = {$adendo['CLI_IDCLIENTE']} AND
                            FEN_IDCONTRATO = {$adendo['COT_IDCONTRATO']}
                        ");
                        if (!$existe) {
                            $tipo = FechamentosNegociacoes::ADENDOS_SEM_ACRESCIMO;
                            if ($adendo['COT_VLRMENSAL'] > $adendo['COT_CLI_VLRMENSAL']) {
                                $tipo = FechamentosNegociacoes::ADENDOS_COM_ACRESCIMO;
                            }

                            $negociacao = new FechamentosNegociacoes;
                            $negociacao->FEN_IDCLIENTE = $adendo['CLI_IDCLIENTE'];
                            $negociacao->FEN_IDCONTRATO = $adendo['COT_IDCONTRATO'];
                            $negociacao->FEN_TIPO_NEGOCIACAO = $tipo;
                            $negociacao->FEN_IDREVENDA = $adendo['COT_IDREVENDA'];

                            $valorMensal = number_format((float) $adendo['COT_VLRMENSAL'], 2, '.', '');
                            $negociacao->FEN_VLRNEGOCIADO = $valorMensal;

                            $valorDiferenca = $adendo['COT_VLRMENSAL'] - $adendo['COT_CLI_VLRMENSAL'];
                            $negociacao->FEN_VLRDIFERENCA = number_format((float) $valorDiferenca, 2, '.', '');

                            $valorImplantacao = number_format((float) $adendo['COT_VLRIMPLANTACAO'], 2, '.', '');
                            $negociacao->FEN_VLRIMPLANTACAO = $valorImplantacao;

                            $negociacao->FEN_IDPRODUTO = $adendo['COT_IDPRODUTO'];
                            $negociacao->FEN_NROUSUARIOS = $adendo['COT_NROUSUARIOS'] - $adendo['COT_CLI_QTDUSUARIOS'];
                            $negociacao->FEN_IDVENDEDOR = $adendo['COT_IDVENDEDOR'];
                            $negociacao->FEN_IDMOTIVO = $adendo['COT_CLI_IDMOTIVO'];
                            $negociacao->FEN_DTCONTRATACAO = $adendo['COT_DTATIVACAO'];
                            $negociacao->FEN_DTCADASTRO = date('Y-m-d H:i:s');
                            $negociacao->FEN_STATUS = FechamentosNegociacoes::STATUS_ATIVO;

                            $transaction = Yii::app()->db->beginTransaction();
                            $commit = true;
                            if ($negociacao->save()) {
                                $itens = ContratosItens::model()->findAll("CTI_IDCONTRATO = {$negociacao->FEN_IDCONTRATO}");
                                if ($itens) {
                                    foreach ($itens as $item) {
                                        $negociacaoItem = new FechamentosNegociacoesItens;
                                        $negociacaoItem->FNI_IDNEGOCIACAO = $negociacao->FEN_IDNEGOCIACAO;
                                        $negociacaoItem->FNI_IDMODULO = $item->CTI_IDPRODUTO;
                                        if (!$negociacaoItem->save()) {
                                            $commit = false;
                                        }
                                    }
                                }
                            } else {
                                $commit = false;
                            }

                            if ($commit) {
                                $transaction->commit();
                            } else {
                                $transaction->rollback();
                                echo "Ocorreu um erro ao salvar a negociação do adendo {$adendo['COT_IDCONTRATO']} <br>";
                            }
                        }
                    }
                }
                ///
                $cancelamentos = $this->getNegociacoesCancelamentos($ano);
                if ($cancelamentos) {
                    foreach ($cancelamentos as $cancelamento) {
                        $existe = FechamentosNegociacoes::model()->find("
                            FEN_IDCLIENTE = {$cancelamento['CLI_IDCLIENTE']} AND
                            FEN_TIPO_NEGOCIACAO = " . FechamentosNegociacoes::CANCELAMENTOS . "
                        ");
                        if (!$existe) {
                            $regiaoCidade = Regioescidades::model()->find("RCD_IDCIDADE = {$cancelamento['CLI_CIDADE']}");
                            $revenda = Revendas::model()->findByPk($regiaoCidade['RCD_IDREVENDA']);

                            $negociacao = new FechamentosNegociacoes;
                            $negociacao->FEN_IDCLIENTE = $cancelamento['CLI_IDCLIENTE'];
                            if ($cancelamento['CLI_IDRESCISAO'] == 110) {
                                $negociacao->FEN_TIPO_NEGOCIACAO = FechamentosNegociacoes::CANCELAMENTOS_TRANSFERENCIA;
                            } else {
                                $negociacao->FEN_TIPO_NEGOCIACAO = FechamentosNegociacoes::CANCELAMENTOS;
                            }
                            $negociacao->FEN_IDREVENDA = $revenda->REV_IDREVENDA;

                            $valorMensal = number_format((float) $cancelamento['CLI_VLRMENSAL'], 2, '.', '');
                            $negociacao->FEN_VLRNEGOCIADO = $valorMensal;

                            $negociacao->FEN_IDPRODUTO = $cancelamento['CLI_PRODUTO'];
                            $negociacao->FEN_NROUSUARIOS = $cancelamento['CLI_QTDUSUARIOS'];
                            $negociacao->FEN_IDMOTIVO = $cancelamento['CLI_IDRESCISAO'];
                            $negociacao->FEN_DTCONTRATACAO = $cancelamento['CLI_DTATIVACAO'];
                            $negociacao->FEN_DTRESCISAO = $cancelamento['CLI_DTRESCISAO'];
                            $negociacao->FEN_DTCADASTRO = date('Y-m-d H:i:s');
                            $negociacao->FEN_STATUS = FechamentosNegociacoes::STATUS_ATIVO;

                            if (!$negociacao->save()) {
                                echo "Ocorreu um erro ao salvar a negociação do cancelamento {$cancelamento['CLI_IDCLIENTE']} <br>";
                            }
                        }
                    }
                }
                ///
                $reativacoes = $this->getNegociacoesReativacoes($ano);
                if ($reativacoes) {
                    foreach ($reativacoes as $reativacao) {
                        $existe = FechamentosNegociacoes::model()->find("
                            FEN_IDCLIENTE = {$reativacao['COT_IDCLIENTE']} AND
                            FEN_IDCONTRATO = {$reativacao['COT_IDCONTRATO']} AND
                            FEN_TIPO_NEGOCIACAO = " . FechamentosNegociacoes::REATIVACOES_CLIENTES . "
                        ");
                        if (!$existe) {
                            $revenda = Revendas::model()->findByPk($reativacao['COT_IDREVENDA']);

                            $negociacao = new FechamentosNegociacoes;
                            $negociacao->FEN_IDCLIENTE = $reativacao['COT_IDCLIENTE'];
                            $negociacao->FEN_IDCONTRATO = $reativacao['COT_IDCONTRATO'];
                            $negociacao->FEN_TIPO_NEGOCIACAO = FechamentosNegociacoes::REATIVACOES_CLIENTES;

                            $contratoVinculado = Contratos::model()->findByPk($reativacao['COT_DOCUMENTOVINCULADO']);
                            if ($reativacao['COT_CRIARNOVOCONTRATO']) {
                                $valorMensal = number_format((float) $contratoVinculado['COT_VLRMENSAL'], 2, '.', '');
                                $valorImplantacao = number_format((float) $contratoVinculado['COT_VLRIMPLANTACAO'], 2, '.', '');

                                $negociacao->FEN_IDPRODUTO = $contratoVinculado['COT_IDPRODUTO'];
                                $negociacao->FEN_NROUSUARIOS = $contratoVinculado['COT_NROUSUARIOS'];
                            } else {
                                $valorMensal = number_format((float) $reativacao['CLI_VLRMENSAL'], 2, '.', '');
                                $valorImplantacao = number_format((float) $reativacao['COT_VLRIMPLANTACAO'], 2, '.', '');

                                $negociacao->FEN_IDPRODUTO = $reativacao['CLI_PRODUTO'];
                                $negociacao->FEN_NROUSUARIOS = $reativacao['CLI_QTDUSUARIOS'];
                            }
                            $negociacao->FEN_VLRNEGOCIADO = $valorMensal;
                            $negociacao->FEN_VLRIMPLANTACAO = $valorImplantacao;

                            $negociacao->FEN_IDREVENDA = $revenda['REV_IDREVENDA'];
                            $negociacao->FEN_IDVENDEDOR = $reativacao['COT_IDVENDEDOR'];
                            $negociacao->FEN_DTCONTRATACAO = $reativacao['COT_DTATIVACAO'];
                            $negociacao->FEN_DTCADASTRO = date('Y-m-d H:i:s');
                            $negociacao->FEN_STATUS = FechamentosNegociacoes::STATUS_ATIVO;

                            $transaction = Yii::app()->db->beginTransaction();
                            $commit = true;
                            if ($negociacao->save()) {
                                if (!empty($contratoVinculado['COT_IDCONTRATO'])) {
                                    $itens = ContratosItens::model()->findAll("
                                        CTI_IDCONTRATO = {$contratoVinculado['COT_IDCONTRATO']}
                                    ");
                                    if ($itens) {
                                        foreach ($itens as $item) {
                                            $negociacaoItem = new FechamentosNegociacoesItens;
                                            $negociacaoItem->FNI_IDNEGOCIACAO = $negociacao->FEN_IDNEGOCIACAO;
                                            $negociacaoItem->FNI_IDMODULO = $item->CTI_IDPRODUTO;
                                            if (!$negociacaoItem->save()) {
                                                $commit = false;
                                            }
                                        }
                                    }
                                }
                            } else {
                                $commit = false;
                            }

                            if ($commit) {
                                $transaction->commit();
                            } else {
                                $transaction->rollback();
                                echo "Ocorreu um erro ao salvar a negociação de reativação {$reativacao['CLI_IDCLIENTE']} <br>";
                            }
                        }
                    }
                }
            }
        } else {
            throw new CHttpException(400, 'Sua solicitação é inválida.');
        }
    }

    // classe temporária
    public function actionAdicionaItensNegociacoes()
    {
        if (User::isAdmin()) {
            $negociacoes = FechamentosNegociacoes::model()->findAll("
                FEN_TIPO_NEGOCIACAO IN (
                    'CLIENTES_NOVOS',
                    'REATIVACOES_CLIENTES',
                    'ADENDOS_COM_ACRESCIMO',
                    'ADENDOS_SEM_ACRESCIMO'
                )
            ");
            if ($negociacoes) {
                foreach ($negociacoes as $negociacao) {
                    if (empty($negociacao->Itens)) {
                        $contrato = $negociacao->Contrato;
                        if ($negociacao->FEN_TIPO_NEGOCIACAO == 'REATIVACOES_CLIENTES') {
                            $contrato = Contratos::model()->findByPk($contrato->COT_DOCUMENTOVINCULADO);
                        }

                        if (!empty($contrato->Itens)) {
                            foreach ($contrato->Itens as $item) {
                                $negociacaoItem = new FechamentosNegociacoesItens;
                                $negociacaoItem->FNI_IDNEGOCIACAO = $negociacao->FEN_IDNEGOCIACAO;
                                $negociacaoItem->FNI_IDMODULO = $item->CTI_IDPRODUTO;
                                if (!$negociacaoItem->save()) {
                                    echo "Ocorreu um erro ao salvar o item {$item->CTI_ID} da negociação {$negociacao->FEN_IDNEGOCIACAO}<br>";
                                }
                            }
                        }
                    }
                }
            }
        } else {
            throw new CHttpException(400, 'Sua solicitação é inválida.');
        }
    }

    // classe temporária
    public function actionLastUpdateVinculadas() {
        $vinculadas = SolicitacoesVinculadas::model()->findAll();
        foreach($vinculadas as $vinculada) {
            $info = explode(PHP_EOL, trim($vinculada->SOV_UPDATES));
            $info = end($info);
            $info = str_replace(["Pendência vinculada em <b>", "Pendência desvinculada em <b>"], ["", ""], $info);
            $data = substr($info, 0, 19);
            $data = DateTime::createFromFormat('d/m/Y H:i:s', $data);
            Yii::app()->db->createCommand()
            ->update('solicitacoes_vinculadas', array(
                'SOV_LASTUPDATE' => $data->format('Y-m-d H:i:s')
            ), 'SOV_ID=:id', array(':id'=>$vinculada->SOV_ID));
        }
    }

    public function actionMotivosCadastro()
    {
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            $tipo_negociacao = filter_input(INPUT_POST, 'tipo', FILTER_DEFAULT, FILTER_SANITIZE_NUMBER_INT);
            $retorno = FechamentosNegociacoes::getMotivosCadastro($tipo_negociacao);
            echo CJSON::encode($retorno);
        } else {
            throw new CHttpException(400, 'Sua solicitação é inválida.');
        }
    }

    public function actionNegociacoes()
    {
        if (empty(User::getUser()->FUN_CONTROLE_NEGOCIACOES)) {
            throw new CHttpException(401, 'Você não tem permissão para acessar essa página');
        }

        $model = new FechamentosNegociacoes('search');
        $model->unsetAttributes();

        $fechamentosNegociacoes = filter_input(INPUT_GET, 'FechamentosNegociacoes', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($fechamentosNegociacoes)) {
            $model->setAttributes($fechamentosNegociacoes);
        }

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

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

    public function actionView($id)
    {
        if (empty(User::getUser()->FUN_CONTROLE_NEGOCIACOES)) {
            throw new CHttpException(401, 'Você não tem permissão para acessar essa página');
        }

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

        $modelAlteracoes = new FechamentosNegociacoesAlteracoes('search');

        $modelAlteracoes->FNA_IDNEGOCIACAO = $model->FEN_IDNEGOCIACAO;
        $historicoAlteracoes = $modelAlteracoes->search();
        $this->render('view', array(
            'model' => $model,
            'historicoAlteracoes' => $historicoAlteracoes,
        ));
    }

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

        $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-fechamentos-'.date('Ymd-His').'.xlsx',
            $this->renderPartial('excelReport', array(
                'data' => $data,
            ), true),
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true
        );
    }

    public function actionCreate()
    {
        if (empty(User::getUser()->FUN_CONTROLE_NEGOCIACOES) || !User::canCreate()) {
            throw new CHttpException(401, 'Você não tem permissão para acessar essa página');
        }

        $model = new FechamentosNegociacoes();

        $fechamentosNegociacoes = filter_input(INPUT_POST, 'FechamentosNegociacoes', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($fechamentosNegociacoes)) {
            switch ($fechamentosNegociacoes['FEN_TIPO_NEGOCIACAO']) {
                case FechamentosNegociacoes::CLIENTES_NOVOS:
                case FechamentosNegociacoes::REATIVACOES_CLIENTES:
                    $model->scenario = "contratosReativacoes";
                    break;

                case FechamentosNegociacoes::ADENDOS_COM_ACRESCIMO:
                case FechamentosNegociacoes::ADENDOS_SEM_ACRESCIMO:
                    $model->scenario = "adendos";
                    break;

                case FechamentosNegociacoes::TRANSFERENCIAS_COM_ACRESCIMO:
                case FechamentosNegociacoes::TRANSFERENCIAS_SEM_ACRESCIMO:
                    $model->scenario = "transferencias";
                    break;

                case FechamentosNegociacoes::CANCELAMENTOS:
                case FechamentosNegociacoes::CANCELAMENTOS_TRANSFERENCIA:
                    $model->scenario = "cancelamentos";
                    break;
            }

            $model->setAttributes($fechamentosNegociacoes);
            $model->FEN_DTCADASTRO = date('Y-m-d H:i:s');

            $transaction = Yii::app()->db->beginTransaction();
            $commit = true;
            if ($model->save()) {
                if (!empty($model->modulosComplementares)) {
                    foreach ($model->modulosComplementares as $modulo) {
                        $negociacaoItem = new FechamentosNegociacoesItens;
                        $negociacaoItem->FNI_IDNEGOCIACAO = $model->FEN_IDNEGOCIACAO;
                        $negociacaoItem->FNI_IDMODULO = $modulo;
                        if (!$negociacaoItem->save()) {
                            $commit = false;
                        }
                    }
                }
            } else {
                $commit = false;
            }

            if ($commit) {
                $transaction->commit();
                Yii::app()->user->setFlash('success', 'Registro cadastrado com sucesso!');
                $this->redirect(array('view', 'id' => $model->FEN_IDNEGOCIACAO));
            } else {
                $transaction->rollback();
                Yii::app()->user->setFlash('danger', 'Erro ao salvar!');
            }
        }

        if (is_numeric($model->FEN_VLRIMPLANTACAO)) {
            $model->FEN_VLRIMPLANTACAO = Util::formatMoeda($model->FEN_VLRIMPLANTACAO);
        }
        if (is_numeric($model->FEN_VLRNEGOCIADO)) {
            $model->FEN_VLRNEGOCIADO = Util::formatMoeda($model->FEN_VLRNEGOCIADO);
        }
        if (is_numeric($model->FEN_VLRDIFERENCA)) {
            $model->FEN_VLRDIFERENCA = Util::formatMoeda($model->FEN_VLRDIFERENCA);
        }

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

    public function actionUpdate($id)
    {
        if (empty(User::getUser()->FUN_CONTROLE_NEGOCIACOES) || !User::canUpdate()) {
            throw new CHttpException(401, 'Você não tem permissão para acessar essa página');
        }

        $model = $this->loadModel($id, 'FechamentosNegociacoes');
        $old = $this->loadModel($id, 'FechamentosNegociacoes');
        $model->FEN_TIPO_NEGOCIACAO = constant("FechamentosNegociacoes::{$model->FEN_TIPO_NEGOCIACAO}");

        $fechamentosNegociacoes = filter_input(
            INPUT_POST,
            'FechamentosNegociacoes',
            FILTER_DEFAULT ,
            FILTER_REQUIRE_ARRAY
        );
        if (!empty($fechamentosNegociacoes)) {
            switch ($fechamentosNegociacoes['FEN_TIPO_NEGOCIACAO']) {
                case FechamentosNegociacoes::CLIENTES_NOVOS:
                case FechamentosNegociacoes::REATIVACOES_CLIENTES:
                    $model->scenario = "contratosReativacoes";
                    break;

                case FechamentosNegociacoes::ADENDOS_COM_ACRESCIMO:
                case FechamentosNegociacoes::ADENDOS_SEM_ACRESCIMO:
                    $model->scenario = "adendos";
                    break;

                case FechamentosNegociacoes::TRANSFERENCIAS_COM_ACRESCIMO:
                case FechamentosNegociacoes::TRANSFERENCIAS_SEM_ACRESCIMO:
                    $model->scenario = "transferencias";
                    break;

                case FechamentosNegociacoes::CANCELAMENTOS:
                case FechamentosNegociacoes::CANCELAMENTOS_TRANSFERENCIA:
                    $model->scenario = "cancelamentos";
                    break;
            }

            $model->setAttributes($fechamentosNegociacoes);

            $transaction = Yii::app()->db->beginTransaction();
            $commit = true;
            if ($model->save()) {
                $old->FEN_DTCONTRATACAO = Util::formatDataMysql($old->FEN_DTCONTRATACAO, true);

                $campos = $model->attributes;
                unset($campos['FEN_DTCADASTRO']);
                $campos = array_keys($campos);

                foreach ($campos as $campo) {
                    $valorAnterior = $old->{$campo};
                    $valorAtualizado = $model->{$campo};
                    if ($campo == 'FEN_TIPO_NEGOCIACAO' && !is_numeric($valorAnterior)) {
                        $valorAnterior = constant("FechamentosNegociacoes::{$valorAnterior}");
                    }

                    if ($valorAtualizado != $valorAnterior) {
                        if (!$model->registraAlteracaoHistorico($campo, $old->{$campo}, $model->{$campo})) {
                            $commit = false;
                        }
                    }
                }

                if ($commit) {
                    $oldModulosComplementares = array();
                    if (!empty($old->Itens)) {
                        $oldModulosComplementares = CHtml::listData($old->Itens, 'FNI_IDMODULO', 'FNI_IDMODULO');
                        sort($oldModulosComplementares);
                    }

                    $modulosComplementares = array();
                    if (!empty($model->modulosComplementares)) {
                        $modulosComplementares = $model->modulosComplementares;
                        sort($modulosComplementares);
                    }

                    if (implode(",", $oldModulosComplementares) != implode(",", $modulosComplementares)) {
                        if (!empty($old->Itens)) {
                            $deleted = $old->deleteAll("FNI_IDNEGOCIACAO = \"{$old->FEN_IDNEGOCIACAO}\"");
                            if ($deleted != count($old->Itens)) {
                                $commit = false;
                            }
                        }

                        if (!empty($model->modulosComplementares)) {
                            foreach ($model->modulosComplementares as $modulo) {
                                $negociacaoItem = new FechamentosNegociacoesItens;
                                $negociacaoItem->FNI_IDNEGOCIACAO = $model->FEN_IDNEGOCIACAO;
                                $negociacaoItem->FNI_IDMODULO = $modulo;
                                if (!$negociacaoItem->save()) {
                                    $commit = false;
                                }
                            }
                        }

                        $old = CJSON::encode($oldModulosComplementares);
                        $new = CJSON::encode($modulosComplementares);
                        if (!$model->registraAlteracaoHistorico('Itens', $old, $new)) {
                            $commit = false;
                        }
                    }
                }
            } else {
                $commit = false;
            }

            if ($commit) {
                $transaction->commit();
                Yii::app()->user->setFlash('success', 'Registro atualizado com sucesso!');
                $this->redirect(array('view', 'id' => $model->FEN_IDNEGOCIACAO));
            } else {
                $transaction->rollback();
                Yii::app()->user->setFlash('danger', 'Erro ao salvar!');
            }
        }

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

    public function actionStatus($id)
    {
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            if (empty(User::getUser()->FUN_CONTROLE_NEGOCIACOES) || !in_array(User::getPrivilegio(), [1, 7])) {
                throw new CHttpException(401, 'Você não tem permissão para acessar essa página');
            }

            $model = $this->loadModel($id, 'FechamentosNegociacoes');
            $model->scenario = 'trocaStatus';

            $valorAnterior = $model->FEN_STATUS;
            $model->FEN_STATUS = $model->FEN_STATUS == 1 ? 2 : 1;

            $transaction = Yii::app()->db->beginTransaction();
            if ($model->save()) {
                if (!$model->registraAlteracaoHistorico('FEN_STATUS', $valorAnterior, $model->FEN_STATUS)) {
                    $transaction->rollback();
                    throw new CHttpException(500, 'Erro ao alterar status!');
                } else {
                    $transaction->commit();
                    echo $model->getStatus();
                }
            } else {
                $transaction->rollback();
                throw new CHttpException(500, 'Erro ao alterar status!');
            }
        } else {
            throw new CHttpException(400, 'Sua solicitação é inválida.');
        }
    }

    public function actionControleVendasCancelamentos()
    {
        $model = new FechamentosNegociacoes;

        $fechamentosNegociacoes = filter_input(INPUT_GET, 'FechamentosNegociacoes', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($fechamentosNegociacoes)) {
            if (!empty($fechamentosNegociacoes['FILTRO_ANO'])) {
                $ano = $fechamentosNegociacoes['FILTRO_ANO'];
                if (is_numeric($ano) && $ano >= 2017 && $ano <= date('Y')) {
                    $this->actionExportarVendasCancelamentos($ano);
                }
            }
        }

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

    public function actionExportarVendasCancelamentos($ano)
    {
        if (is_numeric($ano) && $ano >= 2017 && $ano <= date('Y')) {
            $meses = FechamentosNegociacoes::model()->meses;
            $meses = array_keys($meses);
            ////
            $motivosTipoCancelamento = Motivos::model()->findAll("
                MOT_TIPO = 3
                ORDER BY MOT_DESCRICAO
            ");
            $motivos = CHtml::listData($motivosTipoCancelamento, 'MOT_IDMOTIVO', 'MOT_DESCRICAO');

            $perdas = array();

            for ($i=1; $i <= 12; $i++) {
                $mes = ($i < 10) ? "0{$i}" : $i;
                $perdas['ADENDOS'][$mes] = array(
                    'qtd' => 0,
                    'valor' => 0,
                );
                $perdas['TRANSFERENCIAS'][$mes] = array(
                    'qtd' => 0,
                    'valor' => 0,
                );
            }
            foreach ($motivos as $idMotivo => $desc) {
                $perdas[$idMotivo] = array();
                for ($i=1; $i <= 12; $i++) {
                    $mes = ($i < 10) ? "0{$i}" : $i;
                    $perdas[$idMotivo][$mes] = array(
                        'qtd' => 0,
                        'valor' => 0,
                    );
                }
            }
            ////
            $novosClientes = array();
            $transferencias = array();
            $adendos = array();
            $cancelamentos = array();
            $cancelamentosTransferencia = array();
            foreach ($meses as $mes) {
                $dataInicio = "{$ano}-{$mes}-01";
                $date = DateTime::createFromFormat('Y-m-d', $dataInicio);
                $date->modify('last day of this month');
                $dataFim = $date->format('Y-m-d');

                // Novos clientes
                    $revendas = Revendas::getRevendasByPeriodo($ano, $mes, [3]);

                    $revendas = CHtml::listData($revendas, 'REV_IDREVENDA', 'REV_IDREVENDA');
                    $clientesContratos = $this->getNovosClientes($revendas, $dataInicio, $dataFim);
                    $novosClientes[$mes]['Revendas'] = $clientesContratos;

                    $matrizFiliais = Revendas::getRevendasByPeriodo($ano, $mes, [1, 2]);
                    foreach ($matrizFiliais as $unidade) {
                        $clientesContratos = $this->getNovosClientes($unidade, $dataInicio, $dataFim);
                        $novosClientes[$mes][$unidade->REV_IDREVENDA] = $clientesContratos;
                    }

                // Transferências com e sem acréscimo de valores
                    $transferencias[$mes] = array(
                        'SEM_ACRESCIMO' => array(),
                        'COM_ACRESCIMO' => array()
                    );
                    $transferencias[$mes]['COM_ACRESCIMO'] = $this->getTransferenciasAdendos(
                        FechamentosNegociacoes::TRANSFERENCIAS_COM_ACRESCIMO,
                        $dataInicio,
                        $dataFim
                    );
                    $transferencias[$mes]['SEM_ACRESCIMO'] = $this->getTransferenciasAdendos(
                        FechamentosNegociacoes::TRANSFERENCIAS_SEM_ACRESCIMO,
                        $dataInicio,
                        $dataFim
                    );

                    if (!empty($transferencias[$mes]['SEM_ACRESCIMO'])) {
                        foreach ($transferencias[$mes]['SEM_ACRESCIMO'] as $transferenciaf) {
                            $perdas['TRANSFERENCIAS'][$mes]['qtd']++;
                            $perdas['TRANSFERENCIAS'][$mes]['valor'] += abs($transferenciaf['FEN_VLRDIFERENCA']);
                        }
                    }

                // Adendos com e sem acréscimo de valores
                    $adendos[$mes] = array(
                        'SEM_ACRESCIMO' => array(),
                        'COM_ACRESCIMO' => array()
                    );
                    $adendos[$mes]['COM_ACRESCIMO'] = $this->getTransferenciasAdendos(
                        FechamentosNegociacoes::ADENDOS_COM_ACRESCIMO,
                        $dataInicio,
                        $dataFim
                    );
                    $adendos[$mes]['SEM_ACRESCIMO'] = $this->getTransferenciasAdendos(
                        FechamentosNegociacoes::ADENDOS_SEM_ACRESCIMO,
                        $dataInicio,
                        $dataFim
                    );

                    if (!empty($adendos[$mes]['SEM_ACRESCIMO'])) {
                        foreach ($adendos[$mes]['SEM_ACRESCIMO'] as $adendo) {
                            $perdas['ADENDOS'][$mes]['qtd']++;
                            $perdas['ADENDOS'][$mes]['valor'] += abs($adendo['FEN_VLRDIFERENCA']);
                        }
                    }

                // Cancelamentos
                    $sql = "
                        SELECT
                            *
                        FROM fechamentos_negociacoes
                        LEFT JOIN clientes ON FEN_IDCLIENTE = CLI_IDCLIENTE
                        WHERE
                            FEN_DTRESCISAO >= '{$dataInicio}' AND
                            FEN_DTRESCISAO <= '{$dataFim}' AND
                            FEN_TIPO_NEGOCIACAO = " . FechamentosNegociacoes::CANCELAMENTOS . " AND
                            FEN_STATUS = '" . FechamentosNegociacoes::STATUS_ATIVO . "'
                    ";
                    $cancelamentos[$mes] = Yii::app()->db->createCommand($sql)->queryAll();

                    foreach ($cancelamentos[$mes] as $cancelado) {
                        $motivo = $cancelado['FEN_IDMOTIVO'];
                        if (isset($perdas[$motivo])) {
                            $perdas[$motivo][$mes]['qtd']++;
                            $perdas[$motivo][$mes]['valor'] += $cancelado['FEN_VLRNEGOCIADO'];
                        }
                    }

                // Cancelamentos por transferência
                    $sql = "
                        SELECT
                            *
                        FROM fechamentos_negociacoes
                        LEFT JOIN clientes ON FEN_IDCLIENTE = CLI_IDCLIENTE
                        WHERE
                            FEN_DTRESCISAO >= '{$dataInicio}' AND
                            FEN_DTRESCISAO <= '{$dataFim}' AND
                            FEN_TIPO_NEGOCIACAO = " . FechamentosNegociacoes::CANCELAMENTOS_TRANSFERENCIA . " AND
                            FEN_STATUS = '" . FechamentosNegociacoes::STATUS_ATIVO . "'
                    ";
                    $cancelamentosTransferencia[$mes] = Yii::app()->db->createCommand($sql)->queryAll();
                    foreach ($cancelamentosTransferencia[$mes] as $cancelado) {
                        $motivo = 110; // Transferência
                        if (isset($perdas[$motivo])) {
                            $perdas[$motivo][$mes]['qtd']++;
                            $perdas[$motivo][$mes]['valor'] += $cancelado['FEN_VLRNEGOCIADO'];
                        }
                    }
            }

            $motivos += array(
                'ADENDOS' => 'ADENDOS DE REDUÇÃO',
                'TRANSFERENCIAS' => 'TRANSFERÊNCIAS COM REDUÇÃO DE VALOR'
            );

            $analiseGeral = array();

            for ($i=2017; $i < date('Y'); $i++) {
                if ($i < $ano) {
                    if (empty($analiseGeral[$i])) {
                        $analiseGeral[$i] = array();
                    }

                    $valoresPositivos = FechamentosNegociacoes::getSomaNegociacoesPositivas($i);
                    if (!empty($valoresPositivos)) {
                        foreach ($valoresPositivos as $key => $dadosMes) {
                            $mes = $dadosMes['mes'];
                            if (empty($analiseGeral[$i][$mes])) {
                                $analiseGeral[$i][$mes] = array(
                                    'mensalidadesPositivas' => 0.00,
                                    'mensalidadesNegativas' => 0.00,
                                    'implantacoes' => 0.00,
                                );
                            }
                            $analiseGeral[$i][$mes]['mensalidadesPositivas'] = (float) $dadosMes['somaValores'];
                        }
                    }

                    $valoresNegativos = FechamentosNegociacoes::getSomaNegociacoesNegativas($i);
                    if (!empty($valoresPositivos)) {
                        foreach ($valoresNegativos as $key => $dadosMes) {
                            $mes = $dadosMes['mes'];
                            if (empty($analiseGeral[$i][$mes])) {
                                $analiseGeral[$i][$mes] = array(
                                    'mensalidadesPositivas' => 0.00,
                                    'mensalidadesNegativas' => 0.00,
                                    'implantacoes' => 0.00,
                                );
                            }
                            $analiseGeral[$i][$mes]['mensalidadesNegativas'] = $dadosMes['somaValores'];
                        }
                    }

                    $valoresImplantacoes = FechamentosNegociacoes::getSomaValoresImplantacoes($i);
                    if (!empty($valoresImplantacoes)) {
                        foreach ($valoresImplantacoes as $key => $dadosMes) {
                            $mes = $dadosMes['mes'];
                            if (empty($analiseGeral[$i][$mes])) {
                                $analiseGeral[$i][$mes] = array(
                                    'mensalidadesPositivas' => 0.00,
                                    'mensalidadesNegativas' => 0.00,
                                    'implantacoes' => 0.00,
                                );
                            }
                            $analiseGeral[$i][$mes]['implantacoes'] = (float) $dadosMes['somaValores'];
                        }
                    }
                }
            }

            for ($i=2016; $i <= 2016; $i++) { // alterar início quando houver mais dados
                if (empty($analiseGeral[$i])) {
                    $analiseGeral[$i] = array();
                }

                foreach (Util::getMeses() as $mes => $nome) {
                    $mes = ltrim($mes,"0");

                    $analiseGeral[$i][$mes] = array(
                        'mensalidadesPositivas' => 0.00,
                        'mensalidadesNegativas' => 0.00,
                        'implantacoes' => 0.00,
                    );

                    $valores = FechamentosIndicadores::model()->findAll("
                        FEI_ANO = '{$i}' AND
                        FEI_MES = '{$mes}'
                    ");

                    if (!empty($valores)) {
                        foreach ($valores as $key => $valor) {
                            if ($valor->FEI_TIPO == 'MENSALIDADES_POSITIVADAS') {
                                $analiseGeral[$i][$mes]['mensalidadesPositivas'] = $valor->FEI_VALOR;
                            } elseif ($valor->FEI_TIPO == 'MENSALIDADES_NEGATIVADAS') {
                                $analiseGeral[$i][$mes]['mensalidadesNegativas'] = $valor->FEI_VALOR;
                            } elseif ($valor->FEI_TIPO == 'IMPLANTACOES') {
                                $analiseGeral[$i][$mes]['implantacoes'] = $valor->FEI_VALOR;
                            }
                        }
                    }
                }
            }

            Yii::app()->request->sendFile(
                'planilha-controle-vendas-cancelamentos-'. date('Ymd-His') . '.xlsx',
                $this->renderPartial('controleVendasCancelamentosExcel', array(
                    'ano' => $ano,
                    'meses' => $meses,
                    'novosClientes' => $novosClientes,
                    'transferencias' => $transferencias,
                    'adendos' => $adendos,
                    'cancelamentos' => $cancelamentos,
                    'cancelamentosTransferencia' => $cancelamentosTransferencia,
                    'motivos' => $motivos,
                    'analiseGeral' => $analiseGeral,
                    'perdas' => $perdas
                ), true),
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true
            );
        } else {
            throw new CHttpException(400, 'Sua solicitação é inválida.');
        }
    }

    public function actionAcompanhamentoGrupo()
    {
        $model = new FechamentosNegociacoes;

        $fechamentosNegociacoes = filter_input(INPUT_GET, 'FechamentosNegociacoes', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($fechamentosNegociacoes)) {
            if (!empty($fechamentosNegociacoes['FILTRO_ANO'])) {
                $ano = $fechamentosNegociacoes['FILTRO_ANO'];
                if (is_numeric($ano) && $ano >= 2017 && $ano <= date('Y')) {
                    $this->actionExportarMetasVsRealizadoGrupo($ano);
                }
            }
        }

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

    public function actionAcompanhamentoUnidade()
    {
        $model = new FechamentosNegociacoes;

        $fechamentosNegociacoes = filter_input(INPUT_GET, 'FechamentosNegociacoes', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($fechamentosNegociacoes)) {
            if (!empty($fechamentosNegociacoes['FILTRO_ANO'])) {
                $ano = $fechamentosNegociacoes['FILTRO_ANO'];
                if (is_numeric($ano) && $ano >= 2017 && $ano <= date('Y')) {
                    $revenda = Revendas::model()->findByPk($fechamentosNegociacoes['FILTRO_UNIDADE']);
                    if ($revenda) {
                        $this->actionExportarMetasVsRealizadoUnidade($ano, $revenda);
                    }
                }
            }
            Yii::app()->user->setFlash('error', 'Solicitação inválida!');
        }

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

    public function actionGetRevendasAtivasNoPeriodo($ano)
    {
        if (is_numeric($ano) && $ano >= 2017 && $ano <= date('Y')) {
            $revendas = Revendas::model()->findAll("
                REV_SITUACAO = 'A' OR
                (
                    REV_SITUACAO = 'I' AND EXISTS (
                        SELECT * FROM revendas_situacao
                        WHERE
                            REVS_IDREVENDA = REV_IDREVENDA AND
                            REVS_SITUACAO = 'I' AND
                            YEAR(REVS_DATA) = {$ano}
                    )
                )
                ORDER BY REV_TIPO ASC, REV_FANTASIA ASC
            ");

            $retorno = array();
            if ($revendas) {
                foreach ($revendas as $key => $revenda) {
                    $retorno[$key] = array(
                        'codigo' => $revenda->REV_IDREVENDA,
                        'nome' => $revenda->REV_FANTASIA
                    );
                }
            }

            echo CJSON::encode($retorno);
        } else {
            throw new CHttpException(400, "Solicitação inválida!");
        }
    }

    private function actionExportarMetasVsRealizadoGrupo($ano)
    {
        if ($ano == date('Y')) {
            $mesComparativo = date('m') - 1;
            $mesComparativo = str_pad($mesComparativo, 2, '0', STR_PAD_LEFT);
        } else {
            $mesComparativo = 12;
        }

        $revendas = Revendas::getRevendasByPeriodo($ano);

        if ($revendas) {
            $fechamentosNegociacoes = new FechamentosNegociacoes();
            $metasVendas = new MetasVendas();

            $meses = $fechamentosNegociacoes->meses;

            $analiseGeral = array(
                'Motivos' => array(),
                'Produtos' => array(),
                'Cancelamentos' => array(),
                'ReativacoesCancelamentos' => array(
                    'qtd' => 0,
                    'valor' => 0.00
                ),
                'Reativacoes' => array(
                    'qtd' => 0,
                    'valor' => 0.00
                ),
                'Adendos' => array(
                    'qtd' => 0,
                    'valor' => 0.00
                ),
                'Transferencias' => array(
                    'qtd' => 0,
                    'valor' => 0.00
                )
            );

            $metasGrupo = array(
                'mensalidade'         => array(),
                'implantacao'         => array(),
                'unidadesMensalidade' => array(),
                'unidadesImplantacao' => array()
            );

            $metaGrupoMensalidade = $metasVendas->find("
                MEV_ANO = \"{$ano}\" AND
                MEV_TIPO = \"" . MetasVendas::GLOBAL . "\" AND
                MEV_TIPO_COBRANCA = \"" . MetasVendas::META_MENSALIDADE . "\"
            ");
            if ($metaGrupoMensalidade) {
                foreach ($meses as $mes => $nomeMes) {
                    $id = substr($nomeMes, 0, 3);
                    $id = strtoupper($id);
                    $campo = "MEV_{$id}";

                    $metasGrupo['mensalidade'][$mes] = $metaGrupoMensalidade->{$campo};
                }
            }

            $metaGrupoImplantacao = $metasVendas->find("
                MEV_ANO = \"{$ano}\" AND
                MEV_TIPO = \"" . MetasVendas::GLOBAL . "\" AND
                MEV_TIPO_COBRANCA = \"" . MetasVendas::META_IMPLANTACAO . "\"
            ");
            if ($metaGrupoImplantacao) {
                foreach ($meses as $mes => $nomeMes) {
                    $id = substr($nomeMes, 0, 3);
                    $id = strtoupper($id);
                    $campo = "MEV_{$id}";

                    $metasGrupo['implantacao'][$mes] = $metaGrupoImplantacao->{$campo};
                }
            }

            $metasGrupo['unidadesMensalidade'] = $metasVendas->getRevendasMetasGrupo(
                MetasVendas::META_MENSALIDADE,
                $ano
            );
            $metasGrupo['unidadesImplantacao'] = $metasVendas->getRevendasMetasGrupo(
                MetasVendas::META_IMPLANTACAO,
                $ano
            );

            $metasForaDoGrupo = array(
                'mensalidade' => array(),
                'implantacao' => array()
            );

            $unidadesMensalidade = $metasVendas->getRevendasComMetasForaGrupo(MetasVendas::META_MENSALIDADE, $ano);
            if (!empty($unidadesMensalidade)) {
                $metasMensalidade = $metasVendas->findAll("
                    MEV_ANO = \"{$ano}\" AND
                    MEV_TIPO = \"" . MetasVendas::UNIDADE . "\" AND
                    MEV_TIPO_COBRANCA = \"" . MetasVendas::META_MENSALIDADE . "\" AND
                    MEV_FOREIGN_KEY IN ( " . implode(", ", $unidadesMensalidade) . ")
                ");
                if ($metasMensalidade) {
                    foreach ($metasMensalidade as $meta) {
                        $metasForaDoGrupo['mensalidade'][$meta->MEV_FOREIGN_KEY] = array();
                        foreach ($meses as $mes => $nomeMes) {
                            $id = substr($nomeMes, 0, 3);
                            $id = strtoupper($id);
                            $campo = "MEV_{$id}";

                            $valor = $meta->{$campo};
                            $metasForaDoGrupo['mensalidade'][$meta->MEV_FOREIGN_KEY][$mes] = $valor;
                        }
                    }
                }
            }

            $unidadesImplantacao = $metasVendas->getRevendasComMetasForaGrupo(MetasVendas::META_IMPLANTACAO, $ano);
            if (!empty($unidadesImplantacao)) {
                $metasImplantacao = $metasVendas->findAll("
                    MEV_ANO = \"{$ano}\" AND
                    MEV_TIPO = \"" . MetasVendas::UNIDADE . "\" AND
                    MEV_TIPO_COBRANCA = \"" . MetasVendas::META_IMPLANTACAO . "\" AND
                    MEV_FOREIGN_KEY IN ( " . implode(", ", $unidadesImplantacao) . ")
                ");
                if ($metasImplantacao) {
                    foreach ($metasImplantacao as $meta) {
                        $metasForaDoGrupo['implantacao'][$meta->MEV_FOREIGN_KEY] = array();
                        foreach ($meses as $mes => $nomeMes) {
                            $id = substr($nomeMes, 0, 3);
                            $id = strtoupper($id);
                            $campo = "MEV_{$id}";

                            $valor = $meta->{$campo};
                            $metasForaDoGrupo['implantacao'][$meta->MEV_FOREIGN_KEY][$mes] = $valor;
                        }
                    }
                }
            }

            $metasVsRealizado = array();
            foreach ($revendas as $key => $revenda) {
                $metasVsRealizado[$revenda->REV_IDREVENDA] = array(
                    'METAS_MENSALIDADE' => false,
                    'METAS_IMPLANTACAO' => false,
                    'VENDEDORES' => array(),
                    'CANCELAMENTOS' => 0
                );

                $metaMensalidadeUnidade = $metasVendas->find("
                    MEV_ANO = '{$ano}' AND
                    MEV_TIPO = " . MetasVendas::UNIDADE . " AND
                    MEV_TIPO_COBRANCA = " . MetasVendas::META_MENSALIDADE . " AND
                    MEV_FOREIGN_KEY = {$revenda->REV_IDREVENDA} AND
                    MEV_SOMA > 0 AND
                    MEV_RASCUNHO = 0
                ");
                $metaMensalidade = array();
                if ($metaMensalidadeUnidade) {
                    foreach ($meses as $mes => $nomeMes) {
                        $id = substr($nomeMes, 0, 3);
                        $id = strtoupper($id);
                        $campo = "MEV_{$id}";

                        $metaMensalidade[$mes] = $metaMensalidadeUnidade->{$campo};
                    }
                    $metaMensalidade['metaTransferida'] = !empty($metaMensalidadeUnidade->MetaTransferidaOriginal);
                } else {
                    $metaMensalidade = false;
                }
                $metasVsRealizado[$revenda->REV_IDREVENDA]['METAS_MENSALIDADE'] = $metaMensalidade;
                ###################################################################################
                $metaImplantacaoRevenda = $metasVendas->find("
                    MEV_ANO = '{$ano}' AND
                    MEV_TIPO = " . MetasVendas::UNIDADE . " AND
                    MEV_TIPO_COBRANCA = " . MetasVendas::META_IMPLANTACAO . " AND
                    MEV_FOREIGN_KEY = {$revenda->REV_IDREVENDA} AND
                    MEV_SOMA > 0 AND
                    MEV_RASCUNHO = 0
                ");
                $metaImplantacao = array();
                if ($metaImplantacaoRevenda) {
                    foreach ($meses as $mes => $nomeMes) {
                        $id = substr($nomeMes, 0, 3);
                        $id = strtoupper($id);
                        $campo = "MEV_{$id}";

                        $metaImplantacao[$mes] = $metaImplantacaoRevenda->{$campo};
                    }
                    $metaImplantacao['metaTransferida'] = !empty($metaImplantacaoRevenda->MetaTransferidaOriginal);
                } else {
                    $metaImplantacao = false;
                }
                $metasVsRealizado[$revenda->REV_IDREVENDA]['METAS_IMPLANTACAO'] = $metaImplantacao;
                ###################################################################################
                $vendedores = Funcionarios::model()->findAll("
                    FUN_IDREVENDA = {$revenda->REV_IDREVENDA} AND
                    (
                        FUN_IDSETOR = 5 OR
                        FUN_PRM_PRIVILEGIO = 9
                    ) AND
                    (
                        FUN_SITUACAO = \"A\" OR
                        (
                            FUN_SITUACAO = \"I\" AND EXISTS (
                                SELECT * FROM funcionarios_situacao
                                WHERE
                                    FUS_IDFUNCIONARIO = FUN_IDFUNCIONARIO AND
                                    FUS_SITUACAO = \"I\" AND
                                    YEAR(FUS_DATA) = {$ano}
                            )
                        )
                    )
                    ORDER BY FUN_NOME ASC
                ");
                if ($vendedores) {
                    foreach ($vendedores as $vendedor) {
                        $negociacoes = $fechamentosNegociacoes->with('Contrato')->findAll(array(
                            'condition' => "
                                FEN_IDVENDEDOR = {$vendedor->FUN_IDFUNCIONARIO} AND
                                (
                                    FEN_TIPO_NEGOCIACAO IN (
                                        'CLIENTES_NOVOS',
                                        'ADENDOS_COM_ACRESCIMO',
                                        'TRANSFERENCIAS_COM_ACRESCIMO'
                                    ) OR
                                    (
                                        FEN_TIPO_NEGOCIACAO = 'REATIVACOES_CLIENTES' AND
                                        (COT_CRIARNOVOCONTRATO = 0 OR COT_CRIARNOVOCONTRATO IS NULL)
                                    )
                                ) AND
                                FEN_STATUS = 1 AND
                                YEAR(FEN_DTCONTRATACAO) = {$ano}
                            ",
                            'order' => 'FEN_DTCONTRATACAO'
                        ));

                        $saldoMensalidades = array(
                            '01' => 0.00,
                            '02' => 0.00,
                            '03' => 0.00,
                            '04' => 0.00,
                            '05' => 0.00,
                            '06' => 0.00,
                            '07' => 0.00,
                            '08' => 0.00,
                            '09' => 0.00,
                            '10' => 0.00,
                            '11' => 0.00,
                            '12' => 0.00,
                        );

                        $saldoImplantacoes = array(
                            '01' => 0.00,
                            '02' => 0.00,
                            '03' => 0.00,
                            '04' => 0.00,
                            '05' => 0.00,
                            '06' => 0.00,
                            '07' => 0.00,
                            '08' => 0.00,
                            '09' => 0.00,
                            '10' => 0.00,
                            '11' => 0.00,
                            '12' => 0.00,
                        );

                        if ($negociacoes) {
                            foreach ($negociacoes as $negociacao) {
                                $cliente = $negociacao->Cliente;
                                $contrato = $negociacao->Contrato;

                                $idMotivo = $negociacao->FEN_IDMOTIVO ?? false;
                                if (
                                    !empty($idMotivo) &&
                                    !isset($analiseGeral['Motivos'][$idMotivo]) &&
                                    !in_array($idMotivo, [67, 79])
                                ) {
                                    $analiseGeral['Motivos'][$idMotivo] = array(
                                        'name' => $negociacao->Motivo->MOT_DESCRICAO,
                                        'qtd' => 0,
                                        'valor' => 0.00
                                    );
                                }

                                if ($negociacao->FEN_TIPO_NEGOCIACAO == "CLIENTES_NOVOS") {
                                    if (!in_array($idMotivo, [67, 79])) {
                                        $valor = $negociacao->FEN_VLRNEGOCIADO;

                                        $analiseGeral['Motivos'][$idMotivo]['qtd']++;
                                        $analiseGeral['Motivos'][$idMotivo]['valor'] += $valor;
                                    }
                                } elseif ($negociacao->FEN_TIPO_NEGOCIACAO == "REATIVACOES_CLIENTES") {
                                    $analiseGeral['Reativacoes']['qtd']++;
                                    $analiseGeral['Reativacoes']['valor'] += $negociacao->FEN_VLRNEGOCIADO;
                                } elseif (
                                    in_array(
                                        $negociacao->FEN_TIPO_NEGOCIACAO,
                                        ['ADENDOS_COM_ACRESCIMO', 'ADENDOS_SEM_ACRESCIMO']
                                    )
                                ) {
                                    $analiseGeral['Adendos']['qtd']++;
                                    $analiseGeral['Adendos']['valor'] += $negociacao->FEN_VLRDIFERENCA;
                                } else { // transferencia
                                    $analiseGeral['Transferencias']['qtd']++;
                                    $analiseGeral['Transferencias']['valor'] += $negociacao->FEN_VLRDIFERENCA;
                                }
                                ///
                                $produto = $negociacao->Produto;
                                $itens = !empty($negociacao->Itens) ? $negociacao->Itens : false;

                                $name = $produto->MOD_DESCRICAO;
                                $id = "0" . $negociacao->FEN_IDPRODUTO;
                                if ($itens) {
                                    $id = "Z_" . $negociacao->FEN_IDPRODUTO;
                                    $ids = CHtml::listData($itens, 'FNI_IDMODULO', 'FNI_IDMODULO');
                                    $id .= "_" . implode("_", $ids);

                                    $nomes = "";
                                    if (count($itens) > 1) {
                                        foreach ($itens as $k => $item) {
                                            $nomes .= $item->Modulo->getNomeProduto();
                                            if ($k != count($itens) - 1) {
                                                if ($k+1 == count($itens) - 1) {
                                                    $nomes .= " & ";
                                                } else {
                                                    $nomes .= ", ";
                                                }
                                            }
                                        }
                                    } else {
                                        $nomes .= $itens[0]->Modulo->getNomeProduto();
                                    }
                                    $name .= " c/ " . $nomes;
                                }

                                if (
                                    (
                                        $negociacao->FEN_TIPO_NEGOCIACAO == "CLIENTES_NOVOS" &&
                                        !in_array($idMotivo, [67, 79])
                                    ) ||
                                    $negociacao->FEN_TIPO_NEGOCIACAO == "REATIVACOES_CLIENTES"
                                ) {
                                    if (!isset($analiseGeral['Produtos'][$id])) {
                                        $analiseGeral['Produtos'][$id] = array(
                                            'name' => $name,
                                            'qtd' => 0,
                                            'valor' => 0.00
                                        );
                                    }
                                    $analiseGeral['Produtos'][$id]['qtd']++;
                                    $analiseGeral['Produtos'][$id]['valor'] += $negociacao->FEN_VLRNEGOCIADO;
                                }

                                //////////////////////////////////////
                                $dataVenda = $negociacao->FEN_DTCONTRATACAO;
                                if ($negociacao->FEN_TIPO_NEGOCIACAO == 'CANCELAMENTOS') {
                                    $dataVenda = $negociacao->FEN_DTRESCISAO;
                                }
                                $dateTime = DateTime::createFromFormat('d/m/Y', $dataVenda);
                                $mes = $dateTime->format('m');
                                ///
                                if (
                                    in_array(
                                        $negociacao->FEN_TIPO_NEGOCIACAO,
                                        ['CLIENTES_NOVOS', 'REATIVACOES_CLIENTES']
                                    )
                                ) {
                                    $saldoMensalidades[$mes] += $negociacao->FEN_VLRNEGOCIADO;
                                } else {
                                    $diferenca = $negociacao->FEN_VLRDIFERENCA;
                                    $saldoMensalidades[$mes] += $diferenca;
                                }

                                if (
                                    in_array(
                                        $negociacao->FEN_TIPO_NEGOCIACAO,
                                        [
                                            'CLIENTES_NOVOS',
                                            'REATIVACOES_CLIENTES',
                                            'ADENDOS_COM_ACRESCIMO',
                                            'ADENDOS_SEM_ACRESCIMO',
                                            'TRANSFERENCIAS_COM_ACRESCIMO',
                                            'TRANSFERENCIAS_SEM_ACRESCIMO',
                                        ]
                                    ) &&
                                    !empty($negociacao->FEN_VLRIMPLANTACAO)
                                ) {
                                    $saldoImplantacoes[$mes] += $negociacao->FEN_VLRIMPLANTACAO;
                                }
                            }
                        }

                        $codVendedor = $vendedor->FUN_IDFUNCIONARIO;
                        $metasVsRealizado[$revenda->REV_IDREVENDA]['VENDEDORES'][$codVendedor]['MENSALIDADE']['NEGOCIACOES'] = $saldoMensalidades;
                        $metasVsRealizado[$revenda->REV_IDREVENDA]['VENDEDORES'][$codVendedor]['IMPLANTACAO']['NEGOCIACOES'] = $saldoImplantacoes;

                        $metaMensalidadeVendedor = $metasVendas->find("
                            MEV_ANO = '{$ano}' AND
                            MEV_TIPO = " . MetasVendas::VENDEDOR . " AND
                            MEV_TIPO_COBRANCA = " . MetasVendas::META_MENSALIDADE . " AND
                            MEV_FOREIGN_KEY = {$codVendedor} AND
                            MEV_RASCUNHO = 0
                        ");
                        if ($metaMensalidadeVendedor) {
                            $metaMensalidade = array();
                            foreach ($meses as $mes => $nomeMes) {
                                $id = substr($nomeMes, 0, 3);
                                $id = strtoupper($id);
                                $campo = "MEV_{$id}";

                                $metaMensalidade[$mes] = $metaMensalidadeVendedor->{$campo};
                            }
                            $metasVsRealizado[$revenda->REV_IDREVENDA]['VENDEDORES'][$codVendedor]['MENSALIDADE']['METAS'] = $metaMensalidade;
                        } else {
                            $metasVsRealizado[$revenda->REV_IDREVENDA]['VENDEDORES'][$codVendedor]['MENSALIDADE']['METAS'] = false;
                        }

                        $metaImplantacaoVendedor = $metasVendas->find("
                            MEV_ANO = '{$ano}' AND
                            MEV_TIPO = " . MetasVendas::VENDEDOR . " AND
                            MEV_TIPO_COBRANCA = " . MetasVendas::META_IMPLANTACAO . " AND
                            MEV_FOREIGN_KEY = {$codVendedor} AND
                            MEV_RASCUNHO = 0
                        ");
                        if ($metaImplantacaoVendedor) {
                            $metaImplantacao = array();
                            foreach ($meses as $mes => $nomeMes) {
                                $id = substr($nomeMes, 0, 3);
                                $id = strtoupper($id);
                                $campo = "MEV_{$id}";

                                $metaImplantacao[$mes] = $metaImplantacaoVendedor->{$campo};
                            }
                            $metasVsRealizado[$revenda->REV_IDREVENDA]['VENDEDORES'][$codVendedor]['IMPLANTACAO']['METAS'] = $metaImplantacao;
                        } else {
                            $metasVsRealizado[$revenda->REV_IDREVENDA]['VENDEDORES'][$codVendedor]['IMPLANTACAO']['METAS'] = false;
                        }
                    }
                }
                ###################################################################################
                $cancelamentos = $fechamentosNegociacoes->findAll(array(
                    'condition' => "
                        FEN_IDREVENDA = {$revenda->REV_IDREVENDA} AND
                        FEN_TIPO_NEGOCIACAO = 'CANCELAMENTOS' AND
                        YEAR(FEN_DTRESCISAO) = {$ano}
                    ",
                    'order' => 'FEN_DTRESCISAO'
                ));
                if ($cancelamentos) {
                    $somaCancelamentos = array(
                        '01' => array('qtd' => 0, 'valor' => 0.00),
                        '02' => array('qtd' => 0, 'valor' => 0.00),
                        '03' => array('qtd' => 0, 'valor' => 0.00),
                        '04' => array('qtd' => 0, 'valor' => 0.00),
                        '05' => array('qtd' => 0, 'valor' => 0.00),
                        '06' => array('qtd' => 0, 'valor' => 0.00),
                        '07' => array('qtd' => 0, 'valor' => 0.00),
                        '08' => array('qtd' => 0, 'valor' => 0.00),
                        '09' => array('qtd' => 0, 'valor' => 0.00),
                        '10' => array('qtd' => 0, 'valor' => 0.00),
                        '11' => array('qtd' => 0, 'valor' => 0.00),
                        '12' => array('qtd' => 0, 'valor' => 0.00),
                    );

                    foreach ($cancelamentos as $cancelamento) {
                        $dateTime = DateTime::createFromFormat('d/m/Y', $cancelamento->FEN_DTRESCISAO);
                        $mes = $dateTime->format('m');

                        $idMotivo = $cancelamento->FEN_IDMOTIVO;
                        if (!isset($analiseGeral['Cancelamentos'][$idMotivo])) {
                            $analiseGeral['Cancelamentos'][$idMotivo] = array(
                                'name' => $cancelamento->Motivo->MOT_DESCRICAO ?? "Não informado",
                                'qtd' => 0,
                                'valor' => 0.00
                            );
                        }
                        $analiseGeral['Cancelamentos'][$idMotivo]['qtd']++;
                        $analiseGeral['Cancelamentos'][$idMotivo]['valor'] += $cancelamento->FEN_VLRNEGOCIADO;

                        $somaCancelamentos[$mes]['qtd']++;
                        $somaCancelamentos[$mes]['valor'] += $cancelamento->FEN_VLRNEGOCIADO;

                        $reativado = $cancelamento->foiReativado();
                        if ($reativado) {
                            $analiseGeral['ReativacoesCancelamentos']['qtd']++;
                            $analiseGeral['ReativacoesCancelamentos']['valor'] += $reativado->FEN_VLRNEGOCIADO;
                        }
                    }
                    $metasVsRealizado[$revenda->REV_IDREVENDA]['CANCELAMENTOS'] = $somaCancelamentos;
                }
            }

            if (!empty($analiseGeral['Produtos'])) {
                $produtos = $analiseGeral['Produtos'];
                ksort($produtos);
                $analiseGeral['Produtos'] = $produtos;
            }

            Yii::app()->request->sendFile(
                'planilha-metas-realizado-grupo-'. date('Ymd-His') . '.xlsx',
                $this->renderPartial('metasVsRealizadoGrupoExcel', array(
                    'ano' => $ano,
                    'mesComparativo' => $mesComparativo,
                    'fechamentosNegociacoes' => $fechamentosNegociacoes,
                    'metasGrupo' => $metasGrupo,
                    'metasForaDoGrupo' => $metasForaDoGrupo,
                    'metasVsRealizado' => $metasVsRealizado,
                    'analiseGeral' => $analiseGeral,
                ), true),
                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true
            );
        } else {
            return false;
        }
    }

    private function actionExportarMetasVsRealizadoUnidade($ano, $revenda)
    {
        $fechamentosNegociacoes = new FechamentosNegociacoes();
        $meses = Util::getMeses();

        if ($ano == date('Y')) {
            $mesesRelatorio = array();
            for ($i=1; $i <= date('m'); $i++) {
                $mes = ($i < 10) ? "0{$i}" : $i;
                $mesesRelatorio[] = $mes;
            }
        } else {
            $mesesRelatorio = array_keys($meses);
        }

        $analiseGeral = array(
            'Motivos' => array(),
            'Produtos' => array(),
            'Cancelamentos' => array(),
            'ReativacoesCancelamentos' => array(
                'qtd' => 0,
                'valor' => 0.00,
                'qtdVendedor' => 0,
                'valorVendedor' => 0.00,
            ),
            'Adendos' => array(
                'qtd' => 0,
                'mensalidade' => 0.00,
                'implantacao' => 0.00,
            ),
            'Reativacoes' => array(
                'qtd' => 0,
                'mensalidade' => 0.00,
                'implantacao' => 0.00,
            ),
            'Transferencias' => array(
                'qtd' => 0,
                'mensalidade' => 0.00,
                'implantacao' => 0.00,
            )
        );

        $metasVsRealizado = array(
            'METAS_MENSALIDADE' => false,
            'METAS_IMPLANTACAO' => false,
            'VENDEDORES' => array(),
            'NEGOCIACOES' => array(),
            'SALDOS' => array(),
            'CANCELAMENTOS' => array(
                'meses' => array(),
                'negociacoes' => array(),
            )
        );
        $metaMensalidadeUnidade = MetasVendas::model()->find("
            MEV_ANO = '{$ano}' AND
            MEV_TIPO = " . MetasVendas::UNIDADE . " AND
            MEV_TIPO_COBRANCA = " . MetasVendas::META_MENSALIDADE . " AND
            MEV_FOREIGN_KEY = {$revenda->REV_IDREVENDA} AND
            MEV_RASCUNHO = 0
        ");
        $metaMensalidade = array();
        if ($metaMensalidadeUnidade) {
            foreach ($meses as $mes => $nomeMes) {
                $id = substr($nomeMes, 0, 3);
                $id = strtoupper($id);
                $campo = "MEV_{$id}";

                $metaMensalidade[$mes] = $metaMensalidadeUnidade->{$campo};
            }
        } else {
            $metaMensalidade = false;
        }
        $metasVsRealizado['METAS_MENSALIDADE'] = $metaMensalidade;
        ########################################################################
        $metaImplantacaoRevenda = MetasVendas::model()->find("
            MEV_ANO = '{$ano}' AND
            MEV_TIPO = " . MetasVendas::UNIDADE . " AND
            MEV_TIPO_COBRANCA = " . MetasVendas::META_IMPLANTACAO . " AND
            MEV_FOREIGN_KEY = {$revenda->REV_IDREVENDA} AND
            MEV_RASCUNHO = 0
        ");
        $metaImplantacao = array();
        if ($metaImplantacaoRevenda) {
            foreach ($meses as $mes => $nomeMes) {
                $id = substr($nomeMes, 0, 3);
                $id = strtoupper($id);
                $campo = "MEV_{$id}";

                $metaImplantacao[$mes] = $metaImplantacaoRevenda->{$campo};
            }
        } else {
            $metaImplantacao = false;
        }
        $metasVsRealizado['METAS_IMPLANTACAO'] = $metaImplantacao;
        ########################################################################
        $vendedores = Funcionarios::model()->findAll("
            FUN_IDREVENDA = {$revenda->REV_IDREVENDA} AND
            (
                FUN_IDSETOR = 5 OR
                FUN_PRM_PRIVILEGIO = 9
            ) AND
            (
                FUN_SITUACAO = \"A\" OR
                (
                    FUN_SITUACAO = \"I\" AND EXISTS (
                        SELECT * FROM funcionarios_situacao
                        WHERE
                            FUS_IDFUNCIONARIO = FUN_IDFUNCIONARIO AND
                            FUS_SITUACAO = \"I\" AND
                            YEAR(FUS_DATA) = {$ano}
                    )
                )
            )
            ORDER BY FUN_NOME
        ");
        if ($vendedores) {
            $codVendedores = CHtml::listData($vendedores, 'FUN_IDFUNCIONARIO', 'FUN_IDFUNCIONARIO');
            $codVendedores = implode(", ", $codVendedores);

            $saldoMensalidadesGeral = array(
                '01' => 0.00,
                '02' => 0.00,
                '03' => 0.00,
                '04' => 0.00,
                '05' => 0.00,
                '06' => 0.00,
                '07' => 0.00,
                '08' => 0.00,
                '09' => 0.00,
                '10' => 0.00,
                '11' => 0.00,
                '12' => 0.00,
            );

            $saldoImplantacoesGeral = array(
                '01' => 0.00,
                '02' => 0.00,
                '03' => 0.00,
                '04' => 0.00,
                '05' => 0.00,
                '06' => 0.00,
                '07' => 0.00,
                '08' => 0.00,
                '09' => 0.00,
                '10' => 0.00,
                '11' => 0.00,
                '12' => 0.00,
            );

            $negociacoes = $fechamentosNegociacoes->with('Contrato')->findAll(array(
                'condition' => "
                    FEN_IDREVENDA = {$revenda->REV_IDREVENDA} AND
                    (
                        FEN_TIPO_NEGOCIACAO IN (
                            'CLIENTES_NOVOS',
                            'ADENDOS_COM_ACRESCIMO',
                            'TRANSFERENCIAS_COM_ACRESCIMO'
                        ) OR
                        (
                            FEN_TIPO_NEGOCIACAO = 'REATIVACOES_CLIENTES' AND
                            (COT_CRIARNOVOCONTRATO = 0 OR COT_CRIARNOVOCONTRATO IS NULL)
                        )
                    ) AND
                    FEN_STATUS = 1 AND
                    YEAR(FEN_DTCONTRATACAO) = {$ano}
                ",
                'order' => 'FEN_DTCONTRATACAO'
            ));
            $metasVsRealizado['NEGOCIACOES'] = $negociacoes;

            foreach ($vendedores as $vendedor) {
                $codVendedor = $vendedor->FUN_IDFUNCIONARIO;
                $negociacoes = $fechamentosNegociacoes->with('Contrato')->findAll(array(
                    'condition' => "
                        FEN_IDVENDEDOR = {$vendedor->FUN_IDFUNCIONARIO} AND
                        (
                            FEN_TIPO_NEGOCIACAO IN (
                                'CLIENTES_NOVOS',
                                'ADENDOS_COM_ACRESCIMO',
                                'TRANSFERENCIAS_COM_ACRESCIMO'
                            ) OR
                            (
                                FEN_TIPO_NEGOCIACAO = 'REATIVACOES_CLIENTES' AND
                                (COT_CRIARNOVOCONTRATO = 0 OR COT_CRIARNOVOCONTRATO IS NULL)
                            )
                        ) AND
                        FEN_STATUS = 1 AND
                        YEAR(FEN_DTCONTRATACAO) = {$ano}
                    ",
                    'order' => 'FEN_DTCONTRATACAO'
                ));

                if (!isset($metasVsRealizado['VENDEDORES'][$codVendedor])) {
                    $metasVsRealizado['VENDEDORES'][$codVendedor] = array(
                        'dadosVendedor' => $vendedor,
                        'Motivos' => array(),
                        'Produtos' => array(),
                        'Adendos' => array(
                            'qtd' => 0,
                            'mensalidade' => 0.00,
                            'implantacao' => 0.00
                        ),
                        'Reativacoes' => array(
                            'qtd' => 0,
                            'mensalidade' => 0.00,
                            'implantacao' => 0.00,
                        ),
                        'Transferencias' => array(
                            'qtd' => 0,
                            'mensalidade' => 0.00,
                            'implantacao' => 0.00,
                        ),
                        'MesesAtividade' => false,
                        'MENSALIDADE' => array(
                            'NEGOCIACOES' => false,
                            'METAS'       => false,
                        ),
                        'IMPLANTACAO' => array(
                            'NEGOCIACOES' => false,
                            'METAS'       => false,
                        )
                    );

                    $saldoMensalidades = array(
                        '01' => 0.00,
                        '02' => 0.00,
                        '03' => 0.00,
                        '04' => 0.00,
                        '05' => 0.00,
                        '06' => 0.00,
                        '07' => 0.00,
                        '08' => 0.00,
                        '09' => 0.00,
                        '10' => 0.00,
                        '11' => 0.00,
                        '12' => 0.00,
                    );

                    $saldoImplantacoes = array(
                        '01' => 0.00,
                        '02' => 0.00,
                        '03' => 0.00,
                        '04' => 0.00,
                        '05' => 0.00,
                        '06' => 0.00,
                        '07' => 0.00,
                        '08' => 0.00,
                        '09' => 0.00,
                        '10' => 0.00,
                        '11' => 0.00,
                        '12' => 0.00,
                    );
                }

                if (!$metasVsRealizado['VENDEDORES'][$codVendedor]['MesesAtividade']) {
                    if ($vendedor->FUN_SITUACAO == "A") {
                        $dataMaxima = DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s'));
                        if ($dataMaxima->format('Y') != $ano) {
                            $dataMaxima = DateTime::createFromFormat('Y-m-d H:i:s', "{$ano}-12-31 23:59:59");
                        }

                        $dataComparacao = DateTime::createFromFormat('Y-m-d H:i:s', "{$ano}-01-01 08:00:00");

                        $dataAtivacao = DateTime::createFromFormat('d/m/Y H:i:s', $vendedor->FUN_DATAATIVACAO);

                        if ($dataAtivacao) {
                            $anoAtivacao = $dataAtivacao->format('Y');
                            if ($anoAtivacao == $ano)  {
                                $dataComparacao = $dataAtivacao;
                            }
                        }
                        $diferenca = $dataMaxima->diff($dataComparacao);
                        $diferencaMeses = $diferenca->m + 1;

                        $metasVsRealizado['VENDEDORES'][$codVendedor]['MesesAtividade'] = $diferencaMeses;
                    } else {
                        $dataInativacao = DateTime::createFromFormat('d/m/Y H:i:s', $vendedor->FUN_DATAINATIVACAO);
                        $dataComparacao = DateTime::createFromFormat('Y-m-d H:i:s', "{$ano}-01-01 08:00:00");

                        $dataAtivacao = DateTime::createFromFormat('d/m/Y H:i:s', $vendedor->FUN_DATAATIVACAO);
                        if ($dataAtivacao) {
                            $anoAtivacao = $dataAtivacao->format('Y');
                            if ($anoAtivacao == $ano)  {
                                $dataComparacao = $dataAtivacao;
                            }
                        }

                        $diferenca = $dataInativacao->diff($dataComparacao);
                        $diferencaMeses = $diferenca->m + 1;

                        $metasVsRealizado['VENDEDORES'][$codVendedor]['MesesAtividade'] = $diferencaMeses;
                    }
                }

                if ($negociacoes) {
                    foreach ($negociacoes as $negociacao) {
                        $cliente = $negociacao->Cliente;
                        $contrato = $negociacao->Contrato;

                        $dataVenda = $negociacao->FEN_DTCONTRATACAO;
                        $dateTime = DateTime::createFromFormat('d/m/Y', $dataVenda);
                        $mes = $dateTime->format('m');
                        if (in_array($negociacao->FEN_TIPO_NEGOCIACAO, ['CLIENTES_NOVOS', 'REATIVACOES_CLIENTES'])) {
                            $saldoMensalidades[$mes] += $negociacao->FEN_VLRNEGOCIADO;
                        } else {
                            $diferenca = $negociacao->FEN_VLRDIFERENCA;
                            $saldoMensalidades[$mes] += $diferenca;
                        }

                        if (!empty($negociacao->FEN_VLRIMPLANTACAO)) {
                            $saldoImplantacoes[$mes] += $negociacao->FEN_VLRIMPLANTACAO;
                        }

                        $idMotivo = $negociacao->FEN_IDMOTIVO;
                        if (
                            !isset($analiseGeral['Motivos'][$idMotivo]) &&
                            $negociacao->FEN_TIPO_NEGOCIACAO == "CLIENTES_NOVOS" &&
                            !in_array($idMotivo, [67, 79])
                        ) {
                            $analiseGeral['Motivos'][$idMotivo] = array(
                                'name' => $negociacao->Motivo->MOT_DESCRICAO ?? "-",
                                'qtd' => 0,
                                'mensalidade' => 0.00,
                                'implantacao' => 0.00,
                            );
                        }

                        if (
                            !isset($metasVsRealizado['VENDEDORES'][$codVendedor]['Motivos'][$idMotivo]) &&
                            $negociacao->FEN_TIPO_NEGOCIACAO == "CLIENTES_NOVOS" &&
                            !in_array($idMotivo, [67, 79])
                        ) {
                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Motivos'][$idMotivo] = array(
                                'name' => $negociacao->Motivo->MOT_DESCRICAO ?? "-",
                                'qtd' => 0,
                                'mensalidade' => 0.00,
                                'implantacao' => 0.00,
                            );
                        }

                        if ($negociacao->FEN_TIPO_NEGOCIACAO == "CLIENTES_NOVOS") {
                            if (!in_array($idMotivo, [67, 79])) {
                                $analiseGeral['Motivos'][$idMotivo]['qtd']++;
                                $analiseGeral['Motivos'][$idMotivo]['mensalidade'] += $negociacao->FEN_VLRNEGOCIADO;
                                $analiseGeral['Motivos'][$idMotivo]['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;

                                $metasVsRealizado['VENDEDORES'][$codVendedor]['Motivos'][$idMotivo]['qtd']++;
                                $metasVsRealizado['VENDEDORES'][$codVendedor]['Motivos'][$idMotivo]['mensalidade'] += $negociacao->FEN_VLRNEGOCIADO;
                                $metasVsRealizado['VENDEDORES'][$codVendedor]['Motivos'][$idMotivo]['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;
                            }
                        } elseif ($negociacao->FEN_TIPO_NEGOCIACAO == "REATIVACOES_CLIENTES") {
                            $analiseGeral['Reativacoes']['qtd']++;
                            $analiseGeral['Reativacoes']['mensalidade'] += $negociacao->FEN_VLRNEGOCIADO;
                            $analiseGeral['Reativacoes']['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;

                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Reativacoes']['qtd']++;
                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Reativacoes']['mensalidade'] += $negociacao->FEN_VLRNEGOCIADO;
                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Reativacoes']['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;
                        } elseif (
                            in_array(
                                $negociacao->FEN_TIPO_NEGOCIACAO,
                                ['ADENDOS_COM_ACRESCIMO', 'ADENDOS_SEM_ACRESCIMO']
                            )
                        ) {
                            $analiseGeral['Adendos']['qtd']++;
                            $analiseGeral['Adendos']['mensalidade'] += $negociacao->FEN_VLRDIFERENCA;
                            $analiseGeral['Adendos']['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;

                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Adendos']['qtd']++;
                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Adendos']['mensalidade'] += $negociacao->FEN_VLRDIFERENCA;
                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Adendos']['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;
                        } else { // transferencia
                            $analiseGeral['Transferencias']['qtd']++;
                            $analiseGeral['Transferencias']['mensalidade'] += $negociacao->FEN_VLRDIFERENCA;
                            $analiseGeral['Transferencias']['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;

                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Transferencias']['qtd']++;
                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Transferencias']['mensalidade'] += $negociacao->FEN_VLRNEGOCIADO;
                            $metasVsRealizado['VENDEDORES'][$codVendedor]['Transferencias']['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;
                        }

                        if (!empty($negociacao->Produto)) {
                            $produto = $negociacao->Produto;

                            $name = $produto->MOD_DESCRICAO;
                            $idProduto = "0" . $negociacao->FEN_IDPRODUTO;

                            $itens = !empty($negociacao->Itens) ? $negociacao->Itens : false;
                            if ($itens) {
                                $idProduto = "Z_" . $negociacao->FEN_IDPRODUTO;
                                $ids = CHtml::listData($itens, 'FNI_IDMODULO', 'FNI_IDMODULO');
                                $idProduto .= "_" . implode("_", $ids);

                                $nomes = "";
                                if (count($itens) > 1) {
                                    foreach ($itens as $k => $item) {
                                        $nomes .= $item->Modulo->getNomeProduto();
                                        if ($k != count($itens) - 1) {
                                            if ($k+1 == count($itens) - 1) {
                                                $nomes .= " & ";
                                            } else {
                                                $nomes .= ", ";
                                            }
                                        }
                                    }
                                } else {
                                    $nomes .= $itens[0]->Modulo->getNomeProduto();
                                }
                                $name .= " c/ " . $nomes;
                            }

                            if (
                                (
                                    $negociacao->FEN_TIPO_NEGOCIACAO == "CLIENTES_NOVOS" &&
                                    !in_array($idMotivo, [67, 79])
                                ) ||
                                $negociacao->FEN_TIPO_NEGOCIACAO == "REATIVACOES_CLIENTES"
                            ) {
                                if (!isset($analiseGeral['Produtos'][$idProduto])) {
                                    $analiseGeral['Produtos'][$idProduto] = array(
                                        'name' => $name,
                                        'qtd' => 0,
                                        'mensalidade' => 0.00,
                                        'implantacao' => 0.00,
                                    );
                                }
                                if (!isset($metasVsRealizado['VENDEDORES'][$codVendedor]['Produtos'][$idProduto])) {
                                    $metasVsRealizado['VENDEDORES'][$codVendedor]['Produtos'][$idProduto] = array(
                                        'name' => $name,
                                        'qtd' => 0,
                                        'mensalidade' => 0.00,
                                        'implantacao' => 0.00
                                    );
                                }

                                $analiseGeral['Produtos'][$idProduto]['qtd']++;
                                $analiseGeral['Produtos'][$idProduto]['mensalidade'] += $negociacao->FEN_VLRNEGOCIADO;
                                $analiseGeral['Produtos'][$idProduto]['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;

                                $metasVsRealizado['VENDEDORES'][$codVendedor]['Produtos'][$idProduto]['qtd']++;
                                $metasVsRealizado['VENDEDORES'][$codVendedor]['Produtos'][$idProduto]['mensalidade'] += $negociacao->FEN_VLRNEGOCIADO;
                                $metasVsRealizado['VENDEDORES'][$codVendedor]['Produtos'][$idProduto]['implantacao'] += $negociacao->FEN_VLRIMPLANTACAO;
                            }
                        }

                        //////////////////////////////////////
                        $dataVenda = $negociacao->FEN_DTCONTRATACAO;
                        if ($negociacao->FEN_TIPO_NEGOCIACAO == 'CANCELAMENTOS') {
                            $dataVenda = $negociacao->FEN_DTRESCISAO;
                        }
                        $dateTime = DateTime::createFromFormat('d/m/Y', $dataVenda);
                        $mes = $dateTime->format('m');
                        ///
                        if ($negociacao->FEN_TIPO_NEGOCIACAO == 'CLIENTES_NOVOS') {
                            $saldoMensalidadesGeral[$mes] += $negociacao->FEN_VLRNEGOCIADO;
                        } elseif ($negociacao->FEN_TIPO_NEGOCIACAO == 'ADENDOS_COM_ACRESCIMO') {
                            $diferenca = $negociacao->FEN_VLRDIFERENCA;
                            $saldoMensalidadesGeral[$mes] += $diferenca;
                        }

                        if (!empty($negociacao->FEN_VLRIMPLANTACAO)) {
                            $saldoImplantacoesGeral[$mes] += $negociacao->FEN_VLRIMPLANTACAO;
                        }
                    }

                    $metasVsRealizado['VENDEDORES'][$codVendedor]['MENSALIDADE']['NEGOCIACOES'] = $saldoMensalidades;
                    $metasVsRealizado['VENDEDORES'][$codVendedor]['IMPLANTACAO']['NEGOCIACOES'] = $saldoImplantacoes;

                    $metaMensalidadeVendedor = MetasVendas::model()->find("
                        MEV_ANO = '{$ano}' AND
                        MEV_TIPO = " . MetasVendas::VENDEDOR . " AND
                        MEV_TIPO_COBRANCA = " . MetasVendas::META_MENSALIDADE . " AND
                        MEV_FOREIGN_KEY = {$codVendedor} AND
                        MEV_RASCUNHO = 0
                    ");
                    if ($metaMensalidadeVendedor) {
                        $metaMensalidade = array();
                        foreach ($meses as $mes => $nomeMes) {
                            $id = substr($nomeMes, 0, 3);
                            $id = strtoupper($id);
                            $campo = "MEV_{$id}";

                            $metaMensalidade[$mes] = $metaMensalidadeVendedor->{$campo};
                        }
                        $metasVsRealizado['VENDEDORES'][$codVendedor]['MENSALIDADE']['METAS'] = $metaMensalidade;
                    }

                    $metaImplantacaoVendedor = MetasVendas::model()->find("
                        MEV_ANO = '{$ano}' AND
                        MEV_TIPO = " . MetasVendas::VENDEDOR . " AND
                        MEV_TIPO_COBRANCA = " . MetasVendas::META_IMPLANTACAO . " AND
                        MEV_FOREIGN_KEY = {$codVendedor} AND
                        MEV_RASCUNHO = 0
                    ");
                    if ($metaImplantacaoVendedor) {
                        $metaImplantacao = array();
                        foreach ($meses as $mes => $nomeMes) {
                            $id = substr($nomeMes, 0, 3);
                            $id = strtoupper($id);
                            $campo = "MEV_{$id}";

                            $metaImplantacao[$mes] = $metaImplantacaoVendedor->{$campo};
                        }
                        $metasVsRealizado['VENDEDORES'][$codVendedor]['IMPLANTACAO']['METAS'] = $metaImplantacao;
                    }
                }

                if (!empty($metasVsRealizado['VENDEDORES'][$codVendedor]['Produtos'])) {
                    $produtos = $metasVsRealizado['VENDEDORES'][$codVendedor]['Produtos'];
                    ksort($produtos);
                    $metasVsRealizado['VENDEDORES'][$codVendedor]['Produtos'] = $produtos;
                }
            }

            $metasVsRealizado['SALDOS']['MENSALIDADE'] = $saldoMensalidadesGeral;
            $metasVsRealizado['SALDOS']['IMPLANTACAO'] = $saldoImplantacoesGeral;
        }
        ########################################################################
        $cancelamentos = $fechamentosNegociacoes->findAll(array(
            'condition' => "
                FEN_IDREVENDA = {$revenda->REV_IDREVENDA} AND
                FEN_TIPO_NEGOCIACAO = 'CANCELAMENTOS' AND
                YEAR(FEN_DTRESCISAO) = {$ano} AND
                FEN_STATUS = 1
            ",
            'order' => 'FEN_DTRESCISAO'
        ));
        if ($cancelamentos) {
            $metasVsRealizado['CANCELAMENTOS']['negociacoes'] = $cancelamentos;
            //
            $somaCancelamentos = array(
                '01' => array('qtd' => 0, 'valor' => 0.00),
                '02' => array('qtd' => 0, 'valor' => 0.00),
                '03' => array('qtd' => 0, 'valor' => 0.00),
                '04' => array('qtd' => 0, 'valor' => 0.00),
                '05' => array('qtd' => 0, 'valor' => 0.00),
                '06' => array('qtd' => 0, 'valor' => 0.00),
                '07' => array('qtd' => 0, 'valor' => 0.00),
                '08' => array('qtd' => 0, 'valor' => 0.00),
                '09' => array('qtd' => 0, 'valor' => 0.00),
                '10' => array('qtd' => 0, 'valor' => 0.00),
                '11' => array('qtd' => 0, 'valor' => 0.00),
                '12' => array('qtd' => 0, 'valor' => 0.00),
            );

            $motivosTipoCancelamento = Motivos::model()->findAll("
                MOT_TIPO = 3
                ORDER BY MOT_DESCRICAO
            ");
            foreach ($motivosTipoCancelamento as $key => $motivo) {
                if($motivo->MOT_IDMOTIVO != 110) {
                    $analiseGeral['Cancelamentos'][$motivo->MOT_IDMOTIVO] = array(
                        'name' => $motivo->MOT_DESCRICAO,
                        'motivoCliente' => array(
                            'qtd' => 0,
                            'valor' => 0.00
                        ),
                        'motivoVendedor' => array(
                            'qtd' => 0,
                            'valor' => 0.00
                        )
                    );
                }
            }
            $analiseGeral['Cancelamentos'][0] = array(
                'name' => "Não Informado",
                'motivoCliente' => array(
                    'qtd' => 0,
                    'valor' => 0.00
                ),
                'motivoVendedor' => array(
                    'qtd' => 0,
                    'valor' => 0.00
                )
            );

            foreach ($cancelamentos as $cancelamento) {
                $motivoCliente = $cancelamento->FEN_IDMOTIVO;
                $motivoVendedor = $cancelamento->FEN_IDMOTIVO_VENDEDOR;

                $dateTime = DateTime::createFromFormat('d/m/Y', $cancelamento->FEN_DTRESCISAO);
                $mes = $dateTime->format('m');

                if($motivoCliente != 110) {
                    $analiseGeral['Cancelamentos'][$motivoCliente]['motivoCliente']['qtd']++;
                    $analiseGeral['Cancelamentos'][$motivoCliente]['motivoCliente']['valor'] += $cancelamento->FEN_VLRNEGOCIADO;
                }

                if($motivoVendedor != 110) {
                    if (!empty($motivoVendedor)) {
                        $analiseGeral['Cancelamentos'][$motivoVendedor]['motivoVendedor']['qtd']++;
                        $analiseGeral['Cancelamentos'][$motivoVendedor]['motivoVendedor']['valor'] += $cancelamento->FEN_VLRNEGOCIADO;
                    }
                }

                $somaCancelamentos[$mes]['qtd']++;
                $somaCancelamentos[$mes]['valor'] += $cancelamento->FEN_VLRNEGOCIADO;

                $reativacao = $cancelamento->foiReativado("{$ano}-12-31");
                if ($reativacao) {
                    $analiseGeral['ReativacoesCancelamentos']['qtd']++;
                    $analiseGeral['ReativacoesCancelamentos']['valor'] += $reativacao->FEN_VLRNEGOCIADO;
                    if (!empty($cancelamento->SolicitacaoCancelamento)) {
                        $analiseGeral['ReativacoesCancelamentos']['qtdVendedor']++;
                        $analiseGeral['ReativacoesCancelamentos']['valorVendedor'] += $reativacao->FEN_VLRNEGOCIADO;
                    }
                }

            }
            $metasVsRealizado['CANCELAMENTOS']['meses'] = $somaCancelamentos;
        }

        if (!empty($analiseGeral['Produtos'])) {
            Util::arraySortByColumn($analiseGeral['Produtos'], 'name', SORT_ASC);
        }

        $anoAnterior = $ano - 1;
        $clientesAtivosAnoAnterior = FechamentosEvolucaoClientes::model()->find("
            FEC_IDREVENDA = {$revenda->REV_IDREVENDA} AND
            YEAR(FEC_DATA) = {$anoAnterior}
            ORDER BY FEC_DATA
        ");

        Yii::app()->request->sendFile(
            'planilha-metas-realizado-unidade-'. date('Ymd-His') . '.xlsx',
            $this->renderPartial('metasVsRealizadoUnidadesExcel', array(
                'ano' => $ano,
                'mesesRelatorio' => $mesesRelatorio,
                'fechamentosNegociacoes' => $fechamentosNegociacoes,
                'revenda' => $revenda,
                'metasVsRealizado' => $metasVsRealizado,
                'analiseGeral' => $analiseGeral,
                'clientesAtivosAnoAnterior' => $clientesAtivosAnoAnterior,
            ), true),
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true
        );
    }

    private function getNegociacoesNovosClientes($ano)
    {
        if ($ano == date('Y')) {
            $meses = array();
            for ($i=1; $i <= date('m'); $i++) {
                $mes = ($i < 10) ? "0{$i}" : $i;
                $meses[] = $mes;
            }
        } else {
            $meses = FechamentosNegociacoes::model()->meses;
            $meses = array_keys($meses);
        }

        $novosClientes = array();
        $adendos = array();
        $cancelamentos = array();
        foreach ($meses as $mes) {
            $dataInicio = "{$ano}-{$mes}-01";
            $date = DateTime::createFromFormat('Y-m-d', $dataInicio);
            $date->modify('last day of this month');
            $dataFim = $date->format('Y-m-d');

            $revendas = Revendas::model()->findAll("
                (
                    REV_SITUACAO = 'A' OR
                    (
                        REV_SITUACAO = 'I' AND EXISTS (
                            SELECT * FROM revendas_situacao
                            WHERE
                                REVS_IDREVENDA = REV_IDREVENDA AND
                                REVS_SITUACAO = 'I' AND
                                YEAR(REVS_DATA) = {$ano}
                        )
                    )
                ) AND
                REV_DATAATIVACAO <= '{$dataFim} 00:00:00'
                ORDER BY REV_FANTASIA
            ");
            $revendas = CHtml::listData($revendas, 'REV_IDREVENDA', 'REV_IDREVENDA');

            $condition = "COT_IDREVENDA IN (" . implode(", ", $revendas) . ")";

            $codContrato = Contratos::CONTRATO;
            $sql = "
                (
                    SELECT
                        clientes.*,
                        contratos.*
                    FROM `clientes`
                    INNER JOIN contratos ON
                         CLI_IDCLIENTE = COT_IDCLIENTE AND
                         COT_SITUACAO = {$codContrato}
                    INNER JOIN atendimentos ON
                        ATD_IDCONTRATO = COT_IDCONTRATO AND
                        ATD_IDMOTIVO = 14
                    WHERE
                        CLI_SITUACAO = 'I' AND
                        COT_DTATIVACAO >= '{$dataInicio}' AND
                        COT_DTATIVACAO <= '{$dataFim}' AND
                        {$condition}
                )
                UNION
                (
                    SELECT * FROM `clientes`
                    INNER JOIN `contratos` ON
                        CLI_IDCLIENTE = COT_IDCLIENTE AND
                        COT_SITUACAO = {$codContrato} AND
                        COT_STATUS = 2
                    WHERE
                        CLI_SITUACAO = 'A' AND
                        COT_DTATIVACAO >= '{$dataInicio}' AND
                        COT_DTATIVACAO <= '{$dataFim}' AND
                        {$condition}
                )
                ORDER BY `CLI_NOME` ASC
            ";
            $clientes = Yii::app()->db->createCommand($sql)->queryAll();
            $novosClientes = array_merge($novosClientes, $clientes);
        }

        return $novosClientes;
    }

    private function getNegociacoesAdendos($ano)
    {
        $dataInicio = "{$ano}-01-01";
        $dataFim = "{$ano}-12-31";

        $codAdendo = Contratos::ADENDO;
        $sql = "
            SELECT * FROM contratos
            LEFT JOIN clientes ON COT_IDCLIENTE = CLI_IDCLIENTE
            WHERE
                (
                    CLI_SITUACAO = \"A\" OR
                    (
                        CLI_SITUACAO = \"I\" AND
                        EXISTS (
                            SELECT * FROM
                                atendimentos
                            WHERE
                                ATD_IDCONTRATO = COT_IDCONTRATO AND
                                ATD_IDMOTIVO = 14
                        )
                    )
                ) AND
                COT_SITUACAO = {$codAdendo} AND
                COT_DTATIVACAO >= '{$dataInicio}' AND
                COT_DTATIVACAO <= '{$dataFim}'
        ";
        $negociacoesAdendos = Yii::app()->db->createCommand($sql)->queryAll();

        return $negociacoesAdendos;
    }

    private function getNegociacoesCancelamentos($ano)
    {
        $dataInicio = "{$ano}-01-01";
        $dataFim = "{$ano}-12-31";

        $sql = "
            SELECT * FROM clientes
            WHERE
                CLI_SITUACAO = \"I\" AND
                CLI_DTRESCISAO >= '{$dataInicio}' AND
                CLI_DTRESCISAO <= '{$dataFim}'
        ";
        $cancelamentos = Yii::app()->db->createCommand($sql)->queryAll();

        return $cancelamentos;
    }

    private function getNegociacoesReativacoes($ano)
    {
        $sql = "
            SELECT * FROM contratos
            LEFT JOIN clientes ON COT_IDCLIENTE = CLI_IDCLIENTE
            WHERE
                COT_SITUACAO = 8 AND
                COT_STATUS IN (2,14,23,494) AND
                YEAR(COT_DTCADASTRO) = {$ano}
        ";

        $reativacoes = Yii::app()->db->createCommand($sql)->queryAll();

        return $reativacoes;
    }

    private function getNovosClientes($revenda, $dataInicio, $dataFim)
    {
        if (is_array($revenda)) {
            $condition = "FEN_IDREVENDA IN (" . implode(", ", $revenda) . ")";
        } else {
            $condition = "FEN_IDREVENDA = {$revenda->REV_IDREVENDA}";
        }

        $sql = "
            SELECT
                *
            FROM fechamentos_negociacoes
            LEFT JOIN contratos ON FEN_IDCONTRATO = COT_IDCONTRATO
            LEFT JOIN clientes ON FEN_IDCLIENTE = CLI_IDCLIENTE
            WHERE
                FEN_DTCONTRATACAO >= '{$dataInicio}' AND
                FEN_DTCONTRATACAO <= '{$dataFim}' AND
                (
                    FEN_TIPO_NEGOCIACAO = " . FechamentosNegociacoes::CLIENTES_NOVOS . " OR
                    (
                        FEN_TIPO_NEGOCIACAO = " . FechamentosNegociacoes::REATIVACOES_CLIENTES . " AND
                        COT_CRIARNOVOCONTRATO = 0
                    )
                ) AND
                FEN_STATUS = '" . FechamentosNegociacoes::STATUS_ATIVO . "' AND
                {$condition}
            ORDER BY CLI_NOME ASC
        ";

        return Yii::app()->db->createCommand($sql)->queryAll();
    }

    private function getTransferenciasAdendos($tipo, $dataInicio, $dataFim)
    {
        $sql = "
            SELECT
                *
            FROM fechamentos_negociacoes
            LEFT JOIN contratos ON FEN_IDCONTRATO = COT_IDCONTRATO
            LEFT JOIN clientes ON FEN_IDCLIENTE = CLI_IDCLIENTE
            WHERE
                FEN_DTCONTRATACAO >= '{$dataInicio}' AND
                FEN_DTCONTRATACAO <= '{$dataFim}' AND
                FEN_TIPO_NEGOCIACAO = {$tipo} AND
                FEN_STATUS = '" . FechamentosNegociacoes::STATUS_ATIVO . "'
        ";

        return Yii::app()->db->createCommand($sql)->queryAll();
    }
}