<?php

class MetasVendas extends GxActiveRecord
{
    const GLOBAL = 1;
    const UNIDADE = 2;
    const VENDEDOR = 3;

    const META_MENSALIDADE = 1;
    const META_IMPLANTACAO = 2;
    const META_AMBAS = 3;

    public $tipos = array(
        MetasVendas::GLOBAL => "Global",
        MetasVendas::UNIDADE => "Unidade de Negócios",
        MetasVendas::VENDEDOR => "Vendedor"
    );

    public $MEV_SOMA_FINAL;
    public $MEV_SOMA_IMP;
    public $MEV_SOMA_IMP_FINAL;
    public $MEV_NOME;
    public $mensalidade;
    public $implantacao;

    public $anosDisponiveis = array();

    private $revendasGrupo;

    public function init() {
        for ($ano=2009; $ano <= date('Y'); $ano++) {
            $this->anosDisponiveis[$ano] = $ano;
        }
    }

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

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

    public function behaviors()
    {
        return array('datetimeI18NBehavior' => array('class' => 'ext.DateTimeI18NBehavior'));
    }

    public function rules()
    {
        return array(
            array('MEV_ANO, MEV_TIPO, MEV_TIPO_COBRANCA', 'required'),
            array('MEV_ANO', 'date', 'format'=>'yyyy'),
            array('MEV_JAN, MEV_FEV, MEV_MAR, MEV_ABR, MEV_MAI, MEV_JUN, MEV_JUL, MEV_AGO, MEV_SET, MEV_OUT, MEV_NOV, MEV_DEZ, MEV_SOMA', 'numerical', 'integerOnly' => false),
            array('MEV_SOMA_FINAL, MEV_SOMA_IMP, MEV_SOMA_IMP_FINAL, MEV_RASCUNHO', 'safe', 'on' => 'search'),
            array('mensalidade, implantacao, MEV_RASCUNHO', 'required', 'on' => 'metasUnidades'),
            array('implantacao', 'safe', 'on' => 'transferenciaMetas'),
        );
    }

    public function relations()
    {
        return array(
            'OutraMeta' => array(
                self::HAS_MANY,
                'MetasVendas',
                false,
                'condition' => 'OutraMeta.MEV_FOREIGN_KEY = MEV_FOREIGN_KEY'
            ),
            'MetaTransferidaOriginal' => array(self::HAS_ONE, 'MetasVendas', 'MEV_IDTRANSFERENCIA'),
            'MetaTransferidaDestino' => array(self::BELONGS_TO, 'MetasVendas', 'MEV_IDTRANSFERENCIA'),
        );
    }

    public function attributeLabels()
    {
        return array(
            'MEV_ID'       => 'Código',
            'MEV_TIPO'     => 'Tipo',
            'MEV_NOME'     => 'Nome',
            'MEV_ANO'      => 'Período',
            'MEV_SOMA'     => 'Soma',
            'MEV_SOMA_IMP' => 'Meta de Implantações',
            'MEV_RASCUNHO' => 'Situação',
            'MEV_JAN'      => 'Janeiro',
            'MEV_FEV'      => 'Fevereiro',
            'MEV_MAR'      => 'Março',
            'MEV_ABR'      => 'Abril',
            'MEV_MAI'      => 'Maio',
            'MEV_JUN'      => 'Junho',
            'MEV_JUL'      => 'Julho',
            'MEV_AGO'      => 'Agosto',
            'MEV_SET'      => 'Setembro',
            'MEV_OUT'      => 'Outubro',
            'MEV_NOV'      => 'Novembro',
            'MEV_DEZ'      => 'Dezembro',
        );
    }

    public function beforeSave()
    {
        parent::beforeSave();
        if ($this->isNewRecord) {
            if (empty($this->MEV_ANO)) {
                $this->MEV_ANO = date('Y');
            }
        }
        return true;
    }

