<?php

/**
 * This is the model base class for the table "titulos".
 * DO NOT MODIFY THIS FILE! It is automatically generated by giix.
 * If any changes are necessary, you must set or override the required
 * property or method in class "Titulos".
 *
 * Columns in table "titulos" available as properties of the model,
 * followed by relations of table "titulos" available as properties of the model.
 *
 * @property integer $TIT_IDTITULO
 * @property integer $TIT_IDCLIENTE
 * @property integer $TIT_TIPODOC
 * @property integer $TIT_DOC
 * @property string $TIT_TITULO
 * @property string $TIT_SERIE
 * @property string $TIT_USUARIO
 * @property integer $TIT_PARCELA
 * @property string $TIT_VENCIMENTO
 * @property string $TIT_EMISSAO
 * @property string $TIT_DTPAGAMENTO
 * @property string $TIT_VALOR
 * @property integer $TIT_SITUACAO
 * @property string $TIT_NRREFBANCO
 *
 * @property Clientes $Cliente
 */
class Titulos extends GxActiveRecord {

    public $TIT_REVENDA;
    public $TIT_VENDEDOR;
    public $TIT_CIDADE;
    public $TIT_REGIAO;
    public $TIT_EMISSAO_FINAL;
    public $TIT_VENCIMENTO_FINAL;
    public $TIT_DTPAGAMENTO_FINAL;
    public $CID_DESCRICAO;
    public $CLI_CIDADE;
    public $CID_IDCIDADE;
    public $CLI_IDCLIENTE;
    public $RCD_IDCIDADE;
    public $REV_IDREVENDA;
    public $REV_NOME;
    public $FUN_IDFUNCIONARIO;
    public $CLI_NOME;
    public $CLI_SITUACAO;
    public $TOKEN;
    public $SINTETICO;
    public $DTRESCISAO;
    public $DTRESCISAOFINAL;
    public $TIT_VALOR_TOTAL;

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public function tableName() {
        return 'titulos';
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Título|Títulos', $n);
    }

    public static function representingColumn() {
        return 'TIT_SERIE';
    }

    public function rules() {
        return array(
            array('TIT_TITULO, TIT_SERIE, TIT_USUARIO', 'required'),
            array('TIT_TIPODOC, TIT_DOC, TIT_PARCELA, TIT_SITUACAO', 'numerical', 'integerOnly' => true),
            array('TIT_TITULO, TIT_VALOR', 'length', 'max' => 10),
            array('TIT_SERIE', 'length', 'max' => 5),
            array('TIT_USUARIO, TIT_REVENDA, TIT_VENDEDOR, TIT_CIDADE, CLI_NOME, TIT_IDCLIENTE', 'length', 'max' => 90),
            array('TIT_NRREFBANCO', 'length', 'max' => 17),
            array('TIT_VENCIMENTO, TIT_EMISSAO, TIT_DTPAGAMENTO, TOKEN, SINTETICO', 'safe'),
            array('TIT_TIPODOC, TIT_DOC, TIT_PARCELA, TIT_VENCIMENTO, TIT_EMISSAO, TIT_DTPAGAMENTO, TIT_VALOR, TIT_NRREFBANCO', 'default', 'setOnEmpty' => true, 'value' => null),
            array('TIT_IDTITULO, TIT_TIPODOC, TIT_DOC, TIT_TITULO, TIT_SERIE, TIT_USUARIO, TIT_PARCELA, TIT_VENCIMENTO, TIT_EMISSAO, TIT_DTPAGAMENTO, TIT_VALOR, TIT_SITUACAO, TIT_NRREFBANCO, TIT_REVENDA, TIT_VENDEDOR, TIT_CIDADE, TIT_EMISSAO_FINAL, TIT_VENCIMENTO_FINAL, TIT_DTPAGAMENTO_FINAL, CLI_IDCLIENTE, CID_IDCIDADE, CID_CIDADE, CID_DESCRICAO, RCD_IDCIDADE, REV_IDREVENDA, REV_NOME, FUN_IDFUNCIONARIO, CLI_NOME, TIT_IDCLIENTE, CID_DESCRICAO, CLI_SITUACAO, DTRESCISAO, DTRESCISAOFINAL, TIT_REGIAO', 'safe', 'on' => 'search'),
        );
    }

    public function relations() {
        return array(
            'Cliente' => array(self::BELONGS_TO, 'Clientes', 'TIT_IDCLIENTE', 'joinType' => 'INNER JOIN'),
        );
    }

    public function pivotModels() {
        return array(
        );
    }

