public function actualizarFracciones($cantidad) { $cantDiff = $cantidad - $this->fracciones; //igual if ($cantDiff == 0) { echo CJSON::encode(array('result' => 'error', 'response' => 'Actualización exitosa.')); Yii::app()->end(); } //aumentar if ($cantDiff > 0) { $objProducto = Producto::model()->find(array('with' => array('listSaldos' => array('condition' => '(listSaldos.saldoFraccion>:saldo AND listSaldos.codigoCiudad=:ciudad AND listSaldos.codigoSector=:sector) OR (listSaldos.saldoFraccion 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' => $this->codigoProducto, ':saldo' => 0, ':ciudad' => $this->objCompra->codigoCiudad, ':sector' => $this->objCompra->codigoSector))); if ($objProducto === null) { throw new Exception('Producto no disponible.'); } $objSaldo = $objProducto->getSaldo($this->objCompra->codigoCiudad, $this->objCompra->codigoSector); if ($objSaldo === null) { throw new Exception("La cantidad solicitada no está disponible en este momento. No hay unidades disponibles"); } if ($cantDiff > $objSaldo->saldoFraccion) { throw new Exception("La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldoFraccion} fracciones"); } } $precioTotal = $this->precioBaseFraccion - $this->descuentoFraccion; $precioDiff = $precioTotal * $cantDiff; $this->fracciones += $cantDiff; $this->precioTotalFraccion += $precioDiff; $this->idEstadoItem = Yii::app()->params->callcenter['estadoItem']['estado']['modificado']; $this->idOperador = Yii::app()->controller->module->user->id; $objCompra = $this->objCompra; $objCompra->subtotalCompra += $precioDiff; $objCompra->impuestosCompra += round(Precio::calcularImpuesto($precioDiff, $this->objImpuesto->porcentaje)); $objCompra->baseImpuestosCompra += round(Precio::calcularBaseImpuesto($precioDiff, $this->objImpuesto->porcentaje)); $objCompra->totalCompra += $precioDiff; if ($this->unidades + $this->fracciones == 0) { $objCompra->flete -= $this->flete; } $transaction = Yii::app()->db->beginTransaction(); 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 item: ' . $this->validateErrorsResponse()); } if ($objCompra->totalCompra < 0) { try { $transaction->rollBack(); } catch (Exception $txexc) { Yii::log($txexc->getMessage() . "\n" . $txexc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application'); } throw new Exception('Total compra no puede ser negativo'); } if (!$objCompra->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: ' . $objCompra->validateErrorsResponse()); } $transaction->commit(); }
public function getBaseTaxPrice($total = false) { $base = 0.0; if ($total) { $base = Precio::calcularBaseImpuesto($this->getPrice(true) * $this->quantityFraction, $this->tax) + Precio::calcularBaseImpuesto($this->getPrice() * ($this->quantityUnit + $this->quantityStored), $this->tax); } else { $base = Precio::calcularBaseImpuesto($this->getPrice(), $this->tax); } return round($base); }