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:
-
Poner en la tabla Datossal el campo IdEstado en 2, que es factura cancelada.
-
Poner en la tabla Facturas el campo Id_Estado en 2, que es factura cancelada.
-
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]