Vista admin datepicker agregar <= y => (fechainicio, fechafin)

Buenas tardes, Tal como dice el titulo del post mi pregunta es simple, se puede colocar operadores de busqueda a los datepicker? ya que por tengo una vista con fechainicio y fechafin, cuando selecciono una fechainicio busca solo las fehchas que coincidan exactamente con la fecha que coloco y no las fechas superiores, ya que tengo fechainicio y fechafin, me gustaria colocarle "fechaseleccionada" >= fechainicio y "fechaseleccionada" <= fechafin, es decir que no solo sea igual sino tambien mayor que, y menor que, según corresponda

aqui mi vista admin:





<h1>ADMINISTRADOR DE EVENTOS</h1>




<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'tbl-evento-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'afterAjaxUpdate' => 'reinstallDatePicker', // (#1)

	'columns'=>array(

		'id',

		array('name'=>'iddescripcionevento',

		'value'=>'$data->iddescripcionevento0->nombre',

		'filter'=>CHtml::activeTextField($model,'varDescripcionEvento'),

		),

		array('name'=>'idtipoevento',

				'value'=>'$data->idtipoevento0->nombre',

				'filter'=>CHtml::activeTextField($model,'varTipoEvento'),

		),

/*

		array('name'=>'Nombres del Expositor',

		'value'=>'$data->idexpositor0->idpersona0->nombre',

		'filter'=>CHtml::activeTextField($model,'varExpositorNombre'),

		),

		array('name'=>'Apellidos del Expositor',

				'value'=>'$data->idexpositor0->idpersona0->apellido',

				'filter'=>CHtml::activeTextField($model,'varExpositorApellido'),

		),

*/

			

			

		array('name'=>'Apellidos del Expositor',

				'value'=>'$data->idexpositor0->idpersona0->nombre.\' \'.$data->idexpositor0->idpersona0->apellido',

				'filter'=>CHtml::activeTextField($model,'varExpositorDatos'),

		),


		array('name' => 'fechainicio',

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

		'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker',

		 array(	'model' => $model,

				'attribute'=>'fechainicio',

				'language' => 'es',

				//'i18nScriptFile' => 'jquery-ui.min.js', //(#2)

				'htmlOptions' => array(

						'id' => 'datepicker_for_fechainicio',

						'size' => '10'),

				'options' => array("dateFormat"=>"dd/mm/yy",

						'showButtonPanel'=> true,

						"changeYear"=>true

				)),true), // (#4)

		),


		array('name' => 'fechafin',

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

			'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker',

			 array(	'model' => $model,

					'attribute'=>'fechafin',

					'language' => 'es',

					//'i18nScriptFile' => 'jquery-ui.min.js', //(#2)

					'htmlOptions' => array(

							'id' => 'datepicker_for_fechafin',

							'size' => '10'),

					'options' => array("dateFormat"=>"dd/mm/yy",

							'showButtonPanel'=> true,

							"changeYear"=>true

					)),true), // (#4)

		),

		/*

		'horas',

		'observacion',

		*/

		'numerodeacta',

		'libro',

		array(

			'class'=>'CButtonColumn',

			'afterDelete'=>'function(link,success,data){ if(success) $("#statusMsg").html(data); }',

		),

		

	),

));


// (#5)

Yii::app()->clientScript->registerScript('re-install-date-picker', "

function reinstallDatePicker(id, data) {

        //use the same parameters that you had set in your widget else the datepicker will be refreshed by default

    $('#datepicker_for_fechainicio').datepicker(jQuery.extend({showMonthAfterYear:false, changeYear:true},jQuery.datepicker.regional['es'],{'dateFormat':'dd/mm/yy'}));

	$('#datepicker_for_fechafin').datepicker(jQuery.extend({showMonthAfterYear:false, changeYear:true},jQuery.datepicker.regional['es'],{'dateFormat':'dd/mm/yy'}));

}

");


?>




Aqui el Search para ver si con el Criteria->compare se puede hacer algo, tambien hay que recordar que el formato de fecha que esta usando es dd/mm/YYYY




public function search()

	{

		// @todo Please modify the following code to remove attributes that should not be searched.

	

		$criteria=new CDbCriteria;

		$criteria->with = array(

				'iddescripcionevento0',

				'idtipoevento0',

				'idexpositor0.idpersona0');

		$criteria->together = true;


		$criteria->compare('t.id',$this->id);

		$criteria->compare('fechainicio::text',$this->fechainicio,true);

		$criteria->compare('fechafin::text',$this->fechafin,true);

		$criteria->compare('horas',$this->horas);

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

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

		$criteria->compare('numerodeacta::text', $this->numerodeacta,true);

		$criteria->compare('libro::text', $this->libro,true);

		

		$criteria->addSearchCondition('iddescripcionevento0.nombre', $this->varDescripcionEvento, true, 'AND', 'ILIKE');

		$criteria->addSearchCondition('idtipoevento0.nombre', $this->varTipoEvento, true, 'AND', 'ILIKE');

		$criteria->addSearchCondition('CONCAT(idpersona0.nombre, \' \', idpersona0.apellido)',$this->varExpositorDatos,true, 'AND', 'ILIKE');


		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

				#'sort'=>array('defaultOrder'=>'t.id DESC')

				'sort'=>array('defaultOrder'=>'t.numerodeacta DESC')

		));

	}



