public function actionBuscar()
 {
     //ini_set('memory_limit', '-1');
     //ini_set('memory_limit', '1024M');
     //$term = Yii::app()->getRequest()->getPost('busqueda', '');
     $term = trim(Yii::app()->request->getParam('busqueda', ''));
     $codigosArray = GSASearch($term);
     $codigosStr = implode(",", $codigosArray);
     $objSectorCiudad = null;
     if (isset(Yii::app()->session[Yii::app()->params->sesion['sectorCiudadEntrega']])) {
         $objSectorCiudad = Yii::app()->session[Yii::app()->params->sesion['sectorCiudadEntrega']];
     }
     $codigoPerfil = Yii::app()->shoppingCart->getCodigoPerfil();
     if (empty($codigosArray)) {
         try {
             Busquedas::registrarBusqueda(array('idenficacionUsuario' => Yii::app()->user->isGuest ? null : Yii::app()->user->name, 'tipoBusqueda' => Yii::app()->params->busqueda['tipo']['buscador'], 'msgBusqueda' => "{$term}: busqueda GSA", 'codigoCiudad' => $objSectorCiudad == null ? null : $objSectorCiudad->codigoCiudad, 'codigoSector' => $objSectorCiudad == null ? null : $objSectorCiudad->codigoSector));
         } catch (Exception $exc) {
             Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
         }
         $this->render('listaProductos', array('listProductos' => array(), 'listCombos' => array(), 'msgCodigoEspecial' => array(), 'listCodigoEspecial' => array(), 'imagenBusqueda' => Yii::app()->params->busqueda['imagen']['noExito'], 'objSectorCiudad' => $objSectorCiudad, 'codigoPerfil' => $codigoPerfil, 'nombreBusqueda' => $term));
         Yii::app()->end();
     }
     $formFiltro = new FiltroForm();
     $formOrdenamiento = new OrdenamientoForm();
     if (isset($_POST['OrdenamientoForm'])) {
         $formOrdenamiento->attributes = $_POST['OrdenamientoForm'];
     }
     if (isset($_POST['FiltroForm'])) {
         $formFiltro->attributes = $_POST['FiltroForm'];
         $formFiltro->listCategoriasTiendaCheck = $formFiltro->listCategoriasTienda;
     }
     $parametrosProductos = array();
     $listCombos = array();
     if ($objSectorCiudad == null) {
         $parametrosProductos = array('order' => 't.orden', 'with' => array('listImagenes', 'objCodigoEspecial', 'listCalificaciones', 'objCategoriaBI' => array('with' => 'listCategoriasTienda')), 'condition' => "t.activo=:activo AND t.codigoProducto IN ({$codigosStr})", 'params' => array(':activo' => 1));
     } else {
         $parametrosProductos = array('order' => 't.orden', 'with' => array('listImagenes', 'objCodigoEspecial', 'listCalificaciones', 'objCategoriaBI' => array('with' => 'listCategoriasTienda'), '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 IN ({$codigosStr}) AND ( (listSaldos.saldoUnidad IS NOT NULL AND listPrecios.codigoCiudad IS NOT NULL) OR listSaldosTerceros.codigoCiudad IS NOT NULL)", 'params' => array(':activo' => 1, ':saldo' => 0, ':ciudad' => $objSectorCiudad->codigoCiudad, ':sector' => $objSectorCiudad->codigoSector));
         $fecha = new DateTime();
         $listCombos = Combo::model()->findAll(array('with' => array('listComboSectorCiudad', 'listProductos' => array('condition' => "listProductos.codigoProducto IN ({$codigosStr})")), 'condition' => 't.estadoCombo=:estado AND t.fechaInicio<=:fecha AND t.fechaFin>=:fecha AND listComboSectorCiudad.saldo>:saldo AND listComboSectorCiudad.codigoCiudad=:ciudad AND listComboSectorCiudad.codigoSector=:sector', 'params' => array(':estado' => 1, ':fecha' => $fecha->format('Y-m-d H:i:s'), 'saldo' => 0, ':ciudad' => $objSectorCiudad->codigoCiudad, ':sector' => $objSectorCiudad->codigoSector)));
     }
     if ($formOrdenamiento->orden != null) {
         if ($formOrdenamiento->orden == 1) {
             $parametrosProductos['order'] = "((CASE WHEN listPrecios.precioUnidad IS NULL THEN 0 ELSE listPrecios.precioUnidad END) + (CASE WHEN listSaldosTerceros.precioUnidad IS NULL THEN 0 ELSE listSaldosTerceros.precioUnidad END)) ASC";
         } else {
             if ($formOrdenamiento->orden == 2) {
                 $parametrosProductos['order'] = "((CASE WHEN listPrecios.precioUnidad IS NULL THEN 0 ELSE listPrecios.precioUnidad END) + (CASE WHEN listSaldosTerceros.precioUnidad IS NULL THEN 0 ELSE listSaldosTerceros.precioUnidad END)) DESC";
             } else {
                 if ($formOrdenamiento->orden == 3) {
                     $parametrosProductos['order'] = "t.descripcionProducto";
                 } else {
                     if ($formOrdenamiento->orden == 4) {
                         $parametrosProductos['order'] = "t.presentacionProducto";
                     }
                 }
             }
         }
     }
     if ($formFiltro->listCategoriasTiendaCheck != null && !empty($formFiltro->listCategoriasTiendaCheck)) {
         $codigosCategorias = implode(",", $formFiltro->listCategoriasTiendaCheck);
         $parametrosProductos['condition'] = $parametrosProductos['condition'] . " AND listCategoriasTienda.idCategoriaTienda IN ({$codigosCategorias})";
     }
     $listProductos = Producto::model()->findAll($parametrosProductos);
     $listCodigoEspecial = CodigoEspecial::model()->findAll(array('condition' => 'codigoEspecial<>0'));
     $msgCodigoEspecial = array();
     $formFiltro->listCategoriasTienda = array();
     foreach ($listProductos as $objProducto) {
         if ($objProducto->codigoEspecial != null && $objProducto->codigoEspecial != 0) {
             $msgCodigoEspecial[$objProducto->codigoEspecial] = $objProducto->objCodigoEspecial;
         }
         foreach ($objProducto->objCategoriaBI->listCategoriasTienda as $objCategoriaTienda) {
             $formFiltro->listCategoriasTienda[$objCategoriaTienda->idCategoriaTienda] = $objCategoriaTienda->nombreCategoriaTienda;
         }
     }
     $parametrosVista = array('listProductos' => $listProductos, 'listCombos' => $listCombos, 'msgCodigoEspecial' => $msgCodigoEspecial, 'listCodigoEspecial' => $listCodigoEspecial, 'objSectorCiudad' => $objSectorCiudad, 'codigoPerfil' => $codigoPerfil, 'formFiltro' => $formFiltro, 'tipoBusqueda' => Yii::app()->params->busqueda['tipo']['buscador'], 'nombreBusqueda' => $term);
     $imagenBusqueda = null;
     if (empty($listProductos)) {
         $imagenBusqueda = Yii::app()->params->busqueda['imagen']['noExito'];
         if ($objSectorCiudad != null) {
             try {
                 Busquedas::registrarBusqueda(array('idenficacionUsuario' => Yii::app()->user->isGuest ? null : Yii::app()->user->name, 'tipoBusqueda' => Yii::app()->params->busqueda['tipo']['buscador'], 'msgBusqueda' => "{$term}: busqueda local", 'codigoCiudad' => $objSectorCiudad == null ? null : $objSectorCiudad->codigoCiudad, 'codigoSector' => $objSectorCiudad == null ? null : $objSectorCiudad->codigoSector));
             } catch (Exception $exc) {
                 Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
             }
         }
     } else {
         $parametrosVista['formOrdenamiento'] = $formOrdenamiento;
     }
     $parametrosVista['imagenBusqueda'] = $imagenBusqueda;
     $this->render('listaProductos', $parametrosVista);
 }
Exemplo n.º 2
0
 public function actionBuscar()
 {
     if (!Yii::app()->request->isPostRequest) {
         throw new CHttpException(404, 'Solicitud inválida.');
     }
     $busqueda = Yii::app()->getRequest()->getPost('busqueda');
     $compra = Yii::app()->getRequest()->getPost('compra');
     if ($busqueda === null || $compra === null) {
         throw new CHttpException(404, 'Solicitud inválida.');
     }
     $busqueda = trim($busqueda);
     if (empty($busqueda)) {
         throw new CHttpException(404, 'Búsqueda no puede estar vacío.');
     }
     $objCompra = Compras::model()->findByPk($compra);
     if ($objCompra === null) {
         throw new CHttpException(404, 'Compra no existe.');
     }
     $listProductos = array();
     $listCombos = array();
     $codigosArray = GSASearch($busqueda);
     //$codigosArray = array(10670, 21461, 22159, 410760, 301280, 10192, 30128, 36085);
     $codigosStr = implode(",", $codigosArray);
     if (!empty($codigosArray)) {
         $listProductos = Producto::model()->findAll(array('with' => array('listImagenes', 'objCodigoEspecial', 'listCalificaciones', 'objCategoriaBI', '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 IN ({$codigosStr}) AND ( (listSaldos.saldoUnidad IS NOT NULL AND listPrecios.codigoCiudad IS NOT NULL) OR listSaldosTerceros.codigoCiudad IS NOT NULL)", 'params' => array(':activo' => 1, ':saldo' => 0, ':ciudad' => $objCompra->codigoCiudad, ':sector' => $objCompra->codigoSector)));
         $fecha = new DateTime();
         $listCombos = Combo::model()->findAll(array('with' => array('listComboSectorCiudad', 'listProductos' => array('condition' => "listProductos.codigoProducto IN ({$codigosStr})")), 'condition' => 't.estadoCombo=:estado AND t.fechaInicio<=:fecha AND t.fechaFin>=:fecha AND listComboSectorCiudad.saldo>:saldo AND listComboSectorCiudad.codigoCiudad=:ciudad AND listComboSectorCiudad.codigoSector=:sector', 'params' => array(':estado' => 1, ':fecha' => $fecha->format('Y-m-d H:i:s'), 'saldo' => 0, ':ciudad' => $objCompra->codigoCiudad, ':sector' => $objCompra->codigoSector)));
     }
     $this->renderPartial('buscar', array('listProductos' => $listProductos, 'listCombos' => $listCombos, 'objSectorCiudad' => $objCompra->objSectorCiudad, 'codigoPerfil' => $objCompra->codigoPerfil, 'nombreBusqueda' => $busqueda));
 }