diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBpeNumeracaoReuso.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBpeNumeracaoReuso.java new file mode 100644 index 000000000..2ddb04706 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioBpeNumeracaoReuso.java @@ -0,0 +1,183 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; + +import com.rjconsultores.ventaboletos.constantes.Constantes; +import com.rjconsultores.ventaboletos.entidad.Constante; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.ArrayDataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.ConstanteService; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; +import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext; + +public class RelatorioBpeNumeracaoReuso extends Relatorio { + + private ConstanteService constanteService; + + public RelatorioBpeNumeracaoReuso(Map parametros, Connection conexao) throws Exception { + + super(parametros, conexao); + + this.setCustomDataSource(new ArrayDataSource(this) { + + public void initDados() throws Exception { + Connection conexao = this.relatorio.getConexao(); + Map parametros = this.relatorio.getParametros(); + + String sql = getSql(parametros); + + Date dtInicio = (Date) parametros.get("DATA_INICIO"); + Date dtFim = (Date) parametros.get("DATA_FIM"); + + + NamedParameterStatement ps = new NamedParameterStatement(conexao, sql.toString()); + if(dtInicio != null && dtFim != null) { + ps.setString("dataInicio", DateUtil.getStringDate(dtInicio, "dd/MM/yyyy") + " 00:00:00"); + ps.setString("dataFinal", DateUtil.getStringDate(dtFim, "dd/MM/yyyy") + " 23:59:59"); + } + + ResultSet rset = ps.executeQuery(); + + while (rset.next()) { + Map dataResult = new HashMap(); + + dataResult.put("numeroBPE", rset.getString("numeroBPE")); + dataResult.put("serieBPE", rset.getString("serieBPE")); + dataResult.put("estado", rset.getString("estado")); + + this.dados.add(dataResult); + } + + if(parametros.get("ESTADOS_ID") == null){ + sql = getSqlBuscarInicialFinal(parametros); + + dtInicio = (Date) parametros.get("DATA_INICIO"); + dtFim = (Date) parametros.get("DATA_FIM"); + + + ps = new NamedParameterStatement(conexao, sql.toString()); + if(dtInicio != null && dtFim != null) { + ps.setString("dataInicio", DateUtil.getStringDate(dtInicio, "dd/MM/yyyy") + " 00:00:00"); + ps.setString("dataFinal", DateUtil.getStringDate(dtFim, "dd/MM/yyyy") + " 23:59:59"); + } + + rset = ps.executeQuery(); + + while (rset.next()) { + parametros.put("inicialAutorizado", rset.getString("inicialAutorizado")); + parametros.put("finalAutorizado", rset.getString("finalAutorizado")); + } + + } + + this.resultSet = rset; + } + }); + } + + @Override + protected void processaParametros() throws Exception { + } + + private String getSql(Map parametros) { + + StringBuilder sql = new StringBuilder(); + constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService"); + + String estados = (String) parametros.get("ESTADOS_ID"); + String empresaId = (String) parametros.get("EMPRESA_ID"); + Date dtInicio = (Date) parametros.get("DATA_INICIO"); + Date dtFim = (Date) parametros.get("DATA_FIM"); + + + getSelectFrom(sql); + + getWhere(sql, constanteService, estados, empresaId, dtInicio, dtFim, false); + + sql.append(" group by BOL.num_bpe , BOL.numserie_bpe, E.nombestado ORDER BY BOL.NUM_BPE, BOL.NUMSERIE_BPE, E.NOMBESTADO ASC "); + + return sql.toString(); + } + + private String getSqlBuscarInicialFinal(Map parametros) { + + StringBuilder sql = new StringBuilder(); + + String estados = (String) parametros.get("ESTADOS_ID"); + String empresaId = (String) parametros.get("EMPRESA_ID"); + Date dtInicio = (Date) parametros.get("DATA_INICIO"); + Date dtFim = (Date) parametros.get("DATA_FIM"); + + + getSelectFromInicialFinalAutorizado(sql); + + getWhere(sql, constanteService, estados, empresaId, dtInicio, dtFim, true); + + + return sql.toString(); + } + + private void getWhere(StringBuilder sql, ConstanteService constanteService, String estados, String empresaId, Date dtInicio, Date dtFim, boolean buscarUltimoFinal) { + sql.append(" WHERE e.ACTIVO = 1 "); + + if (empresaId != null) { + sql.append(" AND ep.EMPRESA_ID IN( " + empresaId + " ) "); + } + if (estados != null) { + sql.append(" AND e.ESTADO_ID IN ( " + estados + " )"); + } + if (buscarUltimoFinal) { + sql.append(" AND (bpe.codstat = '100' AND bol.activo = 1)"); + } + + if(dtInicio != null && dtFim != null) { + Constante constanteBPeOtimizado = constanteService.buscarPorNomeConstante(Constantes.RELATORIO_BPE_OTIMIZADO); + if(constanteBPeOtimizado != null && StringUtils.isNotBlank(constanteBPeOtimizado.getValorconstante()) && Boolean.parseBoolean(constanteBPeOtimizado.getValorconstante())) { + sql.append(" AND coalesce(bol.FECHORVENTA_H, bol.FECHORVENTA) >= TO_DATE(:dataInicio,'DD/MM/YYYY HH24:MI:SS') "); + sql.append(" AND coalesce(bol.FECHORVENTA_H, bol.FECHORVENTA) <= TO_DATE(:dataFinal,'DD/MM/YYYY HH24:MI:SS') "); + }else { + //Mantis 17952 + sql.append(" AND (bpe.dt_venda >= TO_DATE(:dataInicio, 'DD/MM/YYYY HH24:MI:SS' ) OR (bpe.dt_venda is null and bol.fechorventa >= TO_DATE(:dataInicio, 'DD/MM/YYYY HH24:MI:SS'))) "); + sql.append(" AND (bpe.dt_venda <= TO_DATE(:dataFinal, 'DD/MM/YYYY HH24:MI:SS' ) OR (bpe.dt_venda is null and bol.fechorventa <= TO_DATE(:dataFinal, 'DD/MM/YYYY HH24:MI:SS' )))"); + } + } + + } + + private void getSelectFrom(StringBuilder sql) { + sql.append("SELECT BOL.NUM_BPE as numeroBPE, BOL.NUMSERIE_BPE as serieBPE, E.NOMBESTADO as estado "); + + sql.append(" FROM BPE bpe "); + sql.append(" LEFT JOIN BOLETO bol ON bol.BOLETO_ID = bpe.BOLETO_ID and bpe.activo = 1 "); + sql.append(" LEFT JOIN estado e ON e.CODIBGE = bpe.UF "); + sql.append(" LEFT JOIN marca ma ON bol.MARCA_ID = ma.MARCA_ID "); + sql.append(" LEFT JOIN empresa ep on ma.EMPRESA_ID = ep.EMPRESA_ID "); + sql.append(" LEFT JOIN PUNTO_VENTA pv ON bol.PUNTOVENTA_ID = pv.PUNTOVENTA_ID "); + sql.append(" JOIN BPE_CTRL_DISPONIBILIDADE bcd ON (bpe.BPE_ID = bcd.BPE_REJEITADO_ID) "); + + } + + private void getSelectFromInicialFinalAutorizado(StringBuilder sql){ + + sql.append("SELECT min(bol.num_bpe) as inicialAutorizado , max(bol.num_bpe) as finalAutorizado"); + sql.append(" FROM bpe bpe"); + sql.append(" LEFT JOIN bpe bpeSub ON bpe.bpesubstituicao_id = bpesub.bpe_id"); + sql.append(" AND bpesub.activo = 1"); + sql.append(" LEFT JOIN boleto bol ON bol.boleto_id = bpe.boleto_id"); + sql.append(" AND bpe.activo = 1"); + sql.append(" LEFT JOIN estado e ON e.codibge = bpe.uf"); + sql.append(" LEFT JOIN marca ma ON bol.marca_id = ma.marca_id"); + sql.append(" LEFT JOIN empresa ep ON ma.empresa_id = ep.empresa_id"); + sql.append(" LEFT JOIN parada ori ON bol.origen_id = ori.parada_id"); + sql.append(" LEFT JOIN parada dest ON bol.destino_id = dest.parada_id"); + sql.append(" LEFT JOIN punto_venta pv ON bol.puntoventa_id = pv.puntoventa_id "); + + } +} \ No newline at end of file