    public function attributeLabels() {
        return array(
            'TIT_IDTITULO'      => 'Código',
            'TIT_IDCLIENTE'     => 'Cliente',
            'TIT_TIPODOC'       => 'Tipo de documento',
            'TIT_DOC'           => 'Documento',
            'TIT_TITULO'        => 'Título',
            'TIT_SERIE'         => 'Série',
            'TIT_USUARIO'       => 'CNPJ',
            'TIT_PARCELA'       => 'Parcela',
            'TIT_VENCIMENTO'    => 'Vencimento',
            'TIT_EMISSAO'       => 'Emissão',
            'TIT_DTPAGAMENTO'   => 'Pagamento',
            'TIT_VALOR'         => 'Valor',
            'TIT_VALORPAGO'     => 'Acréscimo',
            'TIT_VALOR_TOTAL'   => 'Valor Total',
            'TIT_SITUACAO'      => 'Situação',
            'TIT_NRREFBANCO'    => 'Nosso Numero',
            'TIT_REVENDA'       => 'Unidade de Negócios',
            'TIT_VENDEDOR'      => 'Vendedor',
            'TIT_CIDADE'        => 'Cidade',
            'CLI_SITUACAO'      => 'Status do Cliente',
            'Cliente'           => 'Cliente',
            'SINTETICO'         => 'Exportar somente relatório sintético',
            'DTRESCISAO'        => 'Data de Rescisão',
            'TIT_REGIAO'        => 'Região',
        );
    }