    public function search()
    {
        $criteria = new CDbCriteria;

        $criteria->compare('MEV_TIPO_COBRANCA', 1);

        if (!empty($this->MEV_TIPO)) {
            $criteria->compare('MEV_TIPO', $this->MEV_TIPO);
        }
        if (!empty($this->MEV_ANO)) {
            $criteria->compare('MEV_ANO', $this->MEV_ANO);
        }

        if (!empty($this->MEV_SOMA)) {
            $valor = Util::unmoeda($this->MEV_SOMA);
            $criteria->addCondition("MEV_SOMA >= {$valor}");
        }
        if (!empty($this->MEV_SOMA_FINAL)) {
            $valor = Util::unmoeda($this->MEV_SOMA_FINAL);
            $criteria->addCondition("MEV_SOMA <= {$valor}");
        }

        if (!empty($this->MEV_SOMA_IMP)) {
            $valor = Util::unmoeda($this->MEV_SOMA_IMP);
            $criteria->addCondition("
                (
                    SELECT SUM(MEV_SOMA) FROM metas_vendas i
                    WHERE
                        t.MEV_ANO = i.MEV_ANO AND
                        t.MEV_TIPO = i.MEV_TIPO AND
                        t.MEV_TIPO_COBRANCA != i.MEV_TIPO_COBRANCA AND
                        (
                            (t.MEV_FOREIGN_KEY = i.MEV_FOREIGN_KEY) OR
                            (t.MEV_FOREIGN_KEY IS NULL AND i.MEV_FOREIGN_KEY IS NULL)
                        )
                ) >= {$valor}
            ");
        }
        if (!empty($this->MEV_SOMA_IMP_FINAL)) {
            $valor = Util::unmoeda($this->MEV_SOMA_IMP_FINAL);
            $criteria->addCondition("
                (
                    SELECT sum(MEV_SOMA) FROM metas_vendas i
                    WHERE
                        t.MEV_ANO = i.MEV_ANO AND
                        t.MEV_TIPO = i.MEV_TIPO AND
                        t.MEV_TIPO_COBRANCA != i.MEV_TIPO_COBRANCA AND
                        (
                            (t.MEV_FOREIGN_KEY = i.MEV_FOREIGN_KEY) OR
                            (t.MEV_FOREIGN_KEY IS NULL AND i.MEV_FOREIGN_KEY IS NULL)
                        )
                ) <= {$valor}
            ");
        }

        if (empty($this->MEV_RASCUNHO)) {
            $criteria->compare('MEV_RASCUNHO', 0);
        }

        $select = array(
            't.MEV_ID',
            't.MEV_TIPO',
            't.MEV_ANO',
            't.MEV_FOREIGN_KEY',
            't.MEV_SOMA',
            '
                (
                    SELECT sum(MEV_SOMA) FROM metas_vendas i
                    WHERE
                        t.MEV_ANO = i.MEV_ANO AND
                        t.MEV_TIPO = i.MEV_TIPO AND
                        t.MEV_TIPO_COBRANCA != i.MEV_TIPO_COBRANCA AND
                        t.MEV_RASCUNHO = i.MEV_RASCUNHO AND
                        (
                            (t.MEV_FOREIGN_KEY = i.MEV_FOREIGN_KEY) OR
                            (t.MEV_FOREIGN_KEY IS NULL AND i.MEV_FOREIGN_KEY IS NULL)
                        )
                ) as MEV_SOMA_IMP
            ',
            't.MEV_RASCUNHO',
        );

        $criteria->select = implode(', ', $select);

        $sort = new CSort;
        $sort->defaultOrder = 'MEV_TIPO asc, MEV_ID asc';
        $sort->attributes = array(
            'MEV_SOMA_IMP'=>array(
              'asc'=>'MEV_SOMA_IMP',
              'desc'=>'MEV_SOMA_IMP desc'
            ),
            '*'
        );

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

        return $dataProvider;
    }

    public function getTipo()
    {
        return $this->MEV_TIPO ? $this->tipos[$this->MEV_TIPO] : false;
    }

    public function getRelacionado($somenteNome = false)
    {
        if ($this->MEV_TIPO != MetasVendas::GLOBAL) {
            if ($this->MEV_TIPO == MetasVendas::UNIDADE) {
                $revenda = Revendas::model()->findByPk($this->MEV_FOREIGN_KEY);
                if ($somenteNome) {
                    return $revenda ? $revenda->REV_FANTASIA : "-";
                }
                return $revenda;
            } else {
                $vendedor = Funcionarios::model()->findByPk($this->MEV_FOREIGN_KEY);
                if ($somenteNome) {
                    return $vendedor ? $vendedor->FUN_NOME : "-";
                }
                return $vendedor;
            }
        }
        return !$somenteNome ? false : "Global";
    }

    public function getRevendasMetasGrupo($tipo, $ano = false)
    {
        $this->revendasGrupo[$tipo] = array();
        if (!$ano) {
            $ano = date('Y');
        }

        $metaGlobal = $this->getMetasCadastradas($ano, MetasVendas::GLOBAL, $tipo);
        if ($metaGlobal) {
            $sql = "
                SELECT MEV_FOREIGN_KEY FROM `metas_vendas`
                WHERE
                    MEV_ANO = {$ano} AND
                    MEV_TIPO = " . MetasVendas::UNIDADE . " AND
                    MEV_TIPO_COBRANCA = {$tipo} AND
                    (
                        MEV_ID < {$metaGlobal[0]->MEV_ID} OR
                        MEV_ID IN (
                            SELECT MEV_IDTRANSFERENCIA
                            FROM metas_vendas
                            WHERE
                                MEV_ANO = {$ano} AND
                                MEV_TIPO = " . MetasVendas::UNIDADE . " AND
                                MEV_TIPO_COBRANCA = {$tipo} AND
                                MEV_ID < {$metaGlobal[0]->MEV_ID}
                        )
                    )
            ";

            $command = Yii::app()->db->createCommand($sql);
            $revendasGrupo = $command->queryAll();
            if (!empty($revendasGrupo)) {
                $this->revendasGrupo[$tipo] = CHtml::listData($revendasGrupo, 'MEV_FOREIGN_KEY', 'MEV_FOREIGN_KEY');
            }
        }

        return $this->revendasGrupo[$tipo];
    }

    public function getRevendasComMetasForaGrupo($tipo, $ano = false)
    {
        $revendas = array();
        if (!$ano) {
            $ano = date('Y');
        }

        if (empty($this->revendasGrupo[$tipo])) {
            $this->revendasGrupo[$tipo] = $this->getRevendasMetasGrupo($tipo, $ano);
        }

        $conditionRevendasGrupos = "";
        if (!empty($revendasGrupo)) {
            $revendasGrupo = implode(", ", $this->revendasGrupo[$tipo]);
            $conditionRevendasGrupos = "AND MEV_FOREIGN_KEY NOT IN ({$revendasGrupo})";
        }

        $sql = "
            SELECT MEV_FOREIGN_KEY FROM `metas_vendas`
            WHERE
                MEV_ANO = {$ano} AND
                MEV_TIPO = " . MetasVendas::UNIDADE . " AND
                MEV_TIPO_COBRANCA = {$tipo}
                {$conditionRevendasGrupos}
        ";

        $command = Yii::app()->db->createCommand($sql);
        $revendasComMetas = $command->queryAll();
        if (!empty($revendasComMetas)) {
            $revendas = CHtml::listData($revendasComMetas, 'MEV_FOREIGN_KEY', 'MEV_FOREIGN_KEY');
        }

        return $revendas;
    }

    public function getRevendas($ano = false)
    {
        if (!$ano) {
            $ano = date('Y');
        }

        $metaGlobal = $this->getMetasCadastradas($ano, MetasVendas::GLOBAL, MetasVendas::META_MENSALIDADE);
        if (!$metaGlobal) {
            $revendas = Revendas::getRevendasByPeriodo($ano);
        } else {
            $metas = $this->getMetasCadastradas(
                $ano,
                MetasVendas::UNIDADE,
                MetasVendas::META_MENSALIDADE,
                " AND MEV_ID < {$metaGlobal[0]->MEV_ID}"
            );

            $revendasComMetas = implode(", ", CHtml::listData($metas, 'MEV_FOREIGN_KEY', 'MEV_FOREIGN_KEY'));
            $revendas = Revendas::model()->findAll("
                REV_IDREVENDA IN ({$revendasComMetas})
                ORDER BY REV_TIPO ASC, REV_FANTASIA ASC
            ");
        }

        return !empty($revendas) ? $revendas : false;
    }

    public function getNovasRevendas()
    {
        $ano = date('Y');
        $revendasGlobal = $this->getRevendas($ano);
        if ($revendasGlobal) {
            $revendasGlobal = CHtml::listData($revendasGlobal, 'REV_IDREVENDA', 'REV_IDREVENDA');
            $revendasGlobal = implode(", ", $revendasGlobal);

            $novasRevendas = Revendas::model()->findAll("
                REV_IDREVENDA NOT IN ({$revendasGlobal}) AND
                REV_SITUACAO = 'A'
                ORDER BY REV_TIPO ASC, REV_FANTASIA ASC
            ");
            foreach ($novasRevendas as $key => $revenda) {
                $mensalidade = $this->getMetasCadastradas(
                    date('Y'),
                    MetasVendas::UNIDADE,
                    MetasVendas::META_MENSALIDADE,
                    " AND MEV_FOREIGN_KEY = {$revenda->REV_IDREVENDA} AND MEV_RASCUNHO = 0"
                );
                $implantacao = $this->getMetasCadastradas(
                    date('Y'),
                    MetasVendas::UNIDADE,
                    MetasVendas::META_IMPLANTACAO,
                    " AND MEV_FOREIGN_KEY = {$revenda->REV_IDREVENDA} AND MEV_RASCUNHO = 0"
                );
                if ($mensalidade && $implantacao) {
                    unset($novasRevendas[$key]);
                }
            }

            return !empty($novasRevendas) ? $novasRevendas : false;
        }

        return false;
    }

    public function getVendedores($ano = false, $revenda = false)
    {
        if (!$ano) {
            $ano = date('Y');
        }

        if ($ano == date('Y')) {
            $vendedores = Funcionarios::model()->findAll("
                FUN_IDREVENDA = '{$revenda}' AND
                (FUN_IDSETOR = 5 OR FUN_PRM_PRIVILEGIO = 9) AND
                (
                    FUN_SITUACAO = 'A' OR
                    (FUN_SITUACAO = 'I' AND YEAR(FUN_DATAINATIVACAO) = {$ano})
                )
                ORDER BY FUN_NOME ASC
            ");
        } else {
            $vendedores = Funcionarios::model()->findAll("
                FUN_IDREVENDA = '{$revenda}' AND
                (FUN_IDSETOR = 5 OR FUN_PRM_PRIVILEGIO = 9) AND
                (
                    (FUN_SITUACAO = 'A' AND YEAR(FUN_DATAATIVACAO) <= {$ano}) OR
                    (FUN_SITUACAO = 'I' AND YEAR(FUN_DATAINATIVACAO) = {$ano})
                )
                ORDER BY FUN_NOME ASC
            ");
        }

        return $vendedores;
    }

    public function getMetasCadastradas($ano, $tipo, $tipoCobranca, $additionalConditions = false)
    {
        $addConditions = "";
        if ($additionalConditions) {
            $addConditions = $additionalConditions;
        }

        return self::model()->findAll("
            MEV_ANO = '{$ano}' AND
            MEV_TIPO = {$tipo} AND
            MEV_TIPO_COBRANCA = {$tipoCobranca}
            {$addConditions}
            ORDER BY MEV_ID DESC
        ");
    }

    public function getValoresMetas($ano, $tipo, $tipoCobranca, $ids = array())
    {
        $additionalConditions = false;
        $campos = array(
            'MEV_JAN',
            'MEV_FEV',
            'MEV_MAR',
            'MEV_ABR',
            'MEV_MAI',
            'MEV_JUN',
            'MEV_JUL',
            'MEV_AGO',
            'MEV_SET',
            'MEV_OUT',
            'MEV_NOV',
            'MEV_DEZ',
            'MEV_SOMA'
        );
        if (!empty($ids)) {
            $metas = array();
            foreach ($ids as $id) {
                $meta = $this->getMetasCadastradas($ano, $tipo, $tipoCobranca, "AND MEV_FOREIGN_KEY = {$id}");
                if ($meta) {
                    $metas[] = $meta[0];
                } else {
                    $metas[] = false;
                }
            }
        } else {
            $metas = $this->getMetasCadastradas($ano, $tipo, $tipoCobranca, $additionalConditions);
        }

        if (!empty($metas)) {
            $valores = array();
            foreach ($metas as $key => $meta) {
                foreach ($campos as $coluna => $campo) {
                    if ($campo != "MEV_SOMA") {
                        $valores[$coluna]['data'] = $campo;
                        if ($meta) {
                            // echo "{$meta->MEV_FOREIGN_KEY} => {$campo} => {$meta->{$campo}}<br>";
                            $valores[$coluna]['values'][$key+1] = $meta->{$campo};
                            $valores[$coluna]['rascunho'][$key+1] = $meta->MEV_RASCUNHO ? true : false;
                        } else {
                            $valores[$coluna]['values'][$key+1] = 0.00;
                            $valores[$coluna]['rascunho'][$key+1] = true;
                        }
                    } else {
                        $valores[$coluna]['data'] = $campo;
                        $valores[$coluna]['soma'] = true;
                    }
                }
            }
            return $valores;
        }
        return false;
    }

    public function getColumnConfig($colHeaders)
    {
        $columuns = array();
        foreach ($colHeaders as $coluna) {
            if (!is_numeric($coluna)) {
                $mes = strtoupper(substr($coluna, 0, 3));
            } else {
                $mes = "SOMA";
            }
            $columuns[] = array(
                'data' => "MEV_{$mes}",
                'type' => 'numeric',
                'format' => 'R$ 0,0.00',
                'language' => 'pt-br',
                'allowEmpty' => false
            );
        }
        $columuns[12]['readOnly'] = true;
        $columuns[12]['soma'] = true;

        return $columuns;
    }

    public function podeCadastrarMetasGrupo()
    {
        if (!User::isAdminSupervisorGerenteRevenda() && User::getUser()->FUN_TBL_CADASTRO_METAS_GRUPO != 1) {
            return false;
        }

        return true;
    }

    public function podeCadastrarMetasNovasUnidades()
    {
        if (!User::isAdminSupervisorGerenteRevenda() && User::getUser()->FUN_TBL_CADASTRO_METAS_UNIDADES != 1) {
            return false;
        }

        $anoAtual = date('Y');

        $globalMensalidade = $this->getMetasCadastradas($anoAtual, MetasVendas::GLOBAL, MetasVendas::META_MENSALIDADE);
        $globalImplantacao = $this->getMetasCadastradas($anoAtual, MetasVendas::GLOBAL, MetasVendas::META_IMPLANTACAO);
        if ($globalMensalidade || $globalImplantacao) {
            if ($this->getNovasRevendas()) {
                return true;
            }
        }

        return false;
    }

    public function podeTransferirMetas()
    {
        if (!$this->podeCadastrarMetasNovasUnidades()) {
            return false;
        }
        if (empty($this->getRevendasInativadas())) {
            return false;
        }

        return true;
    }

    public function podeCadastrarMetasVendedores()
    {
        if (!User::isAdminSupervisorGerenteRevenda() && User::getUser()->FUN_TBL_CADASTRO_METAS_VENDEDORES != 1) {
            return false;
        }

        return true;
    }

    public function podeCadastrarMetas($tipo)
    {
        if ($tipo == MetasVendas::GLOBAL) {
            return $this->podeCadastrarMetasGrupo();
        } elseif ($tipo == MetasVendas::UNIDADE) {
            return $this->podeCadastrarMetasNovasUnidades();
        } elseif ($tipo == MetasVendas::VENDEDOR) {
            return $this->podeCadastrarMetasVendedores();
        }

        return false;
    }

    public function getDadosRevisaoUnidades($revendas, $ano, $global = true)
    {
        $revisao = array();

        if ($global) {
            $revisao['metaGlobalMensalidade'] = $this->find("
                MEV_ANO = '{$ano}' AND
                MEV_TIPO = " . MetasVendas::GLOBAL . " AND
                MEV_TIPO_COBRANCA = " . MetasVendas::META_MENSALIDADE
            );
            $revisao['metaGlobalImplantacao'] = $this->find("
                MEV_ANO = '{$ano}' AND
                MEV_TIPO = " . MetasVendas::GLOBAL . " AND
                MEV_TIPO_COBRANCA = " . MetasVendas::META_IMPLANTACAO
            );
        }

        $revisao['revendas'] = array();
        foreach ($revendas as $codigo => $revenda) {
            $revisao['revendas'][$codigo]['mensalidade'] = $this->find("
                MEV_ANO = '{$ano}' AND
                MEV_TIPO = " . MetasVendas::UNIDADE . " AND
                MEV_TIPO_COBRANCA = " . MetasVendas::META_MENSALIDADE . " AND
                MEV_FOREIGN_KEY = {$codigo}
            ");
            $revisao['revendas'][$codigo]['implantacao'] = $this->find("
                MEV_ANO = '{$ano}' AND
                MEV_TIPO = " . MetasVendas::UNIDADE . " AND
                MEV_TIPO_COBRANCA = " . MetasVendas::META_IMPLANTACAO . " AND
                MEV_FOREIGN_KEY = {$codigo}
            ");
        }

        return $revisao;
    }

    public function getDadosRevisaoVendedores($vendedores, $ano)
    {
        $revisao = array();

        foreach (array_values($vendedores) as $codigo => $vendedor) {
            $revisao[$vendedor->FUN_IDFUNCIONARIO]['mensalidade'] = $this->find("
                MEV_ANO = '{$ano}' AND
                MEV_TIPO = " . MetasVendas::VENDEDOR . " AND
                MEV_TIPO_COBRANCA = " . MetasVendas::META_MENSALIDADE . " AND
                MEV_FOREIGN_KEY = {$vendedor->FUN_IDFUNCIONARIO}
            ");
            $revisao[$vendedor->FUN_IDFUNCIONARIO]['implantacao'] = $this->find("
                MEV_ANO = '{$ano}' AND
                MEV_TIPO = " . MetasVendas::VENDEDOR . " AND
                MEV_TIPO_COBRANCA = " . MetasVendas::META_IMPLANTACAO . " AND
                MEV_FOREIGN_KEY = {$vendedor->FUN_IDFUNCIONARIO}
            ");
        }

        return $revisao;
    }

    public function getConfigForMetasVendedores($vendedores, $valores, $ano)
    {
        $retorno = array(
            'readOnlyColumns' => array(),
            'inativos' => array(),
        );

        if ($ano == date('Y')) {
            $mesesFuturo = array_slice(array_keys(Util::getMeses()), date('m'));
            $mesesPassados = array_diff(array_keys(Util::getMeses()), $mesesFuturo);
        } else {
            $mesesPassados = array_keys(Util::getMeses());
        }

        $readOnlyColumns = array();
        $linha = 1;
        foreach ($vendedores as $vendedor) {
            $inativo = false;
            $ativadoNesseMes = false;
            if ($vendedor->FUN_SITUACAO == "I") {
                $data = DateTime::createFromFormat('d/m/Y H:i:s', $vendedor->FUN_DATAINATIVACAO);
                if ($data) {
                    $mesInativacao = $data->format('m');
                } else {
                    $mesInativacao = date('m');
                }
                $retorno['inativos'][$vendedor->FUN_IDFUNCIONARIO] = array(
                    'linha' => $linha - 1,
                    'mes' => $mesInativacao
                );

                $inativo = $mesInativacao;
            } elseif ($vendedor->FUN_SITUACAO == "A" && $vendedor->foiAtivadoNesseMes()) {
                $data = DateTime::createFromFormat('d/m/Y H:i:s', $vendedor->FUN_DATAATIVACAO);
                if ($data) {
                    $mesAtivacao = $data->format('m');
                } else {
                    $mesAtivacao = date('m');
                }
                $ativadoNesseMes = $mesAtivacao;
            }

            $passouMesesPassados = false;
            $passouInativo = false;
            $passouAtivadoMes = false;
            foreach ($valores as $valor) {
                if ($valor['data'] != "MEV_SOMA") {
                    if (!$valor['rascunho'][$linha] && !$passouMesesPassados) {
                        foreach ($mesesPassados as $mes) {
                            $readOnlyColumns[$linha-1][] = $mes;
                        }
                        $passouMesesPassados = true;
                    }

                    if ($inativo && !$passouInativo) {
                        $mesInativacao = $inativo;
                        foreach (Util::getMeses() as $mes => $nome) {
                            if ($mes <= $mesInativacao) {
                                if ($valor['rascunho'][$linha] && isset($readOnlyColumns[$linha][$mes])) {
                                    unset($readOnlyColumns[$linha][$mes]);
                                }
                            } else {
                                $readOnlyColumns[$linha-1][$mes-1] = $mes;
                            }
                        }

                        $passouInativo = true;
                    }

                    if ($ativadoNesseMes && !$passouAtivadoMes) {
                        $mesAtivacao = $ativadoNesseMes;
                        foreach (Util::getMeses() as $mes => $nome) {
                            if ($mes >= $mesAtivacao) {
                                if ($valor['rascunho'][$linha] && isset($readOnlyColumns[$linha][$mes])) {
                                    unset($readOnlyColumns[$linha][$mes]);
                                }
                            } else {
                                $readOnlyColumns[$linha-1][$mes-1] = $mes;
                            }
                        }

                        $passouInativo = true;
                    }
                }
            }

            $linha++;
        }

        // var_dump($readOnlyColumns[0]);
        // liberatos todos campos, pois atualmente é feito internamente, caso necessário reabilitar no futuro
        $retorno['readOnlyColumns'] = [];

        return $retorno;
    }

    public function getRevendasInativadas($ano = false)
    {
        if (!$ano) {
            $ano = date('Y');
        }

        return Revendas::model()->findAll("
            REV_SITUACAO = 'I' AND
            YEAR(REV_DATAINATIVACAO) = '{$ano}' AND
            YEAR(REV_DATAATIVACAO) <= '{$ano}' AND
            REV_IDREVENDA NOT IN (
                SELECT MEV_FOREIGN_KEY
                FROM metas_vendas
                WHERE MEV_IDTRANSFERENCIA IS NOT NULL
            )
            ORDER BY REV_TIPO ASC, REV_FANTASIA ASC
        ");
    }
}
