Пример #1
0
  @RequestMapping("/edita/{id}")
  public String edita(HttpServletRequest request, @PathVariable Long id, Model modelo) {
    log.debug("Edita entrada {}", id);
    Entrada entrada = entradaDao.obtiene(id);
    modelo.addAttribute("entrada", entrada);

    return "inventario/entrada/edita";
  }
Пример #2
0
  @RequestMapping(value = "/lote/crea", method = RequestMethod.POST)
  public String creaLote(
      HttpServletRequest request,
      @Valid LoteEntrada lote,
      BindingResult bindingResult,
      Errors errors,
      Model modelo,
      RedirectAttributes redirectAttributes) {
    if (bindingResult.hasErrors()) {
      log.error("Hubo algun error en la forma, regresando");
      return "inventario/entrada/lote/" + request.getParameter("entrada.id");
    }

    try {
      if (request.getParameter("producto.id") == null) {
        log.warn("No se puede crear la entrada si no ha seleccionado un proveedor");
        errors.rejectValue("producto", "lote.sin.producto.message");
        return "inventario/entrada/lote/" + request.getParameter("entrada.id");
      }
      Producto producto = productoDao.obtiene(new Long(request.getParameter("producto.id")));
      Entrada entrada = entradaDao.obtiene(new Long(request.getParameter("entrada.id")));
      lote.setProducto(producto);
      lote.setEntrada(entrada);
      lote.setFechaCreacion(new Date());
      lote = entradaDao.creaLote(lote);
    } catch (NoEstaAbiertaException e) {
      log.error("No se pudo cerrar la entrada", e);
      redirectAttributes.addFlashAttribute("message", "entrada.intento.modificar.cerrada.message");
      redirectAttributes.addFlashAttribute("messageStyle", "alert-error");
      redirectAttributes.addFlashAttribute("messageAttrs", new String[] {""});
    } catch (ProductoNoSoportaFraccionException e) {
      log.error("No se pudo crear la entrada porque no se encontro el producto", e);
      return "inventario/entrada/lote/" + request.getParameter("entrada.id");
    }

    redirectAttributes.addFlashAttribute("message", "lote.creado.message");
    redirectAttributes.addFlashAttribute(
        "messageAttrs",
        new String[] {
          lote.getProducto().getNombre(),
          lote.getCantidad().toString(),
          lote.getPrecioUnitario().toString(),
          lote.getProducto().getUnidadMedida(),
          lote.getIva().add(lote.getPrecioUnitario().multiply(lote.getCantidad())).toString()
        });

    return "redirect:/inventario/entrada/ver/" + lote.getEntrada().getId();
  }
Пример #3
0
 @RequestMapping("/pendiente/edita/{id}")
 public String editaPendiente(
     HttpServletRequest request,
     @PathVariable Long id,
     Model modelo,
     RedirectAttributes redirectAttributes) {
   log.debug("Editando entrada pendiente {}", id);
   Entrada entrada = entradaDao.obtiene(id);
   if (entrada.getEstatus().getNombre().equals(Constantes.PENDIENTE)) {
     modelo.addAttribute("entrada", entrada);
     return "inventario/entrada/pendiente";
   } else {
     redirectAttributes.addFlashAttribute("message", "entrada.no.pendiente.message");
     redirectAttributes.addFlashAttribute("messageStyle", "alert-error");
     return "redirect:/inventario/entrada/ver/" + id;
   }
 }
Пример #4
0
  @RequestMapping("/ver/{id}")
  public String ver(@PathVariable Long id, Model modelo) {
    log.debug("Mostrando entrada {}", id);
    Entrada entrada = entradaDao.obtiene(id);
    switch (entrada.getEstatus().getNombre()) {
      case Constantes.ABIERTA:
        modelo.addAttribute("puedeEditar", true);
        modelo.addAttribute("puedeEliminar", true);
        modelo.addAttribute("puedeCerrar", true);
        modelo.addAttribute("puedePendiente", true);
        break;
      case Constantes.PENDIENTE:
        modelo.addAttribute("puedeEditarPendiente", true);
        break;
    }

    modelo.addAttribute("entrada", entrada);

    BigDecimal subtotal = new BigDecimal("0").setScale(2, RoundingMode.HALF_UP);
    BigDecimal iva = new BigDecimal("0").setScale(2, RoundingMode.HALF_UP);
    for (LoteEntrada lote : entrada.getLotes()) {
      subtotal = subtotal.add(lote.getPrecioUnitario().multiply(lote.getCantidad()));
      iva = iva.add(lote.getIva());
    }
    BigDecimal total = subtotal.add(iva);
    modelo.addAttribute("subtotal", subtotal.setScale(2, RoundingMode.HALF_UP));
    modelo.addAttribute("iva", iva);
    modelo.addAttribute("total", total.setScale(2, RoundingMode.HALF_UP));
    if (iva.compareTo(entrada.getIva()) == 0 && total.compareTo(entrada.getTotal()) == 0) {
      modelo.addAttribute("estiloTotales", "label label-success");
    } else {
      BigDecimal variacion = new BigDecimal("0.05");
      BigDecimal topeIva = entrada.getIva().multiply(variacion);
      BigDecimal topeTotal = entrada.getTotal().multiply(variacion);
      log.debug(
          "Estilos {} {} {} {} {} {}",
          new Object[] {iva, entrada.getIva(), topeIva, total, entrada.getTotal(), topeTotal});
      if (iva.compareTo(entrada.getIva()) < 0 || total.compareTo(entrada.getTotal()) < 0) {
        log.debug("La diferencia es menor");
        if (iva.compareTo(entrada.getIva().subtract(topeIva)) >= 0
            && total.compareTo(entrada.getTotal().subtract(topeTotal)) >= 0) {
          modelo.addAttribute("estiloTotales", "label label-warning");
        } else {
          modelo.addAttribute("estiloTotales", "label label-important");
        }
      } else {
        log.debug(
            "La diferencia es mayor {} {}",
            new Object[] {
              iva.compareTo(entrada.getIva().add(topeIva)),
              total.compareTo(entrada.getTotal().add(topeTotal))
            });
        if (iva.compareTo(entrada.getIva().add(topeIva)) <= 0
            && total.compareTo(entrada.getTotal().add(topeTotal)) <= 0) {
          log.debug("estilo warning");
          modelo.addAttribute("estiloTotales", "label label-warning");
        } else {
          log.debug("estilo error");
          modelo.addAttribute("estiloTotales", "label label-important");
        }
      }
    }

    return "inventario/entrada/ver";
  }