Exemple #1
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();
  }
Exemple #2
0
  @RequestMapping("/pendiente/{id}")
  public String pendiente(
      HttpServletRequest request, @PathVariable Long id, RedirectAttributes redirectAttributes) {
    log.debug("Poniendo pendiente a entrada {}", id);
    try {
      String folio = entradaDao.pendiente(id, ambiente.obtieneUsuario());
      redirectAttributes.addFlashAttribute("message", "entrada.pendiente.message");
      redirectAttributes.addFlashAttribute("messageAttrs", new String[] {folio});
    } 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 (NoSePuedeCerrarEnCeroException e) {
      log.error("No se pudo poner en pendiente la entrada", e);
      redirectAttributes.addFlashAttribute("message", "entrada.no.cerrada.en.cero.message");
      redirectAttributes.addFlashAttribute("messageStyle", "alert-error");
    } catch (NoCuadraException e) {
      log.error("No se pudo poner en pendiente la entrada", e);
      redirectAttributes.addFlashAttribute("message", "entrada.no.cuadra.message");
      redirectAttributes.addFlashAttribute("messageStyle", "alert-error");
    } catch (NoSePuedeCerrarException e) {
      log.error("No se pudo poner en pendiente la entrada", e);
      redirectAttributes.addFlashAttribute("message", "entrada.no.pendiente.message");
      redirectAttributes.addFlashAttribute("messageStyle", "alert-error");
    }

    return "redirect:/inventario/entrada/ver/" + id;
  }
Exemple #3
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";
  }
Exemple #4
0
  @RequestMapping("/lote/{id}")
  public String nuevoLote(@PathVariable Long id, Model modelo) {
    log.debug("Nuevo lote para entrada {}", id);
    Entrada entrada = entradaDao.carga(id);
    LoteEntrada lote = new LoteEntrada(entrada);

    modelo.addAttribute("lote", lote);

    return "inventario/entrada/lote";
  }
Exemple #5
0
  @RequestMapping("/lote/elimina/{id}")
  public String eliminaLote(@PathVariable Long id, RedirectAttributes redirectAttributes) {
    log.debug("Eliminando lote {}", id);
    try {
      id = entradaDao.eliminaLote(id);
      redirectAttributes.addFlashAttribute("message", "lote.eliminado.message");
    } 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[] {""});
    }

    return "redirect:/inventario/entrada/ver/" + id;
  }
Exemple #6
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;
   }
 }
Exemple #7
0
  @RequestMapping(value = "/pendiente/cerrar", method = RequestMethod.POST)
  public String cerrarPendiente(
      HttpServletRequest request,
      @ModelAttribute Entrada entrada,
      RedirectAttributes redirectAttributes) {
    log.debug("Cierra entrada {}", entrada.getFolio());
    try {
      entrada = entradaDao.cierraPendiente(entrada, ambiente.obtieneUsuario());
      redirectAttributes.addFlashAttribute("message", "entrada.cerrada.message");
      redirectAttributes.addFlashAttribute("messageAttrs", new String[] {entrada.getFolio()});
    } catch (NoSePuedeCerrarException e) {
      log.error("No se pudo cerrar la entrada", e);
      redirectAttributes.addFlashAttribute("message", "entrada.no.cerrada.message");
      redirectAttributes.addFlashAttribute("messageStyle", "alert-error");
    }

    return "redirect:/inventario/entrada/ver/" + entrada.getId();
  }
Exemple #8
0
  @Transactional
  @RequestMapping(value = "/actualiza", method = RequestMethod.POST)
  public String actualiza(
      HttpServletRequest request,
      @Valid Entrada entrada,
      BindingResult bindingResult,
      Errors errors,
      Model modelo,
      RedirectAttributes redirectAttributes) {
    if (bindingResult.hasErrors()) {
      log.error("Hubo algun error en la forma, regresando");
      return "inventario/entrada/edita";
    }

    try {
      Usuario usuario = ambiente.obtieneUsuario();
      if (request.getParameter("proveedor.id") == null) {
        log.warn("No se puede crear la entrada si no ha seleccionado un proveedor");
        errors.rejectValue("proveedor", "entrada.sin.proveedor.message");
        return "inventario/entrada/nueva";
      }
      Proveedor proveedor = proveedorDao.obtiene(new Long(request.getParameter("proveedor.id")));
      entrada.setProveedor(proveedor);
      entrada = entradaDao.actualiza(entrada, usuario);
    } catch (NoEstaAbiertaException e) {
      log.error("No se pudo actualizar la entrada", e);
      modelo.addAttribute("message", "entrada.intento.modificar.cerrada.message");
      modelo.addAttribute("messageStyle", "alert-error");
      modelo.addAttribute("messageAttrs", new String[] {entrada.getFolio()});
      return "inventario/entrada/nueva";
    } catch (ConstraintViolationException e) {
      log.error("No se pudo crear la entrada", e);
      errors.rejectValue("factura", "campo.duplicado.message", new String[] {"factura"}, null);

      return "inventario/entrada/nueva";
    }

    redirectAttributes.addFlashAttribute("message", "entrada.actualizada.message");
    redirectAttributes.addFlashAttribute("messageAttrs", new String[] {entrada.getFolio()});

    return "redirect:/inventario/entrada/ver/" + entrada.getId();
  }
