<?php

$permissoes = User::getUser(true);

class ClientesCancelamentosController extends GxController {

    public function actionIndex()
    {
        $model = new ClientesCancelamentos('search');

        $clientesCancelamentos = filter_input(INPUT_GET, 'ClientesCancelamentos', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($clientesCancelamentos)) {
            $model->setAttributes($clientesCancelamentos);
        } else {
            $model->CLC_STATUS = null;
            if (in_array(User::getPrivilegio(), [16, 19])) {
                $model->CLC_STATUS = ClientesCancelamentos::STATUS_PROCESSADO;
                $model->CLC_RESULTADO = ClientesCancelamentos::RESULTADO_NEGATIVO;

                $date = DateTime::createFromFormat('Y-m-d H:i:s', date("Y-m-d H:i:s"));
                $model->CLC_DT_ENCERRAMENTO = $date->modify('-2 days')->format('d/m/Y');
                $model->CLC_DT_ENCERRAMENTO_FINAL = $date->modify('+2 days')->format('d/m/Y');
            }
        }

        $dataProvider = $model->search();
        $this->render('index', array(
            'model' => $model,
            'dataProvider' => $dataProvider
        ));
    }

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

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

    public function actionReenviaEmail($id)
    {
        $model = $this->loadModel($id, 'ClientesCancelamentos');
        $model->notificacaoCancelamentoProcessado();
        //$this->Flash->error('E-mail reenciado com sucesso!');
        $this->redirect(array('clientesCancelamentos/view', 'id' => $model->CLC_IDCANCELAMENTO));
    }