    public function search($pagesize = false, $comissao=null, $busca=null) {

        $criteria = new CDbCriteria;

        $criteria->compare('TIT_IDTITULO', $this->TIT_IDTITULO);
        $criteria->compare('TIT_TIPODOC', $this->TIT_TIPODOC);
        $criteria->compare('TIT_DOC', $this->TIT_DOC);
        $criteria->compare('TIT_TITULO', $this->TIT_TITULO, true);
        $criteria->compare('TIT_SERIE', $this->TIT_SERIE);

        if (!empty($this->TIT_USUARIO)) {
            $this->TIT_USUARIO = preg_replace("/[^0-9]/", "", $this->TIT_USUARIO);
            $criteria->compare('TIT_USUARIO', $this->TIT_USUARIO);
        }

        $criteria->compare('TIT_PARCELA', $this->TIT_PARCELA);
        $criteria->compare('TIT_VALOR', $this->TIT_VALOR, true);
        $criteria->compare('TIT_SITUACAO', $this->TIT_SITUACAO);

        if (!empty(Util::formatDataMysql($this->DTRESCISAO))){
            $criteria->addCondition('Cliente.CLI_DTRESCISAO >= "'.Util::formatDataMysql($this->DTRESCISAO).'"');
        }
        if (!empty(Util::formatDataMysql($this->DTRESCISAOFINAL))){
            $criteria->addCondition('Cliente.CLI_DTRESCISAO <= "'.Util::formatDataMysql($this->DTRESCISAOFINAL).'"');
        }

        $criteria->compare('TIT_NRREFBANCO', $this->TIT_NRREFBANCO, true);

        $data_revendas = array_keys(User::getRevendas());

        if(!in_array(1, $data_revendas) && !in_array(12, $data_revendas)) {
            $criteria->addCondition('TIT_SERIE <> "ORC"');
        }

        if (User::isRevenda()) {
            $criteria->addInCondition('Cliente.CLI_CIDADE', array_keys(User::getCidades()));
        }
        if (!empty($this->TIT_REVENDA)) {
            if($comissao){
                $criteria->addCondition("Cliente.CLI_IDREVENDA = $this->TIT_REVENDA");
            } else {
                if(!$busca){
                    $Regioescidades = Regioescidades::model()->findAll('RCD_IDREVENDA = '.$this->TIT_REVENDA);
                    $data_cidades   = CHtml::listData($Regioescidades, 'RCD_IDCIDADE', 'RCD_IDCIDADE');
                    $criteria->addInCondition('Cliente.CLI_CIDADE', $data_cidades);
                }
            }
        }
        if ($this->TIT_REGIAO) {
                $Regioescidades = Regioescidades::model()->findAll('RCD_IDREGIAO = '.$this->TIT_REGIAO);
                $data_cidades   = CHtml::listData($Regioescidades, 'RCD_IDCIDADE', 'RCD_IDCIDADE');
                $criteria->addInCondition('Cliente.CLI_CIDADE', $data_cidades);
        }
        if (is_array($this->TIT_CIDADE)) {
            $criteria->addInCondition('Cliente.CLI_CIDADE', $this->TIT_CIDADE);
        }

        $criteria->compare('Cliente.CLI_IDVENDEDOR', $this->TIT_VENDEDOR);

        if (!empty(Util::formatDataMysql($this->TIT_EMISSAO)))
            $criteria->addCondition('TIT_EMISSAO >= "'.Util::formatDataMysql($this->TIT_EMISSAO).'"');
        if (!empty(Util::formatDataMysql($this->TIT_EMISSAO_FINAL)))
            $criteria->addCondition('TIT_EMISSAO <= "'.Util::formatDataMysql($this->TIT_EMISSAO_FINAL).'"');

        if (!empty(Util::formatDataMysql($this->TIT_VENCIMENTO)))
            $criteria->addCondition('TIT_VENCIMENTO >= "'.Util::formatDataMysql($this->TIT_VENCIMENTO).'"');
        if (!empty(Util::formatDataMysql($this->TIT_VENCIMENTO_FINAL)))
            $criteria->addCondition('TIT_VENCIMENTO <= "'.Util::formatDataMysql($this->TIT_VENCIMENTO_FINAL).'"');

        if (!empty(Util::formatDataMysql($this->TIT_DTPAGAMENTO)))
            $criteria->addCondition('TIT_DTPAGAMENTO >= "'.Util::formatDataMysql($this->TIT_DTPAGAMENTO).'"');
        if (!empty(Util::formatDataMysql($this->TIT_DTPAGAMENTO_FINAL)))
            $criteria->addCondition('TIT_DTPAGAMENTO <= "'.Util::formatDataMysql($this->TIT_DTPAGAMENTO_FINAL).'"');


        if ($this->CLI_SITUACAO == "0") {
            $Situacao = array('I', 'D', 'FN', 'N', 'P');
            $criteria->addInCondition('Cliente.CLI_SITUACAO', $Situacao);
        } elseif ($this->CLI_SITUACAO == "1") {
            $Situacao = array('C', 'A', 'FP');
            $criteria->addInCondition('Cliente.CLI_SITUACAO', $Situacao);
        }

        if (!empty($this->TIT_IDCLIENTE)) {
            if (is_array($this->TIT_IDCLIENTE)) {
                $criteria->addInCondition('TIT_IDCLIENTE', $this->TIT_IDCLIENTE);
            } else {
                $TIT_IDCLIENTE = Util::secureForSelect($this->TIT_IDCLIENTE);
                $TIT_IDCLIENTE_DECODED = Util::secureForSelect($this->TIT_IDCLIENTE, true);
                $criteria->addCondition("
                    Cliente.CLI_NOME LIKE '%{$TIT_IDCLIENTE}%' OR
                    Cliente.CLI_FANTASIA LIKE '%{$TIT_IDCLIENTE}%' OR
                    Cliente.CLI_NOME LIKE '%{$TIT_IDCLIENTE_DECODED}%' OR
                    Cliente.CLI_FANTASIA LIKE '%{$TIT_IDCLIENTE_DECODED}%'
                ");
            }
        }

        $criteria->with = array(
            'Cliente' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Cliente.Cidade' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Cliente.RevendaResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        );
        // $criteria->addCondition('Cliente.CLI_IDREVENDA IS NOT NULL');
        if($busca==true){
            if(!empty($this->TIT_REVENDA)){
                $criteria->addCondition("Cliente.CLI_CIDADE IN (
                                        SELECT RCD_IDCIDADE
                                        FROM regioescidades
                                        WHERE RCD_IDREVENDA = ".$this->TIT_REVENDA."
                                        GROUP BY RCD_IDCIDADE )");
            }
        }

        // $criteria->join = 'LEFT JOIN clientes Cliente on Cliente.CLI_IDCIDADE = TIT_IDCLIENTE';
        // $criteria->join = 'LEFT JOIN cidades Cidade on Cliente.CLI_IDCIDADE = Cidade.CID_IDCIDADE';
        // $criteria->join = 'LEFT JOIN revendas Revenda on Cliente.CLI_IDREVENDA = Revenda.REV_IDREVENDA';
        if(!$busca)
            $criteria->addCondition('REV_SITUACAO = "A"');

        $criteria->group = 't.TIT_IDTITULO';
        $criteria->select = "
            *,
            TIT_VALOR + TIT_VALORPAGO as TIT_VALOR_TOTAL
        ";

        $sort = new CSort;
        $sort->attributes = array(
            'TIT_IDCLIENTE'=>array(
              'asc'=>'Cliente.CLI_NOME',
              'desc'=>'Cliente.CLI_NOME desc'
            ),
            'Cliente.CLI_FONE1'=>array(
                'asc'=>'Cliente.CLI_FONE1, Cliente.CLI_FONE2, Cliente.CLI_FONE3',
                'desc'=>'Cliente.CLI_FONE1 desc, Cliente.CLI_FONE2 desc, Cliente.CLI_FONE3 desc'
            ),
            'Cliente.Cidade'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            'Cliente.RevendaResponsavel'=>array(
                'asc'=>'RevendaResponsavel.REV_FANTASIA',
                'desc'=>'RevendaResponsavel.REV_FANTASIA desc'
            ),
            'TIT_VALOR_TOTAL'=>array(
                'asc'=>'TIT_VALOR_TOTAL',
                'desc'=>'TIT_VALOR_TOTAL desc'
            ),
            '*'
        );
        if ($pagesize) {

            $dataProvider = new CActiveDataProvider($this, array(
                'criteria'  => $criteria,
                'sort' => $sort,
                'pagination' => array(
                    'pageSize' => $pagesize
                    )
                )
            );
        } else {

            $dataProvider = new CActiveDataProvider($this, array(
                'criteria'  => $criteria,
                'sort' => $sort,
                'pagination' => false
                )
            );
        }


        return $dataProvider;
    }

    public function searchRelatorio()
    {
        $revenda = $_GET['Titulos']['TIT_REVENDA'];

        $dtPg = new DateTime();
        $dtPg = $dtPg->createFromFormat('d/m/Y', $_GET['Titulos']['TIT_DTPAGAMENTO']);
        $dtPg = $dtPg->format('Y-m-d');

        $dtPgF = new DateTime();
        $dtPgF = $dtPgF->createFromFormat('d/m/Y', $_GET['Titulos']['TIT_DTPAGAMENTO_FINAL']);
        $dtPgF = $dtPgF->format('Y-m-d');

        $titulosTable        = Titulos::model()->tableName();
        $criteria            = new CDbCriteria;
        $criteria->join = 'LEFT JOIN clientes Cliente on CLI_IDCLIENTE = TIT_IDCLIENTE';

        $criteria->select    = 'SUM(TIT_VALOR + TIT_VALORPAGO) as soma';

        $criteria->addCondition("TIT_DTPAGAMENTO between '".$dtPg."' AND '".$dtPgF."'");
        $criteria->addCondition("TIT_SITUACAO = 0");
        $criteria->addCondition("Cliente.CLI_CIDADE IN (
                                    SELECT RCD_IDCIDADE
                                    FROM regioescidades
                                    WHERE RCD_IDREVENDA = ".$revenda."
                                    GROUP BY RCD_IDCIDADE )");

        $count = Yii::app()->db->createCommand(
                "SELECT SUM(tit.TIT_VALOR + tit.TIT_VALORPAGO) as valor
                 FROM titulos tit
                 LEFT JOIN clientes cli ON cli.CLI_IDCLIENTE = tit.TIT_IDCLIENTE
                 WHERE tit.TIT_DTPAGAMENTO between '".$dtPg."' AND '".$dtPgF."'
                 AND tit.TIT_SITUACAO = 0
                 AND cli.CLI_CIDADE IN (
                    SELECT RCD_IDCIDADE
                    FROM regioescidades
                    WHERE RCD_IDREVENDA = ".$revenda."
                    GROUP BY RCD_IDCIDADE
                 );"
        )->queryScalar();
    }

    public function isAllowed($email = true) {
        return $this->Cliente->isAllowed($email);
    }

    public function getLink($ampersand = false)
    {
        if ($this->TIT_SITUACAO != 1) {
            return false;
        }
        $link = "";
        if ($this->TIT_IDBANCO == 1) {
            $cedente = ($this->TIT_IDEMPRESA == 2 ? "0606093835048" : "0606093808075");
            $nosso_numero = $this->TIT_NRREFBANCO;
            $documento = $this->Cliente->CLI_CNPJCPF;
            $link = "https://ww8.banrisul.com.br/brb/link/Brbw2Lhw_Bloqueto_Titulos_Internet.aspx?Origem=BL&CodCedente={$cedente}&NossoNumero={$nosso_numero}&SegundaVia=1&CpfCnpjPagador={$documento}";
        } else {
            $link = Yii::app()->baseUrl . '/' . Yii::app()->createUrl("titulos/imprimeboleto", array("id"=>$this->TIT_IDTITULO));
        }
        if ($ampersand) {
            $link  = str_replace('&', $ampersand, $link);
        }
        return $link;
    }

    public function showBoleto() {
        return $this->TIT_SITUACAO == 1 && $this->TIT_IDBANCO == 1;
    }
}
