/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package mx.edu.um.mateo.contabilidad.facturas.web; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Enumeration; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import mx.edu.um.mateo.contabilidad.facturas.model.Contrarecibo; import mx.edu.um.mateo.contabilidad.facturas.model.ContrareciboVO; import mx.edu.um.mateo.contabilidad.facturas.model.InformeProveedor; import mx.edu.um.mateo.contabilidad.facturas.model.InformeProveedorDetalle; import mx.edu.um.mateo.contabilidad.facturas.model.ProveedorFacturas; import mx.edu.um.mateo.contabilidad.facturas.service.ContrareciboManager; import mx.edu.um.mateo.contabilidad.facturas.service.InformeProveedorDetalleManager; import mx.edu.um.mateo.contabilidad.facturas.service.InformeProveedorManager; import mx.edu.um.mateo.general.dao.ProveedorDao; import mx.edu.um.mateo.general.model.UploadFileForm; import mx.edu.um.mateo.general.model.Usuario; import mx.edu.um.mateo.general.utils.BancoNoCoincideException; import mx.edu.um.mateo.general.utils.ClabeNoCoincideException; import mx.edu.um.mateo.general.utils.Constantes; import mx.edu.um.mateo.general.utils.CuentaChequeNoCoincideException; import mx.edu.um.mateo.general.utils.FacturaRepetidaFFacturaException; import mx.edu.um.mateo.general.utils.FacturaRepetidaFFiscalException; import mx.edu.um.mateo.general.utils.FormaPagoNoCoincideException; import mx.edu.um.mateo.general.utils.ProveedorNoCoincideException; import mx.edu.um.mateo.general.utils.ReporteException; import mx.edu.um.mateo.general.web.BaseController; import mx.edu.um.mateo.inscripciones.model.FileUploadForm; import mx.edu.um.mateo.rh.model.Empleado; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.eclipse.persistence.annotations.ReadOnly; import org.eclipse.persistence.internal.helper.ClassConstants; import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.util.FileCopyUtils; import org.springframework.validation.BindingResult; import org.springframework.validation.Errors; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; /** * * @author develop */ @Controller @RequestMapping(Constantes.PATH_INFORMEPROVEEDOR_DETALLE) public class InformeProveedorDetalleController extends BaseController { @Autowired private InformeProveedorDetalleManager manager; @Autowired private InformeProveedorManager managerInforme; @Autowired private ProveedorDao proveedorDao; @Autowired private ContrareciboManager contrareciboManager; // @PreAuthorize("hasAnyRole('ROLE_PRV_USER')") @RequestMapping({"", "/lista"}) 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 informes"); Map<String, Object> params = new HashMap<>(); Long empresaId = (Long) request.getSession().getAttribute("empresaId"); // params.put("empresa", empresaId); params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); InformeProveedor informeId = (InformeProveedor) request.getSession().getAttribute("informeId"); params.put("informeProveedor", informeId.getId()); params.put("statusInforme", informeId.getStatus()); if (StringUtils.isNotBlank(filtro)) { params.put(Constantes.CONTAINSKEY_FILTRO, filtro); } if (pagina != null) { params.put(Constantes.CONTAINSKEY_PAGINA, pagina); modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } else { pagina = 1L; modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } if (StringUtils.isNotBlank(order)) { params.put(Constantes.CONTAINSKEY_ORDER, order); params.put(Constantes.CONTAINSKEY_SORT, sort); } if (StringUtils.isNotBlank(tipo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.lista(params); try { generaReporte(tipo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), response, "contrarecibo", Constantes.EMP, empresaId); return null; } catch (ReporteException e) { log.error("No se pudo generar el reporte", e); params.remove(Constantes.CONTAINSKEY_REPORTE); //errors.reject("error.generar.reporte"); } } if (StringUtils.isNotBlank(correo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.lista(params); params.remove(Constantes.CONTAINSKEY_REPORTE); try { enviaCorreo(correo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), request, "contrarecibo", Constantes.EMP, empresaId); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE, "lista.enviada.message"); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{messageSource.getMessage("detalle.lista.label", null, request.getLocale()), ambiente.obtieneUsuario().getUsername()}); } catch (ReporteException e) { log.error("No se pudo enviar el reporte por correo", e); } } params = manager.lista(params); log.debug("params{}", params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); modelo.addAttribute(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); pagina(params, modelo, Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, pagina); if (usuario.isEmpleado()) { return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTAEMP; } return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTA; } /** * Listado de detalles del contrarecibo * * @param request * @param response * @param filtro * @param pagina * @param tipo * @param correo * @param order * @param sort * @param usuario * @param errors * @param modelo * @return */ // @PreAuthorize("hasAnyRole('ROLE_PRV_')") @RequestMapping("/listaContrarecibo") public String listaContrarecibos(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 informes"); Map<String, Object> params = new HashMap<>(); Long empresaId = (Long) request.getSession().getAttribute("empresaId"); // params.put("empresa", empresaId); Contrarecibo contrareciboId = (Contrarecibo) request.getSession().getAttribute("contrareciboId"); params.put("contrarecibo", contrareciboId.getId()); params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); if (StringUtils.isNotBlank(filtro)) { params.put(Constantes.CONTAINSKEY_FILTRO, filtro); } if (pagina != null) { params.put(Constantes.CONTAINSKEY_PAGINA, pagina); modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } else { pagina = 1L; modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } if (StringUtils.isNotBlank(order)) { params.put(Constantes.CONTAINSKEY_ORDER, order); params.put(Constantes.CONTAINSKEY_SORT, sort); } if (StringUtils.isNotBlank(tipo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.contrarecibo(params); try { generaReporte(tipo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), response, "contrarecibo", Constantes.EMP, empresaId); return null; } catch (ReporteException e) { log.error("No se pudo generar el reporte", e); params.remove(Constantes.CONTAINSKEY_REPORTE); //errors.reject("error.generar.reporte"); } } if (StringUtils.isNotBlank(correo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.contrarecibo(params); params.remove(Constantes.CONTAINSKEY_REPORTE); try { enviaCorreo(correo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), request, "contrarecibo", Constantes.EMP, empresaId); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE, "lista.enviada.message"); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{messageSource.getMessage("detalle.lista.label", null, request.getLocale()), ambiente.obtieneUsuario().getUsername()}); } catch (ReporteException e) { log.error("No se pudo enviar el reporte por correo", e); } } params = manager.contrarecibo(params); log.debug("params{}", params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); modelo.addAttribute(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); pagina(params, modelo, Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, pagina); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTACONTRARECIBOS; } /** * Listado de contrarecibos * * @param request * @param response * @param filtro * @param pagina * @param tipo * @param correo * @param order * @param sort * @param usuario * @param errors * @param modelo * @return */ @RequestMapping("/contrarecibos") public String contrarecibos(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 informes"); Map<String, Object> params = new HashMap<>(); Long empresaId = (Long) request.getSession().getAttribute("empresaId"); params.put("empresa", empresaId); params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); if (StringUtils.isNotBlank(filtro)) { params.put(Constantes.CONTAINSKEY_FILTRO, filtro); } if (pagina != null) { params.put(Constantes.CONTAINSKEY_PAGINA, pagina); modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } else { pagina = 1L; modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } if (StringUtils.isNotBlank(order)) { params.put(Constantes.CONTAINSKEY_ORDER, order); params.put(Constantes.CONTAINSKEY_SORT, sort); } if (StringUtils.isNotBlank(tipo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.lista(params); try { generaReporte(tipo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), response, "contrarecibo", Constantes.EMP, empresaId); return null; } catch (ReporteException e) { log.error("No se pudo generar el reporte", e); params.remove(Constantes.CONTAINSKEY_REPORTE); //errors.reject("error.generar.reporte"); } } if (StringUtils.isNotBlank(correo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.lista(params); params.remove(Constantes.CONTAINSKEY_REPORTE); try { enviaCorreo(correo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), request, "contrarecibo", Constantes.EMP, empresaId); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE, "lista.enviada.message"); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{messageSource.getMessage("detalle.lista.label", null, request.getLocale()), ambiente.obtieneUsuario().getUsername()}); } catch (ReporteException e) { log.error("No se pudo enviar el reporte por correo", e); } } params = contrareciboManager.lista(params); //log.debug("params{}", params.get(Constantes.CONTAINSKEY_CONTRARECIBOS)); modelo.addAttribute(Constantes.CONTAINSKEY_CONTRARECIBOS, params.get(Constantes.CONTAINSKEY_CONTRARECIBOS)); pagina(params, modelo, Constantes.CONTAINSKEY_CONTRARECIBOS, pagina); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_CONTRARECIBOS; } /** * Listado de facturadas enviadas por el proveedor hacia la UM organizadas * por encabezado * * @param request * @param response * @param filtro * @param pagina * @param tipo * @param correo * @param order * @param sort * @param usuario * @param errors * @param modelo * @return */ @RequestMapping({"/contrarecibo"}) public String contrarecibo(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("Entrando a contrarecibo..**.."); Map<String, Object> params = new HashMap<>(); Long empresaId = (Long) request.getSession().getAttribute("empresaId"); // params.put("empresa", empresaId); params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); InformeProveedor informeId = (InformeProveedor) request.getSession().getAttribute("informeId"); params.put("informeProveedor", informeId.getId()); if (StringUtils.isNotBlank(filtro)) { params.put(Constantes.CONTAINSKEY_FILTRO, filtro); } if (pagina != null) { params.put(Constantes.CONTAINSKEY_PAGINA, pagina); modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } else { pagina = 1L; modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } if (StringUtils.isNotBlank(order)) { params.put(Constantes.CONTAINSKEY_ORDER, order); params.put(Constantes.CONTAINSKEY_SORT, sort); } if (StringUtils.isNotBlank(tipo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.lista(params); try { generaReporte(tipo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), response, "contrarecibo", Constantes.EMP, empresaId); return null; } catch (ReporteException e) { log.error("No se pudo generar el reporte", e); params.remove(Constantes.CONTAINSKEY_REPORTE); //errors.reject("error.generar.reporte"); } } if (StringUtils.isNotBlank(correo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.lista(params); params.remove(Constantes.CONTAINSKEY_REPORTE); try { enviaCorreo(correo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), request, "contrarecibo", Constantes.EMP, empresaId); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE, "lista.enviada.message"); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{messageSource.getMessage("detalle.lista.label", null, request.getLocale()), ambiente.obtieneUsuario().getUsername()}); } catch (ReporteException e) { log.error("No se pudo enviar el reporte por correo", e); } } params = manager.lista(params); log.debug("params{}", params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); modelo.addAttribute(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); pagina(params, modelo, Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, pagina); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_CONTRARECIBO; } @PreAuthorize("hasRole('ROLE_PRV_VALIDA')") @RequestMapping("/revisar") public String revisar(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("Entrando a revisar..**.."); Map<String, Object> params = new HashMap<>(); Long empresaId = (Long) request.getSession().getAttribute("empresaId"); params.put("empresa", empresaId); params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); // InformeProveedor informeId = (InformeProveedor) request.getSession().getAttribute("informeId"); // params.put("informeProveedor", informeId.getId()); if (StringUtils.isNotBlank(filtro)) { params.put(Constantes.CONTAINSKEY_FILTRO, filtro); } if (pagina != null) { params.put(Constantes.CONTAINSKEY_PAGINA, pagina); modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } else { pagina = 1L; modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } if (StringUtils.isNotBlank(order)) { params.put(Constantes.CONTAINSKEY_ORDER, order); params.put(Constantes.CONTAINSKEY_SORT, sort); } if (StringUtils.isNotBlank(tipo)) { params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); params = manager.revisar(params); try { generaReporte(tipo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), response, "contrarecibo", Constantes.EMP, empresaId); return null; } catch (ReporteException e) { log.error("No se pudo generar el reporte", e); params.remove(Constantes.CONTAINSKEY_REPORTE); //errors.reject("error.generar.reporte"); } } if (StringUtils.isNotBlank(correo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.revisar(params); params.remove(Constantes.CONTAINSKEY_REPORTE); try { enviaCorreo(correo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), request, "contrarecibo", Constantes.EMP, empresaId); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE, "lista.enviada.message"); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{messageSource.getMessage("detalle.lista.label", null, request.getLocale()), ambiente.obtieneUsuario().getUsername()}); } catch (ReporteException e) { log.error("No se pudo enviar el reporte por correo", e); } } params = manager.revisar(params); log.debug("params{}", params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); modelo.addAttribute(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); pagina(params, modelo, Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, pagina); return "/factura/informeProveedorDetalle/detalles"; } @PreAuthorize("hasRole('ROLE_PRV_COMPRAS')") @RequestMapping("/revisarFacturasCompras") public String revisarFacturasCompras(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("Entrando a revisar..**.."); Map<String, Object> params = new HashMap<>(); Long empresaId = (Long) request.getSession().getAttribute("empresaId"); params.put("empresa", empresaId); params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); // InformeProveedor informeId = (InformeProveedor) request.getSession().getAttribute("informeId"); // params.put("informeProveedor", informeId.getId()); if (StringUtils.isNotBlank(filtro)) { params.put(Constantes.CONTAINSKEY_FILTRO, filtro); } if (pagina != null) { params.put(Constantes.CONTAINSKEY_PAGINA, pagina); modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } else { pagina = 1L; modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } if (StringUtils.isNotBlank(order)) { params.put(Constantes.CONTAINSKEY_ORDER, order); params.put(Constantes.CONTAINSKEY_SORT, sort); } if (StringUtils.isNotBlank(tipo)) { params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); params = manager.revisar(params); try { generaReporte(tipo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), response, "contrarecibo", Constantes.EMP, empresaId); return null; } catch (ReporteException e) { log.error("No se pudo generar el reporte", e); params.remove(Constantes.CONTAINSKEY_REPORTE); //errors.reject("error.generar.reporte"); } } if (StringUtils.isNotBlank(correo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.revisar(params); params.remove(Constantes.CONTAINSKEY_REPORTE); try { enviaCorreo(correo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), request, "contrarecibo", Constantes.EMP, empresaId); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE, "lista.enviada.message"); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{messageSource.getMessage("detalle.lista.label", null, request.getLocale()), ambiente.obtieneUsuario().getUsername()}); } catch (ReporteException e) { log.error("No se pudo enviar el reporte por correo", e); } } params = manager.revisar(params); log.debug("params{}", params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); modelo.addAttribute(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); pagina(params, modelo, Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, pagina); return "/factura/informeProveedorDetalle/revisarFacturasCompras"; } @PreAuthorize("hasRole('ROLE_PRV_GENERA')") @RequestMapping("/listaRevisados") public String revisados(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("Entrando a revisar..**.."); Map<String, Object> params = new HashMap<>(); Long empresaId = (Long) request.getSession().getAttribute("empresaId"); params.put("empresa", empresaId); params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); // InformeProveedor informeId = (InformeProveedor) request.getSession().getAttribute("informeId"); // params.put("informeProveedor", informeId.getId()); if (StringUtils.isNotBlank(filtro)) { params.put(Constantes.CONTAINSKEY_FILTRO, filtro); } if (pagina != null) { params.put(Constantes.CONTAINSKEY_PAGINA, pagina); modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } else { pagina = 1L; modelo.addAttribute(Constantes.CONTAINSKEY_PAGINA, pagina); } if (StringUtils.isNotBlank(order)) { params.put(Constantes.CONTAINSKEY_ORDER, order); params.put(Constantes.CONTAINSKEY_SORT, sort); } if (StringUtils.isNotBlank(tipo)) { params.put(Constantes.CONTAINSKEY_REPORTE, Constantes.CONTAINSKEY_REPORTE); params = manager.listaRevisados(params); try { generaReporte(tipo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), response, "contrarecibo", Constantes.EMP, empresaId); return null; } catch (ReporteException e) { log.error("No se pudo generar el reporte", e); params.remove(Constantes.CONTAINSKEY_REPORTE); //errors.reject("error.generar.reporte"); } } if (StringUtils.isNotBlank(correo)) { params.put(Constantes.CONTAINSKEY_REPORTE, true); params = manager.listaRevisados(params); params.remove(Constantes.CONTAINSKEY_REPORTE); try { enviaCorreo(correo, (List<InformeProveedorDetalle>) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE), request, "contrarecibo", Constantes.EMP, empresaId); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE, "lista.enviada.message"); modelo.addAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{messageSource.getMessage("detalle.lista.label", null, request.getLocale()), ambiente.obtieneUsuario().getUsername()}); } catch (ReporteException e) { log.error("No se pudo enviar el reporte por correo", e); } } params = manager.listaRevisados(params); log.debug("params{}", params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); modelo.addAttribute(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE)); pagina(params, modelo, Constantes.CONTAINSKEY_INFORMESPROVEEDOR_DETALLE, pagina); return "/factura/informeProveedorDetalle/revisados"; } @RequestMapping("/ver/{id}") public String ver(HttpServletRequest request, @PathVariable Long id, Model modelo) { log.debug("Mostrando paquete {}", id); InformeProveedorDetalle detalle = manager.obtiene(id); request.getSession().setAttribute("detalleUpdateFileId", id); modelo.addAttribute(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, detalle); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_VER; } @RequestMapping("/verContrarecibo/{id}") public String verContrarecibo(HttpServletRequest request, @PathVariable Long id, Model modelo) { log.debug("Mostrando paquete {}", id); Contrarecibo contrarecibo = contrareciboManager.obtiene(id); modelo.addAttribute(Constantes.ADDATTRIBUTE_CONTRARECIBO, contrarecibo); request.getSession().setAttribute("contrareciboId", contrarecibo); return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTACONTRARECIBOS; } @RequestMapping("/nuevo") public String nuevo(HttpServletRequest request, Model modelo) { log.debug("Nuevo paquete"); Usuario usuario = ambiente.obtieneUsuario(); if (usuario.isProveedor()) { ProveedorFacturas proveedorFacturas = (ProveedorFacturas) usuario; modelo.addAttribute("proveedorFacturas", proveedorFacturas); request.getSession().setAttribute("proveedorLogeado", proveedorFacturas); } Map<String, Object> params = new HashMap<>(); InformeProveedorDetalle detalle = new InformeProveedorDetalle(); modelo.addAttribute(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, detalle); params.put("empresa", request.getSession() .getAttribute("empresaId")); params.put("reporte", true); modelo.addAttribute(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, detalle); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVO; } @RequestMapping("/nueva") public String nueva(HttpServletRequest request, Model modelo) { log.debug("Nuevo paquete"); Usuario usuario = ambiente.obtieneUsuario(); if (usuario.isProveedor()) { ProveedorFacturas proveedorFacturas = (ProveedorFacturas) usuario; modelo.addAttribute("proveedorFacturas", proveedorFacturas); request.getSession().setAttribute("proveedorLogeado", proveedorFacturas); } Map<String, Object> params = new HashMap<>(); InformeProveedorDetalle detalle = new InformeProveedorDetalle(); modelo.addAttribute(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, detalle); params.put("empresa", request.getSession() .getAttribute("empresaId")); params.put("reporte", true); modelo.addAttribute(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, detalle); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVA; } @Transactional @RequestMapping(value = "/graba", method = RequestMethod.POST) public String graba(HttpServletRequest request, HttpServletResponse response, @Valid InformeProveedorDetalle detalle, BindingResult bindingResult, Errors errors, Model modelo, RedirectAttributes redirectAttributes, @ModelAttribute("uploadFileForm") FileUploadForm uploadForm) throws Exception { 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"); Map<String, Object> params = new HashMap<>(); params.put("empresa", request.getSession() .getAttribute("empresaId")); this.despliegaBindingResultErrors(bindingResult); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVO; } Map<String, Object> params = new HashMap<>(); //Subir archivos try { List<MultipartFile> files = new ArrayList<>(); files.add(detalle.getFile()); files.add(detalle.getFile2()); List<String> fileNames = new ArrayList<String>(); Calendar calendar = GregorianCalendar.getInstance(); int año = calendar.get(Calendar.YEAR); int mes = calendar.get(Calendar.MONTH); int dia = calendar.get(Calendar.DATE); log.debug("sizefiles{}", files.size()); if (null != files && files.size() > 0) { for (MultipartFile multipartFile : files) { String fileName = multipartFile.getOriginalFilename(); log.debug("filename{}", fileName); fileNames.add(fileName); String uploadDir = "/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + multipartFile.getOriginalFilename(); File dirPath = new File(uploadDir); if (!dirPath.exists()) { dirPath.mkdirs(); } multipartFile.transferTo(new File("/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + multipartFile.getOriginalFilename())); if (multipartFile.getOriginalFilename().contains(".pdf")) { detalle.setPathPDF("/home/facturas/" + año + "/" + mes + "/" + dia + "/" + "/" + request.getRemoteUser() + "/" + multipartFile.getOriginalFilename()); detalle.setNombrePDF(multipartFile.getOriginalFilename()); } if (multipartFile.getOriginalFilename().contains(".xml")) { detalle.setPathXMl("/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + multipartFile.getOriginalFilename()); detalle.setNombreXMl(multipartFile.getOriginalFilename()); } } } ////Subir archivos\\\ } catch (NullPointerException e) { log.warn("no se subieron archivos"); e.printStackTrace(); } InformeProveedor informe = (InformeProveedor) request.getSession().getAttribute("informeId"); detalle.setInformeProveedor(informe); Usuario usuario = ambiente.obtieneUsuario(); detalle.setFechaCaptura(new Date()); detalle.setUsuarioAlta(usuario); detalle.setStatus(Constantes.STATUS_ACTIVO); if (usuario.isEmpleado()) { Empleado empleado = (Empleado) usuario; detalle.setNombreProveedor(empleado.getNombre()); detalle.setEmpleado(empleado); } if (usuario.isProveedor()) { ProveedorFacturas proveedorFacturas = (ProveedorFacturas) usuario; detalle.setProveedorFacturas(proveedorFacturas); detalle.setNombreProveedor(proveedorFacturas.getNombre()); detalle.setRFCProveedor(proveedorFacturas.getRfc()); } try { manager.graba(detalle, usuario); request.getSession().setAttribute("detalleId", detalle.getId()); } catch (ConstraintViolationException e) { log.error("No se pudo crear el detalle", e); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVO; } redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "detalle.graba.message"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{detalle.getNombreProveedor()}); return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTA; } @Transactional @RequestMapping(value = "/crea", method = RequestMethod.POST) public String crea(HttpServletRequest request, HttpServletResponse response, @Valid InformeProveedorDetalle detalle, BindingResult bindingResult, Errors errors, Model modelo, RedirectAttributes redirectAttributes) throws Exception { 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"); Map<String, Object> params = new HashMap<>(); params.put("empresa", request.getSession() .getAttribute("empresaId")); this.despliegaBindingResultErrors(bindingResult); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVA; } NumberFormat nf_mx = NumberFormat.getNumberInstance(Locale.getDefault()); log.info("localedefault{}***", Locale.getDefault()); Map<String, Object> params = new HashMap<>(); try { BigDecimal dcto = detalle.getDctoProntoPago(); BigDecimal dctoPago = new BigDecimal(nf_mx.parse(dcto.toString()).doubleValue()); detalle.setDctoProntoPago(dctoPago); } catch (ParseException e) { log.info("No se pudo convertir el formato"); } try { BigDecimal iva = detalle.getIVA(); BigDecimal IVA = new BigDecimal(nf_mx.parse(iva.toString()).doubleValue()); detalle.setIVA(IVA); } catch (ParseException e) { log.info("No se pudo convertir el formato"); } try { BigDecimal sub = detalle.getSubtotal(); BigDecimal subTotal = new BigDecimal(nf_mx.parse(sub.toString()).doubleValue()); detalle.setSubtotal(subTotal); } catch (ParseException e) { log.info("No se pudo convertir el formato"); } try { BigDecimal total = detalle.getTotal(); BigDecimal Total = new BigDecimal(nf_mx.parse(total.toString()).doubleValue()); detalle.setTotal(Total); } catch (ParseException e) { log.info("No se pudo convertir el formato"); } InformeProveedor informe = (InformeProveedor) request.getSession().getAttribute("informeId"); detalle.setInformeProveedor(informe); Usuario usuario = ambiente.obtieneUsuario(); detalle.setFechaCaptura(new Date()); detalle.setUsuarioAlta(usuario); detalle.setStatus(Constantes.STATUS_ACTIVO); log.info("empresa{}", informe.getEmpresa().getNombre()); detalle.setEmpresa(informe.getEmpresa()); if (usuario.isEmpleado()) { Empleado empleado = (Empleado) usuario; detalle.setNombreProveedor(empleado.getNombre()); detalle.setEmpleado(empleado); } if (usuario.isProveedor()) { ProveedorFacturas proveedorFacturas = (ProveedorFacturas) usuario; detalle.setProveedorFacturas(proveedorFacturas); detalle.setNombreProveedor(proveedorFacturas.getNombre()); detalle.setRFCProveedor(proveedorFacturas.getRfc()); } try { manager.graba(detalle, usuario); request.getSession().setAttribute("detalleId", detalle.getId()); } catch (ConstraintViolationException e) { log.error("No se pudo crear el detalle", e); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVA; } catch (FacturaRepetidaFFacturaException e) { errors.rejectValue("folioFactura", "facturaRepetidaException.folioFactura", new String[]{e.getMessage()}, null); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVA; } Boolean xml = true; request.getSession().setAttribute("esXml", xml); return "redirect:" + "/factura/informeProveedorDetalle/upload"; } @Transactional @RequestMapping(value = {"/upload"}, method = RequestMethod.GET) public String fileToUpload(ModelMap model) throws Exception { UploadFileForm form = new UploadFileForm(); model.addAttribute("uploadFileForm", form); return "/factura/informeProveedorDetalle/uploadFile"; } @Transactional @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) public String uploadFile(HttpServletRequest request, @ModelAttribute("uploadFileForm") UploadFileForm uploadFileForm, BindingResult bindingResult, Errors errors, RedirectAttributes redirectAttributes) throws Exception { log.info("entrando a uploadFile"); despliegaBindingResultErrors(bindingResult); Long id = (Long) request.getSession().getAttribute("detalleId"); InformeProveedorDetalle detalle = manager.obtiene(id); log.debug("detalle {}", detalle.getId()); Boolean sw = false; Boolean xml = false; Usuario usuario = ambiente.obtieneUsuario(); Calendar calendar = GregorianCalendar.getInstance(); int año = calendar.get(Calendar.YEAR); int mes = calendar.get(Calendar.MONTH); int dia = calendar.get(Calendar.DATE); String fileName = uploadFileForm.getFile().getOriginalFilename(); //Subir archivo log.debug("file {}", uploadFileForm.getFile().getOriginalFilename()); log.info("nombre archvo{}", fileName); String uploadDir = "/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + uploadFileForm.getFile().getOriginalFilename(); log.debug("upload dir {} ", uploadDir); File dirPath = new File(uploadDir); if (!dirPath.exists()) { dirPath.mkdirs(); } String ext = fileName.substring(fileName.lastIndexOf(".")); log.info("extensión{}" + ext); sw = true; Boolean esXml = (Boolean) request.getSession().getAttribute("esXml"); log.debug("Archivo {} subido... ", uploadFileForm.getFile().getOriginalFilename()); if (fileName.toLowerCase().contains(".xml")) { detalle.setPathXMl("/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + uploadFileForm.getFile().getOriginalFilename()); detalle.setNombreXMl(uploadFileForm.getFile().getOriginalFilename()); detalle.setXmlFile(uploadFileForm.getFile().getBytes()); manager.actualiza(detalle, usuario); xml = true; request.getSession().setAttribute("esPdf", xml); request.getSession().setAttribute("esXml", false); return "redirect:" + "/factura/informeProveedorDetalle/upload"; } if (fileName.toLowerCase().contains(".pdf")) { detalle.setPathPDF("/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + uploadFileForm.getFile().getOriginalFilename()); detalle.setNombrePDF(uploadFileForm.getFile().getOriginalFilename()); detalle.setPdfFile(uploadFileForm.getFile().getBytes()); manager.actualiza(detalle, usuario); request.getSession().setAttribute("esPdf", false); } // else { // // errors.reject("archivo.invalido.facturas" + fileName); // if (esXml) { // redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "archivoXML.invalido.facturas"); // } else { // redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "archivoPDF.invalido.facturas"); // } // redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{fileName, ext}); // return "redirect:" + "/factura/informeProveedorDetalle/upload"; // } uploadFileForm.getFile().transferTo(new File(uploadDir)); return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTA; } @Transactional @RequestMapping(value = {"/updateXMLFile"}, method = RequestMethod.GET) public String updateXMLFile(HttpServletRequest request, ModelMap model) throws Exception { UploadFileForm form = new UploadFileForm(); model.addAttribute("uploadFileForm", form); request.getSession().setAttribute("esPdf", false); request.getSession().setAttribute("esXml", true); return "/factura/informeProveedorDetalle/updateUploadedFile"; } @Transactional @RequestMapping(value = {"/updatePDFFile"}, method = RequestMethod.GET) public String updatePDFFile(HttpServletRequest request, ModelMap model) throws Exception { UploadFileForm form = new UploadFileForm(); model.addAttribute("uploadFileForm", form); request.getSession().setAttribute("esPdf", true); request.getSession().setAttribute("esXml", false); return "/factura/informeProveedorDetalle/updateUploadedFile"; } @Transactional @RequestMapping(value = "/updateUploadedFile", method = RequestMethod.POST) public String updateUploadedFile(HttpServletRequest request, @ModelAttribute("uploadFileForm") UploadFileForm uploadFileForm, BindingResult bindingResult, Errors errors, RedirectAttributes redirectAttributes) throws Exception { log.info("entrando a uploadFile"); despliegaBindingResultErrors(bindingResult); Long id = (Long) request.getSession().getAttribute("detalleUpdateFileId"); InformeProveedorDetalle detalle = manager.obtiene(id); log.debug("detalle {}", detalle.getId()); Usuario usuario = ambiente.obtieneUsuario(); Calendar calendar = GregorianCalendar.getInstance(); int año = calendar.get(Calendar.YEAR); int mes = calendar.get(Calendar.MONTH); int dia = calendar.get(Calendar.DATE); String fileName = uploadFileForm.getFile().getOriginalFilename(); log.info("nombre archvo{}", fileName); String uploadDir = "/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + uploadFileForm.getFile().getOriginalFilename(); log.debug("upload dir {} ", uploadDir); File dirPath = new File(uploadDir); if (!dirPath.exists()) { dirPath.mkdirs(); } if (fileName.toLowerCase().contains(".xml")) { detalle.setPathXMl("/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + uploadFileForm.getFile().getOriginalFilename()); detalle.setNombreXMl(uploadFileForm.getFile().getOriginalFilename()); detalle.setXmlFile(uploadFileForm.getFile().getBytes()); manager.actualiza(detalle, usuario); request.getSession().setAttribute("esPdf", false); request.getSession().setAttribute("esXml", false); } if (fileName.toLowerCase().contains(".pdf")) { detalle.setPathPDF("/home/facturas/" + año + "/" + mes + "/" + dia + "/" + request.getRemoteUser() + "/" + uploadFileForm.getFile().getOriginalFilename()); detalle.setNombrePDF(uploadFileForm.getFile().getOriginalFilename()); detalle.setPdfFile(uploadFileForm.getFile().getBytes()); manager.actualiza(detalle, usuario); request.getSession().setAttribute("esPdf", false); request.getSession().setAttribute("esXml", false); } uploadFileForm.getFile().transferTo(new File(uploadDir)); return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTA; } @Transactional @RequestMapping(value = "/actualiza", method = RequestMethod.POST) public String actualiza(HttpServletRequest request, HttpServletResponse response, @Valid InformeProveedorDetalle detalle, BindingResult bindingResult, Errors errors, Model modelo, RedirectAttributes redirectAttributes, @ModelAttribute("uploadForm") FileUploadForm uploadForm) throws Exception { for (String nombre : request.getParameterMap().keySet()) { log.debug("Param: {} : {}", nombre, request.getParameterMap().get(nombre)); } utils.despliegaBindingResultErrors(bindingResult); if (bindingResult.hasErrors()) { log.debug("Hubo algun error en la forma, regresando"); Map<String, Object> params = new HashMap<>(); params.put("empresa", request.getSession() .getAttribute("empresaId")); this.despliegaBindingResultErrors(bindingResult); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVO; } Usuario usuario = ambiente.obtieneUsuario(); detalle.setFechaModificacion(new Date()); detalle.setUsuarioMOdificacion(usuario); try { InformeProveedor informe = (InformeProveedor) request.getSession().getAttribute("informeId"); detalle.setInformeProveedor(informe); InformeProveedorDetalle detalleTmp = manager.obtiene(detalle.getId()); detalle.setNombrePDF(detalleTmp.getNombrePDF()); detalle.setNombreXMl(detalleTmp.getNombreXMl()); detalle.setPathPDF(detalleTmp.getPathPDF()); detalle.setPathXMl(detalleTmp.getPathXMl()); log.debug("Paquete {}", detalle); manager.actualiza(detalle, usuario); } catch (ConstraintViolationException e) { log.error("No se pudo crear el detalle", e); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVO; } redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "detalle.graba.message"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{detalle.getNombreProveedor()}); return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTA; } @RequestMapping("/edita/{id}") public String edita(@PathVariable Long id, Model modelo) { log.debug("Editar cuenta de detalles{}", id); Map<String, Object> params = new HashMap<>(); params = managerInforme.lista(params); List<InformeProveedor> informes = (List) params.get(Constantes.CONTAINSKEY_INFORMESPROVEEDOR); modelo.addAttribute(Constantes.CONTAINSKEY_INFORMESPROVEEDOR, informes); InformeProveedorDetalle detalle = manager.obtiene(id); modelo.addAttribute(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, detalle); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_EDITA; } @Transactional @RequestMapping(value = "/elimina", method = RequestMethod.POST) public String elimina(HttpServletRequest request, @RequestParam Long id, Model modelo, @ModelAttribute InformeProveedorDetalle detalle, BindingResult bindingResult, RedirectAttributes redirectAttributes) { log.debug("Elimina cuenta de detalles"); try { String nombre = manager.elimina(id); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "detalle.elimina.message"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{nombre}); } catch (Exception e) { log.error("No se pudo eliminar el tipo de paquete " + id, e); bindingResult.addError(new ObjectError(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, new String[]{"detalle.no.elimina.message"}, null, null)); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_VER; } return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_LISTA; } @Transactional @RequestMapping(value = "/eliminaValida", method = RequestMethod.POST) public String eliminaValida(HttpServletRequest request, @RequestParam Long id, Model modelo, @ModelAttribute InformeProveedorDetalle detalle, BindingResult bindingResult, RedirectAttributes redirectAttributes) { log.debug("Elimina cuenta de detalles"); try { manager.elimina(id); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "detalle.elimina.message"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{detalle.getNombreProveedor()}); } catch (Exception e) { log.error("No se pudo eliminar el tipo de paquete " + id, e); bindingResult.addError(new ObjectError(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, new String[]{"detalle.no.elimina.message"}, null, null)); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_VER; } return "redirect:/factura/informeProveedorDetalle/revisar"; } @RequestMapping(value = "/descargarPdf/{id}", method = RequestMethod.GET) public ModelAndView handleRequestPDF(@PathVariable Long id, Model modelo, HttpServletRequest request, HttpServletResponse response) throws Exception { InformeProveedorDetalle detalle = manager.obtiene(id); try { String nombreFichero = detalle.getNombrePDF(); String unPath = detalle.getPathPDF(); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=\"" + nombreFichero + "\""); InputStream is = new FileInputStream(unPath); IOUtils.copy(is, response.getOutputStream()); response.flushBuffer(); } catch (IOException ex) { throw ex; } return null; } @RequestMapping(value = "/descargarXML/{id}", method = RequestMethod.GET) public ModelAndView handleRequestXML(@PathVariable Long id, Model modelo, HttpServletRequest request, HttpServletResponse response) throws Exception { InformeProveedorDetalle detalle = manager.obtiene(id); try { String nombreFichero = detalle.getNombreXMl(); String unPath = detalle.getPathXMl(); response.setContentType("application/xml"); response.setHeader("Content-Disposition", "attachment; filename=\"" + nombreFichero + "\""); InputStream is = new FileInputStream(unPath); IOUtils.copy(is, response.getOutputStream()); response.flushBuffer(); } catch (IOException ex) { throw ex; } return null; } @RequestMapping("/downloadPdfFile/{id}") public String downloadPdfBD(@PathVariable("id") Long id, HttpServletResponse response) { InformeProveedorDetalle doc = manager.obtiene(id); try { OutputStream out = response.getOutputStream(); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=\"" + doc.getNombrePDF() + "\""); FileCopyUtils.copy(doc.getPdfFile(), out); } catch (IOException e) { e.printStackTrace(); } return null; } @RequestMapping("/downloadXmlFile/{id}") public String downloadXmlBD(@PathVariable("id") Long id, HttpServletResponse response) { InformeProveedorDetalle doc = manager.obtiene(id); try { OutputStream out = response.getOutputStream(); response.setContentType("application/xml"); response.setHeader("Content-Disposition", "attachment; filename=\"" + doc.getNombreXMl() + "\""); FileCopyUtils.copy(doc.getXmlFile(), out); } catch (IOException e) { e.printStackTrace(); } return null; } @Transactional @RequestMapping(value = "/autorizar", method = RequestMethod.GET) public String autorizar(HttpServletRequest request, Model modelo, RedirectAttributes redirectAttributes) throws Exception { log.debug("Entrando a Autorizar informe"); String checks = request.getParameter("checkFacturasid"); log.debug("map {}", request.getParameterMap().toString()); log.debug("names {}", request.getParameterNames().toString()); Map<String, String[]> parameterMap = request.getParameterMap(); parameterMap.get("key"); Boolean autorizar = false; Boolean rechazar = false; ArrayList ids = new ArrayList(); Enumeration<String> parameterNames = request.getParameterNames(); while (parameterNames.hasMoreElements()) { String nombre = parameterNames.nextElement(); if (nombre.startsWith("botonAut")) { autorizar = true; } if (nombre.startsWith("botonRe")) { rechazar = true; } if (nombre.startsWith("checkFac")) { String[] id = nombre.split("-"); log.debug("id ={}", id[1]); ids.add(id[1]); } } Usuario usuario = ambiente.obtieneUsuario(); if (autorizar) { log.debug("enviando al metodo para autorizar"); try { List<InformeProveedorDetalle> detalles = manager.autorizar(ids, usuario); } catch (ClabeNoCoincideException e) { log.debug("la clabe de la factura con id= {} no coincide", e); if (e != null) { redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "clabe.no.coincide"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{e.getMessage()}); } return "redirect:/factura/informeProveedorDetalle/revisar"; } catch (ProveedorNoCoincideException e) { log.debug("el proveedor de la factura con id= {} no coincide", e); if (e != null) { redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "proveedor.no.coincide"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{e.getMessage()}); } return "redirect:/factura/informeProveedorDetalle/revisar"; } catch (BancoNoCoincideException e) { log.debug("el banco de la factura con id= {} no coincide", e); if (e != null) { redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "banco.no.coincide"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{e.getMessage()}); } return "redirect:/factura/informeProveedorDetalle/revisar"; } catch (CuentaChequeNoCoincideException e) { log.debug("la cuenta de la factura con id= {} no coincide", e); if (e != null) { redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "cuenta.no.coincide"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{e.getMessage()}); } return "redirect:/factura/informeProveedorDetalle/revisar"; } catch (FormaPagoNoCoincideException e) { log.debug("la forma de pago de la factura con id= {} no coincide", e); if (e != null) { redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "cuenta.no.coincide"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{e.getMessage()}); } return "redirect:/factura/informeProveedorDetalle/revisar"; } } if (rechazar) { log.debug("enviando al metodo para rechazar"); try { manager.rechazar(ids, usuario); } catch (ProveedorNoCoincideException e) { log.debug("el banco de la factura con id= {} no coincide", e); if (e != null) { redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "banco.no.coincide"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{e.getMessage()}); } return "redirect:/factura/informeProveedorDetalle/revisar"; } } redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "informeProveedor.finaliza.message"); ProveedorFacturas proveedorFacturas = (ProveedorFacturas) request.getSession().getAttribute("proveedorFacturas"); modelo.addAttribute("proveedorFacturas", proveedorFacturas); InformeProveedorDetalle detalle = new InformeProveedorDetalle(); modelo.addAttribute(Constantes.ADDATTRIBUTE_INFORMEPROVEEDOR_DETALLE, detalle); return "redirect:/factura/informeProveedorDetalle/revisar"; } @Transactional @RequestMapping(value = "/pagar", method = RequestMethod.GET) public String pagar(HttpServletRequest request, Model modelo, RedirectAttributes redirectAttributes) throws Exception { log.debug("Entrando a Autorizar informe"); String checks = request.getParameter("checkFacturasid"); log.debug("map {}", request.getParameterMap().toString()); log.debug("names {}", request.getParameterNames().toString()); Map<String, String[]> parameterMap = request.getParameterMap(); parameterMap.get("key"); List<Long> ids = new ArrayList(); Enumeration<String> parameterNames = request.getParameterNames(); while (parameterNames.hasMoreElements()) { String nombre = parameterNames.nextElement(); if (nombre.startsWith("checkFac")) { String[] id = nombre.split("-"); log.debug("id ={}", id[1]); ids.add(Long.parseLong(id[1])); } } Usuario usuario = ambiente.obtieneUsuario(); List<InformeProveedorDetalle> detalles = manager.obtiene(ids); request.getSession().setAttribute("facturasPagar", detalles); Contrarecibo contrarecibo = new Contrarecibo(); modelo.addAttribute(Constantes.ADDATTRIBUTE_CONTRARECIBO, contrarecibo); return "/factura/informeProveedorDetalle/fecha"; } @RequestMapping("/fecha") public String asignarFecha(HttpServletRequest request, Model modelo) { log.info("nuevo contrarecibo"); Contrarecibo contrarecibo = new Contrarecibo(); modelo.addAttribute(Constantes.ADDATTRIBUTE_CONTRARECIBO, contrarecibo); modelo.addAttribute(Constantes.ADDATTRIBUTE_CONTRARECIBO, contrarecibo); return "/factura/informeProveedorDetalle/fecha"; } @RequestMapping("/cambiarFecha/{id}") public String cambiarFecha(@PathVariable Long id, HttpServletRequest request, Model modelo) { log.info("cambiando fecha a contrarecivo"); Contrarecibo contrarecibo = contrareciboManager.obtiene(id); modelo.addAttribute(Constantes.ADDATTRIBUTE_CONTRARECIBO, contrarecibo); request.getSession().setAttribute("contrareciboFecha", contrarecibo); return "/factura/informeProveedorDetalle/fecha"; } @Transactional @RequestMapping(value = "/actualizaFecha", method = RequestMethod.POST) public String actualizaFecha(HttpServletRequest request, HttpServletResponse response, @Valid Contrarecibo contrarecibo, BindingResult bindingResult, Errors errors, Model modelo, RedirectAttributes redirectAttributes) throws Exception { for (String nombre : request.getParameterMap().keySet()) { log.debug("Param: {} : {}", nombre, request.getParameterMap().get(nombre)); } utils.despliegaBindingResultErrors(bindingResult); if (bindingResult.hasErrors()) { log.debug("Hubo algun error en la forma, regresando"); Map<String, Object> params = new HashMap<>(); params.put("empresa", request.getSession() .getAttribute("empresaId")); this.despliegaBindingResultErrors(bindingResult); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVO; } try { Usuario usuario = ambiente.obtieneUsuario(); if (contrarecibo.getId() == null) { List<InformeProveedorDetalle> detalles = (List<InformeProveedorDetalle>) request.getSession().getAttribute("facturasPagar"); contrarecibo.setStatus(Constantes.STATUS_ACTIVO); ProveedorFacturas proveedorFacturas = detalles.get(0).getInformeProveedor().getProveedorFacturas(); contrarecibo.setProveedorFacturas(proveedorFacturas); contrarecibo.setUsuarioAlta(usuario); contrareciboManager.graba(contrarecibo, usuario); for (InformeProveedorDetalle x : detalles) { x.setContrarecibo(contrarecibo); x.setStatus(Constantes.STATUS_AUTORIZADO); manager.actualiza(x, usuario); } } else { log.info("actualizando"); log.info("contrarecibo a actualizar{}", contrarecibo.toString()); Contrarecibo cont = contrareciboManager.obtiene(contrarecibo.getId()); cont.setFechaPago(contrarecibo.getFechaPago()); contrareciboManager.actualiza(cont, usuario); } } catch (ConstraintViolationException e) { log.error("No se pudo crear el detalle", e); return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_NUEVO; } redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "detalle.graba.message"); redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE_ATTRS, new String[]{contrarecibo.getFechaPago().toString()}); return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_CONTRARECIBOS; } @RequestMapping("/reporteContrarecibo/{id}") public String reporteContrarecibo(@PathVariable Long id, HttpServletRequest request, HttpServletResponse response, Model modelo) throws ReporteException { log.debug("Nuevo paquete"); Map<String, Object> params = new HashMap<>(); Long empresaId = (Long) request.getSession().getAttribute("empresaId"); params.put("empresa", empresaId); Contrarecibo contrarecibo = contrareciboManager.obtiene(id); List<ContrareciboVO> vos = contrareciboManager.ListadeContrarecibosVO(id); // params.put(Constantes.CONTAINSKEY_CONTRARECIBOS, contrarecibo); log.debug("Entrando a tipo"); params.put("reporte", true); try { params.put(Constantes.CONTAINSKEY_CONTRARECIBOS, vos); // params = contrareciboManager.lista(params); } catch (Exception ex) { log.error("Error al intentar obtener el censo de colportores"); } log.debug("listaContrarecibos**-{}", (List<ContrareciboVO>) params.get(Constantes.CONTAINSKEY_CONTRARECIBOS)); log.debug("empresa**-{}", ambiente.obtieneUsuario().getEmpresa().getId()); log.debug("Obtuvo listado"); try { log.debug("Generando reporte"); generaReporte("PDF", (List<ContrareciboVO>) params.get(Constantes.CONTAINSKEY_CONTRARECIBOS), response, request, "contrareciboFacturas", Constantes.EMP, ambiente.obtieneUsuario().getEmpresa().getId()); log.debug("Genero reporte"); return null; } catch (Exception e) { log.error("No se pudo generar el reporte", e); e.printStackTrace(); } return Constantes.PATH_INFORMEPROVEEDOR_DETALLE_CONTRARECIBOS; } @RequestMapping("/eliminaContrarecibo/{id}") public String eliminaContrarecibo(@PathVariable Long id, Model modelo) { log.debug("Mostrando paquete {}", id); Usuario usuario = ambiente.obtieneUsuario(); Contrarecibo contrarecibo = contrareciboManager.obtiene(id); contrarecibo.setFechaModificacion(new Date()); contrarecibo.setUsuarioModificacion(usuario); String folio = contrareciboManager.elimina(id); return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_CONTRARECIBOS; } @RequestMapping("/asignarFacturas") public String asignarArchivos(RedirectAttributes redirectAttributes) throws FileNotFoundException, IOException { Usuario usuario = ambiente.obtieneUsuario(); String path = "/home/facturas/2014/06/19/administracion@lacarlota.um.edu.mx"; File dir = new File(path); String[] ficheros = dir.list(); for (String nombreArchivo : ficheros) { InformeProveedorDetalle detalle = manager.obtiene(nombreArchivo); Path hubicacion = Paths.get(path + nombreArchivo); byte[] bytes = Files.readAllBytes(hubicacion); if (nombreArchivo.contains(".pdf")) { detalle.setPdfFile(bytes); } if (nombreArchivo.contains(".xml")) { detalle.setXmlFile(bytes); } manager.actualiza(detalle, usuario); } redirectAttributes.addFlashAttribute(Constantes.CONTAINSKEY_MESSAGE, "detalle.graba.message"); // return "redirect:" + Constantes.PATH_INFORMEPROVEEDOR_DETALLE_CONTRARECIBOS; return "factura/index"; } }