Ejemplo n.º 1
0
 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());
     }
 }
Ejemplo n.º 2
0
 public function actionDetallepedido($pedido)
 {
     $this->layout = "simple";
     $objCompra = Compras::model()->find(array('with' => array("objUsuario", "objCompraDireccion" => array("with" => array("objCiudad", "objSector")), "objFormaPagoCompra" => array("with" => "objFormaPago"), "objFormaPagoCompra", "objEstadoCompra", "objOperador", "listItems" => array("with" => array("objProducto", "listBeneficios", "objImpuesto", "objEstadoItem"), "listObservaciones" => array("with" => array("objTipoObservacion")))), 'condition' => 't.idCompra=:id', 'params' => array(':id' => $pedido)));
     if ($objCompra === null) {
         throw new CHttpException(404, 'Pedido solicitado no existe.');
     }
     $asignar = Yii::app()->request->getParam('asignar', false);
     $opcion = Yii::app()->request->getParam('opcion', 'pdv');
     if ($asignar && $objCompra->idOperador == null && $objCompra->idEstadoCompra == Yii::app()->params->callcenter['estadoCompra']['estado']['pendiente']) {
         $transaction = Yii::app()->db->beginTransaction();
         try {
             $objCompra->idOperador = Yii::app()->controller->module->user->id;
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['tramite'];
             $objCompraEstado = new ComprasEstados();
             $objCompraEstado->idCompra = $objCompra->idCompra;
             $objCompraEstado->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['tramite'];
             $objCompraEstado->idOperador = Yii::app()->controller->module->user->id;
             $objObservacion = new ComprasObservaciones();
             $objObservacion->idCompra = $objCompra->idCompra;
             $objObservacion->observacion = "Cambio de Estado: En Trámite";
             $objObservacion->idOperador = Yii::app()->controller->module->user->id;
             $objObservacion->notificarCliente = 0;
             if (!$objObservacion->save()) {
                 throw new Exception("Error al guardar observación" . $objObservacion->validateErrorsResponse());
             }
             if (!$objCompraEstado->save()) {
                 throw new Exception("Error al guardar estado" . $objCompraEstado->validateErrorsResponse());
             }
             if (!$objCompra->save()) {
                 throw new Exception("Error al actualizar estado" . $objCompra->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');
             }
             Yii::app()->user->setFlash('danger', "Error al asignar pedido: " . $exc->getMessage());
             $this->redirect(Yii::app()->request->urlReferrer);
             //$this->redirect(Yii::app()->user->returnUrl);
             Yii::app()->end();
         }
     }
     $params = array();
     $params['params']['objCompra'] = $objCompra;
     $params['opcion'] = $opcion;
     if ($opcion == "pedido") {
         $params['vista'] = "_adminPedido";
     } else {
         if ($opcion == "cliente") {
             $params['vista'] = "_clienteDespacho";
             $listDirecciones = DireccionesDespacho::model()->findAll(array('with' => 'objCiudad', 'condition' => 'identificacionUsuario=:usuario AND activo=:activo', 'params' => array(':usuario' => $objCompra->identificacionUsuario, ':activo' => 1)));
             $params['params']['listDirecciones'] = $listDirecciones;
         } else {
             if ($opcion == "observacion") {
                 $params['vista'] = "_observacionesPedido";
             } else {
                 Yii::import('ext.select2.Select2');
                 $params['vista'] = "_ubicarPDV";
                 $params['opcion'] = "pdv";
                 $modelCompraAnteriores = new Compras('search');
                 $modelCompraAnteriores->unsetAttributes();
                 if (isset($_GET['Compras'])) {
                     $modelCompraAnteriores->attributes = $_GET['Compras'];
                 }
                 $modelCompraAnteriores->identificacionUsuario = $objCompra->identificacionUsuario;
                 $modelCompraAnteriores->tipoEntrega = Yii::app()->params->entrega["tipo"]['domicilio'];
                 $params['params']['modelCompra'] = $modelCompraAnteriores;
             }
         }
     }
     $this->render('pedido', $params);
 }
Ejemplo n.º 3
0
 public function actionDireccionCrear()
 {
     $objSectorCiudad = null;
     if (isset(Yii::app()->session[Yii::app()->params->sesion['sectorCiudadEntrega']])) {
         $objSectorCiudad = Yii::app()->session[Yii::app()->params->sesion['sectorCiudadEntrega']];
     }
     if ($objSectorCiudad === null) {
         echo CJSON::encode(array('result' => 'error', 'response' => 'Seleccionar ubicación'));
         Yii::app()->end();
     }
     $render = Yii::app()->getRequest()->getPost('render', false);
     $modal = Yii::app()->getRequest()->getPost('modal', 0);
     if ($render) {
         echo CJSON::encode(array('result' => 'ok', 'response' => array('dialogoHTML' => $this->renderPartial('_direccionForm', array('model' => new DireccionesDespacho(), 'modal' => true), true))));
         Yii::app()->end();
     } else {
         if (isset($_POST['DireccionesDespacho'])) {
             $model = new DireccionesDespacho();
             $model->attributes = $_POST['DireccionesDespacho'];
             $model->identificacionUsuario = Yii::app()->user->name;
             $model->activo = 1;
             $model->codigoCiudad = $objSectorCiudad->codigoCiudad;
             $model->codigoSector = $objSectorCiudad->codigoSector;
             if ($model->validate()) {
                 if (!$model->save()) {
                     echo CJSON::encode(array('result' => 'error', 'response' => 'Error al guardar dirección, por favor intente de nuevo'));
                     Yii::app()->end();
                 }
                 if ($modal == 1) {
                     $listDirecciones = DireccionesDespacho::consultarDireccionesUsuario(Yii::app()->user->name, true);
                     echo CJSON::encode(array('result' => 'ok', 'response' => array('mensaje' => 'Direcci&oacute;n adicionada', 'direccionesHTML' => $this->renderPartial('_direcciones', array('listDirecciones' => $listDirecciones), true))));
                     Yii::app()->end();
                 } else {
                     $modelPago = null;
                     if (isset(Yii::app()->session[Yii::app()->params->sesion['carroPagarForm']])) {
                         $modelPago = Yii::app()->session[Yii::app()->params->sesion['carroPagarForm']];
                     }
                     if ($modelPago != null) {
                         $modelPago->idDireccionDespacho = $model->idDireccionDespacho;
                         Yii::app()->session[Yii::app()->params->sesion['carroPagarForm']] = $modelPago;
                     }
                     echo CJSON::encode(array('result' => 'ok', 'response' => 'Informaci&oacute;n guardada'));
                     Yii::app()->end();
                 }
             } else {
                 echo CActiveForm::validate($model);
                 Yii::app()->end();
             }
         }
     }
 }
 public static function consultarDireccionesUsuario($identificacionUsuario, $agrupar = false)
 {
     $models = DireccionesDespacho::model()->findAll(array('with' => array('objCiudad'), 'condition' => 'identificacionUsuario=:cedula AND activo=:activo', 'params' => array(':cedula' => $identificacionUsuario, ':activo' => 1)));
     if ($agrupar) {
         return self::agruparDireccionesPorCiudad($models);
     }
     return $models;
 }