Buenos días wasaca, se puede hacer con Jquery, te pongo un ejemplo

dentro del array options del datapicker





'onClose' => 'js:function(selectedDate){

$("#fechaFinal").datepicker("option", "minDate", selectedDate);

}',



Hola Esteban, gracias por responder, hice lo que me dijiste y no funciona, CREO que el problema debe venir por los formatos de fechas que yo uso, y me parece que el problema viene desde el critera->compare pero no he dado con el problema, he intentado varias cosas pero nada me funciona =( aqui como quedó, según tu observacion, gracias de nuevo =)




<php

		array('name' => 'fechainicio',

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

		'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker',

		 array(	'model' => $model,

				'attribute'=>'fechainicio',

				'language' => 'es',

				//'i18nScriptFile' => 'jquery-ui.min.js', //(#2)

				'htmlOptions' => array(

						'id' => 'datepicker_for_fechainicio',

						'size' => '10'),

				'options' => array("dateFormat"=>"dd/mm/yy",

						'showButtonPanel'=> true,

						'changeYear'=>true,

						'onClose' => 'js:function(selectedDate){

$("#fechainicio").datepicker("option", "minDate", selectedDate);

}',

				)),true), // (#4)

		),


		array('name' => 'fechafin',

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

			'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker',

			 array(	'model' => $model,

					'attribute'=>'fechafin',

					'language' => 'es',

					//'i18nScriptFile' => 'jquery-ui.min.js', //(#2)

					'htmlOptions' => array(

							'id' => 'datepicker_for_fechafin',

							'size' => '10'),

					'options' => array("dateFormat"=>"dd/mm/yy",

							'showButtonPanel'=> true,

							'changeYear'=>true,

							'onClose' => 'js:function(selectedDate){

$("#fechafin").datepicker("option", "maxDate", selectedDate);

}',

					)),true), // (#4)

		),

?>



Te paso un ejemplo tu lo implementas en el search que necesites:




if(!empty($this->fecha_desde) && empty($this->fecha_hasta)) {

            $criteria->addCondition ("fecha_entrada >= '$this->fecha_desde'");

        } elseif(!empty($this->fecha_hasta) && empty($this->fecha_desde)) {

            $criteria->addCondition ("fecha_entrada <= '$this->fecha_hasta'");

        } elseif(!empty($this->fecha_hasta) && !empty($this->fecha_desde)) {

            $criteria->addCondition ("fecha_entrada  >= \"'$this->fecha_desde'\" and fecha_entrada <= \"'$this->fecha_hasta'\"");

        }



Como puedes ver es una condición que se añade a $criteria y por lo tanto debes eliminar las $criteria->compare('fecha…

Saludos, espero que te sirva.

Hola Ramón, muchas gracias por la ayuda, una pequeña duda, cuando se hace referencia a "fechaentrada" a que te refieres? porque entiendo que en mi casa "fecha_desde" seria $this->fechainicio y "fecha_hasta" seria $this->fechafin PERO cual sería "fecha_entrada" y como es que comparas la misma variable para los dos criterios de comparacion? por ejemplo acá:




$criteria->addCondition ("fecha_entrada  >= \"'$this->fecha_desde'\" and fecha_entrada <= \"'$this->fecha_hasta'\"");



PD: Asi lo hice y quedó funcional, estoy haciendo pruebas: muchas gracias! XD




if(!empty($this->fechainicio) && empty($this->fechafin)) {

			$criteria->addCondition ("fechainicio >= '$this->fechainicio'");

		} elseif(!empty($this->fechafin) && empty($this->fechainicio)) {

			$criteria->addCondition ("fechafin <= '$this->fechafin'");

		} elseif(!empty($this->fechafin) && !empty($this->fechainicio)) {

			$criteria->addCondition ("fechainicio  >= '$this->fechainicio' and fechafin <= '$this->fechafin' ");

		}



Hola hermano, prueba este código que te envío y que debe funcionar sin dificultad

Utiliza igual los picker y un grid en la vista a generar

En el grid ‘dataProvider’ => $model->search(),

public $date_first;

public $date_last;

public function search()

{

$criteria=new CDbCriteria;

if((isset($this->date_first) && trim($this->date_first) != "") && (isset($this->date_last) && trim($this->date_last) != ""))

$criteria->addBetweenCondition(‘Date_Begin’, ‘’.$this->date_first.’’, ‘’.$this->date_last.’’);

$criteria->addBetweenCondition(‘Date_End’, ‘’.$this->date_first.’’, ‘’.$this->date_last.’’);

$criteria->compare(‘ID’,$this->ID);

$criteria->compare(‘Date_Begin’,$this->Date_Begin,true);

$criteria->compare(‘Date_End’,$this->Date_End,true);

return new CActiveDataProvider($this, array(

‘criteria’=>$criteria,

));

}

Prueba este codigo y dime, pero me parece que es lo que pides en el primer post…

Estamos en comunicación

}

Muchas gracias reykel, es basicamente lo mismo, lo probé y me sirvió perfectamente! muchas gracias!