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ás vistos"); $parametrosVista['imagenBusqueda'] = $imagenBusqueda; $this->render('listaProductos', $parametrosVista); }
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(); }
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(); } }