@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"; }
@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(); }
@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; } }
@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"; }