    public function actionCreate()
    {
        $model = new ClientesCancelamentos();
        if ($model->canCreate()) {
            $clientesCancelamentos = filter_input(INPUT_POST, 'ClientesCancelamentos', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
            if (!empty($clientesCancelamentos)) {
                $model->setAttributes($clientesCancelamentos);

                if (!empty($model->CLC_IDCLIENTE)) {
                    if ($model->Cliente->VendedorResponsavel->FUN_SITUACAO == "A") {
                        $vendedor = $model->Cliente->CLI_IDVENDEDOR;
                    } else {
                        $vendedor = $model->Cliente->Cidade->Revenda->REV_IDFUNCIONARIO;
                    }
                    $model->CLC_IDVENDEDOR = $vendedor;
                }
                $model->CLC_IDAUTOR = User::getId();
                $model->CLC_STATUS = ClientesCancelamentos::STATUS_AGUARDANDO;
                $model->CLC_DATA = date('Y-m-d H:i:s');

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

                if ($model->save()) {
                    $atividade = new Atendimentos;

                    $obs = "Registro de solicitação de cancelamento" . PHP_EOL;
                    $obs .= "Observações: " . PHP_EOL . $model->CLC_OBS_CLIENTE;

                    $atividade->ATD_IDCLIENTE = $model->CLC_IDCLIENTE;
                    $atividade->ATD_IDSOLCANCELAMENTO = $model->CLC_IDCANCELAMENTO;
                    $atividade->ATD_IDFUNCIONARIO = $vendedor;
                    $atividade->ATD_TIPO = 'O';
                    $atividade->ATD_AUTOMATICO = 0;
                    $atividade->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
                    $atividade->ATD_HORAINICIO = date('H:i:s');
                    $atividade->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
                    $atividade->ATD_TOTALHORAS = '00:01:00';
                    $atividade->ATD_IDMOTIVO = 77;
                    $atividade->ATD_OBS = $obs;
                    $atividade->ATD_DTCADASTRO = date('d/m/Y');
                    $atividade->ATD_SITUACAO = 'R';
                    $atividade->ATD_IDUSUARIO = User::getId();
                    $atividade->ATD_DTALTERACAO = date('d/m/Y');

                    $saved = $atividade->save(false, array(
                        'ATD_DTLANCAMENTO',
                        'ATD_IDCLIENTE',
                        'ATD_IDSOLCANCELAMENTO',
                        'ATD_IDFUNCIONARIO',
                        'ATD_TIPO',
                        'ATD_HORAINICIO',
                        'ATD_HORAFINAL',
                        'ATD_TOTALHORAS',
                        'ATD_IDMOTIVO',
                        'ATD_OBS',
                        'ATD_DTCADASTRO',
                        'ATD_SITUACAO',
                        'ATD_IDUSUARIO',
                        'ATD_DTALTERACAO',
                        'ATD_AUTOMATICO'
                    ));

                    if (!$saved) {
                        $commit = false;
                    }
                } else {
                    $commit = false;
                }

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

                if ($commit) {

                    $subject = 'Alerta de registro de solicitação de cancelamento: '.$model->CLC_IDCANCELAMENTO.'.';
                    $corpo = "
                    <p>Bom dia / Boa tarde,
                    Alertamos que existe uma solicitação de cancelamento aguardando tratamento no sistema. Pedimos que trate o problema com a maior brevidade possível.<br /><br />
                    <h2>Informações do cancelamento:</h2>"; 

                    if (!empty($model->CLC_IDCANCELAMENTO)) {
                        $corpo .= "<b>Código:</b> " . $model->CLC_IDCANCELAMENTO . "<br />";
                    }
                    if (!empty($model->CLC_IDCLIENTE)) {
                        $corpo .= "<b>Cliente:</b> " . $model->Cliente->CLI_NOME . "<br />";
                    }
                    if (!empty($model->CLC_IDAUTOR)) {
                        $corpo .= "<b>Autor:</b> " . $model->Autor->FUN_NOME . "<br />";
                    } 
                    if (!empty($model->CLC_ORIGEM)) {
                        $corpo .= "<b>Origem:</b> " . $model->origens[$model->CLC_ORIGEM] . "<br />";
                    }                      
                    if (!empty($model->CLC_IDMOTIVO)) {
                        $corpo .= "<b>Motivo:</b> " . $model->Motivo->MOT_DESCRICAO . "<br />";
                    }    
                    if (!empty($model->CLC_IDVENDEDOR)) {
                        $corpo .= "<b>Vendedor:</b> " . $model->Vendedor->FUN_NOME . "<br />";
                    }   
                    if (!empty($model->CLC_OBS_CLIENTE)) {
                        $corpo .= "<b>Observações do Cliente:</b> " . $model->CLC_OBS_CLIENTE . "<br />";
                    }  

                    $corpo .= "<br /><br />";

                    $corpo .= Util::createMailButton(Util::createUrl('clientesCancelamentos/view', array('id' => $model->CLC_IDCANCELAMENTO)), 'ABRIR SOLICITAÇÃO');
                    Util::sendEmail($model->Vendedor->FUN_EMAIL, $subject, $corpo);

                    Yii::app()->user->setFlash('success', 'Solicitação de cancelamento cadastrada com sucesso!');
                    $this->redirect(array('clientesCancelamentos/view', 'id' => $model->CLC_IDCANCELAMENTO));
                }
            }

            $this->render('create', array(
                'model' => $model,
            ));
        } else {
            throw new CHttpException(400, 'Sua solicitação é inválida.');
        }
    }

    public function actionAtividades($id)
    {
        $model = $this->loadModel($id, 'ClientesCancelamentos');
        $modelAtendimento = new Atendimentos();
        $modelAtendimento->ATD_IDSOLCANCELAMENTO = $id;

        $atendimentos = filter_input(INPUT_GET, 'Atendimentos', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($atendimentos)) {
            $modelAtendimento->setAttributes($atendimentos);
        } else {
            $modelAtendimento->ATD_AUTOMATICO = 1;
        }
        $dataProvider = $modelAtendimento->searchAtividadesSolicitacoes();

        $this->render('atividades', array(
            'model' => $model,
            'modelAtendimento' => $modelAtendimento,
            'dataProvider' => $dataProvider,
        ));
    }

    public function actionCreateContato($id)
    {
        $model = $this->loadModel($id, 'ClientesCancelamentos');
        $modelAtendimento = new Atendimentos();
        $modelAtendimento->scenario = "contatoCancelamento";

        $atendimentos = filter_input(INPUT_POST, 'Atendimentos', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($atendimentos)) {
            $trocouVendedor = false;

            $modelAtendimento->setAttributes($atendimentos);
            $modelAtendimento->ATD_IDSOLCANCELAMENTO = $id;
            $modelAtendimento->ATD_IDCLIENTE = $model->CLC_IDCLIENTE;

            if ($modelAtendimento->ATD_IDMOTIVO == 558) { // Trocar vendedor
                $trocouVendedor = true;
            } else {
                $modelAtendimento->ATD_IDFUNCIONARIO = $model->CLC_IDVENDEDOR;
            }

            $modelAtendimento->ATD_NIVELINTERESSE = $model->Cliente->CLI_NIVELINTERESSE;
            $modelAtendimento->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
            $modelAtendimento->ATD_SITUACAO = 'R';
            $modelAtendimento->ATD_IDUSUARIO = User::getId();
            $modelAtendimento->ATD_DTALTERACAO = date('d/m/Y');
            if ($trocouVendedor) {
                $modelAtendimento->ATD_CONTATO = "-";
            }

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

            $enviarEmailCancelamento = false;
            $enviarEmailGerente = false;
            $enviarEmailReversao = false;
            if ($modelAtendimento->save()) {
                if (!empty($modelAtendimento->RESULTADO) && $modelAtendimento->ATD_IDMOTIVO == 572) { // Contato
                    $model->CLC_RESULTADO = $modelAtendimento->RESULTADO;

                    if ($model->CLC_RESULTADO == ClientesCancelamentos::RESULTADO_NEGATIVO) {
                        $model->CLC_IDMOTIVO_VENDEDOR = $modelAtendimento->CLC_IDMOTIVO_VENDEDOR;
                        $model->CLC_INTERESSE_REATIVACAO = $modelAtendimento->CLC_INTERESSE_REATIVACAO;

                        if (empty($model->CLC_TIPO_CANCELAMENTO)) {
                            $model->CLC_TIPO_CANCELAMENTO = ClientesCancelamentos::CANCELAMENTO_NORMAL;
                            // $titulosAbertos = $model->Cliente->countTitulosPendentesComercial();
                            // if ($titulosAbertos > 0) {
                            //     if ($model->getDate()->format('d') >= 15) {
                            //         $model->CLC_TIPO_CANCELAMENTO = ClientesCancelamentos::CANCELAMENTO_IMEDIATO;
                            //     } else {
                            //         if ($titulosAbertos > 1) {
                            //             $model->CLC_TIPO_CANCELAMENTO = ClientesCancelamentos::CANCELAMENTO_IMEDIATO;
                            //         } else {
                            //             $model->CLC_TIPO_CANCELAMENTO = ClientesCancelamentos::CANCELAMENTO_NORMAL;
                            //         }
                            //     }
                            // } else {
                            //     $model->CLC_TIPO_CANCELAMENTO = ClientesCancelamentos::CANCELAMENTO_NORMAL;
                            // }
                        }
                        $model->gerarDatasCancelamento();

                        if ($model->CLC_TIPO_CANCELAMENTO == ClientesCancelamentos::CANCELAMENTO_NORMAL) {
                            $model->CLC_STATUS = ClientesCancelamentos::STATUS_PROCESSADO;
                        } else {
                            $model->CLC_STATUS = ClientesCancelamentos::STATUS_AGUARDANDO_APROVACAO;
                        }
                    } else {
                        $model->CLC_MODIFICADO_CONTRATO = $modelAtendimento->CLC_MODIFICADO_CONTRATO;
                        $model->CLC_STATUS = ClientesCancelamentos::STATUS_CANCELADO;
                    }

                    $descricaoAtendimento = "";
                    $descricaoAtendimento .= "Contato realizado com cliente que solicitou cancelamento.\r\n";
                    $descricaoAtendimento .= "Resultado da negociação: {$model->getResultado()}\r\n";
                    if ($model->CLC_RESULTADO == ClientesCancelamentos::RESULTADO_NEGATIVO) {
                        $descricaoAtendimento .= "{$model->getAttributeLabel('CLC_INTERESSE_REATIVACAO')}: ";
                        $descricaoAtendimento .= Util::getNivelInteresse($model->CLC_INTERESSE_REATIVACAO) . "\r\n";

                        $descricaoAtendimento .= "{$model->getAttributeLabel('CLC_IDMOTIVO_VENDEDOR')}: ";
                        $descricaoAtendimento .= $model->MotivoVendedor;
                    } else {
                        $descricaoAtendimento .= "{$model->getAttributeLabel('CLC_MODIFICADO_CONTRATO')}: ";
                        $descricaoAtendimento .= ($model->CLC_MODIFICADO_CONTRATO) ? "Sim" : "Não";
                    }
                    $descricaoAtendimento .= "\r\n";
                    if (!empty($modelAtendimento->ATD_OBS)) {
                        $descricaoAtendimento .= "Observações do Vendedor:\r\n{$modelAtendimento->ATD_OBS}";
                    }

                    if ($model->CLC_TIPO_CANCELAMENTO == ClientesCancelamentos::CANCELAMENTO_IMEDIATO) {
                        $descricaoAtendimento .= "\r\n\r\n";
                        $descricaoAtendimento .= "<strong>";
                            $descricaoAtendimento .= "O tipo do cancelamento foi identificado como imediato e ";
                            $descricaoAtendimento .= "precisa de aprovação do gerente.";
                        $descricaoAtendimento .= "</strong>";
                    }

                    $modelAtendimento->ATD_OBS = $descricaoAtendimento;
                    if (!$modelAtendimento->save(false, ['ATD_OBS'])) {
                        $commit = false;
                    }

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

                    if ($model->save()) {
                        if ($model->CLC_RESULTADO == ClientesCancelamentos::RESULTADO_NEGATIVO) {
                            if ($model->CLC_TIPO_CANCELAMENTO == ClientesCancelamentos::CANCELAMENTO_NORMAL) {
                                $contrato = $model->gerarTermoCancelamento();
                                if ($contrato) {
                                    $atividadeContrato = new Atendimentos;

                                    $descricaoAtendimento = "Termo de cancelamento gerado automaticamente após contato com cliente, ";
                                    $descricaoAtendimento .= "documento ativado.";

                                    $atividadeContrato->ATD_IDCLIENTE = $contrato->COT_IDCLIENTE;
                                    $atividadeContrato->ATD_IDCONTRATO = $contrato->COT_IDCONTRATO;
                                    $atividadeContrato->ATD_IDFUNCIONARIO = $model->CLC_IDVENDEDOR;
                                    $atividadeContrato->ATD_TIPO = 'D';
                                    $atividadeContrato->ATD_AUTOMATICO = 1;
                                    $atividadeContrato->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
                                    $atividadeContrato->ATD_HORAINICIO = date('H:i:s');
                                    $atividadeContrato->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
                                    $atividadeContrato->ATD_TOTALHORAS = '00:01:00';
                                    $atividadeContrato->ATD_IDMOTIVO = $contrato->COT_STATUS;
                                    $atividadeContrato->ATD_OBS = $descricaoAtendimento;
                                    $atividadeContrato->ATD_DTCADASTRO = date('d/m/Y');
                                    $atividadeContrato->ATD_SITUACAO = 'R';
                                    $atividadeContrato->ATD_IDUSUARIO = User::getId();
                                    $atividadeContrato->ATD_DTALTERACAO = date('d/m/Y');
                                    $salvou = $atividadeContrato->save(false, array(
                                        'ATD_DTLANCAMENTO',
                                        'ATD_IDCLIENTE',
                                        'ATD_IDCONTRATO',
                                        'ATD_IDFUNCIONARIO',
                                        'ATD_TIPO',
                                        'ATD_HORAINICIO',
                                        'ATD_HORAFINAL',
                                        'ATD_TOTALHORAS',
                                        'ATD_IDMOTIVO',
                                        'ATD_OBS',
                                        'ATD_DTCADASTRO',
                                        'ATD_SITUACAO',
                                        'ATD_IDUSUARIO',
                                        'ATD_DTALTERACAO',
                                        'ATD_AUTOMATICO'
                                    ));

                                    if ($salvou) {
                                        $enviarEmailCancelamento = true;
                                    } else {
                                        $commit = false;
                                    }
                                } else {
                                    $commit = false;
                                }
                            } else {
                                $enviarEmailGerente = true;
                            }
                        } else {
                            $enviarEmailReversao = true;
                        }
                    } else {
                        $commit = false;
                    }
                } elseif ($trocouVendedor) {
                    if ($model->CLC_IDVENDEDOR != $modelAtendimento->ATD_IDFUNCIONARIO) {
                        $model->CLC_IDVENDEDOR = $modelAtendimento->ATD_IDFUNCIONARIO;
                        if ($model->save(false, ['CLC_IDVENDEDOR'])) {

                            $subject = 'Alerta de registro de solicitação de cancelamento: '.$model->CLC_IDCANCELAMENTO.'.';
                            $corpo = "
                            <p>Bom dia / Boa tarde,
                            Alertamos que existe uma solicitação de cancelamento aguardando tratamento no sistema. Pedimos que trate o problema com a maior brevidade possível.<br /><br />
                            <h2>Informações do cancelamento:</h2>"; 

                            if (!empty($model->CLC_IDCANCELAMENTO)) {
                                $corpo .= "<b>Código:</b> " . $model->CLC_IDCANCELAMENTO . "<br />";
                            }
                            if (!empty($model->CLC_IDCLIENTE)) {
                                $corpo .= "<b>Cliente:</b> " . $model->Cliente->CLI_NOME . "<br />";
                            }
                            if (!empty($model->CLC_IDAUTOR)) {
                                $corpo .= "<b>Autor:</b> " . $model->Autor->FUN_NOME . "<br />";
                            } 
                            if (!empty($model->CLC_ORIGEM)) {
                                $corpo .= "<b>Origem:</b> " . $model->origens[$model->CLC_ORIGEM] . "<br />";
                            }                      
                            if (!empty($model->CLC_IDMOTIVO)) {
                                $corpo .= "<b>Motivo:</b> " . $model->Motivo->MOT_DESCRICAO . "<br />";
                            }    
                            if (!empty($model->CLC_IDVENDEDOR)) {
                                $corpo .= "<b>Vendedor:</b> " . $model->Vendedor->FUN_NOME . "<br />";
                            }   
                            if (!empty($model->CLC_OBS_CLIENTE)) {
                                $corpo .= "<b>Observações do Cliente:</b> " . $model->CLC_OBS_CLIENTE . "<br />";
                            }  

                            $corpo .= "<br /><br />";

                            $corpo .= Util::createMailButton(Util::createUrl('clientesCancelamentos/view', array('id' => $model->CLC_IDCANCELAMENTO)), 'ABRIR SOLICITAÇÃO');
                            Util::sendEmail($model->Vendedor->FUN_EMAIL, $subject, $corpo);

                            $descricaoAtendimento = $modelAtendimento->ATD_OBS . "\r\n \r\n";
                            $descricaoAtendimento .= "<strong>Vendedor responsável pelo contato foi alterado.</strong>";
                            $modelAtendimento->ATD_OBS = $descricaoAtendimento;
                            if (!$modelAtendimento->save(false, ['ATD_OBS'])) {
                                $commit = false;
                            }
                        } else {
                            $commit = false;
                        }
                    } else {
                        Yii::app()->user->setFlash('warning', 'Você não trocou o vendedor');
                        $commit = false;
                    }
                }
            } else {
                $commit = false;
            }

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

            if ($commit) {
                if ($model->CLC_RESULTADO == ClientesCancelamentos::RESULTADO_NEGATIVO) {
                    if ($enviarEmailCancelamento) {
                        $model->notificacaoCancelamentoProcessado();
                    } elseif ($enviarEmailGerente) {
                        $model->notificacaoCancelamentoAguardandoAprovacao();
                    }
                } elseif ($model->CLC_RESULTADO == ClientesCancelamentos::RESULTADO_POSITIVO) {
                    $model->notificacaoReversaoCancelamento();
                }
                Yii::app()->user->setFlash('success', 'Atendimento de solicitação de contato salvo com sucesso!');
                $this->redirect(array('clientesCancelamentos/atividades', 'id' => $model->CLC_IDCANCELAMENTO));
            } else {
                Yii::app()->user->setFlash('danger', 'Erro ao salvar o contato!');
            }
        } else {
            $modelAtendimento->ATD_DTCADASTRO = date('d/m/Y');
        }

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

    public function actionUpdateContato($id)
    {
        die('Definição pendente');
        $modelAtendimento = $this->loadModel($id, 'Atendimentos');
        $model = $modelAtendimento->SolicitacaoCancelamento;

        $atendimentos = filter_input(INPUT_POST, 'Atendimentos', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($atendimentos)) {
        }
    }

    public function actionTrocarTipo($id)
    {
        $model = $this->loadModel($id, 'ClientesCancelamentos');
        $model->scenario = 'trocarTipo';

        $request = filter_input(INPUT_POST, 'ClientesCancelamentos', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (!empty($request)) {
            $model->setAttributes($request);

            $transaction = Yii::app()->db->beginTransaction();
            try {
                $model->CLC_TIPO_CANCELAMENTO = ClientesCancelamentos::CANCELAMENTO_IMEDIATO;
                $model->gerarDatasCancelamento();
                if (!empty($model->Contrato)) {
                    $novoTermo = clone $model->Contrato;
                    if (!$model->Contrato->delete()) {
                        throw new Exception("Erro ao deletar o termo de cancelamento", 2);
                    }

                    $novoTermo->isNewRecord = true;
                    $novoTermo->COT_IDMOTIVO_FP = 77;
                    unset($novoTermo->COT_IDCONTRATO);
                    if (!$novoTermo->save()) {
                        throw new Exception("Erro ao salvar o termo de cancelamento", 2);
                    }
                }
                if (!$model->save()) {
                    throw new Exception("Dados inválidos!", 1);
                }

                $atividade = new Atendimentos;

                $descricaoAtendimento = "Tipo do cancelamento foi alterado para imediato.";
                $descricaoAtendimento .= "\r\nJustificativa:\r\n{$model->CLC_OBS}";

                $atividade->ATD_IDCLIENTE = $model->CLC_IDCLIENTE;
                $atividade->ATD_IDSOLCANCELAMENTO = $model->CLC_IDCANCELAMENTO;
                $atividade->ATD_IDFUNCIONARIO = $model->CLC_IDVENDEDOR;
                $atividade->ATD_TIPO = 'O';
                $atividade->ATD_AUTOMATICO = 1;
                $atividade->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
                $atividade->ATD_HORAINICIO = date('H:i:s');
                $atividade->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
                $atividade->ATD_TOTALHORAS = '00:01:00';
                $atividade->ATD_IDMOTIVO = 77;
                $atividade->ATD_OBS = $descricaoAtendimento;
                $atividade->ATD_DTCADASTRO = date('d/m/Y');
                $atividade->ATD_SITUACAO = 'R';
                $atividade->ATD_IDUSUARIO = User::getId();
                $atividade->ATD_DTALTERACAO = date('d/m/Y');
                $salvou = $atividade->save(false, array(
                    'ATD_IDCLIENTE',
                    'ATD_IDSOLCANCELAMENTO',
                    'ATD_IDFUNCIONARIO',
                    'ATD_TIPO',
                    'ATD_AUTOMATICO',
                    'ATD_DTLANCAMENTO',
                    'ATD_HORAINICIO',
                    'ATD_HORAFINAL',
                    'ATD_TOTALHORAS',
                    'ATD_IDMOTIVO',
                    'ATD_OBS',
                    'ATD_DTCADASTRO',
                    'ATD_SITUACAO',
                    'ATD_IDUSUARIO',
                    'ATD_DTALTERACAO',
                ));

                if (!$salvou) {
                    throw new Exception("Erro ao salvar a atividade", 2);
                }

                $transaction->commit();
                Yii::app()->user->setFlash('success', 'Tipo do cancelamento alterado com sucesso!');
                $this->redirect(array('clientesCancelamentos/view', 'id' => $model->CLC_IDCANCELAMENTO));

            } catch (Exception $e) {
                $transaction->rollback();

                if ($e->getCode() == 1) {
                    Yii::app()->user->setFlash('warning', $e->getMessage());
                } elseif ($e->getCode() == 2) {
                    Yii::app()->user->setFlash('error', "Ocorreu um erro ao salvar, tente novamente.");
                }
            }
        }

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

    public function actionAprovarImediato($id)
    {
        $model = $this->loadModel($id, 'ClientesCancelamentos');
        $model->scenario = 'avaliacao';

        $clientesCancelamentos = filter_input(INPUT_POST, 'ClientesCancelamentos', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (isset($clientesCancelamentos)) {
            $model->setAttributes($clientesCancelamentos);
            if ($model->validate()) {
                $transaction = Yii::app()->db->beginTransaction();
                $commit = true;

                if ($model->CLC_APROVACAO == 0) {
                    $model->CLC_TIPO_CANCELAMENTO = ClientesCancelamentos::CANCELAMENTO_NORMAL;
                    $model->gerarDatasCancelamento();
                }

                $model->CLC_STATUS = ClientesCancelamentos::STATUS_PROCESSADO;

                if ($model->save()) {
                    $atividadeSolicitacao = new Atendimentos;

                    $descricaoAtendimento = "";
                    if ($model->CLC_APROVACAO == 0) {
                        $descricaoAtendimento .= "Cancelamento imediato foi reprovado pela gerência, ";
                        $descricaoAtendimento .= "a solicitação será tratada como um cancelamento normal.";
                    } else {
                        $descricaoAtendimento .= "Cancelamento imediato foi aprovado pela gerência.";
                    }

                    if (!empty($model->CLC_OBS)) {
                        $descricaoAtendimento .= "\r\nObservações:\r\n{$model->CLC_OBS}";
                    }

                    $atividadeSolicitacao->ATD_IDCLIENTE = $model->CLC_IDCLIENTE;
                    $atividadeSolicitacao->ATD_IDSOLCANCELAMENTO = $model->CLC_IDCANCELAMENTO;
                    $atividadeSolicitacao->ATD_IDFUNCIONARIO = $model->CLC_IDVENDEDOR;
                    $atividadeSolicitacao->ATD_TIPO = 'O';
                    $atividadeSolicitacao->ATD_AUTOMATICO = 0;
                    $atividadeSolicitacao->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
                    $atividadeSolicitacao->ATD_HORAINICIO = date('H:i:s');
                    $atividadeSolicitacao->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
                    $atividadeSolicitacao->ATD_TOTALHORAS = '00:01:00';
                    $atividadeSolicitacao->ATD_IDMOTIVO = 77;
                    $atividadeSolicitacao->ATD_OBS = $descricaoAtendimento;
                    $atividadeSolicitacao->ATD_DTCADASTRO = date('d/m/Y');
                    $atividadeSolicitacao->ATD_SITUACAO = 'R';
                    $atividadeSolicitacao->ATD_IDUSUARIO = User::getId();
                    $atividadeSolicitacao->ATD_DTALTERACAO = date('d/m/Y');
                    $salvou = $atividadeSolicitacao->save(false, array(
                        'ATD_IDCLIENTE',
                        'ATD_IDSOLCANCELAMENTO',
                        'ATD_IDFUNCIONARIO',
                        'ATD_TIPO',
                        'ATD_AUTOMATICO',
                        'ATD_DTLANCAMENTO',
                        'ATD_HORAINICIO',
                        'ATD_HORAFINAL',
                        'ATD_TOTALHORAS',
                        'ATD_IDMOTIVO',
                        'ATD_OBS',
                        'ATD_DTCADASTRO',
                        'ATD_SITUACAO',
                        'ATD_IDUSUARIO',
                        'ATD_DTALTERACAO',
                    ));
                    if ($salvou) {
                        $contrato = $model->gerarTermoCancelamento();
                        if ($contrato) {
                            $atividadeContrato = new Atendimentos;

                            $descricaoAtendimento = "Termo de cancelamento gerado automaticamente após revisão da gerência, ";
                            $descricaoAtendimento .= "documento ativado.";

                            $atividadeContrato->ATD_IDCLIENTE = $contrato->COT_IDCLIENTE;
                            $atividadeContrato->ATD_IDCONTRATO = $contrato->COT_IDCONTRATO;
                            $atividadeContrato->ATD_IDFUNCIONARIO = $model->CLC_IDVENDEDOR;
                            $atividadeContrato->ATD_TIPO = 'D';
                            $atividadeContrato->ATD_AUTOMATICO = 1;
                            $atividadeContrato->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
                            $atividadeContrato->ATD_HORAINICIO = date('H:i:s');
                            $atividadeContrato->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
                            $atividadeContrato->ATD_TOTALHORAS = '00:01:00';
                            $atividadeContrato->ATD_IDMOTIVO = $contrato->COT_STATUS;
                            $atividadeContrato->ATD_OBS = $descricaoAtendimento;
                            $atividadeContrato->ATD_DTCADASTRO = date('d/m/Y');
                            $atividadeContrato->ATD_SITUACAO = 'R';
                            $atividadeContrato->ATD_IDUSUARIO = User::getId();
                            $atividadeContrato->ATD_DTALTERACAO = date('d/m/Y');
                            $salvou = $atividadeContrato->save(false, array(
                                'ATD_IDCLIENTE',
                                'ATD_IDCONTRATO',
                                'ATD_IDFUNCIONARIO',
                                'ATD_TIPO',
                                'ATD_AUTOMATICO',
                                'ATD_DTLANCAMENTO',
                                'ATD_HORAINICIO',
                                'ATD_HORAFINAL',
                                'ATD_TOTALHORAS',
                                'ATD_IDMOTIVO',
                                'ATD_OBS',
                                'ATD_DTCADASTRO',
                                'ATD_SITUACAO',
                                'ATD_IDUSUARIO',
                                'ATD_DTALTERACAO',
                            ));

                            if ($salvou) {
                                $commit = true;
                            } else {
                                $commit = false;
                            }
                        } else {
                            $commit = false;
                        }
                    } else {
                        $commit = false;
                    }
                }

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

                if ($commit) {
                    $model->notificacaoCancelamentoProcessado();

                    Yii::app()->user->setFlash('success', 'Avaliação do cancelamento imediato salva com sucesso!');
                    $this->redirect(array('clientesCancelamentos/view', 'id' => $model->CLC_IDCANCELAMENTO));
                }
            }
        }

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

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

        $model->scenario = "cancelamentoDistrato";
        $clientesCancelamentos = filter_input(INPUT_POST, 'ClientesCancelamentos', FILTER_DEFAULT , FILTER_REQUIRE_ARRAY);
        if (isset($clientesCancelamentos)) {
            $model->setAttributes($clientesCancelamentos);
            $model->CLC_STATUS = ClientesCancelamentos::STATUS_CANCELADO;
            $model->CLC_RESULTADO = ClientesCancelamentos::RESULTADO_POSITIVO;
            $model->CLC_MODIFICADO_CONTRATO = 0;

            $transaction = Yii::app()->db->beginTransaction();
            $commit = true;
            if ($model->save()) {
                $modelAtendimento = new Atendimentos();

                $modelAtendimento->ATD_TIPO = $model->CLC_ORIGEM_CANCELAMENTO;
                $obs = "<strong>Cliente solicitou cancelamento do distrato.</strong>" . PHP_EOL;
                if (!empty($model->CLC_OBS)) {
                    $obs .= PHP_EOL . "Observações: " . PHP_EOL . "{$model->CLC_OBS}";
                }
                $modelAtendimento->ATD_IDSOLCANCELAMENTO = $id;
                $modelAtendimento->ATD_IDCLIENTE = $model->CLC_IDCLIENTE;
                $modelAtendimento->ATD_IDFUNCIONARIO = $model->CLC_IDVENDEDOR;
                $modelAtendimento->ATD_NIVELINTERESSE = $model->Cliente->CLI_NIVELINTERESSE;
                $modelAtendimento->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
                $modelAtendimento->ATD_IDMOTIVO = 77; // Solicitação de cancelamento
                $modelAtendimento->ATD_SITUACAO = 'R';
                $modelAtendimento->ATD_DTCADASTRO = date('d/m/Y');
                $modelAtendimento->ATD_HORAINICIO = date('H:i:s');
                $modelAtendimento->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
                $modelAtendimento->ATD_TOTALHORAS = '00:01:00';
                $modelAtendimento->ATD_IDUSUARIO = User::getId();
                $modelAtendimento->ATD_DTALTERACAO = date('d/m/Y');
                $modelAtendimento->ATD_OBS = $obs;
                if ($modelAtendimento->save()) {
                    if (!empty($model->Contrato)) {
                        $model->Contrato->COT_STATUS = 16; // Documento cancelado
                        if ($model->Contrato->save(false, ['COT_STATUS'])) {
                            $atividadeContrato = new Atendimentos();

                            $atividadeContrato->ATD_IDCLIENTE = $model->Contrato->COT_IDCLIENTE;
                            $atividadeContrato->ATD_IDCONTRATO = $model->Contrato->COT_IDCONTRATO;
                            $atividadeContrato->ATD_IDFUNCIONARIO = $model->CLC_IDVENDEDOR;
                            $atividadeContrato->ATD_IDUSUARIO = 16; // Administrador do sistema
                            $atividadeContrato->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
                            $atividadeContrato->ATD_DTCADASTRO = date('d/m/Y');
                            $atividadeContrato->ATD_HORAINICIO = date('H:i:s');
                            $atividadeContrato->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
                            $atividadeContrato->ATD_TOTALHORAS = '00:01:00';
                            $atividadeContrato->ATD_TIPO = 'D';
                            $atividadeContrato->ATD_IDMOTIVO = 16; // Documento cancelado
                            $atividadeContrato->ATD_SITUACAO = 'R';
                            $atividadeContrato->ATD_OBS = "Cliente solicitou cancelamento do distrato, documento cancelado.";
                            if ($atividadeContrato->save()) {
                                $commit = $model->removeNegociacao();
                            } else {
                                $commit = false;
                            }
                        } else {
                            $commit = false;
                        }
                    }
                } else {
                    $commit = false;
                }
            } else {
                $commit = false;
            }

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

            if ($commit) {
                $model->notificacaoReversaoCancelamento();

                Yii::app()->user->setFlash('success', 'Cancelamento da solicitação salva com sucesso!');
                $this->redirect(array('clientesCancelamentos/view', 'id' => $model->CLC_IDCANCELAMENTO));
            } else {
                Yii::app()->user->setFlash('danger', 'Erro ao salvar!');
            }
        }

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

    public function actionGerarTermo($id)
    {
        $model = $this->loadModel($id, 'ClientesCancelamentos');
        if(!$model->podeGerarTermo())
        {
            User::blockAction('Você não tem permissão para acessar esta página.');
        }
        $contrato = $model->gerarTermoCancelamento();
        $commit = true;
        $transaction = Yii::app()->db->beginTransaction();
        if ($contrato) {
            $atividadeContrato = new Atendimentos;

            $descricaoAtendimento = "Termo de cancelamento gerado manualmente, ";
            $descricaoAtendimento .= "documento ativado.";

            $atividadeContrato->ATD_IDCLIENTE = $contrato->COT_IDCLIENTE;
            $atividadeContrato->ATD_IDCONTRATO = $contrato->COT_IDCONTRATO;
            $atividadeContrato->ATD_IDFUNCIONARIO = $model->CLC_IDVENDEDOR;
            $atividadeContrato->ATD_TIPO = 'D';
            $atividadeContrato->ATD_AUTOMATICO = 1;
            $atividadeContrato->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
            $atividadeContrato->ATD_HORAINICIO = date('H:i:s');
            $atividadeContrato->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
            $atividadeContrato->ATD_TOTALHORAS = '00:01:00';
            $atividadeContrato->ATD_IDMOTIVO = $contrato->COT_STATUS;
            $atividadeContrato->ATD_OBS = $descricaoAtendimento;
            $atividadeContrato->ATD_DTCADASTRO = date('d/m/Y');
            $atividadeContrato->ATD_SITUACAO = 'R';
            $atividadeContrato->ATD_IDUSUARIO = User::getId();
            $atividadeContrato->ATD_DTALTERACAO = date('d/m/Y');
            $salvou = $atividadeContrato->save(false, array(
                'ATD_DTLANCAMENTO',
                'ATD_IDCLIENTE',
                'ATD_IDCONTRATO',
                'ATD_IDFUNCIONARIO',
                'ATD_TIPO',
                'ATD_HORAINICIO',
                'ATD_HORAFINAL',
                'ATD_TOTALHORAS',
                'ATD_IDMOTIVO',
                'ATD_OBS',
                'ATD_DTCADASTRO',
                'ATD_SITUACAO',
                'ATD_IDUSUARIO',
                'ATD_DTALTERACAO',
                'ATD_AUTOMATICO'
            ));

            if (!$salvou) {
                $commit = false;
            }
        } else {
            $commit = false;
        }

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

        if ($commit) {
            $model->notificacaoCancelamentoProcessado();
            
            Yii::app()->user->setFlash('success', 'termo gerado com sucesso!');
            $this->redirect(array('clientesCancelamentos/view', 'id' => $model->CLC_IDCANCELAMENTO));
        } else {
            Yii::app()->user->setFlash('danger', 'Erro ao gerar termo!');
            $this->redirect(array('clientesCancelamentos/view', 'id' => $model->CLC_IDCANCELAMENTO));
        }
    }
}
