private function procesoCompra(FormaPagoForm $modelPago, $tipoEntrega)
 {
     $categoriasCompra = array();
     $productosCompra = array();
     $transaction = Yii::app()->db->beginTransaction();
     try {
         //registrar compra compra
         $objCompra = new Compras();
         $objCompra->identificacionUsuario = $modelPago->identificacionUsuario;
         $objCompra->tipoEntrega = $tipoEntrega;
         //if($tipoEntrega==Yii::app()->params->entrega['tipo']['domicilio']){
         $objCompra->fechaEntrega = $modelPago->fechaEntrega;
         $objCompra->observacion = $modelPago->comentario;
         //}
         if ($tipoEntrega == Yii::app()->params->entrega['tipo']['presencial']) {
             $puntoVenta = $modelPago->listPuntosVenta[1][$modelPago->indicePuntoVenta];
             $objCompra->idComercial = $puntoVenta[1];
         }
         if ($modelPago->idFormaPago == Yii::app()->params->formaPago['pasarela']['idPasarela']) {
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['pendientePasarela'];
         } else {
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['pendiente'];
         }
         $objCompra->idTipoVenta = 1;
         $objCompra->activa = 1;
         $objCompra->invitado = $modelPago->pagoInvitado ? 1 : 0;
         $objCompra->codigoPerfil = Yii::app()->shoppingCart->getCodigoPerfil();
         $objCompra->codigoCiudad = Yii::app()->shoppingCart->getCodigoCiudad();
         $objCompra->codigoSector = Yii::app()->shoppingCart->getCodigoSector();
         if ($tipoEntrega == Yii::app()->params->entrega['tipo']['domicilio']) {
             $objCompra->tiempoDomicilioCedi = Yii::app()->shoppingCart->getDeliveryStored();
             $objCompra->valorDomicilioCedi = Yii::app()->shoppingCart->getShippingStored();
             $objCompra->codigoCedi = Yii::app()->shoppingCart->objSectorCiudad->objCiudad->codigoSucursal;
         } else {
             if ($tipoEntrega == Yii::app()->params->entrega['tipo']['presencial']) {
                 $objCompra->tiempoDomicilioCedi = 0;
                 $objCompra->valorDomicilioCedi = 0;
                 $objCompra->codigoCedi = 0;
             }
         }
         $objCompra->subtotalCompra = Yii::app()->shoppingCart->getCost();
         $objCompra->impuestosCompra = Yii::app()->shoppingCart->getTaxPrice();
         $objCompra->baseImpuestosCompra = Yii::app()->shoppingCart->getBaseTaxPrice();
         $objCompra->domicilio = Yii::app()->shoppingCart->getShipping();
         $objCompra->flete = Yii::app()->shoppingCart->getExtraShipping();
         $objCompra->totalCompra = Yii::app()->shoppingCart->getTotalCost();
         if (!$objCompra->save()) {
             throw new Exception("Error al guardar compra" . $objCompra->validateErrorsResponse());
         }
         if ($tipoEntrega == Yii::app()->params->entrega['tipo']['presencial']) {
             $puntoVenta = $modelPago->listPuntosVenta[1][$modelPago->indicePuntoVenta];
             $objEstadoCompra = new ComprasEstados();
             $objEstadoCompra->idCompra = $objCompra->idCompra;
             $objEstadoCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['asignado'];
             $objEstadoCompra->idOperador = 38;
             if (!$objEstadoCompra->save()) {
                 throw new Exception("Error al guardar traza de estado: " . $objEstadoCompra->validateErrorsResponse());
             }
             $objObservacion = new ComprasObservaciones();
             $objObservacion->idCompra = $objCompra->idCompra;
             $objObservacion->observacion = "Cambio de Estado: Asignado PDV. " . $puntoVenta[2];
             $objObservacion->idOperador = 38;
             $objObservacion->notificarCliente = 0;
             if (!$objObservacion->save()) {
                 throw new Exception("Error al guardar observación" . $objObservacion->validateErrorsResponse());
             }
             $objEstadoCompra2 = new ComprasEstados();
             $objEstadoCompra2->idCompra = $objCompra->idCompra;
             $objEstadoCompra2->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['pendiente'];
             $objEstadoCompra2->idOperador = 38;
             if (!$objEstadoCompra2->save()) {
                 throw new Exception("Error al guardar traza de estado: " . $objEstadoCompra2->validateErrorsResponse());
             }
             $objObservacion2 = new ComprasObservaciones();
             $objObservacion2->idCompra = $objCompra->idCompra;
             $objObservacion2->observacion = "Cambio de Estado: Pendiente de entrega a cliente en PDV. " . $puntoVenta[2];
             $objObservacion2->idOperador = 38;
             $objObservacion2->notificarCliente = 0;
             if (!$objObservacion2->save()) {
                 throw new Exception("Error al guardar observación" . $objObservacion2->validateErrorsResponse());
             }
         }
         if ($modelPago->bono !== null && $modelPago->usoBono == 1) {
             Yii::app()->shoppingCart->setBono($modelPago->bono['valor']);
         }
         $objFormasPago = new FormasPago();
         //FormaPago::model()->findByPk($modelPago->idFormaPago);
         $objFormasPago->idCompra = $objCompra->idCompra;
         $objFormasPago->valor = Yii::app()->shoppingCart->getTotalCost();
         $objFormasPago->numeroTarjeta = $modelPago->numeroTarjeta;
         $objFormasPago->cuotasTarjeta = $modelPago->cuotasTarjeta;
         $objFormasPago->idFormaPago = $modelPago->idFormaPago;
         $objFormasPago->valorBono = Yii::app()->shoppingCart->getBono();
         /* if ($modelPago->bono !== null && $modelPago->usoBono == 1) {
                $objFormasPago->valorBono = $modelPago->bono['valor'];
            } */
         /*if($objFormasPago->valorBono>0){
                             try{
                                 $clientBono = new SoapClient(null, array(
                                     'location' => Yii::app()->params->webServiceUrl['crmLrv'],
                                     'uri' => "",
                                     'trace' => 1
                                 ));
                                 $resultBono = $clientBono->__soapCall("ActualizarBono", array('identificacion' => $objCompra->identificacionUsuario));
         
                                 if (empty($resultBono) || $resultBono[0]->ESTADO == 0) {
                                     throw new Exception("Error al actualizar bono");
                                 }
                             }catch(SoapFault $soapExc){
                                 throw new Exception("Error al actualizar bono");
                             }
                         }*/
         if (!$objFormasPago->save()) {
             throw new Exception("Error al guardar forma de pago" . $objFormasPago->validateErrorsResponse());
         }
         $objCompraDireccion = new ComprasDireccionesDespacho();
         if ($tipoEntrega == Yii::app()->params->entrega['tipo']['domicilio']) {
             if ($modelPago->pagoInvitado) {
                 $objCompraDireccion->idCompra = $objCompra->idCompra;
                 $objCompraDireccion->descripcion = $modelPago->descripcion;
                 $objCompraDireccion->nombre = $modelPago->nombre;
                 $objCompraDireccion->direccion = $modelPago->direccion;
                 $objCompraDireccion->barrio = $modelPago->barrio;
                 $objCompraDireccion->telefono = $modelPago->telefono;
                 $objCompraDireccion->celular = $modelPago->celular;
                 $objCompraDireccion->codigoCiudad = Yii::app()->shoppingCart->getCodigoCiudad();
                 $objCompraDireccion->codigoSector = Yii::app()->shoppingCart->getCodigoSector();
             } else {
                 $objDireccion = DireccionesDespacho::model()->findByPk($modelPago->idDireccionDespacho);
                 $objCompraDireccion->idCompra = $objCompra->idCompra;
                 $objCompraDireccion->descripcion = $objDireccion->descripcion;
                 $objCompraDireccion->nombre = $objDireccion->nombre;
                 $objCompraDireccion->direccion = $objDireccion->direccion;
                 $objCompraDireccion->barrio = $objDireccion->barrio;
                 $objCompraDireccion->telefono = $objDireccion->telefono;
                 $objCompraDireccion->celular = $objDireccion->celular;
                 $objCompraDireccion->codigoCiudad = $objDireccion->codigoCiudad;
                 $objCompraDireccion->codigoSector = $objDireccion->codigoSector;
                 $objCompraDireccion->pdvAsignado = $objDireccion->pdvAsignado;
                 if ($objDireccion->codigoSector == 0 && Yii::app()->shoppingCart->getCodigoSector() != 0) {
                     $objDireccion->codigoSector = Yii::app()->shoppingCart->getCodigoSector();
                     $objDireccion->save();
                 }
             }
         } else {
             if ($tipoEntrega == Yii::app()->params->entrega['tipo']['presencial']) {
                 $objCompraDireccion = new ComprasDireccionesDespacho();
                 $objCompraDireccion->idCompra = $objCompra->idCompra;
                 $objCompraDireccion->descripcion = "NA";
                 $objCompraDireccion->nombre = "NA";
                 $objCompraDireccion->direccion = "NA";
                 $objCompraDireccion->barrio = "NA";
                 $objCompraDireccion->telefono = $modelPago->telefonoContacto;
             }
         }
         if (!$objCompraDireccion->save()) {
             throw new Exception("Error al guardar dirección de compra" . $objCompraDireccion->validateErrorsResponse());
         }
         //generar puntos //--
         $listPuntosCompra = array();
         if (!$modelPago->pagoInvitado) {
             $fecha = new DateTime();
             $parametrosPuntos = array(Yii::app()->params->puntos['categoria'] => Yii::app()->shoppingCart->getCategorias(), Yii::app()->params->puntos['marca'] => Yii::app()->shoppingCart->getMarcas(), Yii::app()->params->puntos['proveedor'] => Yii::app()->shoppingCart->getProveedores(), Yii::app()->params->puntos['producto'] => Yii::app()->shoppingCart->getProductosCantidad(), Yii::app()->params->puntos['monto'] => $objCompra->subtotalCompra, Yii::app()->params->puntos['cedula'] => array('identificacionUsuario' => Yii::app()->user->name, 'valor' => $objCompra->subtotalCompra), Yii::app()->params->puntos['rango'] => array('fecha' => $fecha, 'valor' => $objCompra->subtotalCompra), Yii::app()->params->puntos['cumpleanhos'] => array('fechaNacimiento' => Yii::app()->session[Yii::app()->params->usuario['sesion']]->objUsuarioExtendida->fechaNacimiento, 'valor' => $objCompra->subtotalCompra), Yii::app()->params->puntos['clientefielCompra'] => $objCompra->subtotalCompra);
             $listPuntosCompra = ComprasPuntos::generarPuntos($fecha, Yii::app()->session[Yii::app()->params->usuario['sesion']], $parametrosPuntos);
         }
         //-- generar puntos
         // guardar puntos  //--
         foreach ($listPuntosCompra as $objPuntoCompra) {
             $objPuntoCompra->idCompra = $objCompra->idCompra;
             if (!$objPuntoCompra->save()) {
                 throw new Exception("Error al guardar punto de compra {$objPuntoCompra->idPunto}. " . $objPuntoCompra->validateErrorsResponse());
             }
         }
         //-- guardar puntos //--
         //items de compra
         $positions = Yii::app()->shoppingCart->getPositions();
         foreach ($positions as $position) {
             if ($position->isProduct()) {
                 //actualizar saldo producto //--
                 $objSaldo = null;
                 if ($position->objProducto->tercero == 1) {
                     $objSaldo = ProductosSaldosTerceros::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND codigoProducto=:producto', 'params' => array(':ciudad' => Yii::app()->shoppingCart->getCodigoCiudad(), ':sector' => Yii::app()->shoppingCart->getCodigoSector(), ':producto' => $position->objProducto->codigoProducto)));
                 } else {
                     $objSaldo = ProductosSaldos::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND codigoProducto=:producto', 'params' => array(':ciudad' => Yii::app()->shoppingCart->getCodigoCiudad(), ':sector' => Yii::app()->shoppingCart->getCodigoSector(), ':producto' => $position->objProducto->codigoProducto)));
                 }
                 if ($objSaldo == null) {
                     throw new Exception("Producto " . $position->objProducto->codigoProducto . " no disponible");
                 }
                 if ($objSaldo->saldoUnidad < $position->getQuantityUnit()) {
                     throw new Exception("Producto " . $position->objProducto->codigoProducto . ". La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldoUnidad} unidades");
                 }
                 if ($objSaldo->saldoFraccion < $position->getQuantity(true)) {
                     throw new Exception("Producto " . $position->objProducto->codigoProducto . ". La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldoFraccion} fracciones");
                 }
                 $objSaldo->saldoUnidad = $objSaldo->saldoUnidad - $position->getQuantityUnit();
                 $objSaldo->saldoFraccion = $objSaldo->saldoFraccion - $position->getQuantity(true);
                 $objSaldo->save();
                 //-- actualizar saldo producto
                 //actualizar saldo bodega //--
                 if ($position->getQuantityStored() > 0) {
                     $objSaldoBodega = ProductosSaldosCedi::model()->find(array('condition' => 'codigoCedi=:cedi AND codigoProducto=:producto', 'params' => array(':cedi' => Yii::app()->shoppingCart->getObjCiudad()->codigoSucursal, ':producto' => $position->objProducto->codigoProducto)));
                     if ($objSaldoBodega == null) {
                         throw new Exception("Producto " . $position->objProducto->codigoProducto . " no disponible en bodega");
                     }
                     if ($objSaldoBodega->saldoUnidad < $position->getQuantityStored()) {
                         throw new Exception("Producto " . $position->objProducto->codigoProducto . ". La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldoBodega->saldoUnidad} unidades");
                     }
                     $objSaldoBodega->saldoUnidad = $objSaldoBodega->saldoUnidad - $position->getQuantityStored();
                     $objSaldoBodega->save();
                 }
                 //-- actualizar saldo bodega
                 $objItem = new ComprasItems();
                 $objItem->idCompra = $objCompra->idCompra;
                 $objItem->codigoProducto = $position->objProducto->codigoProducto;
                 $objItem->descripcion = $position->objProducto->descripcionProducto;
                 $objItem->presentacion = $position->objProducto->presentacionProducto;
                 $objItem->precioBaseUnidad = $position->getPrice(false, false);
                 $objItem->precioBaseFraccion = $position->getPrice(true, false);
                 $objItem->descuentoUnidad = $position->getDiscountPrice();
                 $objItem->descuentoFraccion = $position->getDiscountPrice(true);
                 $objItem->precioTotalUnidad = $position->getSumPriceUnit();
                 $objItem->precioTotalFraccion = $position->getSumPriceFraction(true);
                 $objItem->terceros = $position->objProducto->tercero;
                 $objItem->unidades = $position->getQuantityUnit();
                 $objItem->fracciones = $position->getQuantity(true);
                 $objItem->unidadesCedi = $position->getQuantityStored();
                 $objItem->codigoImpuesto = $position->objProducto->codigoImpuesto;
                 $objItem->idEstadoItem = Yii::app()->params->callcenter['estadoItem']['estado']['activo'];
                 //$objItem->idEstadoItemTercero = null;
                 $objItem->flete = $position->getShipping();
                 $objItem->disponible = 1;
                 if ($objCompra->identificacionUsuario !== null) {
                     $categoriasCompra[] = "('" . $objCompra->identificacionUsuario . "','" . $position->objProducto->idCategoriaBI . "')";
                 }
                 $productosCompra[] = "('" . $position->objProducto->codigoProducto . "')";
                 if (!$objItem->save()) {
                     throw new Exception("Error al guardar item de compra {$objItem->codigoProducto}. " . $objItem->validateErrorsResponse());
                 }
                 //beneficios
                 foreach ($position->getBeneficios() as $objBeneficio) {
                     $objBeneficioItem = new BeneficiosComprasItems();
                     $objBeneficioItem->idBeneficio = $objBeneficio->idBeneficio;
                     $objBeneficioItem->idBeneficioSincronizado = $objBeneficio->idBeneficioSincronizado;
                     $objBeneficioItem->idCompraItem = $objItem->idCompraItem;
                     $objBeneficioItem->tipo = $objBeneficio->tipo;
                     $objBeneficioItem->fechaIni = $objBeneficio->fechaIni;
                     $objBeneficioItem->fechaFin = $objBeneficio->fechaFin;
                     $objBeneficioItem->dsctoUnid = $objBeneficio->dsctoUnid;
                     $objBeneficioItem->dsctoFrac = $objBeneficio->dsctoFrac;
                     $objBeneficioItem->vtaUnid = $objBeneficio->vtaUnid;
                     $objBeneficioItem->vtaFrac = $objBeneficio->vtaFrac;
                     $objBeneficioItem->pagoUnid = $objBeneficio->pagoUnid;
                     $objBeneficioItem->pagoFrac = $objBeneficio->pagoFrac;
                     $objBeneficioItem->cuentaCop = $objBeneficio->cuentaCop;
                     $objBeneficioItem->nitCop = $objBeneficio->nitCop;
                     $objBeneficioItem->porcCop = $objBeneficio->porcCop;
                     $objBeneficioItem->cuentaProv = $objBeneficio->cuentaProv;
                     $objBeneficioItem->nitProv = $objBeneficio->nitProv;
                     $objBeneficioItem->porcProv = $objBeneficio->porcProv;
                     $objBeneficioItem->promoFiel = $objBeneficio->promoFiel;
                     $objBeneficioItem->mensaje = $objBeneficio->mensaje;
                     $objBeneficioItem->swobligaCli = $objBeneficio->swobligaCli;
                     $objBeneficioItem->fechaCreacionBeneficio = $objBeneficio->fechaCreacionBeneficio;
                     if (!$objBeneficioItem->save()) {
                         throw new Exception("Error al guardar beneficio de compra {$objBeneficioItem->idCompraItem}. " . $objBeneficioItem->validateErrorsResponse());
                     }
                 }
             } else {
                 if ($position->isCombo()) {
                     $objSaldo = ComboSectorCiudad::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND idCombo=:combo', 'params' => array(':ciudad' => Yii::app()->shoppingCart->getCodigoCiudad(), ':sector' => Yii::app()->shoppingCart->getCodigoSector(), ':combo' => $position->objCombo->idCombo)));
                     if ($objSaldo == null) {
                         throw new Exception("Combo " . $position->objCombo->getCodigo() . " no disponible");
                     }
                     if ($objSaldo->saldo < $position->getQuantity()) {
                         throw new Exception("Combo " . $position->objCombo->getCodigo() . "La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldo} unidades");
                     }
                     $objSaldo->saldo = $objSaldo->saldo - $position->getQuantity();
                     $objSaldo->save();
                     foreach ($position->objCombo->listProductosCombo as $productoCombo) {
                         $objItem = new ComprasItems();
                         $objItem->idCompra = $objCompra->idCompra;
                         $objItem->idCombo = $position->objCombo->idCombo;
                         $objItem->codigoProducto = $productoCombo->objProducto->codigoProducto;
                         $objItem->descripcion = $productoCombo->objProducto->descripcionProducto;
                         $objItem->descripcionCombo = $position->objCombo->descripcionCombo;
                         $objItem->presentacion = $productoCombo->objProducto->presentacionProducto;
                         $objItem->precioBaseUnidad = $productoCombo->precio;
                         $objItem->precioBaseFraccion = 0;
                         $objItem->descuentoUnidad = 0;
                         $objItem->descuentoFraccion = 0;
                         $objItem->precioTotalUnidad = $productoCombo->precio * $position->getQuantity();
                         $objItem->precioTotalFraccion = 0;
                         $objItem->terceros = $productoCombo->objProducto->tercero;
                         $objItem->unidades = $position->getQuantity();
                         $objItem->fracciones = 0;
                         $objItem->unidadesCedi = 0;
                         $objItem->codigoImpuesto = $productoCombo->objProducto->codigoImpuesto;
                         $objItem->idEstadoItem = Yii::app()->params->callcenter['estadoItem']['estado']['activo'];
                         //$objItem->idEstadoItemTercero = null;
                         $objItem->flete = $position->getShipping();
                         $objItem->disponible = 1;
                         if (!$objItem->save()) {
                             throw new Exception("Error al guardar item de compra {$objItem->codigoProducto}. " . $objItem->validateErrorsResponse());
                         }
                         if ($objCompra->identificacionUsuario !== null) {
                             $categoriasCompra[] = "('" . $objCompra->identificacionUsuario . "','" . $productoCombo->objProducto->idCategoriaBI . "')";
                         }
                         $productosCompra[] = "('" . $productoCombo->objProducto->codigoProducto . "')";
                     }
                 }
             }
         }
         $objUsuario = Yii::app()->session[Yii::app()->params->usuario['sesion']];
         $objPasarelaEnvio = null;
         $asuntoCorreo = Yii::app()->params->asunto['pedidoRealizado'];
         if ($modelPago->idFormaPago == Yii::app()->params->formaPago['pasarela']['idPasarela']) {
             $asuntoCorreo = Yii::app()->params->asunto['pedidoRealizadoPasarela'];
             $objPasarelaEnvio = new PasarelaEnvios();
             $objPasarelaEnvio->idCompra = $objCompra->idCompra;
             $objPasarelaEnvio->valor = $objCompra->totalCompra;
             $objPasarelaEnvio->iva = $objCompra->impuestosCompra;
             $objPasarelaEnvio->baseIva = $objCompra->baseImpuestosCompra;
             $objPasarelaEnvio->moneda = "COP";
             $objPasarelaEnvio->nombre = $objUsuario->getNombreCompleto();
             $objPasarelaEnvio->identificacionUsuario = $objCompra->identificacionUsuario;
             $objPasarelaEnvio->tipoDocumento = 1;
             $objPasarelaEnvio->correoElectronico = $objUsuario->correoElectronico;
             if (!$objPasarelaEnvio->save()) {
                 throw new Exception("Error al guardar registro de pasarela. " . $objPasarelaEnvio->validateErrorsResponse());
             }
         }
         if (count($categoriasCompra) > 0) {
             $sql = "INSERT INTO t_ComprasUsuariosCategorias(identificacionUsuario, idCategoriaBI) VALUES " . implode(",", $categoriasCompra) . " ON DUPLICATE KEY UPDATE cantidad=cantidad+1";
             Yii::app()->db->createCommand($sql)->execute();
         }
         if (count($productosCompra) > 0) {
             $sql = "INSERT INTO t_ProductosVendidos(codigoProducto) VALUES " . implode(",", $productosCompra) . " ON DUPLICATE KEY UPDATE cantidad=cantidad+1";
             Yii::app()->db->createCommand($sql)->execute();
         }
         $objFormaPago = FormaPago::model()->findByPk($modelPago->idFormaPago);
         $contenidoCorreo = $this->renderPartial('compraCorreo', array('objCompra' => $objCompra, 'modelPago' => $modelPago, 'objCompraDireccion' => $objCompraDireccion, 'objFormaPago' => $objFormaPago, 'objFormasPago' => $objFormasPago, 'objUsuario' => $objUsuario), true, true);
         $htmlCorreo = $this->renderPartial('/usuario/_correo', array('contenido' => $contenidoCorreo), true, true);
         sendHtmlEmail($objUsuario->correoElectronico, $asuntoCorreo, $htmlCorreo);
         $transaction->commit();
         return array('result' => 1, 'response' => array('objCompra' => $objCompra, 'modelPago' => $modelPago, 'objCompraDireccion' => $objCompraDireccion, 'objFormaPago' => $objFormaPago, 'objFormasPago' => $objFormasPago, 'objPasarelaEnvio' => $objPasarelaEnvio));
     } catch (Exception $exc) {
         Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
         try {
             $transaction->rollBack();
         } catch (Exception $txexc) {
             Yii::log($txexc->getMessage() . "\n" . $txexc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
         }
         return array('result' => 0, 'response' => $exc->getMessage());
     }
 }
 public function actionConfirmacion()
 {
     //SE DEFINEN CONTROLES PARA EVIATR ATAQUES
     //if ($_SERVER["REMOTE_ADDR"] == "127.0.0.1") //se debe validar que sea solo por la VPN de PSE
     if (false) {
         //se debe validar que sea solo por la VPN de PSE
         $this->log(-1, 900, "SERVIDOR NO AUTORIZADO. " . $_SERVER["REMOTE_ADDR"]);
         Yii::app()->end();
     }
     if (empty($_POST)) {
         $this->log(-1, 800, "MEDOTO DE INVOCACION NO AUTORIZADO. " . $_SERVER["REMOTE_ADDR"]);
         Yii::app()->end();
     }
     $llavesArreglo = array_keys($_POST);
     $cadenaLog = "";
     for ($i = 0; $i < sizeof($llavesArreglo); $i++) {
         $cadenaLog .= $llavesArreglo[$i] . " -> " . $_POST[$llavesArreglo[$i]];
         if (isset($llavesArreglo[$i + 1])) {
             $cadenaLog .= " | ";
         }
     }
     $this->log(0, 100, $cadenaLog);
     //Guardar los datos GET de invocacion.
     $this->log(0, 100, $_SERVER["REMOTE_ADDR"]);
     //Guardar los datos GET de invocacion.
     //SETEO DE VARIABLES
     $objRespuesta = new PasarelaRespuestas();
     $objRespuesta->tipoRespuesta = PasarelaRespuestas::TIPO_CONFIRMACION;
     $firma = $_POST["firma"];
     $objRespuesta->estadoPol = trim($_POST["estado_pol"]);
     $objRespuesta->codigoRespuestaPol = trim($_POST["codigo_respuesta_pol"]);
     $objRespuesta->idCompra = trim($_POST["ref_venta"]);
     $objRespuesta->refPol = trim($_POST["ref_pol"]);
     $objRespuesta->medioPago = trim($_POST["medio_pago"]);
     $objRespuesta->tipoMedioPago = trim($_POST["tipo_medio_pago"]);
     $objRespuesta->cuotas = isset($_POST["cuotas"]) ? trim($_POST["cuotas"]) : 0;
     $objRespuesta->valor = trim($_POST["valor"]);
     $objRespuesta->valorPesos = 0;
     $objRespuesta->iva = trim($_POST["iva"]);
     $objRespuesta->valorAdicional = isset($_POST["valorAdicional"]) ? trim($_POST["valorAdicional"]) : 0;
     $objRespuesta->moneda = isset($_POST["moneda"]) ? trim($_POST["moneda"]) : "";
     $objRespuesta->cus = isset($_POST["cus"]) ? trim($_POST["cus"]) : 0;
     $objRespuesta->bancoPse = isset($_POST["banco_pse"]) ? trim($_POST["banco_pse"]) : "";
     $objRespuesta->fechaTransaccion = trim($_POST["fecha_transaccion"]);
     $this->log($objRespuesta->idCompra, 101, $cadenaLog);
     //Guardar los datos GET de invocacion.
     //$this->log($objRespuesta->idCompra, 101, $_SERVER["REMOTE_ADDR"]); //Guardar los datos GET de invocacion.
     if (!isset($_POST["ref_venta"]) || !isset($_POST["estado_pol"]) || !isset($_POST["usuario_id"])) {
         $this->log(-1, 700, "VERIFICACION DE VARIBLES PRIMARIAS FALLIDA. " . $_SERVER["REMOTE_ADDR"]);
         Yii::app()->end();
     }
     //PARA OBTENER LOS GET DE PSE DE VERIFICACION DE PAGO
     $this->log($objRespuesta->idCompra, 100, "INICIO TRANSACCION POST.");
     // Se Guarda el Inicio de la Transaccion
     $firma_cadena = Yii::app()->params->formaPago['pasarela']['llaveEncripcion'] . "~" . Yii::app()->params->formaPago['pasarela']['usuarioId'] . "~" . $objRespuesta->idCompra . "~" . $objRespuesta->valor . "~" . $objRespuesta->moneda . "~" . $objRespuesta->estadoPol;
     $firmacreada = md5($firma_cadena);
     if (strtoupper($firmacreada) != strtoupper($firma)) {
         $this->log($objRespuesta->idCompra, 110, "FIRMAS NO COINCIDEN. " . $firmacreada . " - " . $firma);
         // Se Guarda el Inicio de la Transaccion
         $mensaje = "El pedido No. " . $objRespuesta->idCompra . " ha sido pagado por la Pasarela de Pagos, pero se ha generado un ERROR DE FIRMAS\r\n                por lo que la transaccion debe ser verificada en el módulo de administracion.";
         $this->correo(4, "", 0, 0, "", $mensaje);
         Yii::app()->end();
     }
     $this->log($objRespuesta->idCompra, 102, "FIRMAS CONINCIDEN. " . $firmacreada . " - " . $firma);
     // Se Guarda el Inicio de la Transaccion
     try {
         $objCompra = Compras::model()->find(array('with' => "objPasarelaEnvio", 'condition' => 't.idCompra=:idCompra', 'params' => array(':idCompra' => $objRespuesta->idCompra)));
         if ($objCompra == null || $objCompra->objPasarelaEnvio == null) {
             //NO EXISTE EL PEDIDO, SE DBE ENVIAR UN CORREO A CALL CENTER PARA VERIFICAR.
             $this->log($objRespuesta->idCompra, 500, "NO EXISTE LA COMPRA. " . $objRespuesta->idCompra);
             $mensaje = "El pedido No. " . $objRespuesta->idCompra . " ha sido pagado por la Pasarela de Pagos, pero se ha generado un NO EXISTE LA COMPRA\r\n                por lo que la transaccion debe ser verificada en el módulo de administracion. CUS " . $objRespuesta->cus;
             $this->correo(4, "", 0, 0, "", $mensaje);
             Yii::app()->end();
         }
         //SE INICIA LA TRANSACION
         $transaction = Yii::app()->db->beginTransaction();
         if ($objRespuesta->estadoPol == 4) {
             // TRANSACCION APROBADA.
             //ACTUALIZAR t_compras LA COLUMNA documento_cruce, id_punto_venta, id_estado_compra, codigo_operador, saldospdv
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['aprobadoPasarela'];
             $objCompra->idOperador = 50;
             if (!$objCompra->save()) {
                 $this->log($objRespuesta->idCompra, 501, "ERROR ACTUALIZANDO LA TABLA t_Compra. " . $objCompra->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "APROBADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             $objEstados = new ComprasEstados();
             $objEstados->idCompra = $objCompra->idCompra;
             $objEstados->idEstadoCompra = $objCompra->idEstadoCompra;
             $objEstados->idOperador = $objCompra->idOperador;
             if (!$objEstados->save()) {
                 $this->log($objRespuesta->idCompra, 502, "ERROR ACTUALIZANDO LA TABLA t_ComprasEstados. " . $objEstados->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "APROBADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             $objObservacion = new ComprasObservaciones();
             $objObservacion->idCompra = $objCompra->idCompra;
             $objObservacion->observacion = 'Cambio de Estado Aprobado Pasarela';
             $objObservacion->idOperador = $objCompra->idOperador;
             $objObservacion->notificarCliente = 0;
             if (!$objObservacion->save()) {
                 $this->log($objRespuesta->idCompra, 503, "ERROR ACTUALIZANDO LA TABLA t_ComprasObservaciones. " . $objObservacion->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "APROBADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             //AQUI VUELVE Y SE COLOCA EN ESTADO 1 PENDIENTE PARA QUE SEA TRAMITADO POR EL CALL CENTER
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['pendiente'];
             if (!$objCompra->save()) {
                 $this->log($objRespuesta->idCompra, 501, "ERROR ACTUALIZANDO LA TABLA t_Compras. " . $objCompra->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "APROBADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             //REGISTRAR RESPUESTA
             if (!$objRespuesta->save()) {
                 $this->log($objRespuesta->idCompra, 504, "ERROR INSERTANDO LA TABLA t_PasarelaRespuestas. " . $objRespuesta->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "APROBADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             $this->log($objRespuesta->idCompra, 1000, "PROCESO EXITOSO TRANSACCION APROBADA.");
             $this->correo(1, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico);
         } else {
             //ACTUALIZAR t_compras LA COLUMNA documento_cruce, id_punto_venta, id_estado_compra, codigo_operador, saldospdv
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['negadoPasarela'];
             $objCompra->idOperador = 50;
             if (!$objCompra->save()) {
                 $this->log($objRespuesta->idCompra, 501, "ERROR ACTUALIZANDO LA TABLA t_Compras. " . $objCompra->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "RECHAZADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             //INSERTARR en t_ComprasEstados
             $objEstados = new ComprasEstados();
             $objEstados->idCompra = $objCompra->idCompra;
             $objEstados->idEstadoCompra = $objCompra->idEstadoCompra;
             $objEstados->idOperador = $objCompra->idOperador;
             if (!$objEstados->save()) {
                 $this->log($objRespuesta->idCompra, 502, "ERROR ACTUALIZANDO LA TABLA t_ComprasEstados. " . $objEstados->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "RECHAZADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             //INSERTAR EN t_ComprasObservaciones
             $objObservacion = new ComprasObservaciones();
             $objObservacion->idCompra = $objCompra->idCompra;
             $objObservacion->observacion = 'Cambio de Estado Rechazada Pasarela';
             $objObservacion->idOperador = $objCompra->idOperador;
             $objObservacion->notificarCliente = 0;
             if (!$objObservacion->save()) {
                 $this->log($objRespuesta->idCompra, 503, "ERROR ACTUALIZANDO LA TABLA t_ComprasObservaciones. " . $objObservacion->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "RECHAZADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             //REGISTRAR RESPUESTA
             if (!$objRespuesta->save()) {
                 $this->log($objRespuesta->idCompra, 504, "ERROR INSERTANDO LA TABLA t_PasarelaRespuestas. " . $objRespuesta->validateErrorsResponse());
                 $this->correo(3, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico, "RECHAZADA");
                 try {
                     $transaction->rollBack();
                 } catch (Exception $erbk) {
                     Yii::log($erbk->getMessage() . "\n" . $erbk->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                 }
                 Yii::app()->end();
             }
             $this->log($objRespuesta->idCompra, 1000, "PROCESO EXITOSO TRANSACCION RECHAZADA.");
             $this->correo(2, $objCompra->objPasarelaEnvio->nombre, $objCompra->idCompra, $objCompra->objPasarelaEnvio->valor, $objCompra->objPasarelaEnvio->correoElectronico);
         }
         $transaction->commit();
     } catch (Exception $exc) {
         Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
         $this->log($objRespuesta->idCompra, 600, "ERROR DE CONEXION CON LA BD DE LA REBAJA VIRTUAL. " . $exc->getMessage());
         if ($objRespuesta->estadoPol == 4) {
             //ENVIAR CORREO A CALL CENTER PARA TRAMITAR LA VENTA
             $mensaje = "El pedido No. " . $objRespuesta->idCompra . " ha sido pagado por la Pasarela de Pagos, pero se ha generado un ERROR DE CONEXION CON LA BD DE LA REBAJA VIRTUAL\r\n            por lo que la transaccion debe ser verificada en el módulo de administracion. IMPORTANTE: La Transaccion ha sido APROBADA. CUS " . $objRespuesta->cus;
             //mail(PARA_CALLCENTER, "Revision Transaccion Pasarela", $mensaje, $cabeceras, "-f alexander_javela@copservir.com");
             $this->correo(4, "", 0, 0, "", $mensaje);
         } else {
             //ENVIAR CORREO A CALL CENTER PARA TRAMITAR LA VENTA
             $mensaje = "El pedido No. " . $objRespuesta->idCompra . " ha sido pagado por la Pasarela de Pagos, pero se ha generado un ERROR DE CONEXION CON LA BD DE LA REBAJA VIRTUAL\r\n            por lo que la transaccion debe ser verificada en el módulo de administracion. IMPORTANTE: La Transaccion ha sido RECHAZADA. CUS " . $objRespuesta->cus;
             $this->correo(4, "", 0, 0, "", $mensaje);
         }
     }
 }
 public function actionObservacionpedido()
 {
     if (isset($_POST['ObservacionForm'])) {
         $model = new ObservacionForm();
         $model->attributes = $_POST['ObservacionForm'];
         if ($model->validate()) {
             $objCompra = Compras::model()->findByPk($model->idCompra);
             if ($objCompra === null) {
                 echo CJSON::encode(array('result' => 'error', 'response' => 'Compra no existente'));
                 Yii::app()->end();
             }
             $objObservacion = new ComprasObservaciones();
             $objObservacion->idCompra = $model->idCompra;
             $objObservacion->observacion = $model->observacion;
             $objObservacion->idOperador = Yii::app()->controller->module->user->id;
             $objObservacion->notificarCliente = 0;
             $objObservacion->idTipoObservacion = $model->tipoObservacion;
             if ($model->estado != null) {
                 $transaction = Yii::app()->db->beginTransaction();
                 try {
                     $estadoCompra = EstadoCompra::model()->findByPk($model->estado);
                     if ($estadoCompra == null) {
                         throw new Exception('Estado inválido');
                     }
                     $objObservacion->observacion = "<b>Cambio de estado: " . $estadoCompra->compraEstado . ".</b> " . $objObservacion->observacion;
                     if (!$objObservacion->save()) {
                         throw new Exception('Error al actualizar estado: ' . $objObservacion->validateErrorsResponse());
                     }
                     $objCompra->idEstadoCompra = $model->estado;
                     if ($model->estado == Yii::app()->params->callcenter['estadoCompra']['estado']['devolucion']) {
                         $objCompra->generarDocumentoCruce(Yii::app()->controller->module->user->id);
                     }
                     if (!$objCompra->save()) {
                         throw new Exception('Error al actualizar estado: ' . $objCompra->validateErrorsResponse());
                     }
                     //$objCompraEstado
                     $objCompraEstado = new ComprasEstados();
                     $objCompraEstado->idCompra = $objCompra->idCompra;
                     $objCompraEstado->idEstadoCompra = $model->estado;
                     $objCompraEstado->idOperador = Yii::app()->controller->module->user->id;
                     if (!$objCompraEstado->save()) {
                         throw new Exception("Error al guardar traza de estado: " . $objCompraEstado->validateErrorsResponse());
                     }
                     $transaction->commit();
                     echo CJSON::encode(array('result' => 'ok', 'response' => array('msg' => 'Observación registrada.', 'htmlObservaciones' => $this->renderPartial('_observaciones', array('objCompra' => $objCompra), true, false), 'htmlEncabezado' => $this->renderPartial('_encabezadoPedido', array('objCompra' => $objCompra), true, false))));
                     Yii::app()->end();
                 } catch (Exception $exc) {
                     Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                     try {
                         $transaction->rollBack();
                     } catch (Exception $txexc) {
                         Yii::log($txexc->getMessage() . "\n" . $txexc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
                     }
                     echo CJSON::encode(array('result' => 'error', 'response' => $exc->getMessage()));
                     Yii::app()->end();
                 }
             } else {
                 if (!$objObservacion->save()) {
                     echo CJSON::encode(array('result' => 'error', 'response' => 'Error al actualizar estado: ' . $objObservacion->validateErrorsResponse()));
                     Yii::app()->end();
                 }
                 echo CJSON::encode(array('result' => 'ok', 'response' => array('msg' => 'Observación registrada.', 'htmlObservaciones' => $this->renderPartial('_observaciones', array('objCompra' => $objCompra), true, false))));
                 Yii::app()->end();
             }
         } else {
             echo CActiveForm::validate($model);
         }
     } else {
         if (isset($_POST['NotificacionForm'])) {
             $model = new NotificacionForm();
             $model->attributes = $_POST['NotificacionForm'];
             if ($model->validate()) {
                 $objCompra = Compras::model()->findByPk($model->idCompra);
                 if ($objCompra === null) {
                     echo CJSON::encode(array('result' => 'error', 'response' => 'Compra no existente'));
                     Yii::app()->end();
                 }
                 $objObservacion = new ComprasObservaciones();
                 $objObservacion->idCompra = $model->idCompra;
                 $objObservacion->observacion = $model->observacion;
                 $objObservacion->idOperador = Yii::app()->controller->module->user->id;
                 $objObservacion->notificarCliente = 1;
                 if (!$objObservacion->save()) {
                     echo CJSON::encode(array('result' => 'error', 'response' => 'Error al actualizar estado: ' . $objObservacion->validateErrorsResponse()));
                     Yii::app()->end();
                 }
                 try {
                     $contenido = $this->renderPartial('//common/mensajeHtml', array('mensaje' => $objObservacion->observacion), true, true);
                     $htmlCorreo = $this->renderPartial('//common/correo', array('contenido' => $contenido), true, true);
                     sendHtmlEmail($objCompra->objUsuario->correoElectronico, Yii::app()->params->callcenter['observacion']['asuntoMensaje'], $htmlCorreo);
                 } catch (Exception $exc) {
                 }
                 echo CJSON::encode(array('result' => 'ok', 'response' => array('msg' => 'Observación registrada.', 'htmlObservaciones' => $this->renderPartial('_observaciones', array('objCompra' => $objCompra), true, false))));
                 Yii::app()->end();
             } else {
                 echo CActiveForm::validate($model);
             }
         } else {
             throw new CHttpException(404, 'Solicitud invalida.');
         }
     }
 }
 public function actionRemitirBorrar()
 {
     $idCompra = Yii::app()->getRequest()->getPost('idCompra');
     $objCompra = Compras::model()->findByPk($idCompra, array("with" => "objPuntoVenta"));
     if ($objCompra === null) {
         echo CJSON::encode(array('result' => 0, 'response' => 'Pedido no existe.'));
         Yii::app()->end();
     }
     if ($objCompra->idComercial == null) {
         echo CJSON::encode(array('result' => 0, 'response' => 'No se ha asignado punto de venta.'));
         Yii::app()->end();
     }
     $client = new SoapClient(null, array('location' => Yii::app()->params->webServiceUrl['remisionPosECommerce'], 'uri' => "", 'trace' => 1));
     $result = $client->__soapCall("BorrarCongelada", array('idPedido' => $idCompra));
     if ($result[0] == 1) {
         $objCompra = Compras::model()->findByPk($idCompra, array("with" => "objPuntoVenta"));
         if ($objCompra === null) {
             echo CJSON::encode(array('result' => 'error', 'response' => 'Pedido no existe.'));
             Yii::app()->end();
         }
         $transaction = Yii::app()->db->beginTransaction();
         try {
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['remisionBorrada'];
             $objCompra->generarDocumentoCruce(Yii::app()->controller->module->user->id);
             // Guardar el cambio de estado de la remisión
             if (!$objCompra->save()) {
                 throw new Exception('Error de asignación: ' . $objCompra->validateErrorsResponse());
             }
             $objEstadoCompra = new ComprasEstados();
             $objEstadoCompra->idCompra = $objCompra->idCompra;
             $objEstadoCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['remisionBorrada'];
             $objEstadoCompra->idOperador = Yii::app()->controller->module->user->id;
             // guardar en ComprasEstados
             if (!$objEstadoCompra->save()) {
                 throw new Exception("Error al guardar traza de estado: " . $objEstadoCompra->validateErrorsResponse());
             }
             $objObservacion = new ComprasObservaciones();
             $objObservacion->idCompra = $objCompra->idCompra;
             $objObservacion->observacion = "Cambio de Estado: Remisión borrada del POS del PDV. " . $objCompra->objPuntoVenta->nombrePuntoDeVenta;
             $objObservacion->idOperador = Yii::app()->controller->module->user->id;
             $objObservacion->notificarCliente = 0;
             // Guardar las observaciones
             if (!$objObservacion->save()) {
                 throw new Exception("Error al guardar observación" . $objObservacion->validateErrorsResponse());
             }
             $transaction->commit();
         } catch (Exception $exc) {
             Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
             try {
                 $transaction->rollBack();
             } catch (Exception $txexc) {
                 Yii::log($txexc->getMessage() . "\n" . $txexc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
             }
             echo CJSON::encode(array('result' => 'error', 'response' => $exc->getMessage()));
             Yii::app()->end();
         }
     }
     echo CJSON::encode(array('result' => $result[0], 'response' => $result[1], 'encabezado' => $this->renderPartial('/admin/_encabezadoPedido', array('objCompra' => $objCompra), true, false), 'htmlObservaciones' => $this->renderPartial('/admin/_observaciones', array('objCompra' => $objCompra), true, false)));
 }