예제 #1
0
 public function actualizarCombo($combo, $cantidad)
 {
     $listItems = ComprasItems::model()->findAll(array('condition' => 'idCompra=:compra AND idCombo=:combo', 'params' => array(':compra' => $this->idCompra, ':combo' => $combo)));
     if (empty($listItems)) {
         throw new Exception('Combos de compra no existentes.');
     }
     $cantDiff = $cantidad - $listItems[0]->unidades;
     //igual
     if ($cantDiff == 0) {
         echo CJSON::encode(array('result' => 'error', 'response' => 'Actualización exitosa.'));
         Yii::app()->end();
     }
     if ($cantDiff > 0) {
         $objCombo = Combo::model()->find(array('with' => array('listComboSectorCiudad'), 'condition' => 't.idCombo=:combo AND t.estadoCombo=:estado AND listComboSectorCiudad.saldo>:saldo AND listComboSectorCiudad.codigoCiudad=:ciudad AND listComboSectorCiudad.codigoSector=:sector', 'params' => array(':combo' => $combo, ':estado' => 1, ':saldo' => 0, ':ciudad' => $this->codigoCiudad, ':sector' => $this->codigoSector)));
         if ($objCombo === null) {
             throw new Exception("La cantidad solicitada no está disponible en este momento. No hay unidades disponibles");
         }
         $objSaldo = $objCombo->getSaldo($this->codigoCiudad, $this->codigoSector);
         if ($objSaldo === null) {
             throw new Exception("La cantidad solicitada no está disponible en este momento. No hay unidades disponibles");
         }
         if ($cantDiff > $objSaldo->saldo) {
             throw new Exception("La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldo} unidades");
         }
     }
     $transaction = Yii::app()->db->beginTransaction();
     foreach ($listItems as $objItem) {
         $precioTotal = $objItem->precioBaseUnidad - $objItem->descuentoUnidad;
         $precioDiff = $precioTotal * $cantDiff;
         $objItem->unidades += $cantDiff;
         $objItem->precioTotalUnidad += $precioDiff;
         $objItem->idEstadoItem = Yii::app()->params->callcenter['estadoItem']['estado']['modificado'];
         $objItem->idOperador = Yii::app()->controller->module->user->id;
         $this->subtotalCompra += $precioDiff;
         $this->totalCompra += $precioDiff;
         if (!$objItem->save()) {
             try {
                 $transaction->rollBack();
             } catch (Exception $txexc) {
                 Yii::log($txexc->getMessage() . "\n" . $txexc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
             }
             throw new Exception('Error de actualización item: ' . $objItem->validateErrorsResponse());
         }
     }
     if (!$this->save()) {
         try {
             $transaction->rollBack();
         } catch (Exception $txexc) {
             Yii::log($txexc->getMessage() . "\n" . $txexc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
         }
         throw new Exception('Error de actualización compra: ' . $this->validateErrorsResponse());
     }
     $transaction->commit();
 }
 public function actionMasvistos()
 {
     $sql = "SELECT codigoProducto FROM t_ProductosVistos";
     $fecha = new DateTime();
     $listIdsProductos = Yii::app()->db->createCommand($sql)->queryColumn();
     $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();
     $listCombos = array();
     if (empty($listIdsProductos)) {
         $this->render('listaProductos', array('listProductos' => array(), 'listCombos' => array(), 'msgCodigoEspecial' => array(), 'listCodigoEspecial' => array(), 'imagenBusqueda' => Yii::app()->params->busqueda['imagen']['noExito'], 'objSectorCiudad' => $objSectorCiudad, 'codigoPerfil' => $codigoPerfil, 'nombreBusqueda' => "Más vistos"));
         Yii::app()->end();
     }
     $listIdsProductos = implode(",", $listIdsProductos);
     $criteria = new CDbCriteria();
     $criteria->order = "t.orden";
     //$criteria->limit = 100;
     $criteria->with = array('listImagenes', 'objCodigoEspecial', 'listCalificaciones');
     $criteria->condition = "t.activo=:activo AND t.codigoProducto IN ({$listIdsProductos})";
     $criteria->params = array(':activo' => 1);
     if ($objSectorCiudad != null) {
         $criteria->with['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)');
         $criteria->with['listPrecios'] = array('condition' => '(listPrecios.codigoCiudad=:ciudad AND listPrecios.codigoSector=:sector) OR (listPrecios.codigoCiudad IS NULL AND listPrecios.codigoSector IS NULL)');
         $criteria->with['listSaldosTerceros'] = array('condition' => '(listSaldosTerceros.codigoCiudad=:ciudad AND listSaldosTerceros.codigoSector=:sector) OR (listSaldosTerceros.codigoCiudad IS NULL AND listSaldosTerceros.codigoSector IS NULL)');
         $criteria->condition .= ' AND ( (listSaldos.saldoUnidad IS NOT NULL AND listPrecios.codigoCiudad IS NOT NULL) OR listSaldosTerceros.codigoCiudad IS NOT NULL)';
         $criteria->params[':saldo'] = 0;
         $criteria->params[':ciudad'] = $objSectorCiudad->codigoCiudad;
         $criteria->params[':sector'] = $objSectorCiudad->codigoSector;
         if (!empty($listIdsProductos)) {
             $listCombos = Combo::model()->findAll(array('with' => array('listComboSectorCiudad', 'listProductos' => array('condition' => 'listProductos.codigoProducto IN (' . $listIdsProductos . ')')), '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)));
         }
     }
     //$criteria->condition .= " AND t.codigoProducto IN (" . $listIdsProductos . ")";
     $listProductos = Producto::model()->findAll($criteria);
     $listCodigoEspecial = CodigoEspecial::model()->findAll(array('condition' => 'codigoEspecial<>0'));
     $msgCodigoEspecial = array();
     foreach ($listProductos as $objProducto) {
         if ($objProducto->codigoEspecial != null && $objProducto->codigoEspecial != 0) {
             $msgCodigoEspecial[$objProducto->codigoEspecial] = $objProducto->objCodigoEspecial;
         }
     }
     $imagenBusqueda = null;
     if (empty($listProductos)) {
         $imagenBusqueda = Yii::app()->params->busqueda['imagen']['noExito'];
         try {
             Busquedas::registrarBusqueda(array('idenficacionUsuario' => Yii::app()->user->isGuest ? null : Yii::app()->user->name, 'tipoBusqueda' => Yii::app()->params->busqueda['tipo']['categoria'], 'msgBusqueda' => "Mas Vistos", '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');
         }
     }
     $parametrosVista = array('listProductos' => $listProductos, 'listCombos' => $listCombos, 'msgCodigoEspecial' => $msgCodigoEspecial, 'listCodigoEspecial' => $listCodigoEspecial, 'objSectorCiudad' => $objSectorCiudad, 'codigoPerfil' => $codigoPerfil, 'tipoBusqueda' => Yii::app()->params->busqueda['tipo']['categoria'], 'nombreBusqueda' => "M&aacute;s vistos");
     $parametrosVista['imagenBusqueda'] = $imagenBusqueda;
     $this->render('listaProductos', $parametrosVista);
 }
예제 #3
0
 private function modificarCombo($position, $objSectorCiudad)
 {
     $cantidad = Yii::app()->getRequest()->getPost('cantidad', null);
     if ($cantidad === null || $cantidad < 0) {
         echo CJSON::encode(array('result' => 'error', 'response' => array('message' => 'Solicitud inválida, no se detectan datos', 'carroHTML' => $this->renderPartial('carro', null, true))));
         Yii::app()->end();
     }
     $fecha = new DateTime();
     $objCombo = Combo::model()->find(array('with' => array('listProductos', 'listProductosCombo', 'listComboSectorCiudad'), 'condition' => 't.idCombo=:combo AND 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(':combo' => $position->objCombo->idCombo, ':estado' => 1, ':fecha' => $fecha->format('Y-m-d H:i:s'), 'saldo' => $cantidad, ':ciudad' => $objSectorCiudad->codigoCiudad, ':sector' => $objSectorCiudad->codigoSector)));
     if ($objCombo === null) {
         echo CJSON::encode(array('result' => 'error', 'response' => array('message' => "La cantidad solicitada no está disponible en este momento. No hay combos disponibles", 'carroHTML' => $this->renderPartial('carro', null, true))));
         Yii::app()->end();
     }
     Yii::app()->shoppingCart->update($position, false, $cantidad);
     echo CJSON::encode(array('result' => 'ok', 'response' => array('canastaHTML' => $this->renderPartial('canasta', null, true), 'carroHTML' => $this->renderPartial('carro', null, true))));
     Yii::app()->end();
 }
예제 #4
0
 private function agregarCombo(Compras &$objCompra)
 {
     $combo = Yii::app()->getRequest()->getPost('combo', null);
     $cantidad = Yii::app()->getRequest()->getPost('cantidad', null);
     if ($combo === null || $cantidad === null) {
         echo CJSON::encode(array('result' => 'error', 'response' => 'Solicitud inválida, no se detectan datos'));
         Yii::app()->end();
     }
     if ($cantidad < 1) {
         echo CJSON::encode(array('result' => 'error', 'response' => 'Cantidad no válida'));
         Yii::app()->end();
     }
     $fecha = new DateTime();
     $objCombo = Combo::model()->find(array('with' => array('listProductosCombo'), 'condition' => 't.idCombo=:combo AND t.estadoCombo=:estado AND t.fechaInicio<=:fecha AND t.fechaFin>=:fecha', 'params' => array(':combo' => $combo, ':estado' => 1, ':fecha' => $fecha->format('Y-m-d H:i:s'))));
     if ($objCombo === null) {
         echo CJSON::encode(array('result' => 'error', 'response' => 'Producto no disponible'));
         Yii::app()->end();
     }
     $objSaldo = ComboSectorCiudad::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND idCombo=:combo', 'params' => array(':ciudad' => $objCompra->codigoCiudad, ':sector' => $objCompra->codigoSector, ':combo' => $combo)));
     if ($objSaldo === null) {
         echo CJSON::encode(array('result' => 'error', 'response' => 'Producto no disponible'));
         Yii::app()->end();
     }
     if ($cantidad > $objSaldo->saldo) {
         echo CJSON::encode(array('result' => 'error', 'response' => "La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldo} unidades"));
         Yii::app()->end();
     }
     $position = new ProductoCarro($objCombo);
     $position->generate(array('objSectorCiudad' => $objCompra->objSectorCiudad, 'codigoPerfil' => $objCompra->codigoPerfil));
     $position->setQuantity($cantidad, false);
     $transaction = Yii::app()->db->beginTransaction();
     try {
         $objSaldo->saldo = $objSaldo->saldo - $position->getQuantity();
         $objSaldo->save();
         foreach ($objCombo->listProductosCombo as $productoCombo) {
             $objItem = new ComprasItems();
             $objItem->idCompra = $objCompra->idCompra;
             $objItem->idCombo = $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 = 0;
             $objItem->unidades = $position->getQuantity();
             $objItem->fracciones = 0;
             $objItem->unidadesCedi = 0;
             $objItem->codigoImpuesto = $productoCombo->objProducto->codigoImpuesto;
             $objItem->idEstadoItem = Yii::app()->params->callcenter['estadoItem']['estado']['adicionado'];
             $objItem->idOperador = Yii::app()->controller->module->user->id;
             //$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());
             }
         }
         $objCompra->subtotalCompra += $position->getSumPrice();
         $objCompra->totalCompra += $position->getTotalPrice();
         $objCompra->flete += $position->getShipping();
         $objCompra->impuestosCompra += ceil($position->getTaxPrice(true));
         if (!$objCompra->save()) {
             throw new Exception("Error al guardar compra" . $objCompra->validateErrorsResponse());
         }
         $transaction->commit();
         echo CJSON::encode(array('result' => 'ok', 'response' => array('msg' => 'Pedido actualizado.', 'htmlDetalle' => $this->renderPartial('/admin/_adminPedido', array('objCompra' => $objCompra), true, false), '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();
     }
 }