[Resuelto] Funcion Cancelar

Hola comunidad, ante todo gracias por las atenciones que me puedan dar en este post que expongo hoy:

El problema es que en mi sistema de facturación que realize con yii he creado una nueva función con los objetivos:

  1. Poner en la tabla Datossal el campo IdEstado en 2, que es factura cancelada.

  2. Poner en la tabla Facturas el campo Id_Estado en 2, que es factura cancelada.

  3. Devolverle a la tabla submayorprod los valores restados de los saldos de los productos al crear la factura.

Para ello tengo las tablas Datossal[size="2"], la llave principal es nfactura (número de la factura) [/size]aquí[size="2"] se guardan las facturas al crearla, [/size]aquí[size="2"] tengo un campo IdEstado[/size][size="2"] que es el estado de la factura[/size][size="2"], [/size][size="2"]aquí[/size] [size="2"]también[/size][size="2"] tengo la tabla [/size]detallesfact[size="2"], donde se guardan los detalles de las facturas, o sea cantidades de los productos, estas dos tablas [/size][size="2"]están[/size] [size="2"]relacionadas [/size]nfactura [size="2"]de [/size]Datossal [size="2"]con [/size]Id_sal [size="2"]de [/size]detallesfact [size="2"]uno a muchos.[/size]

También tengo la tabla facturas, donde al crear una factura se guardan las facturas o artículos para sus próximas operaciones (pagarlas, etc.) esta tabla esta relacionada con Datossal [size="2"]por el campo[/size] [size="2"]nfactura[/size][size="2"] uno a muchos[/size][size="2"], [/size][size="2"]aquí[/size][size="2"] tengo un campo Id_Estado[/size][size="2"] que es el estado de la factura.[/size]

También[size="2"] tengo la tabla[/size] submayorprod, [size="2"]donde [/size]están[size="2"] los saldos de los productos, esta tabla esta relacionada con la tabla [/size]detallesfact [size="2"]por el campo Codprod que es el [/size]código[size="2"] del producto.[/size]

También[size="2"] tengo la tabla estado donde [/size]están[size="2"] los estados de las facturas a saber 2 es cancelada, 1 es activa o por pagar y 3 es pagada. esta tabla cuya llave principal es Idestado esta relacionada con las tablas Datossal y facturas por los campos antes mencionados ([/size][size="2"]IdEstado[/size][size="2"] y [/size][size="2"]IdEstado[/size][size="2"] respectivamente[/size][size="2"]) uno a muchos.[/size]

[size="2"]Para la [/size]operación cancelar [size="2"]que quiero hacer en la forma admin de Datossal cree un [/size]botón así:





array(

    		'class'=>'CButtonColumn',

                    'template'=>'{cancelar}',

                    'buttons'=>array(

     			'cancelar' => array(

                    'label'=>'Cancelar',

                    'imageUrl'=>Yii::app()->request->baseUrl.'/images/cancel.gif',

                    'url'=>'$this->grid->controller->createUrl("/datossal/cancelar", array("id"=>$data->nfactura))',

       				),

                    ),

		),	



el objetivo de este botón es que reedireccione a la acción cancelar del controlador de datosssal y me ejecute la función cancelar, en el controlador de datossal, hice lo siguiente:





public function actionCancelar($id)

        {

 	$model=$this->loadModel($id); 

      

    foreach ($model->detalleFacturas as $value) { // ESTA ES UNA ACCIÓN A EJECUTAR DEVOLVER LOS SALDOS A LA TABLA SUBMAYORPROD, ESTO LO HACE BIEN

              //ok

                $criteria=new CDbCriteria;                                        

                $criteria->addCondition('CodPVen=:codpven'); 

                $criteria->addCondition('Codprod=:codigo'); 	

                $criteria->params=array(':codpven'=>$model->CodPVen , ':codigo'=>$value->idProducto->Codprod);			

                $objSubmp = Submayorprod::model()->find($criteria);

                $objSubmp->SaldoAct = $objSubmp->SaldoAct + $value->cantidad;   			

                $objSubmp->save();

        

              if(!$id){

              // ESTA ES OTRA ACCIÓN A EJECUTAR PONER FACTURA A CANCELADA EN DATOSSAL CAMPO IdEstado a 2; ESTO NO LO HACE 

                 $criteria=new CDbCriteria;                                        

                $criteria->addCondition('nfactura=:fact');

                $criteria->params=array(':fact'=>$model['nfactura']);				

                $objfactu = Datossal::model()->find($criteria); 

                $objfactu->IdEstado = 2;              

                $objfactu->save();                }

 				if(!$id){

//ESTA ES OTRA ACCIÓN A EJECUTAR PONER FACTURA A CANCELADA EN TABLA FACTURAS CAMPO Id_Estado a 2; ESTO TAMPOCO LO HACE

            	$criteria=new CDbCriteria;                                        

                $criteria->addCondition('CodCliente=:codcli'); 

                $criteria->addCondition('nfactura=:fact');

                $criteria->params=array(':codcli'=>$model->CodCliente, ':fact'=>$model['nfactura']);     				

                $objfac = Facturas::model()->find($criteria);		

                $objfac->IdEstado = 2;

                $objfac->save(); 				}

          

          }

		// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

		if(!isset($_GET['ajax']))

			$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

	}



claro esta también puse esta acción en las reglas





array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','salvarFactura','cancelar','reporteImprimirfac','Imprimir','Imprimirfac', 'Imprimircon','Imprimirtr','Imprimirvi','comprobarSaldo','actualizarFirmantes','actualizarPuntoventas'),

				'users'=>array('@'),

			),



Cuando le hago debug me muestra esto [color="#545454"]Status Code: [/color][font="Consolas,"]302 Found en Headers con el icono en naranja y no en verde como es habitual cuando esta bien.[/font]

[size="2"] Espero sus ayudas con gracias por adelantado.[/size]

Ok Resuelto le quite los if(!$id) { donde no hacia lo correcto

De todas formas si hay otra solución mejor me dicen y acepto como siempre sugerencias