Obtengo el siguiente error (una excepción):
CException
Propiedad "CArrayDataProvider"."idImeter" no se encuentra definida.
Por más vueltas que le doy no consigo solucionarlo, a ver si alguien me puede echar una manita.
El código es el siguiente.
Controlador:
public function actionIndex()
{
$model = new Zonas;
// Lo que ve el administrador
if (Yii::app()->getModule('user')->isAdmin()) {
// Si hay alarmas recientes las mostramos
$datos = Alarmas::model()->ultimasAlarmas(Yii::app()->user->id);
//if (!$datos === false) {
if($datos) {
//print "Alarmas";
$dataProvider = new CArrayDataProvider($datos);
//if (isset($dataProvider))
//print "<pre>";
//print_r($dataProvider);
//print "</pre>";
$this->render('/alarmas/popup',array('model'=>$model,'dataProvider'=>$dataProvider));
}
// En caso contrario mostramos las zonas
else {
$dataProvider=new CActiveDataProvider('Zonas');
//echo "yee aqui";
//yii::app()->end();
$this->render('/zonas/index',array('dataProvider'=>$dataProvider,));
}
}
else {
.....
Vista:
<?php
//ob_start();
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
'id'=>'alarmas',
'themeUrl' => Yii::app()->theme->baseUrl.'/css/',
'options'=>array(
'title'=>'Alarmas',
'autoOpen'=>true,
'modal'=>true,
'resizable'=>false,
'top' => '50px',
'width'=>'700',
'height'=>'auto',
'close'=>'js:function(event, ui){ location.href = "'. Yii::app()->createUrl('zonas/cerrarPopup',array('id'=>Yii::app()->user->id)) .'" }'
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'alarmas-grid',
//'cssFile'=>'css/screen.css',
'dataProvider'=>$dataProvider,
//'filter'=>$model,
'columns'=>array(
array(
'header'=>'Zona',
'name' => 'idImeter.idEnsal.idZona.nombre',
),
array(
'header'=>'Zonaz',
'name' => 'idImeter.idEnsal.idZona.id',
),
array(
'header'=>'Sector',
'name' => 'idImeter.idEnsal.nombre',
),
array(
'header'=>'Fecha',
'name' => 'fecha',
),
array(
'header'=>'Caudal',
'name' => 'caudal',
),
array(
'header'=>'% excedido',
'name' => 'prcjSuperado',
),
array(
'class'=>'CButtonColumn',
'template'=>'{view}',
'buttons'=>array(
'update'=>array(
'url' => Yii::app()->createUrl("/zonas/view",array('id'=>idImeter.idEnsal.idZona.id)),
),
),
),
),
));
$this->endWidget('zii.widgets.jui.CJuiDialog');
?>
Modelo:
public function ultimasAlarmas($id) {
// Obtenemos la ultima vez que el usuario ha leido las alarmas
$criteria = new CDbCriteria();
$criteria->compare('id_usuario',(int)$id);
$fecha = UsuariosAlarmas::model()->find($criteria);
// Obtenemos las entradas/salidas con alarma configurara y los parámetros de la alarma
$criteria = new CDbCriteria;
$criteria->select = array('t.id_ensal','(t.valor + ((t.porcentaje*t.valor)/100)) AS valor', 't.tipo');
$alarms = Alarmas::model()->findAll($criteria);
// Recorremos los resultados
foreach ($alarms as $alarm) {
$idEnsal = $alarm->id_ensal;
$consumoAlarma = $alarm->valor;
$tipoAlarma = $alarm->tipo;
// Comprobamos si hay formula, para calcular la alarma haciendo los calculos oportunos
$criteria = new CDbCriteria();
$criteria->select = array('t.formula');
$criteria->compare('id', (int)$idEnsal);
$formula = Ensal::model()->find($criteria);
$formula = $formula->formula;
$criteria = new CDbCriteria();
//if (empty($formula)) {
$criteria->select = array('t.id','MIN(t.caudal) as caudal','t.fecha','t.HLectura');
//echo "No hay formula<br />";
//}
$criteria->together = true;
$criteria->group = 't.fecha';
$criteria->with=array(
'idImeter'=>array(
'joinType' => 'INNER JOIN',
'with' => array(
'idEnsal' => array(
'joinType' => 'INNER JOIN',
'select' => array('id','nombre'),
'with' => array(
'idZona' => array(
'joinType' => 'INNER JOIN',
'select' => array('nombre', 'id')
)
)
)
)
));
if (!empty($formula)) {
Yii::import('application.controllers.EnsalController');
$criteria->compare('t.id_formula', (string)implode(EnsalController::extraerIdsFormula($formula)));
}
else {
$criteria->compare('idImeter.id_ensal', (int)$idEnsal);
}
//echo $consumoAlarma;
// Entrada salida que estamos recorriendo
//$criteria->compare('idEnsal.id', (int)$idEnsal);
// Consumos que superen alarma
//$criteria->compare('t.caudal', ' >= ' . $consumoAlarma);
$criteria->having = "caudal >= ".(double)$consumoAlarma;
if (isset($fecha->fecha)) {
//$fecha = $fecha->fecha;
$criteria->compare('t.fecha', ' > '. (string)$fecha->fecha);
}
// En caso de ser alarma nocturna
if ($tipoAlarma == 1) {
// Obtenemos el horario nocturno configurado en la bd
$HInicioNoche = GConfig::model()->find(array('select'=>array('HInicioNoche')));
$HInicioNoche = $HInicioNoche->HInicioNoche;
$HFinNoche = GConfig::model()->find(array('select'=>array('HFinNoche')));
$HFinNoche = $HFinNoche->HFinNoche;
$criteria->addBetweenCondition('t.HLectura', (string)$HInicioNoche, (string)$HFinNoche);
}
$datos = Datos::model()->findAll($criteria);
foreach ($datos as $dato) {
// Redondeamos el porcentaje ??
$prcjSuperado = round(($dato->caudal * 100) / $consumoAlarma) - 100;
$dato->prcjSuperado = $prcjSuperado;
//if (isset($dato->idImeter->idEnsal->idZona->id))
$dato->id_zona = $dato->idImeter->idEnsal->idZona->id;
//print $dato->zona;
//else
//$dato->zona = '';
$res[] = $dato;
//print $dato->idImeter->idEnsal->idZona->id;
//print $dato->idImeter->idEnsal->idZona->id;
//print "<pre>";
//print_r($res);
//print "</pre>";
}
}
//return $res;
return (isset($res)) ? $res : false ;
}