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 actionDisponibilidad() { if (!Yii::app()->request->isPostRequest) { echo CJSON::encode(array('result' => 'error', 'response' => 'Solicitud invalida')); Yii::app()->end(); } $item = Yii::app()->getRequest()->getPost('item'); if ($item === null) { echo CJSON::encode(array('result' => 'error', 'response' => 'Solicitud inválida, no se detectan datos')); Yii::app()->end(); } $objItem = ComprasItems::model()->findByPk($item); if ($objItem === null) { echo CJSON::encode(array('result' => 'error', 'response' => 'Producto de compra no existente')); Yii::app()->end(); } if ($objItem->idCombo === null) { if ($objItem->disponible == 1) { $objItem->disponible = 0; } else { $objItem->disponible = 1; } $objItem->save(); echo CJSON::encode(array('result' => 'ok', 'response' => array('msg' => 'Pedido actualizado.', 'htmlDetalle' => $this->renderPartial('/admin/_adminPedido', array('objCompra' => $objItem->objCompra), true, false)))); } else { $listItems = ComprasItems::model()->findAll(array('condition' => 'idCompra=:compra AND idCombo=:combo', 'params' => array(':compra' => $objItem->idCompra, ':combo' => $objItem->idCombo))); foreach ($listItems as $objItemCompra) { if ($objItemCompra->disponible == 1) { $objItemCompra->disponible = 0; } else { $objItemCompra->disponible = 1; } $objItemCompra->save(); } echo CJSON::encode(array('result' => 'ok', 'response' => array('msg' => 'Pedido actualizado.', 'htmlDetalle' => $this->renderPartial('/admin/_adminPedido', array('objCompra' => $objItem->objCompra), true, false)))); } }