private static function GetCerrarVentaParams($id_venta) { $ventaVo = VentaDAO::getByPK($id_venta); $resultArray = $ventaVo->asArray(); //buscar su cliente $result["cliente"] = self::GetUsuarioArray($ventaVo->getIdCompradorVenta()); //agente de venta $result["agente"] = self::GetUsuarioArray($ventaVo->getIdUsuario()); //buscar sus productos y ordenes $result["contenido"] = array_merge(VentaProductoDAO::search(new VentaProducto(array("id_venta" => $id_venta))), VentaOrdenDAO::search(new VentaOrden(array("id_venta" => $id_venta)))); //direccion //buscar su agente //buscar sucursal //buscar empresa return $result; }
public static function Venta($id_venta) { $ventaDao = VentaDAO::getByPK($id_venta); if ($ventaDao === null) { throw new InvalidDataException("Esta venta no existe"); } $clienteDao = UsuarioDAO::getByPK($ventaDao->getIdCompradorVenta()); $agenteDao = UsuarioDAO::getByPK($ventaDao->getIdUsuario()); if ($ventaDao->getEsCotizacion()) { $pdf = self::createPdf("Cotizacion"); } else { $pdf = self::createPdf("Nota de venta"); } $opciones_tabla = array(); $opciones_tabla['showLines'] = 0; $opciones_tabla['showHeadings'] = 0; $opciones_tabla['shaded'] = 0; $opciones_tabla['fontSize'] = 8; $opciones_tabla['xOrientation'] = 'right'; $opciones_tabla['xPos'] = self::puntos_cm(7.5); $opciones_tabla['width'] = self::puntos_cm(11); $opciones_tabla['textCol'] = array(0, 0, 0); $opciones_tabla['titleFontSize'] = 12; $opciones_tabla['rowGap'] = 3; $opciones_tabla['colGap'] = 3; $f = date("d/m/y", $ventaDao->getFecha()) . " " . date("H:i:s", $ventaDao->getFecha()); if ($ventaDao->getEsCotizacion()) { $datos = array(array("col" => "<b>Cotizacion</b>"), array("col" => $ventaDao->getIdVenta()), array("col" => "<b>Numero de orden</b>"), array("col" => ""), array("col" => "<b>Fecha de venta</b>"), array("col" => $f), array("col" => "<b>Agente que cotizo</b>"), array("col" => self::readableText($agenteDao->getNombre()))); } else { $datos = array(array("col" => "<b>Venta</b>"), array("col" => $ventaDao->getIdVenta()), array("col" => "<b></b>"), array("col" => ""), array("col" => "<b>Fecha de venta</b>"), array("col" => $f), array("col" => "<b>Agente de venta</b>"), array("col" => self::readableText($agenteDao->getNombre()))); } $pdf->ezSetY(self::puntos_cm(26.8)); $opciones_tabla['xPos'] = self::puntos_cm(14.2); $opciones_tabla['width'] = self::puntos_cm(4); $opciones_tabla['showLines'] = 0; $opciones_tabla['shaded'] = 2; $opciones_tabla['shadeCol'] = array(1, 1, 1); $opciones_tabla['shadeCol2'] = array(0.8984375, 0.95703125, 0.99609375); $pdf->ezTable($datos, "", "", $opciones_tabla); $ventaProducto = VentaProductoDAO::search(new VentaProducto(array("id_venta" => $id_venta))); $ventaOrden = VentaOrdenDAO::search(new VentaOrden(array("id_venta" => $id_venta))); $prods = array_merge($ventaProducto, $ventaOrden); array_push($prods, $ventaDao); self::printProducts($pdf, $prods); self::printClient($pdf, $clienteDao); self::drawBasicGuide($pdf); $pdf->ezStream(); }
return UsuarioDAO::getByPK($id_receptor)->getNombre(); } function isCancelado($foo, $obj) { if ($obj["cancelado"] == 1) { return "<font title = \"Abono cancelado debido a {$obj['motivo_cancelacion']}\" style = \"color:red; cursor: help;\" >{$foo}</font>"; } return $foo; } $page = new GerenciaComponentPage(); // // Requerir parametros // $page->requireParam("vid", "GET", "Esta venta no existe."); VentasController::ActualizarTotales($_GET["vid"]); $esta_venta = VentaDAO::getByPK($_GET["vid"]); // // Titulo de la pagina // if ($esta_venta->getEsCotizacion()) { $page->addComponent(new TitleComponent("Detalles de la cotizacion " . $esta_venta->getIdVenta(), 2)); } else { $page->addComponent(new TitleComponent("Detalles de la venta " . $esta_venta->getIdVenta(), 2)); } if ($esta_venta->getCancelada()) { $page->addComponent(new TitleComponent("[CANCELADA]", 3)); } // // Menu de opciones // $menu = new MenuComponent();
/** * *Metodo que cancela una venta * * @param id_venta string Id de la venta a cancelar **/ public static function Cancelar($id_venta, $billetes = null, $id_caja = null) { Logger::log("======= Cancenlando venta " . $id_venta . " ==========="); //valida que la venta exista y que este activa $venta = VentaDAO::getByPK($id_venta); if ($venta == null) { Logger::error("La venta con id: " . $id_venta . " no existe"); throw new Exception("La venta con id: " . $id_venta . " no existe"); } if ($venta->getCancelada()) { Logger::warn("La venta ya ha sido cancelada"); return; } //Deja la venta como cancelada y la guarda. $venta->setCancelada(1); //Obtiene al usuario al que se le vendio $usuario = UsuarioDAO::getByPK($venta->getIdCompradorVenta()); if ($usuario == null) { Logger::error("FATAL!!! Esta venta apunta a un usuario que no existe"); throw new Exception("FATAL!!! Esta venta apunta a un usuario que no existe"); } DAO::transBegin(); // regresar de almacenes // obtener los productos que se vendieron // insertalos como neuvo ingreso $detalle = VentaProductoDAO::search(new VentaProducto(array("id_venta" => $id_venta))); for ($detalleIterator = 0; $detalleIterator < sizeof($detalle); $detalleIterator++) { //por cada producto // --- procesos --- // -insertar en productoempresa // -insertar en loteproducto // -insertar en entradalote // -si el tipo de precio de venta es costo, actualizar // -insertar compra producto $p = $detalle[$detalleIterator]; try { /* ProductoEmpresaDAO::save( new ProductoEmpresa( array( "id_empresa" => $id_empresa, "id_producto" => $p->getIdProducto() ) ) ); if(is_null($p->lote)){ throw new InvalidDataException("No selecciono a que lote ira el producto " . $p->id_producto); } if(strlen($p->lote) == 0){ throw new InvalidDataException("No selecciono a que lote ira el producto " . $p->id_producto); } */ //busquemos el id del lote $l = LoteDAO::getByPk(1); //busquemos la unidad que nos mandaron $uResults = UnidadMedidaDAO::search(new UnidadMedida(array("id_unidad_medida" => $p->getIdUnidad(), "activa" => 1))); if (sizeof($uResults) != 1) { throw new InvalidDataException("La unidad de medida `" . $p->id_unidad . "` no existe, o no esta activa."); } //busequemos si este producto ya existe en este lote $lp = LoteProductoDAO::getByPK($l->getIdLote(), $p->getIdProducto()); if (is_null($lp)) { //no existe, insertar $loteProducto = new LoteProducto(array("id_lote" => $l->getIdLote(), "id_producto" => $p->getIdProducto(), "cantidad" => $p->getCantidad(), "id_unidad" => $p->getIdUnidad())); LoteProductoDAO::save($loteProducto); } else { //ya existe, sumar //revisemos si es de la misma unidad if ($lp->getIdUnidad() == $p->getIdUnidad()) { //es igual, solo hay que sumar $lp->setCantidad($lp->getCantidad() + $p->getCantidad()); } else { //no es igual, hay que convertir try { $r = UnidadMedidaDAO::convertir($p->getIdUnidad(), $lp->getIdUnidad(), $p->getCantidad()); } catch (BusinessLogicException $ide) { //no se pudo convertir porque son de //diferentes categorias throw $ide; //mostrar una excpetion mas fresona } $lp->setCantidad($lp->getCantidad() + $r); } //$lp->setCantidad( $lp->getCantidad() + $p->cantidad ); LoteProductoDAO::save($lp); } $s = SesionController::getCurrentUser(); $loteEntrada = new LoteEntrada(array("id_lote" => $l->getIdLote(), "id_usuario" => $s->getIdUsuario(), "fecha_registro" => time(), "motivo" => "Venta (" . $id_venta . ") Cancelada")); LoteEntradaDAO::save($loteEntrada); LoteEntradaProductoDAO::save(new LoteEntradaProducto(array("id_lote_entrada" => $loteEntrada->getIdLoteEntrada(), "id_producto" => $p->getIdProducto(), "id_unidad" => $p->getIdUnidad(), "cantidad" => $p->getCantidad()))); /* $compraProducto = new CompraProducto(array( "id_compra" => $compra->getIdCompra(), "id_producto" => $p->id_producto, "cantidad" => $p->cantidad, "precio" => $p->precio, "descuento" => 0, "impuesto" => 0, "id_unidad" => $p->id_unidad, "retencion" => 0 ) ); CompraProductoDAO::save ( $compraProducto); */ } catch (InvalidDataException $e) { Logger::error($e); DAO::transRollback(); throw $e; } catch (exception $e) { Logger::error($e); DAO::transRollback(); throw new InvalidDatabaseOperationException($e); } } try { VentaDAO::save($venta); //Si la venta fue a credito, se cancelan todos los abonos hechos al mismo y el dinero se queda a cuenta del usuario. if ($venta->getTipoDeVenta() == "credito") { $abono_venta = new AbonoVenta(); $abono_venta->setIdVenta($id_venta); $abonos = AbonoVentaDAO::search($abono_venta); foreach ($abonos as $abono) { if (!$abono->getCancelado()) { CargosYAbonosController::EliminarAbono($abono->getIdAbonoVenta(), "Venta cancelada", 0, 1, 0, null, null); } } $usuario->setSaldoDelEjercicio($usuario->getSaldoDelEjercicio() + $venta->getTotal()); UsuarioDAO::save($usuario); } else { if ($venta->getTipoDeVenta() == "contado" && !is_null($id_caja)) { CajasController::modificarCaja($id_caja, 1, $billetes, $venta->getTotal()); } } } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo cancelar la venta: " . $e); throw new Exception("No se pudo cancelar la venta"); } DAO::transEnd(); Logger::log("Venta cancelada exitosamente"); }
private static function validarParametrosVentaProducto($id_venta = null, $id_producto = null, $precio = null, $cantidad = null, $descuento = null, $impuesto = null, $retencion = null, $id_unidad = null) { //valida que la venta exista en la base de datos if (!is_null($id_venta)) { if (is_null(VentaDAO::getByPK($id_venta))) { return "La venta con id " . $id_venta . " no existe"; } } //valida que el producto exista en la base de datos if (!is_null($id_producto)) { $producto = ProductoDAO::getByPK($id_producto); if (is_null($producto)) { return "El producto con id " . $id_producto . " no existe"; } if (!$producto->getActivo()) { return "El producto " . $id_producto . " no esta activo"; } } //valida que el precio este en el rango if (!is_null($precio)) { $e = self::validarNumero($precio, 1.8E+200, "precio"); if (is_string($e)) { return $e; } } //valida que la cantidad este en el rango if (!is_null($cantidad)) { $e = self::validarNumero($cantidad, PHP_INT_MAX, "cantidad"); if (is_string($e)) { return $e; } } //valida que el descuento este en el rango if (!is_null($descuento)) { $e = self::validarNumero($descuento, 1.8E+200, "descuento"); if (is_string($e)) { return $e; } } //valida que el impuesto este en rango if (!is_null($impuesto)) { $e = self::validarNumero($impuesto, 1.8E+200, "impuesto"); if (is_string($e)) { return $e; } } //valida que la retencion este en rango if (!is_null($retencion)) { $e = self::validarNumero($retencion, 1.8E+200, "retencion"); if (is_string($e)) { return $e; } } //no se encontro error, regresa true return true; }
define("BYPASS_INSTANCE_CHECK", false); require_once "../../../server//bootstrap.php"; $page = new GerenciaComponentPage(); $compra = $venta = $prestamo = null; $page->requireParam("did", "GET", "No se obtuvo al deudor al que se le cargara el abono."); // // Titulo // if (isset($_GET["cid"])) { $compra = true; $page->addComponent(new TitleComponent("Nuevo abono a la compra " . $_GET["cid"], 2)); } else { if (isset($_GET["vid"])) { $venta = true; $page->addComponent(new TitleComponent("Nuevo abono a la venta " . $_GET["vid"], 2)); $page->addComponent(new TitleComponent("Saldo \$" . VentaDAO::getByPK($_GET["vid"])->getSaldo(), 3)); } else { if (isset($_GET["pid"])) { $prestamo = true; $page->addComponent(new TitleComponent("Nuevo abono al prestamo " . $_GET["pid"], 2)); } else { $page->requireParam("cid", "GET", "No se sabe si el abono sera para compra, venta o prestamo."); } } } // // Forma de nuevo producto // if ($compra) { $form = new DAOFormComponent(new AbonoCompra()); } else {
<?php define("BYPASS_INSTANCE_CHECK", false); require_once "../../../server/bootstrap.php"; $movimiento = VentaDAO::getByPK(354)->asArray(); $documento = DocumentoBaseDAO::getByPK(51); // var_dump($movimiento); DocumentosController::Cerrar(51, $movimiento); //buscar movimiento existente //buscar documento a realizar //validar documento //validar que los parametros del documento esten disponibles //insertar en documento tabla //mandar imprimir
/** * *Dar por terminada una orden, cuando el cliente satisface el ultimo pago * * @param id_orden int Id de la orden a terminar **/ public static function TerminarOrden($id_orden, $id_venta = null) { Logger::log("Terminando orden " . $id_orden . " "); if (!is_null($id_venta)) { Logger::log("Asignando orden a id_venta=" . $id_venta); //que la venta exista $v = VentaDAO::getByPK($id_venta); if (is_null($v)) { throw new InvalidDataException("La venta a la que se quiere asignar no existe."); } } //ver que exista la orden de servicio $ods = OrdenDeServicioDAO::getByPK($id_orden); if (is_null($ods)) { throw new InvalidDataException("La orden de servicio que desea terminar no existe"); } if (!$ods->getActiva()) { throw new BusinessLogicException("La orden que quieres terminar ya no esta terminada."); } DAO::transBegin(); try { $ods->setActiva(0); OrdenDeServicioDAO::save($ods); } catch (Exception $e) { throw InvalidDatabaseOperationException($e); } if (!is_null($id_venta)) { $vo = new VentaOrden(); $vo->setIdVenta($id_venta); $vo->setIdOrdenDeServicio($id_orden); $vo->setPrecio($ods->getPrecio()); $vo->setDescuento(0); $vo->setImpuesto(0); $vo->setRetencion(0); //Actualizar totales $ventaVo = VentaDAO::getByPK($id_venta); try { VentaOrdenDAO::save($vo); } catch (Exception $e) { throw InvalidDatabaseOperationException($e); } } else { //crearle una nueva venta $venta = new Venta(); $s = SesionController::Actual(); Logger::error("There is plenty of hard-coded stuff here !"); $venta->setIdCompradorVenta($ods->getIdUsuarioVenta()); $venta->setTipoDeVenta("contado"); $venta->setFecha(time()); $venta->setSubtotal(0); $venta->setEsCotizacion(0); $venta->setImpuesto(0); $venta->setTotal(0); $venta->setIdSucursal($s["id_sucursal"]); $venta->setIdUsuario($s["id_usuario"]); $venta->setSaldo(0); //si hay adelanto se resta al saldo de la venta el adelanto, esta resta se hace al insertar el abono_venta $venta->setCancelada(false); $venta->setRetencion(0); //vamos a ver si este dude tiene suficient credito para esto try { Logger::log("Insertando la venta ...."); VentaDAO::save($venta); } catch (Exception $e) { DAO::transRollback(); Logger::error($e->getMessage()); throw new InvalidDatabaseOperationException("No se pudo crear la nueva orden de servicio"); } $venta_orden = new VentaOrden(); $venta_orden->setIdVenta($venta->getIdVenta()); $venta_orden->setIdOrdenDeServicio($ods->getIdOrdenDeServicio()); $venta_orden->setPrecio(0); $venta_orden->setDescuento(0); $venta_orden->setImpuesto(0); $venta_orden->setRetencion(0); try { Logger::log("Insertando la orden de venta...."); VentaOrdenDAO::save($venta_orden); } catch (Exception $e) { DAO::transRollback(); Logger::error($e->getMessage()); throw new InvalidDatabaseOperationException("No se pudo crear la nueva orden de servicio"); } $id_venta = $venta->getIdVenta(); } DAO::transEnd(); Logger::log("La orden de servicio se ha terminado exitosamente"); return array("id_venta" => $id_venta); }
/** * *Se crea un nuevo abono, la caja o sucursal y el usuario que reciben el abono se tomaran de la sesion. La fecha se tomara del servidor * * @param id_deudor int Id del usuario o la sucursal que realiza el abono, las sucursales seran negativas * @param tipo_pago json JSON con la informacion que describe el tipo de pago, si es con cheque, en efectivo o con tarjeta * @param monto float monto abonado de la sucursal * @param nota string Nota del abono * @param id_venta int Id de la venta a la que se le abona * @param varios bool True si el monto sera repartido en los prestamos,ventas o compras mas antiguas. Esto se define si se pasa el valor id_venta,id_prestamo o id_compra * @param cheques json Se toma el nombre del banco, el monto y los ultimos cuatro numeros del o los cheques usados para este abono * @param id_prestamo int Id del prestamo al que se le esta abonando * @param id_compra int Id de la compra a la que se abona * @return id_abono int El id autogenerado del abono de la sucursal **/ public static function NuevoAbono($id_deudor, $monto, $tipo_pago, $billetes = null, $cheques = null, $id_compra = null, $id_prestamo = null, $id_venta = null, $nota = null) { Logger::log("Insertando nuevo abono ... "); //Se obtiene la sesion del usuario $id_usuario = SesionController::getCurrentUser(); $id_usuario = $id_usuario->getIdUsuario(); if (is_null($id_usuario)) { Logger::error("No se pudo obtener el usuario de la sesion, ya inicio sesion?"); throw new AccessDeniedException("No se pudo obtener el usuario de la sesion, ya inicio sesion?"); } //Se validan los parametros obtenidos $validar = self::validarParametrosAbono($monto, $id_deudor, $nota, $tipo_pago); if (is_string($validar)) { Logger::error($validar); throw new Exception($validar); } //Si el tipo de pago es con cheque y no se reciben cheques, lanzas una excepcion if ($tipo_pago === "cheque" && is_null($cheques)) { Logger::error("Se intenta pagar con cheque mas no se envio info de cheques"); throw new Exception("No se recibio informacion del cheque"); } //Se inicializan las variables de los parametros de las tablas de abonos $usuario = UsuarioDAO::getByPK($id_deudor); $id_sucursal = self::getSucursal(); $id_caja = self::getCaja(); $fecha = time(); $cancelado = 0; $abono = null; //Nuevo regitro del abono $from = 0; //Bandera que indica a que operacion pertenece el abono $operacion = null; //Objeto de la operacion, puede ser un objeto de venta, de ocmpra o de prestamo /* * Se valida de que operacion pertenece el abono y de acuerdo a lo obtenido, se realizan * las operaciones necesarias en cada tabla. * * Primero se valida que la operacion exista, que sea a credito, que no haya sido cancelada, * que no haya sido saldada y que no se abone mas del total de la operacion. * * Despues se inicializa el registro de la tabla correspondiente, se modifica el saldo del deudor * y se activa la bandera from */ if (!is_null($id_compra)) { /************************************************************* * abono a compra ************************************************************* */ Logger::log("Abono pertenece a compra, compraid=" . $id_compra); $operacion = CompraDAO::getByPK($id_compra); if (is_null($operacion)) { Logger::error("La compra con id: " . $id_compra . " no existe"); throw new Exception("La compra con id: " . $id_compra . " no existe"); } if ($operacion->getTipoDeCompra() !== "credito") { Logger::error("La compra especificada no es a credito, no se puede abonar a una compra de contado"); throw new Exception("La compra especificada no es a credito, no se puede abonar a una compra de contado"); } if ($operacion->getCancelada()) { Logger::error("La compra ya ha sido cancelada, no se puede abonar a esta compra"); throw new Exception("La compra ya ha sido cancelada, no se puede abonar a esta compra"); } if ($operacion->getSaldo() > 0) { Logger::error("La compra ya ha sido saldada, no se puede abonar a esta compra"); throw new Exception("La compra ya ha sido saldada, no se puede abonar a esta compra"); } if ($operacion->getSaldo() - $monto < 0) { Logger::error("No se puede abonar esta cantidad a esta compra, pues sobrepasa el total de la misma"); throw new Exception("No se puede abonar esta cantidad a esta compra, pues sobrepasa el total de la misma"); } Logger::log("Insertando abono compra..."); $abono = new AbonoCompra(); $abono->setIdCompra($id_compra); $abono->setIdReceptor($id_deudor); $abono->setIdDeudor($id_usuario); $usuario->setSaldoDelEjercicio($usuario->getSaldoDelEjercicio() - $monto); $from = 1; } else { if (!is_null($id_prestamo)) { /************************************************************* * abono a prestamo ************************************************************* */ $operacion = PrestamoDAO::getByPK($id_prestamo); if (is_null($operacion)) { Logger::error("El prestamo con id: " . $id_prestamo . " no existe"); throw new Exception("El prestamo con id: " . $id_prestamo . " no existe"); } if ($operacion->getMonto() <= $operacion->getSaldo()) { Logger::error("El prestamo ya ha sido saldado, no se puede abonar a este prestamo"); throw new Exception("El prestamo ya ha sido saldad0, no se puede abonar a este prestamo"); } if ($operacion->getMonto() < $operacion->getSaldo() + $monto) { Logger::error("No se puede abonar esta cantidad a este prestamo, pues sobrepasa el total del mismo"); throw new Exception("No se puede abonar esta cantidad a este prestamo, pues sobrepasa el total del mismo"); } $abono = new AbonoPrestamo(); $abono->setIdPrestamo($id_prestamo); $abono->setIdReceptor($id_usuario); $abono->setIdDeudor($id_deudor); $usuario->setSaldoDelEjercicio($usuario->getSaldoDelEjercicio() + $monto); $from = 2; } else { if (!is_null($id_venta)) { /************************************************************* * abono a venta ************************************************************* */ $operacion = VentaDAO::getByPK($id_venta); if (is_null($operacion)) { Logger::error("La venta con id: " . $id_venta . " no existe"); throw new Exception("La venta con id: " . $id_venta . " no existe"); } if ($operacion->getTipoDeVenta() !== "credito") { Logger::error("La ventaa especificada no es a credito, no se puede abonar a una venta de contado"); throw new Exception("La venta especificada no es a credito, no se puede abonar a una venta de contado"); } if ($operacion->getCancelada()) { Logger::error("La venta ya ha sido cancelada, no se puede abonar a esta venta"); throw new Exception("La venta ya ha sido cancelada, no se puede abonar a esta venta"); } if ($operacion->getSaldo() <= 0) { Logger::error("La venta ya ha sido saldada, no se puede abonar a esta venta"); Logger::log("La venta {$id_venta} tiene un total de " . $operacion->getTotal() . " y un saldo pendiente de " . $operacion->getSaldo() . " por lo tanto ya ha sido saldada."); throw new Exception("La venta ya ha sido saldada, no se puede abonar a esta venta"); } if ($operacion->getSaldo() - $monto < 0) { Logger::error("No se puede abonar esta cantidad a esta venta, pues sobrepasa el total de la misma"); throw new Exception("No se puede abonar esta cantidad a esta venta, pues sobrepasa el total de la misma"); } Logger::log("Insertando AbonoVenta..."); $abono = new AbonoVenta(); $abono->setIdVenta($id_venta); $abono->setIdReceptor($id_usuario); $abono->setIdDeudor($id_deudor); //(OLD) $usuario->setSaldoDelEjercicio($usuario->getSaldoDelEjercicio() + $monto); //Figu: se establece el saldo del cliente restandole la venta y a su vez si tiene adelanto se le incrementa su saldo //$usuario->setSaldoDelEjercicio( ( $usuario->getSaldoDelEjercicio() - $operacion->getTotal() ) + $monto ); $usuario->setSaldoDelEjercicio($usuario->getSaldoDelEjercicio() + $monto); $from = 3; } else { Logger::error("No se recibio si el abono sera para una venta, una compra o un prestamo, no se hace nada"); throw new Exception("No se recibio si el abono sera para una venta, una compra o un prestamo, no se hace nada"); } } } //Una vez hecho los cambios particulaes, se realizan los cambios generales $operacion->setSaldo($operacion->getSaldo() - $monto); $abono->setCancelado($cancelado); $abono->setIdCaja($id_caja); $abono->setFecha($fecha); $abono->setIdSucursal($id_sucursal); $abono->setMonto($monto); $abono->setNota($nota); $abono->setTipoDePago($tipo_pago); $id_cheques = array(); $id_abono = null; DAO::transBegin(); try { //Si se reciben cheques y el tipo de pago es cheque, se genera el nuevo cheque y //se va almacenando su id en el arreglo id_cheques if ($tipo_pago === "cheque" && !is_null($cheques)) { foreach ($cheques as $cheque) { array_push($id_cheques, ChequesController::NuevoCheque($cheque["nombre_banco"], $cheque["monto"], $cheque["numero"], $cheque["expedido"])); } } //Dependiendo de que operacion se realizo se van guardando los cheques, los abonos y las operaciones //pues todas cambiaron. //Si se recibieron cheques, no se modifica la caja. //En el caso de las ventas, al final se busca la venta en la tabla venta_empresa y se pone como saldada //si ese ha sido el caso switch ($from) { case 1: AbonoCompraDAO::save($abono); CompraDAO::save($operacion); $id_abono = $abono->getIdAbonoCompra(); $cheque_abono_compra = new ChequeAbonoCompra(); $cheque_abono_compra->setIdAbonoCompra($id_abono); if (!is_null($id_caja) && empty($id_cheques)) { CajasController::modificarCaja($id_caja, 0, $billetes, $monto); } foreach ($id_cheques as $id_cheque) { $cheque_abono_compra->setIdCheque($id_cheque); ChequeAbonoCompraDAO::save($cheque_abono_compra); } break; case 2: AbonoPrestamoDAO::save($abono); PrestamoDAO::save($operacion); $id_abono = $abono->getIdAbonoPrestamo(); $cheque_abono_prestamo = new ChequeAbonoPrestamo(); $cheque_abono_prestamo->setIdAbonoPrestamo($id_abono); if (!is_null($id_caja) && empty($id_cheques)) { CajasController::modificarCaja($id_caja, 1, $billetes, $monto); } foreach ($id_cheques as $id_cheque) { $cheque_abono_prestamo->setIdCheque($id_cheque); ChequeAbonoPrestamoDAO::save($cheque_abono_prestamo); } break; case 3: AbonoVentaDAO::save($abono); VentaDAO::save($operacion); $id_abono = $abono->getIdAbonoVenta(); $cheque_abono_venta = new ChequeAbonoVenta(); $cheque_abono_venta->setIdAbonoVenta($id_abono); if (!is_null($id_caja) && empty($id_cheques)) { CajasController::modificarCaja($id_caja, 1, $billetes, $monto); } foreach ($id_cheques as $id_cheque) { $cheque_abono_venta->setIdCheque($id_cheque); ChequeAbonoVentaDAO::save($cheque_abono_venta); } if ($operacion->getSaldo() >= $operacion->getTotal()) { $ventas_empresa = VentaEmpresaDAO::search(new VentaEmpresa(array("id_venta" => $operacion->getIdVenta()))); foreach ($ventas_empresa as $venta_empresa) { $venta_empresa->setSaldada(1); VentaEmpresaDAO::save($venta_empresa); } } } /* Fin switch de from */ UsuarioDAO::save($usuario); } catch (Exception $e) { DAO::transRollback(); Logger::error("Error al crear el abono: " . $e); throw new Exception("Error al crear el abono"); } DAO::transEnd(); Logger::log("Abono creado exitosamente"); return array("id_abono" => $id_abono); }