Problema Com Objeto Tbdaterangepicker

Me passaram uma tarefa que era colocar um filtro por datas, com data incial e final.

E me disseram onde existia um fonte com o recurso.

O campo a ser filtrado é o cadastro.Data_Cadastro

Implantei a programação, conforme o outro fonte.

Apareceu o objeto no filtro, mas ao acionar o filtro ele não filtra.

O código abaixo foi colocado no index da view/contatos


        array(

            'header'=>$model->getAttributeLabel('Data_Cadastro'),

            'name'=>'Data_Cadastro',

            'value'=>'$data->Data_Cadastro',

            'filter'=>$this->widget('bootstrap.widgets.TbDateRangePicker',

                array(

                    'attribute'=>'Data_Cadastro',

                    'model'=>$model,

                    'htmlOptions'=>array('placeholder'=>'Filtrar período'),

                    'callback'=>'js:triggerCgridViewUpdate',

                    'options'=>array(

                        'language'=>'pt',

                        'format'=>'dd/MM/yyyy',

                        'locale'=>array('applyLabel'=>'OK', 'clearLabel'=>'Cancelar', 'fromLabel'=>'De', 'toLabel'=>'Até'),

                        'endDate'=>date('d/m/Y', mktime(0, 0, 0, date("m")  , date("d")+1, date("Y")))

                    )

                ), true),

            'type'=>'raw',

            'htmlOptions'=>array('style'=>'width: 15%; text-align: center;'),            

        ),                

E este outro trecho de código fica mais abaixo

Estou é com dois problemas, que podem estar relacionados ou não…

Além do filtro…

Isso eu resolvi

Eu faço a seleção de datas, mas quando o fóco sai do campo da data, retorna pro conteúdo do placeholder.

Então talvez seja esse o problema.

Ou seja talvez o filtro até esteje certo.

Mas como as datas selecionadas não vão pro campo do filtro, não filtra.

Consegui um pequeno progresso

Consegui fazer com que as datas apareçam no campo de filtro

mas elas saem em seguida, em cerca de 4 segundos

não importando se muda-se o foco do objeto ou não

Notei que quem ‘permite’ que as datas apareçam é a propriedade ‘pagination’, no caso deixando como false

As datas ficam no campo, mas aos 4 segundos(+/-) elas saem, não filtra


        return new CActiveDataProvider($this, array(

            'criteria'=>$criteria,

            'sort'=>array(

                'defaultOrder'=>'Fantasia',

                'attributes'=>array(

                    'Fantasia',

                    'Cnpj_Cpf',

                ),

            ),

            'pagination' => false,                    

        )); 

As datas aparecem rapidamente no campo, e logo saem, não filtra


        return new CActiveDataProvider($this, array(

            'criteria'=>$criteria,

            'sort'=>array(

                'defaultOrder'=>'Fantasia',

                'attributes'=>array(

                    'Fantasia',

                    'Cnpj_Cpf',

                ),

            ),

            'pagination'=>array(

                'pageSize'=>50,

            ),

        )); 

Estou fazendo essa implementação olhando como que é feito num outro fonte

e esta tudo ‘igual’ pelo menos nos pontos que considerei que tinham alguma relevância pra isso

e naquele fonte, funciona direitinho, ao se dar OK no Tbdaterangepicker

as datas vão pro campo de filtro

e permanecem lá

e ao se mudar o foco é filtrado

Outra coisa que notei é que na pagina que ‘funciona’ quando eu informo as datas as datas continam ali quando é realizado o filtro.

No outro fonte, ao sair do foco, não filtra daí demora alguns segundos e sai o conteúdo.

Pode ser que estaja filtrando, mas como sai o conteúdo antes, fica como se estivesse no filtro selecionando todos.

Continuo sem resolver essa parada…

Notei que o filtro fuciona se coloco os valores na marra

Se comento o IF abaixo, fazendo com que o programa entre no conteúdo do IF da erro

da [color="#FF0000"]Undefined offset: 1 [/color]


if (isset($this->Data_Registro) && strstr($this->Data_Registro, ' - ')) {

            list($this->Data_Registro_inicio, $this->Data_Registro_fim) = explode(' - ', $this->Data_Registro);

        }

       

        if (isset($this->Data_Registro_inicio)) {

            $this->Data_Registro_inicio = date('Y-m-d', CDateTimeParser::parse($this->Data_Registro_inicio, Yii::app()->locale->dateFormat));

        }


        if (isset($this->Data_Registro_fim)) {

            $this->Data_Registro_fim= date('Y-m-d', CDateTimeParser::parse($this->Data_Registro_fim, Yii::app()->locale->dateFormat));

        }



[color="#0000FF"]Aqui um teste meu, setando os valores na marra[/color]


        $this->Data_Registro_inicio = '2014-04-01';

        $this->Data_Registro_fim = '2014-09-15';

Aqui o resto do código que faz a adição da cláusula ao critério


        if (isset($this->Data_Registro_inicio) && isset($this->Data_Registro_fim)) {

            $criteria->addBetweenCondition('Data_Registro', $this->Data_Registro_inicio, $this->Data_Registro_fim);

        }

Resolvi comparar os códigos de duas listas com pesquisas com datas, esta nova que fiz e a outra que já funcionava, mas ainda não consegui achar alguma diferença ou motivo de porque não funciona.

Uma coisa que percebi é que havia duas tabelas que tinham o mesmo nome de campo e isso as vezes causava uma mensagem de abiguidade, mas renomeei o campo e agora não tem mais isso.

Então concluí que o problema é que a variavel Data_Registro não é populada ao sair dar OK no controle TBDateRangePicker.

Aqui estão os códigos fontes da página resultante, referindo-se ao campo da data

Da página que funciona




<input placeholder="Filtrar período" name="ContatoVisita[Data_Visita]" id="ContatoVisita_Data_Visita" type="text" />

E da que não funciona


<input placeholder="Filtrar período" name="Conta[Data_Registro]" id="Conta_Data_Registro" type="text" />

Não consegui localizar como que a variável Data_Visita (que é a variável que é populada no fonte que funciona) é populada… então não consigo saber porque a outra variável a que é utilizada no fonte com o filtro novo, não funciona, que é a váriávle Data_Registro