public function actionProducto($producto) { $objSectorCiudad = null; if (isset(Yii::app()->session[Yii::app()->params->sesion['sectorCiudadEntrega']])) { $objSectorCiudad = Yii::app()->session[Yii::app()->params->sesion['sectorCiudadEntrega']]; } if ($objSectorCiudad == null) { $objProducto = Producto::model()->find(array('with' => array('listImagenes', 'objDetalle', 'objCodigoEspecial', 'listCalificaciones' => array('with' => 'objUsuario')), 'condition' => 't.activo=:activo AND t.codigoProducto=:codigo', 'params' => array(':activo' => 1, ':codigo' => $producto))); } else { $objProducto = Producto::model()->find(array('with' => array('listImagenes', 'objDetalle', 'objCodigoEspecial', 'listCalificaciones' => array('with' => 'objUsuario'), 'listSaldos' => array('condition' => '(listSaldos.saldoUnidad>:saldo AND listSaldos.codigoCiudad=:ciudad AND listSaldos.codigoSector=:sector) OR (listSaldos.saldoUnidad IS NULL AND listSaldos.codigoCiudad IS NULL AND listSaldos.codigoSector IS NULL)'), 'listPrecios' => array('condition' => '(listPrecios.codigoCiudad=:ciudad AND listPrecios.codigoSector=:sector) OR (listPrecios.codigoCiudad IS NULL AND listPrecios.codigoSector IS NULL)'), 'listSaldosTerceros' => array('condition' => '(listSaldosTerceros.codigoCiudad=:ciudad AND listSaldosTerceros.codigoSector=:sector) OR (listSaldosTerceros.codigoCiudad IS NULL AND listSaldosTerceros.codigoSector IS NULL)')), 'condition' => 't.activo=:activo AND t.codigoProducto=:codigo AND ( (listSaldos.saldoUnidad IS NOT NULL AND listPrecios.codigoCiudad IS NOT NULL) OR listSaldosTerceros.codigoCiudad IS NOT NULL)', 'params' => array(':activo' => 1, ':codigo' => $producto, ':saldo' => 0, ':ciudad' => $objSectorCiudad->codigoCiudad, ':sector' => $objSectorCiudad->codigoSector))); } if ($objProducto == null) { throw new CHttpException(404, 'Producto no existe.'); } $codigoPerfil = Yii::app()->shoppingCart->getCodigoPerfil(); $objCalificacion = null; if (!Yii::app()->user->isGuest) { $fecha = new DateTime(); $fecha->modify("-1 day"); $objCalificacion = ProductosCalificaciones::model()->find(array('condition' => 'codigoProducto=:producto AND identificacionUsuario=:usuario AND fecha>=:fecha', 'params' => array(':producto' => $producto, ':usuario' => Yii::app()->user->name, ':fecha' => $fecha->format('Y-m-d H:i:s')))); } $listaPuntoVenta = array(); if ($objProducto->ventaVirtual == 0 && $objSectorCiudad != null) { $listaPuntoVenta = PuntoVenta::model()->findAll(array('with' => array('listServicios' => array('condition' => 'listServicios.idTipoServicio=:servicio')), 'condition' => 'codigoCiudad=:ciudad AND idSectorLRV=:sector AND estado=:estado', 'params' => array(':ciudad' => $objSectorCiudad->codigoCiudad, ':sector' => $objSectorCiudad->codigoSector, ':estado' => 1, ':servicio' => Yii::app()->params->servicioVentaControlada))); } $listRelacionados = ProductosRelacionados::model()->findAll(array('with' => 'objProductoRelacionado', 'order' => 't.orden', 'condition' => 't.codigoProducto=:producto', 'params' => array(':producto' => $producto))); try { $sql = "INSERT INTO t_ProductosVistos(codigoProducto) VALUES ({$producto}) ON DUPLICATE KEY UPDATE cantidad=cantidad+1"; Yii::app()->db->createCommand($sql)->execute(); } catch (Exception $ex) { } $this->render('productoDetalle', array('objProducto' => $objProducto, 'objPrecio' => new PrecioProducto($objProducto, $objSectorCiudad, $codigoPerfil), 'objSectorCiudad' => $objSectorCiudad, 'codigoPerfil' => $codigoPerfil, 'listaPuntoVenta' => $listaPuntoVenta, 'objCalificacion' => $objCalificacion, 'listaPuntoVenta' => $listaPuntoVenta, 'listRelacionados' => $listRelacionados, 'tipoBusqueda' => Yii::app()->params->busqueda['tipo']['buscador'])); }
public function listPuntoVenta() { return CHtml::listData(PuntoVenta::model()->findAll(), 'idComercial', 'nombrePuntoDeVenta'); }
public function actionDistancia($lat, $lon) { $puntosv = PuntoVenta::model()->findAll(); $pdvCerca = array('pdv' => null, 'dist' => -1); foreach ($puntosv as $pdv) { $dist = distanciaCoordenadas($lat, $lon, $pdv->longitudGoogle, $pdv->latitudGoogle); echo "{$pdv->idPuntoDeVenta}|{$pdv->nombrePuntoDeVenta}|{$pdv->codigoCiudad}|{$pdv->longitudGoogle}|{$pdv->latitudGoogle}|{$dist}<br/>"; if ($pdvCerca['pdv'] == null) { $pdvCerca['pdv'] = $pdv; $pdvCerca['dist'] = $dist; } else { if ($dist < $pdvCerca['dist']) { $pdvCerca['pdv'] = $pdv; $pdvCerca['dist'] = $dist; } } } }
public function consultarDisponibilidad($shoppingCart) { //$positions = $shoppingCart->getPositions(); $this->indicePuntoVenta = null; $this->listPuntosVenta = array(0 => 0, 1 => 'Consulta no exitosa'); $productos = array(); foreach ($shoppingCart->getPositions() as $position) { if ($position->isProduct()) { $productos[] = array("CODIGO_PRODUCTO" => $position->objProducto->codigoProducto, "ID_PRODUCTO" => $position->objProducto->codigoProducto, "CANTIDAD" => $position->getQuantityUnit(), "DESCRIPCION" => $position->objProducto->descripcionProducto); } } /* CVarDumper::dump($productos,10,true); echo "<br/>"; echo "<br/>"; */ try { $client = new SoapClient(null, array('location' => Yii::app()->params->webServiceUrl['serverLRV'], 'uri' => "", 'trace' => 1)); $this->listPuntosVenta = $client->__soapCall("LRVConsultarSaldoMovil", array('productos' => $productos, 'ciudad' => $shoppingCart->getCodigoCiudad(), 'sector' => $shoppingCart->getCodigoSector())); } catch (Exception $exc) { Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application'); $this->listPuntosVenta = array(0 => 0, 1 => 'Error al consultar disponibilidad de productos'); } if (empty($this->listPuntosVenta)) { $this->listPuntosVenta = array(0 => 0, 1 => 'No hay disponibilidad de productos'); } //CVarDumper::dump($this->listPuntosVenta,10,true); //exit(); // Ordenar de mayor a menor los puntos de venta de acuerdo a /* for($i=0;$i<count($this->listPuntosVenta[1]);$i++){ for($j=0;$j<count($this->listPuntosVenta[1])-1;$j++){ $valuej=0; $valuej1=0; if(isset($this->listPuntosVenta[1][$j][5])){ $valuej=$this->listPuntosVenta[1][$j][5]; } if(isset($this->listPuntosVenta[1][$j+1][5])){ $valuej1=$this->listPuntosVenta[1][$j+1][5]; } if($valuej<$valuej1){ $aux=$this->listPuntosVenta[1][$j]; $this->listPuntosVenta[1][$j]=$this->listPuntosVenta[1][$j+1];; $this->listPuntosVenta[1][$j+1]=$aux; } } } */ $this->listPuntosVenta[3] = 0; //recorrer lista para eliminar pdvs no encontrados //recalcular cantidades y saldos teniendo en cuenta fracciones //y definir si alguno tiene 100% en pos 3 0:no, 1:si if ($this->listPuntosVenta[0] == 1) { foreach ($this->listPuntosVenta[1] as $indicePdv => $pdv) { if ($pdv[0] == 1 && !empty($pdv[4])) { if ($pdv[5] == 100) { $this->listPuntosVenta[3] = 1; } $objPdv = PuntoVenta::model()->find(array("condition" => "idComercial=:comercial", 'params' => array(':comercial' => $pdv[1]))); $this->listPuntosVenta[1][$indicePdv]['HORA_INICIO'] = null; $this->listPuntosVenta[1][$indicePdv]['HORA_FIN'] = null; $dia = 'festivo'; $fecha = new DateTime(); //si no es festivo, se verifica el dia de la semana if (DiasFestivos::esFestivo($fecha)) { $dia = $fecha->format('w'); } $foraneaHorario = HorarioPuntoVenta::getHorariosDias()[$dia]['foranea']; $horario = $objPdv->{$foraneaHorario}; if ($horario !== null) { $this->listPuntosVenta[1][$indicePdv]['HORA_INICIO'] = DateTime::createFromFormat('H:i:s', $horario->horarioInicio); $this->listPuntosVenta[1][$indicePdv]['HORA_FIN'] = DateTime::createFromFormat('H:i:s', $horario->horarioFin); } foreach ($pdv[4] as $indiceProd => $producto) { $arrSaldo = $this->decimalToUnidFracc($producto->SALDO); if ($arrSaldo['UNIDAD'] <= 0 && $arrSaldo['FRACCION'] <= 0) { unset($this->listPuntosVenta[1][$indicePdv][4][$indiceProd]); } else { $arrCantidad = $this->decimalToUnidFracc($producto->CANTIDAD); $this->listPuntosVenta[1][$indicePdv][4][$indiceProd]->CANTIDAD_UNIDAD = $arrCantidad['UNIDAD']; $this->listPuntosVenta[1][$indicePdv][4][$indiceProd]->CANTIDAD_FRACCION = $arrCantidad['FRACCION']; $this->listPuntosVenta[1][$indicePdv][4][$indiceProd]->SALDO_UNIDAD = $arrSaldo['UNIDAD']; $this->listPuntosVenta[1][$indicePdv][4][$indiceProd]->SALDO_FRACCION = $arrSaldo['FRACCION']; $this->listPuntosVenta[1][$indicePdv][4][$indiceProd]->COMPLETITUD_UNIDAD = $arrSaldo['UNIDAD'] >= $arrCantidad['UNIDAD']; $this->listPuntosVenta[1][$indicePdv][4][$indiceProd]->COMPLETITUD_FRACCION = $arrSaldo['FRACCION'] >= $arrCantidad['FRACCION']; } } } else { unset($this->listPuntosVenta[1][$indicePdv]); } } } }
public function actionRemisionborrar() { $model = new RemisionForm(); if (isset($_POST['RemisionForm'])) { $model->attributes = $_POST['RemisionForm']; $model->attributes['idCompra']; $model->attributes['idComercial']; $objCompra = Compras::model()->findByPk($model->attributes['idCompra'], array("with" => "objPuntoVenta")); $objPuntoVenta = PuntoVenta::model()->find("idComercial=:idcomercial", array("idcomercial" => $model->attributes['idComercial'])); if ($objCompra === null) { // echo CJSON::encode(array('result' => 0, 'response' => 'Este pedido no existe o no existe el punto de venta registrado.')); Yii::app()->end(); } try { $client = new SoapClient(null, array('location' => Yii::app()->params->webServiceUrl['remisionPosECommerce'], 'uri' => "", 'trace' => 1)); $result = $client->__soapCall("BorrarCongelada", array('idPedido' => $model->attributes['idCompra'], 'destino' => $model->attributes['idComercial'])); if (!$result[0] == 1) { Yii::app()->user->setFlash('alert alert-success', "La remisión ha sido borrada con éxito del punto de venta " . $model->attributes['idComercial']); /* $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. " . $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(); } * */ } else { Yii::app()->user->setFlash('alert alert-danger', "La remisión no ha sido borrada con éxito del punto de venta " . $model->attributes['idComercial'] . "<br/>" . $result[1]); } //if ($model->save()) // $this->redirect(array('admin', 'usuario' => $model->usuario)); } catch (Exception $e) { Yii::app()->user->setFlash('alert alert-danger', "Error al borrar la remisión por problemas de conexión con el punto de venta " . $model->attributes['idComercial']); } } Yii::import('ext.select2.Select2'); $listPdv = PuntoVenta::model()->findAll(array('order' => 'idComercial')); $this->render('remisionBorrar', array('model' => $model, 'listPdv' => $listPdv)); }
<?php $listCiudad = Ciudad::model()->findAll(array('order' => 'orden', 'condition' => 'estadoCiudad=:estado', 'params' => array(':estado' => 1))); $listPdv = PuntoVenta::model()->findAll(array('order' => 'idComercial', 'condition' => 'estado=:estado', 'params' => array(':estado' => 1))); ?> <div class="row"> <div class="col-md-5"> <div> <span class="title">Georeferencia</span><br><br> <form action="" method="post" id="georeferenciaform" name="georeferenciaform"> <table class="table table-bordered table-hover table-striped table-condensed"> <tbody> <tr> <th>Ciudad</th> <td> <?php echo Select2::dropDownList('select-ciudad-direccion', $objCompra->objCompraDireccion->codigoCiudad, CHtml::listData($listCiudad, 'codigoCiudad', 'nombreCiudad'), array('prompt' => 'Seleccione ciudad', 'id' => 'select-ciudad-direccion', 'style' => 'width: 60%;')); ?> </td> <td style="vertical-align: middle; text-align: center" rowspan="2"> <button type="button" style="color: #51a351" class="btn btn-sm" data-role="pdvgeodireccion" data-compra="<?php echo $objCompra->idCompra; ?> "><i class="glyphicon glyphicon-globe"></i> Geo</button> </td> </tr> <tr> <th>Direccion</th> <td><input type="text" value="<?php echo $objCompra->objCompraDireccion->direccion; ?>
public function actionAsignarpdv() { if (!Yii::app()->request->isPostRequest) { echo CJSON::encode(array('result' => 'error', 'response' => 'Solicitud invalida.')); Yii::app()->end(); } $pdv = Yii::app()->getRequest()->getPost('pdv'); $compra = Yii::app()->getRequest()->getPost('compra'); if ($pdv === null || $compra === null) { echo CJSON::encode(array('result' => 'error', 'response' => 'Solicitud invalida.')); Yii::app()->end(); } $objCompra = Compras::model()->findByPk($compra); if ($objCompra === null) { echo CJSON::encode(array('result' => 'error', 'response' => 'Pedido no existe.')); Yii::app()->end(); } if ($objCompra->idEstadoCompra == Yii::app()->params->callcenter['estadoCompra']['estado']['remitido']) { echo CJSON::encode(array('result' => 'error', 'response' => 'El pedido ya fue remitido a un punto de venta, si desea borre la remisión y haga la correspondiente asignación.')); Yii::app()->end(); } $objPdv = PuntoVenta::model()->find(array('condition' => 'idComercial=:pdv', 'params' => array(':pdv' => $pdv))); if ($objPdv === null) { echo CJSON::encode(array('result' => 'error', 'response' => 'Punto venta no existe.')); Yii::app()->end(); } $transaction = Yii::app()->db->beginTransaction(); try { $objCompra->idComercial = $objPdv->idComercial; $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['asignado']; $objCompra->generarDocumentoCruce(Yii::app()->controller->module->user->id); 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']['asignado']; $objEstadoCompra->idOperador = Yii::app()->controller->module->user->id; 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. " . $objPdv->nombrePuntoDeVenta; $objObservacion->idOperador = Yii::app()->controller->module->user->id; $objObservacion->notificarCliente = 0; if (!$objObservacion->save()) { throw new Exception("Error al guardar observación" . $objObservacion->validateErrorsResponse()); } $transaction->commit(); echo CJSON::encode(array('result' => 'ok', 'response' => array('msg' => 'Punto venta asignado.', 'htmlEncabezado' => $this->renderPartial('/admin/_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(); } }
public function actionGps() { if (Yii::app()->request->isPostRequest) { Yii::app()->session[Yii::app()->params->sesion['pdvEntrega']] = null; /* Yii::app()->session[Yii::app()->params->sesion['sectorCiudadEntrega']] = null; Yii::app()->session[Yii::app()->params->sesion['subSectorCiudadEntrega']] = null; */ $lat = Yii::app()->getRequest()->getPost('lat'); $lon = Yii::app()->getRequest()->getPost('lon'); try { $puntosv = PuntoVenta::model()->findAll(); $pdvCerca = array('pdv' => null, 'dist' => -1); foreach ($puntosv as $pdv) { $dist = distanciaCoordenadas($lat, $lon, $pdv->latitudGoogle, $pdv->longitudGoogle); if ($dist > Yii::app()->params->gps['distanciaMaxima']) { continue; } if ($pdvCerca['pdv'] == null) { $pdvCerca['pdv'] = $pdv; $pdvCerca['dist'] = $dist; } else { if ($dist < $pdvCerca['dist']) { $pdvCerca['pdv'] = $pdv; $pdvCerca['dist'] = $dist; } } } if ($pdvCerca['pdv'] == null) { echo CJSON::encode(array('result' => 'error', 'response' => 'No se encuentra punto de venta cercano')); Yii::app()->end(); } $objCiudadSector = SectorCiudad::model()->find(array('with' => array('objCiudad', 'objSector'), 'condition' => 't.codigoCiudad=:ciudad AND t.codigoSector=:sector AND t.estadoCiudadSector=:estado', 'params' => array('ciudad' => $pdvCerca['pdv']->codigoCiudad, 'sector' => $pdvCerca['pdv']->idSectorLRV, 'estado' => 1))); if ($objCiudadSector == null) { echo CJSON::encode(array('result' => 'error', 'response' => 'No se encuentra sector cercano')); Yii::app()->end(); } Yii::app()->session[Yii::app()->params->sesion['pdvEntrega']] = $pdvCerca['pdv']; //Yii::app()->session[Yii::app()->params->sesion['sectorCiudadEntrega']] = $sectorCiudad; /* Yii::app()->session[Yii::app()->params->sesion['subSectorCiudadEntrega']] = null; */ $mensajeUbicacion = "<strong>" . $objCiudadSector->objCiudad->nombreCiudad . " - " . $objCiudadSector->objSector->nombreSector . "</strong>"; if (!isset(Yii::app()->session[Yii::app()->params->sesion['tipoEntrega']]) || Yii::app()->session[Yii::app()->params->sesion['tipoEntrega']] != Yii::app()->params->entrega['tipo']['presencial']) { $objHorarioSecCiud = HorariosCiudadSector::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector', 'params' => array(':ciudad' => $objCiudadSector->codigoCiudad, ':sector' => $objCiudadSector->codigoSector))); if ($objHorarioSecCiud != null && $objHorarioSecCiud->sadCiudadSector == 0) { $mensajeUbicacion .= "<br/>No contamos con servicio de entrega a domicilio para esta ubicación, los pedidos deben ser recogidos en el Punto de Venta seleccionado por usted al momento de finalizar la compra."; } } echo CJSON::encode(array('result' => 'ok', 'response' => array('ubicacion' => $mensajeUbicacion, 'url' => CController::createUrl('/sitio/ubicacionSeleccion', array('ciudad' => $pdvCerca['pdv']->codigoCiudad, 'sector' => $pdvCerca['pdv']->idSectorLRV))))); Yii::app()->end(); } catch (Exception $exc) { Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application'); echo CJSON::encode(array('result' => 'error', 'response' => 'Error: ' . $exc->getMessage())); Yii::app()->end(); } } else { echo CJSON::encode(array('result' => 'error', 'response' => 'Solicitud invalida.')); Yii::app()->end(); } }