Exemple #9
0
  @Transactional
  @RequestMapping(value = "/crea", method = RequestMethod.POST)
  public String crea(
      HttpServletRequest request,
      HttpServletResponse response,
      @Valid Entrada entrada,
      BindingResult bindingResult,
      Errors errors,
      Model modelo,
      RedirectAttributes redirectAttributes) {
    for (String nombre : request.getParameterMap().keySet()) {
      log.debug("Param: {} : {}", nombre, request.getParameterMap().get(nombre));
    }
    if (bindingResult.hasErrors()) {
      log.debug("Hubo algun error en la forma, regresando");
      return "inventario/entrada/nueva";
    }

    try {
      Usuario usuario = ambiente.obtieneUsuario();
      if (request.getParameter("proveedor.id") == null) {
        log.warn("No se puede crear la entrada si no ha seleccionado un proveedor");
        errors.rejectValue("proveedor", "entrada.sin.proveedor.message");
        return "inventario/entrada/nueva";
      }
      Proveedor proveedor = proveedorDao.obtiene(new Long(request.getParameter("proveedor.id")));
      entrada.setProveedor(proveedor);
      entrada = entradaDao.crea(entrada, usuario);
    } catch (ConstraintViolationException e) {
      log.error("No se pudo crear la entrada", e);
      errors.rejectValue("factura", "campo.duplicado.message", new String[] {"factura"}, null);

      return "inventario/entrada/nueva";
    }

    redirectAttributes.addFlashAttribute("message", "entrada.creada.message");
    redirectAttributes.addFlashAttribute("messageAttrs", new String[] {entrada.getFolio()});

    return "redirect:/inventario/entrada/ver/" + entrada.getId();
  }
Exemple #10
0
  @Transactional
  @RequestMapping(value = "/elimina", method = RequestMethod.POST)
  public String elimina(
      HttpServletRequest request,
      @RequestParam Long id,
      Model modelo,
      @ModelAttribute Entrada entrada,
      BindingResult bindingResult,
      RedirectAttributes redirectAttributes) {
    log.debug("Elimina entrada");
    try {
      String nombre = entradaDao.elimina(id);

      redirectAttributes.addFlashAttribute("message", "entrada.eliminada.message");
      redirectAttributes.addFlashAttribute("messageAttrs", new String[] {nombre});
    } catch (Exception e) {
      log.error("No se pudo eliminar la entrada " + id, e);
      bindingResult.addError(
          new ObjectError("entrada", new String[] {"entrada.no.eliminada.message"}, null, null));
      return "inventario/entrada/ver";
    }

    return "redirect:/inventario/entrada";
  }
Exemple #11
0
  @RequestMapping
  public String lista(
      HttpServletRequest request,
      HttpServletResponse response,
      @RequestParam(required = false) String filtro,
      @RequestParam(required = false) Long pagina,
      @RequestParam(required = false) String tipo,
      @RequestParam(required = false) String correo,
      @RequestParam(required = false) String order,
      @RequestParam(required = false) String sort,
      Usuario usuario,
      Errors errors,
      Model modelo) {
    log.debug("Mostrando lista de tipos de entradas");
    Map<String, Object> params = new HashMap<>();
    params.put("almacen", request.getSession().getAttribute("almacenId"));
    if (StringUtils.isNotBlank(filtro)) {
      params.put("filtro", filtro);
    }
    if (pagina != null) {
      params.put("pagina", pagina);
      modelo.addAttribute("pagina", pagina);
    } else {
      pagina = 1L;
      modelo.addAttribute("pagina", pagina);
    }
    if (StringUtils.isNotBlank(order)) {
      params.put("order", order);
      params.put("sort", sort);
    }

    if (StringUtils.isNotBlank(tipo)) {
      params.put("reporte", true);
      params = entradaDao.lista(params);
      try {
        generaReporte(tipo, (List<Entrada>) params.get("entradas"), response);
        return null;
      } catch (JRException | IOException e) {
        log.error("No se pudo generar el reporte", e);
        params.remove("reporte");
        errors.reject("error.generar.reporte");
      }
    }

    if (StringUtils.isNotBlank(correo)) {
      params.put("reporte", true);
      params = entradaDao.lista(params);

      params.remove("reporte");
      try {
        enviaCorreo(correo, (List<Entrada>) params.get("entradas"), request);
        modelo.addAttribute("message", "lista.enviada.message");
        modelo.addAttribute(
            "messageAttrs",
            new String[] {
              messageSource.getMessage("entrada.lista.label", null, request.getLocale()),
              ambiente.obtieneUsuario().getUsername()
            });
      } catch (JRException | MessagingException e) {
        log.error("No se pudo enviar el reporte por correo", e);
      }
    }
    params = entradaDao.lista(params);
    modelo.addAttribute("entradas", params.get("entradas"));

    // inicia paginado
    Long cantidad = (Long) params.get("cantidad");
    Integer max = (Integer) params.get("max");
    Long cantidadDePaginas = cantidad / max;
    List<Long> paginas = new ArrayList<>();
    long i = 1;
    do {
      paginas.add(i);
    } while (i++ < cantidadDePaginas);
    List<Entrada> entradas = (List<Entrada>) params.get("entradas");
    Long primero = ((pagina - 1) * max) + 1;
    Long ultimo = primero + (entradas.size() - 1);
    String[] paginacion = new String[] {primero.toString(), ultimo.toString(), cantidad.toString()};
    modelo.addAttribute("paginacion", paginacion);
    modelo.addAttribute("paginas", paginas);
    // termina paginado

    return "inventario/entrada/lista";
  }
Exemple #12
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";
  }