Eexcelview And Csqldataprovider Error

Hello, i´ve using EExcelview sor quite sometime and it has always worked fine. However, i´ve allways used a CActiveDataProvider and this time i needed a CSqlDataProvider because of SQL UNION.

I am using the same query and rendering it in a CGridview and it works just fine but when i render it in EExcelview it get a "PHP notice Trying to get property of non-object".

In my model i have:


public function getListaAgregadoAdminForExcel($id_processo) {

		

		

		$entidadesCriteria = "(SELECT cliente.id_cliente as cliente,

									cliente.nome,

									cliente.nif,

									processo.id_processo,

									@valor_agregado:=(IFNULL((SELECT

									SUM(((artigo.preco_estimado * 1.23)*encomenda_artigo.quantidade)) as valor_total_agregado

									FROM

									encomenda

									INNER JOIN cliente ON cliente.id_cliente = encomenda.id_cliente

									INNER JOIN encomenda_artigo ON encomenda.id_encomenda = encomenda_artigo.id_encomenda

									INNER JOIN artigo ON encomenda_artigo.id_artigo = artigo.id_artigo

									INNER JOIN produto ON artigo.id_produto = produto.id_produto

									WHERE

									encomenda.id_tipo = 1 AND

									encomenda.id_processo = $id_processo AND 

									encomenda.id_cliente = cliente AND

									cliente.estado > 0

									group by cliente.nome),0)) as valor_agregado,

									@valor_cabimentado:=(IFNULL((SELECT

									SUM(garantia.valor) as valor_total_cabimentado

									FROM

									encomenda

									INNER JOIN cliente ON cliente.id_cliente = encomenda.id_cliente

									INNER JOIN encomenda_garantia on encomenda.id_encomenda = encomenda_garantia.id_encomenda

									INNER JOIN garantia on encomenda_garantia.id_garantia = garantia.id_garantia

									WHERE

									garantia.id_tipo < 3 AND

									encomenda.id_processo = $id_processo AND 

									encomenda.id_cliente = cliente  AND

									encomenda_garantia.cabimento IS NOT NULL AND

									cliente.estado > 0

									group by cliente.nome),0)) as valor_cabimentado,

									ROUND(@valor_agregado - @valor_cabimentado,2) as valor_em_falta,

									((SELECT

										if(

										((SELECT 

										COUNT(

										DISTINCT

										encomenda.id_encomenda)

										FROM

										encomenda

										WHERE

										encomenda.id_processo = $id_processo AND

										encomenda.id_cliente = cliente AND

										encomenda.id_tipo = 1) -

										(SELECT

										Count(DISTINCT encomenda.id_encomenda)

										FROM

										encomenda

										INNER JOIN encomenda_garantia ON encomenda.id_encomenda = encomenda_garantia.id_encomenda

										INNER JOIN garantia ON encomenda_garantia.id_garantia = garantia.id_garantia

										WHERE

										encomenda.id_processo = $id_processo AND

										encomenda.id_cliente = cliente AND

										encomenda.id_tipo = 1 AND

										garantia.id_tipo < 3))>0 OR ((SELECT 

										COUNT(

										DISTINCT

										encomenda.id_encomenda)

										FROM

										encomenda

										INNER JOIN encomenda_artigo on encomenda.id_encomenda = encomenda_artigo.id_encomenda

										INNER JOIN encomenda_garantia on encomenda.id_encomenda = encomenda_garantia.id_encomenda

										WHERE

										encomenda.id_processo = $id_processo AND

										encomenda.id_cliente = cliente AND

										encomenda_garantia.cabimento IS NOT NULL AND

										encomenda.id_tipo = 1) = 0) , 'em falta', 'entregue'))) as declaracoes,

										IF(@valor_agregado = 0, 'Sem agregação',

										(SELECT CASE WHEN declaracoes = 'entregue' AND valor_em_falta <= 0.05 THEN 'Completo' ELSE 'Incompleto' END)) as estado_processo,

									    encomenda.id_encomenda as id_encomenda

										FROM `encomenda` encomenda 

										INNER JOIN cliente on encomenda.id_cliente = cliente.id_cliente

										INNER join processo_filtro on encomenda.id_cliente = processo_filtro.id_referencia

										INNER JOIN processo on processo_filtro.id_processo = processo.id_processo 

										WHERE processo.id_processo = $id_processo AND cliente.estado >= 0 AND processo_filtro.id_filtro = 1 GROUP BY cliente.id_cliente)


								UNION ALL

								

								(SELECT cliente.id_cliente as cliente,

																	cliente.nome,

																	cliente.nif,

																	processo.id_processo,

																	@valor_agregado:=(IFNULL((SELECT

																	SUM(((artigo.preco_estimado * 1.23)*encomenda_artigo.quantidade)) as valor_total_agregado

																	FROM

																	encomenda

																	INNER JOIN cliente ON cliente.id_cliente = encomenda.id_cliente

																	INNER JOIN encomenda_artigo ON encomenda.id_encomenda = encomenda_artigo.id_encomenda

																	INNER JOIN artigo ON encomenda_artigo.id_artigo = artigo.id_artigo

																	INNER JOIN produto ON artigo.id_produto = produto.id_produto

																	WHERE

																	encomenda.id_tipo = 1 AND

																	encomenda.id_processo = $id_processo AND 

																	encomenda.id_cliente = cliente AND

																	cliente.estado > 0

																	group by cliente.nome),0)) as valor_agregado,

																	@valor_cabimentado:=(IFNULL((SELECT

																	SUM(garantia.valor) as valor_total_cabimentado

																	FROM

																	encomenda

																	INNER JOIN cliente ON cliente.id_cliente = encomenda.id_cliente

																	INNER JOIN encomenda_garantia on encomenda.id_encomenda = encomenda_garantia.id_encomenda

																	INNER JOIN garantia on encomenda_garantia.id_garantia = garantia.id_garantia

																	WHERE

																	garantia.id_tipo < 3 AND

																	encomenda.id_processo = $id_processo AND 

																	encomenda.id_cliente = cliente  AND

																	encomenda_garantia.cabimento IS NOT NULL AND

																	cliente.estado > 0

																	group by cliente.nome),0)) as valor_cabimentado,

																	ROUND(@valor_agregado - @valor_cabimentado,2) as valor_em_falta,

																	((SELECT

																		if(

																		((SELECT 

																		COUNT(

																		DISTINCT

																		encomenda.id_encomenda)

																		FROM

																		encomenda

																		WHERE

																		encomenda.id_processo = $id_processo AND

																		encomenda.id_cliente = cliente AND

																		encomenda.id_tipo = 1) -

																		(SELECT

																		Count(DISTINCT encomenda.id_encomenda)

																		FROM

																		encomenda

																		INNER JOIN encomenda_garantia ON encomenda.id_encomenda = encomenda_garantia.id_encomenda

																		INNER JOIN garantia ON encomenda_garantia.id_garantia = garantia.id_garantia

																		WHERE

																		encomenda.id_processo = $id_processo AND

																		encomenda.id_cliente = cliente AND

																		encomenda.id_tipo = 1 AND

																		garantia.id_tipo < 3))>0 OR ((SELECT 

																		COUNT(

																		DISTINCT

																		encomenda.id_encomenda)

																		FROM

																		encomenda

																		INNER JOIN encomenda_artigo on encomenda.id_encomenda = encomenda_artigo.id_encomenda

																		INNER JOIN encomenda_garantia on encomenda.id_encomenda = encomenda_garantia.id_encomenda

																		WHERE

																		encomenda.id_processo = $id_processo AND

																		encomenda.id_cliente = cliente AND

																		encomenda_garantia.cabimento IS NOT NULL AND

																		encomenda.id_tipo = 1) = 0) , 'em falta', 'entregue'))) as declaracoes,

																		IF(@valor_agregado = 0, 'Sem agregação',

																		(SELECT CASE WHEN declaracoes = 'entregue' AND valor_em_falta <= 0.05 THEN 'Completo' ELSE 'Incompleto' END)) as estado_processo,

																		encomenda.id_encomenda as id_encomenda

																		FROM `encomenda` encomenda 

																		INNER join cliente on encomenda.id_cliente = cliente.id_cliente

																		INNER JOIN direcao_regional on cliente.id_direcao_regional = direcao_regional.id_direcao_regional

																		INNER JOIN processo_filtro on direcao_regional.id_direcao_regional = processo_filtro.id_referencia

																		INNER JOIN processo ON processo_filtro.id_processo = processo.id_processo

																		WHERE processo.id_processo = $id_processo AND cliente.estado >= 0 AND processo_filtro.id_filtro = 2 GROUP BY cliente.id_cliente)";

								


		

		return new CSqlDataProvider($entidadesCriteria, array( 'pagination'=>false,));

		

	}

