diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentosAtraso.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentosAtraso.java index 03ebcc949..3505fbc5f 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentosAtraso.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioMovimentosAtraso.java @@ -5,9 +5,11 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.ParseException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -16,6 +18,7 @@ import java.util.TreeSet; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import com.rjconsultores.ventaboletos.constantes.Constantes; import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; import com.rjconsultores.ventaboletos.utilerias.DateUtil; @@ -34,6 +37,7 @@ public class RelatorioMovimentosAtraso extends Relatorio { private Date dataFinal; private String competencia; private SituacaoDiaMovimento status; + private Map> diasComMovimentos; public RelatorioMovimentosAtraso(Map parametros, Connection conexao) throws Exception { super(parametros, conexao); @@ -50,7 +54,26 @@ public class RelatorioMovimentosAtraso extends Relatorio { } private List processarRelatorio(Connection conexao) throws ParseException { + carregarDiasComMovimentos(conexao); List lsDadosRelatorio = iniciarDados(conexao); + processarDiasConferidos(conexao, lsDadosRelatorio); + removerMovimentosSemAtraso(lsDadosRelatorio); + Collections.sort(lsDadosRelatorio); + return lsDadosRelatorio; + } + + private void removerMovimentosSemAtraso(List lsDadosRelatorio) { + List lsMovimentosSemAtraso = new ArrayList(); + for (MovimentosAtrasoVO movimentosAtraso : lsDadosRelatorio) { + if(movimentosAtraso.getDiasEmAtraso() == null || movimentosAtraso.getDiasEmAtraso().isEmpty()) { + lsMovimentosSemAtraso.add(movimentosAtraso); + } + } + + lsDadosRelatorio.removeAll(lsMovimentosSemAtraso); + } + + private void processarDiasConferidos(Connection conexao, List lsDadosRelatorio) { ResultSet rset = null; NamedParameterStatement stmt = null; try { @@ -90,15 +113,12 @@ public class RelatorioMovimentosAtraso extends Relatorio { while (rset.next()) { MovimentosAtrasoVO movimentosAtraso = new MovimentosAtrasoVO(rset.getInt("PUNTOVENTA_ID"),DateUtil.normalizar(rset.getDate("DATAMOVIMENTO"))); if(lsDadosRelatorio.contains(movimentosAtraso)) { - movimentosAtraso = lsDadosRelatorio.get(lsDadosRelatorio.indexOf(movimentosAtraso)); - movimentosAtraso.setSituacao(SituacaoDiaMovimento.ENTREGUE); + MovimentosAtrasoVO movimentosAtrasoAux = lsDadosRelatorio.get(lsDadosRelatorio.indexOf(movimentosAtraso)); + if(movimentosAtrasoAux.getDiasEmAtraso() != null && !movimentosAtrasoAux.getDiasEmAtraso().isEmpty()) { + movimentosAtrasoAux.getDiasEmAtraso().remove(DateUtil.getIntegerDate(movimentosAtraso.getDataMovimento(), "dd")); + } } } - - aplicarFiltroSituacaoMovimentos(lsDadosRelatorio); - - Collections.sort(lsDadosRelatorio); - return lsDadosRelatorio; } catch (Exception e) { log.error(e.getMessage(), e); } finally { @@ -113,28 +133,84 @@ public class RelatorioMovimentosAtraso extends Relatorio { log.error(e.getMessage(), e); } } - return null; + } + + + private void validarPuntoventaDiasComMovimentos(Integer puntoventaId) { + if(!diasComMovimentos.containsKey(puntoventaId)) { + diasComMovimentos.put(puntoventaId, new TreeSet()); + } } - private void aplicarFiltroSituacaoMovimentos(List lsDadosRelatorio) { - if(status != null) { - Set sPuntoventaManter = new TreeSet(); - for (MovimentosAtrasoVO movimentosAtraso : lsDadosRelatorio) { - if(movimentosAtraso.getSituacao().equals(status)) { - sPuntoventaManter.add(movimentosAtraso.getPuntoventaId()); - } - } + private void carregarDiasComMovimentos(Connection conexao) { + ResultSet rset = null; + NamedParameterStatement stmt = null; + try { + StringBuilder sQuery = new StringBuilder(); + sQuery.append("SELECT DISTINCT B.PUNTOVENTA_ID, TO_DATE(B.FECHORVENTA,'DD/MM/YYYY') AS FECHORVENTA ") + .append("FROM BOLETO B ") + .append("WHERE B.ACTIVO = 1 ") + .append("AND TO_DATE(B.FECHORVENTA,'DD/MM/YYYY') BETWEEN TO_DATE(:dataInicial,'DD/MM/YYYY') AND TO_DATE(:dataFinal,'DD/MM/YYYY') ") + .append("AND B.TIPOVENTA_ID IN (") + .append(Arrays.asList(Constantes.TPV_BOLETO_REMOTO,Constantes.TPV_MANUAL,Constantes.TPV_DIRECTO_NORMAL, Constantes.TPV_TRANSFERENCIAS).toString().replaceAll("[^0-9,]", "")) + .append(") ") + .append("AND ( ") + .append(" (B.INDSTATUSBOLETO = 'V' AND (B.MOTIVOCANCELACION_ID IS NULL OR B.MOTIVOCANCELACION_ID IN (") + .append(Arrays.asList(Constantes.MVO_CANCEL_CANCELACION,Constantes.MVO_CANCEL_DEVOLUCAO,Constantes.MVO_CANCEL_TROCA).toString().replaceAll("[^0-9,]", "")) + .append(" ))) ") + .append(" OR ") + .append(" (B.INDSTATUSBOLETO = 'C' AND B.MOTIVOCANCELACION_ID IN (") + .append(Arrays.asList(Constantes.MVO_CANCEL_CANCELACION,Constantes.MVO_CANCEL_DEVOLUCAO).toString().replaceAll("[^0-9,]", "")) + .append(" )) ") + .append(" OR ") + .append(" (B.INDSTATUSBOLETO = 'T' AND (B.MOTIVOCANCELACION_ID IS NULL OR B.MOTIVOCANCELACION_ID IN (") + .append(Arrays.asList(Constantes.MVO_CANCEL_CANCELACION,Constantes.MVO_CANCEL_DEVOLUCAO).toString().replaceAll("[^0-9,]", "")) + .append(" ))) ") + .append(" ) "); - List lsMovimentosAtrasosManter = new ArrayList(); - for (MovimentosAtrasoVO movimentosAtraso: lsDadosRelatorio) { - if(sPuntoventaManter.contains(movimentosAtraso.getPuntoventaId())) { - lsMovimentosAtrasosManter.add(movimentosAtraso); - } + if(empresaId != null) { + sQuery.append("AND B.EMPRESACORRIDA_ID = :empresaId "); + } + + if(puntoventaId != null) { + sQuery.append("AND B.PUNTOVENTA_ID = :puntoventaId "); + } + + log.info(sQuery.toString()); + + stmt = new NamedParameterStatement(conexao, sQuery.toString()); + if(empresaId != null) { + stmt.setInt("empresaId", empresaId); } - if(lsMovimentosAtrasosManter.size() != lsDadosRelatorio.size()) { - lsDadosRelatorio.clear(); - lsDadosRelatorio.addAll(lsMovimentosAtrasosManter); + if(puntoventaId != null) { + stmt.setInt("puntoventaId", puntoventaId); + } + stmt.setDate("dataInicial", new java.sql.Date(dataInicial.getTime())); + stmt.setDate("dataFinal", new java.sql.Date(dataFinal.getTime())); + + rset = stmt.executeQuery(); + + diasComMovimentos = new HashMap>(); + while (rset.next()) { + Integer puntoventaId = rset.getInt("PUNTOVENTA_ID"); + Date fechorventa = DateUtil.normalizar(rset.getDate("FECHORVENTA")); + + validarPuntoventaDiasComMovimentos(puntoventaId); + diasComMovimentos.get(puntoventaId).add(DateUtil.getIntegerDate(fechorventa, "dd")); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } finally { + try { + if(rset != null) { + rset.close(); + } + if(stmt != null) { + stmt.close(); + } + } catch (SQLException e) { + log.error(e.getMessage(), e); } } } @@ -146,9 +222,14 @@ public class RelatorioMovimentosAtraso extends Relatorio { List lsMovimentosAtrasoVOs = new ArrayList(); StringBuilder sQuery = new StringBuilder(); - sQuery.append("SELECT DISTINCT PV.PUNTOVENTA_ID, PV.NUMPUNTOVENTA, PV.NOMBPUNTOVENTA, NVL(FP.DIASEMTRANSITO,0) AS DIASEMTRANSITO ") + sQuery.append("SELECT DISTINCT PV.PUNTOVENTA_ID, PV.NUMPUNTOVENTA, PV.NOMBPUNTOVENTA, NVL(FP.DIASEMTRANSITO,0) AS DIASEMTRANSITO, ") + .append("ES.CVEESTADO AS UF, FP.INTERVALOFECHAMENTO, PVP.NOMBPUNTOVENTA AS NOMPUNTOVENTAPADRE, PV.NUMTELEFONOUNO ") .append("FROM PUNTO_VENTA PV ") + .append("LEFT JOIN PUNTO_VENTA PVP ON PVP.PUNTOVENTA_ID = PV.PUNTOVENTAPADRE_ID ") .append("INNER JOIN PTOVTA_EMPRESA PTE ON PTE.PUNTOVENTA_ID = PV.PUNTOVENTA_ID ") + .append("LEFT JOIN COLONIA CO ON CO.COLONIA_ID = PV.COLONIA_ID ") + .append("LEFT JOIN CIUDAD CID ON CID.CIUDAD_ID = CO.CIUDAD_ID ") + .append("LEFT JOIN ESTADO ES ON ES.ESTADO_ID = CID.ESTADO_ID ") .append("LEFT JOIN FECHAMENTO_PARAMPTOVTA FP ON FP.EMPRESA_ID = PTE.EMPRESA_ID AND PV.PUNTOVENTA_ID = FP.PUNTOVENTA_ID AND FP.ACTIVO = 1 ") .append("WHERE PV.ACTIVO = 1 "); @@ -175,13 +256,20 @@ public class RelatorioMovimentosAtraso extends Relatorio { rset = stmt.executeQuery(); while (rset.next()) { - MovimentosAtrasoVO movimentosAtrasoVO = new MovimentosAtrasoVO(); - movimentosAtrasoVO.setPuntoventaId(rset.getInt("PUNTOVENTA_ID")); - movimentosAtrasoVO.setNumPuntoVenta(rset.getString("NUMPUNTOVENTA")); - movimentosAtrasoVO.setNombpuntoventa(rset.getString("NOMBPUNTOVENTA")); - movimentosAtrasoVO.setCompetencia(competencia); - movimentosAtrasoVO.setDiasemtransito(rset.getInt("DIASEMTRANSITO")); - lsMovimentosAtrasoVOs.addAll(carregarDiasMovimento(movimentosAtrasoVO)); + MovimentosAtrasoVO movimentosAtraso = new MovimentosAtrasoVO(); + movimentosAtraso.setPuntoventaId(rset.getInt("PUNTOVENTA_ID")); + movimentosAtraso.setNumPuntoVenta(rset.getString("NUMPUNTOVENTA")); + movimentosAtraso.setNombpuntoventa(rset.getString("NOMBPUNTOVENTA")); + movimentosAtraso.setCompetencia(competencia); + movimentosAtraso.setDiasemtransito(rset.getInt("DIASEMTRANSITO")); + movimentosAtraso.setIntervalofechamento(rset.getInt("INTERVALOFECHAMENTO")); + movimentosAtraso.setNombpuntoventaPadre(rset.getString("NOMPUNTOVENTAPADRE")); + movimentosAtraso.setUf(rset.getString("UF")); + movimentosAtraso.setNumtelefonouno(rset.getString("NUMTELEFONOUNO")); + carregarDiasMovimento(movimentosAtraso); + if(!movimentosAtraso.getDiasEmAtraso().isEmpty()) { + lsMovimentosAtrasoVOs.add(movimentosAtraso); + } } return lsMovimentosAtrasoVOs; @@ -202,26 +290,25 @@ public class RelatorioMovimentosAtraso extends Relatorio { return null; } - private List carregarDiasMovimento(MovimentosAtrasoVO movimentosAtrasoBase) throws ParseException { + private void carregarDiasMovimento(MovimentosAtrasoVO movimentosAtrasoBase) throws ParseException { + movimentosAtrasoBase.setDiasEmAtraso(new TreeSet()); Set diasCompetencia = DateUtil.carregarDiasCompetencia(movimentosAtrasoBase.getCompetencia()); - List lsMovimentos = new ArrayList(); - Date dataAtual = new Date(); + Date dataAtual = DateUtil.normalizar(new Date()); + Integer diasEmTransito = movimentosAtrasoBase.getDiasemtransito() != null ? movimentosAtrasoBase.getDiasemtransito() : 0; + diasEmTransito += movimentosAtrasoBase.getIntervalofechamento() != null ? movimentosAtrasoBase.getIntervalofechamento() : 0; for (Integer dia : diasCompetencia) { - MovimentosAtrasoVO movimentosAtraso = new MovimentosAtrasoVO(movimentosAtrasoBase.getPuntoventaId(), movimentosAtrasoBase.getNombpuntoventa(), - movimentosAtrasoBase.getNumPuntoVenta(), movimentosAtrasoBase.getCompetencia(), - movimentosAtrasoBase.getDiasemtransito(), - DateUtil.getDateFromString(dia + "/" + movimentosAtrasoBase.getCompetencia(), "dd/MM/yyyy"), - SituacaoDiaMovimento.AGUARDANDO); - - if(movimentosAtraso.getDiasemtransito() != null && movimentosAtraso.getDiasemtransito() > 0) { - if(DateUtil.getElapsedDias(dataAtual, movimentosAtraso.getDataMovimento()) > movimentosAtraso.getDiasemtransito()) { - movimentosAtraso.setSituacao(SituacaoDiaMovimento.ATRASADO); - } + Date dataMovimento = DateUtil.normalizar(DateUtil.getDateFromString(dia+"/"+movimentosAtrasoBase.getCompetencia(), "dd/MM/yyyy")); + if(dataAtual.compareTo(dataMovimento) >= 0 && DateUtil.getElapsedDias(dataAtual, dataMovimento) > diasEmTransito) { + movimentosAtrasoBase.getDiasEmAtraso().add(dia); } - - lsMovimentos.add(movimentosAtraso); } - return lsMovimentos; + + if(diasComMovimentos.containsKey(movimentosAtrasoBase.getPuntoventaId())) { + movimentosAtrasoBase.getDiasEmAtraso().retainAll(diasComMovimentos.get(movimentosAtrasoBase.getPuntoventaId())); + } else { + movimentosAtrasoBase.getDiasEmAtraso().clear(); + } + } public void setLsDadosRelatorio(List lsDadosRelatorio) { diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentosAtraso_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentosAtraso_es.properties index afabd0044..b0e253d32 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentosAtraso_es.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentosAtraso_es.properties @@ -11,10 +11,14 @@ cabecalho.impressorPor=Impressor por: cabecalho.pagina=Página cabecalho.de=de cabecalho.filtros=Filtros: -label.empresa=Empresa: +cabecalho.competencia=Competência: +cabecalho.puntoventa=Agência: +cabecalho.empresa=Empresa: cabecalho.usuario=Usuário: -label.empresa=Empresa: -label.legenda=Legenda -label.puntoventa=Punto Venta: -label.competencia=Competencia: -label.situacao=Situação: \ No newline at end of file +label.puntoventa=Agência +label.numero=Número +label.telefone=Telefone +label.uf=UF +label.subordinante=Subordinante +label.periodicidade=Periodicidade +label.diasEmAtraso=Dias Em Atraso \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentosAtraso_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentosAtraso_pt_BR.properties index 6db620428..b0e253d32 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentosAtraso_pt_BR.properties +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioMovimentosAtraso_pt_BR.properties @@ -11,10 +11,14 @@ cabecalho.impressorPor=Impressor por: cabecalho.pagina=Página cabecalho.de=de cabecalho.filtros=Filtros: -label.empresa=Empresa: +cabecalho.competencia=Competência: +cabecalho.puntoventa=Agência: +cabecalho.empresa=Empresa: cabecalho.usuario=Usuário: -label.empresa=Empresa: -label.legenda=Legenda -label.puntoventa=Ponto de Venda: -label.competencia=Competência: -label.situacao=Situação: \ No newline at end of file +label.puntoventa=Agência +label.numero=Número +label.telefone=Telefone +label.uf=UF +label.subordinante=Subordinante +label.periodicidade=Periodicidade +label.diasEmAtraso=Dias Em Atraso \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentosAtraso.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentosAtraso.jasper index 11e5e93ce..3bc1bc17e 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentosAtraso.jasper and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentosAtraso.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentosAtraso.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentosAtraso.jrxml index b64504897..f383ffe2c 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentosAtraso.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioMovimentosAtraso.jrxml @@ -1,6 +1,6 @@ - +