In my controller:


public function actionExcelAgregadoAdmin($id_processo) {

		

		$processo = AdminProcesso::model()->findByPk($id_processo);

        if ($processo === null)

            throw new CHttpException(404, 'Document Not Found');

			

		

		$data = array(

			'entidades'=>AdminEncomenda::model()->getListaAgregadoAdminForExcel($id_processo),

        );

		

		$this->render('ExcelAgregadoAdmin', $data);

		

	}

AND finnaly,in my view:


<?php

		

		$factory = new CWidgetFactory();    

        $widget = $factory->createWidget($this, 'ext.EExcelView', array(

            'dataProvider'=>$entidades,

            'title'=>'Title',

            'filename'=>'Listagem de entidades',

            'grid_mode'=>'export',

			'exportType'=>'Excel2007',

			'columns' => array(

        array('name' => 'nif', 'header' => 'NIF', 'type'=>'raw', 'value'=>'$data->nif'),

        array('name' => 'nome', 'header' => 'Entidade', 'type'=>'raw', 'value'=>'$data->nome'),

        array('name' => 'valor_agregado', 'header' => '€ Agregado','type'=>'raw', 'value'=>'$data->valor_agregado'),

		array('name' => 'valor_cabimentado', 'header' => '€ Cabimentado','type'=>'raw', 'value'=>'$data->valor_cabimentado'),

		array('name' => 'valor_em_falta', 'header' => '€ em Falta','type'=>'raw', 'value'=>'$data->valor_em_falta'),

		array('name' => 'declaracoes', 'header' => 'Declarações',),	

		array('name' => 'estado_processo', 'header' => 'Estado',),

    		)

        ));

 

        $widget->init();

        $widget->run();	

	


?>

Thank so so much in advance!

Hi bettencourt,

When you are using CSqlDataProvider, ‘value’ property of the gridview column must be ‘$data[“something”]’, not ‘$data->something’

Thank you very much Softark. It helped a lot!