diff --git a/src/com/rjconsultores/integracaoreceitadespesa/BGMApplication.java b/src/com/rjconsultores/integracaoreceitadespesa/BGMApplication.java index 53c529f40..5b13f61e6 100644 --- a/src/com/rjconsultores/integracaoreceitadespesa/BGMApplication.java +++ b/src/com/rjconsultores/integracaoreceitadespesa/BGMApplication.java @@ -34,6 +34,8 @@ public class BGMApplication { private boolean isCodReceitaFixoBgm; + private boolean isReceitasDespesasOuroPrata; + private BGMApplication(){ } @@ -75,12 +77,13 @@ public class BGMApplication { return props; } - public String executaExportacao(Date dataInicio, Date dataFinal, String diretorio, Integer empresaId, Integer puntoVentaId, Connection con,String pathGravacaoExternaArquivos, boolean incluiTipoPagamentoTurismoBGM, boolean isReceitasDespesasComporte,boolean isCodReceitaFixoBgm) throws IllegalArgumentException, IntegracaoReceitaDespesaException{ + public String executaExportacao(Date dataInicio, Date dataFinal, String diretorio, Integer empresaId, Integer puntoVentaId, Connection con,String pathGravacaoExternaArquivos, boolean incluiTipoPagamentoTurismoBGM, boolean isReceitasDespesasComporte,boolean isCodReceitaFixoBgm, boolean isReceitasDespesasOuroPrata) throws IllegalArgumentException, IntegracaoReceitaDespesaException{ this.isCodReceitaFixoBgm = isCodReceitaFixoBgm; + this.isReceitasDespesasOuroPrata = isReceitasDespesasOuroPrata; return executaExportacao(dataInicio, dataFinal, diretorio, empresaId, puntoVentaId, con, pathGravacaoExternaArquivos, incluiTipoPagamentoTurismoBGM); } - public String executaExportacao(Date dataInicio, Date dataFinal, String diretorio, Integer empresaId, Integer puntoVentaId, Connection con,String pathGravacaoExternaArquivos, boolean incluiTipoPagamentoTurismoBGM, boolean isReceitasDespesasComporte) throws IllegalArgumentException, IntegracaoReceitaDespesaException{ + public String executaExportacao(Date dataInicio, Date dataFinal, String diretorio, Integer empresaId, Integer puntoVentaId, Connection con,String pathGravacaoExternaArquivos, boolean incluiTipoPagamentoTurismoBGM, boolean isReceitasDespesasComporte, boolean isReceitasDespesasOuroPrata) throws IllegalArgumentException, IntegracaoReceitaDespesaException{ this.isReceitasDespesasComporte = isReceitasDespesasComporte; return executaExportacao(dataInicio, dataFinal, diretorio, empresaId, puntoVentaId, con, pathGravacaoExternaArquivos, incluiTipoPagamentoTurismoBGM); } @@ -93,7 +96,7 @@ public class BGMApplication { throw new IllegalArgumentException("o parâmetro puntoVentaId é obrigatório!"); } excluirArquivosZip(diretorio); - Totalbus totalbus = new Totalbus(con, isReceitasDespesasComporte,isCodReceitaFixoBgm); + Totalbus totalbus = new Totalbus(con, isReceitasDespesasComporte,isCodReceitaFixoBgm, isReceitasDespesasOuroPrata ); if (totalbus.isConstanteBloqueioMenorQueData(empresaId, dataFinal)){ totalbus.updateDataBloqueio(empresaId, dataFinal); } diff --git a/src/com/rjconsultores/integracaoreceitadespesa/dao/Totalbus.java b/src/com/rjconsultores/integracaoreceitadespesa/dao/Totalbus.java index 957fd879f..30bd99340 100644 --- a/src/com/rjconsultores/integracaoreceitadespesa/dao/Totalbus.java +++ b/src/com/rjconsultores/integracaoreceitadespesa/dao/Totalbus.java @@ -4,10 +4,12 @@ import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; import java.util.Date; import java.util.List; @@ -34,18 +36,22 @@ public class Totalbus { private Boolean isReceitasDespesasComporte = false; + private Boolean isReceitasDespesasOuroPrata= false; + private DecimalFormat df = new DecimalFormat("#0.00"); - public Totalbus(Connection con, Boolean isReceitasDespesasComporte) { + public Totalbus(Connection con, Boolean isReceitasDespesasComporte, Boolean isReceitasDespesasOuroPrata) { this.conn = con; this.isReceitasDespesasComporte = isReceitasDespesasComporte; + this.isReceitasDespesasOuroPrata = isReceitasDespesasOuroPrata; loadEmpresas(); loadPuntosVenta(); } - public Totalbus(Connection con, Boolean isReceitasDespesasComporte,Boolean isCodReceitaFixoBgm) { + public Totalbus(Connection con, Boolean isReceitasDespesasComporte,Boolean isCodReceitaFixoBgm, Boolean isReceitasDespesasOuroPrata) { this.conn = con; this.isReceitasDespesasComporte = isReceitasDespesasComporte; + this.isReceitasDespesasOuroPrata = isReceitasDespesasOuroPrata; this.isCodReceitaFixoBgm = isCodReceitaFixoBgm; loadEmpresas(); loadPuntosVenta(); @@ -63,10 +69,13 @@ public class Totalbus { log.debug("gerando receitas..."); despesasReceitas.addAll(getReceitasComporte(puntoventaId, empresaId, fechaParam, incluiTipoPagamentoTurismoBGM)); - } else { + }else { despesasReceitas.addAll(getDespesaCartaoDebCred(puntoventaId, empresaId, fechaParam, incluiTipoPagamentoTurismoBGM)); log.debug("gerando receitas..."); despesasReceitas.addAll(getReceitas(puntoventaId, empresaId, fechaParam, incluiTipoPagamentoTurismoBGM)); + if(isReceitasDespesasOuroPrata) { + getContaCorrenteAgencia(despesasReceitas, puntoventaId, empresaId, fechaParam, incluiTipoPagamentoTurismoBGM); + } } List rows = new ArrayList(); @@ -77,6 +86,175 @@ public class Totalbus { return rows; } + private void getContaCorrenteAgencia(List despesasReceitas, Integer puntoVentaId, Integer empresaId, Date fechaParam, boolean incluiTipoPagamentoTurismoBGM) throws IntegracaoReceitaDespesaException { + despesasReceitas.addAll(buscarFormasPagamentoContaCorrenteAgencia(puntoVentaId, empresaId, fechaParam,incluiTipoPagamentoTurismoBGM)); + despesasReceitas.addAll(buscarComissoesContaCorrenteAgencia(puntoVentaId, empresaId, fechaParam,incluiTipoPagamentoTurismoBGM)); + } + + private Collection buscarFormasPagamentoContaCorrenteAgencia(Integer puntoVentaId, + Integer empresaId, Date fechaParam, boolean incluiTipoPagamentoTurismoBGM) + throws IntegracaoReceitaDespesaException { + + List despesas = new ArrayList(); + + StringBuilder sb = new StringBuilder(); + + SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy"); + String fechaStr = sf.format(fechaParam); + if (fechaParam == null) { + fechaStr = sf.format(getData()); + } + + + sb.append("SELECT SUM(precioboleto) AS precioBoleto, "); + sb.append("formaPagoId, "); + sb.append("descripcionFormaPago, "); + sb.append("empresa, "); + sb.append("puntoventaId, "); + sb.append("contacontabil, "); + sb.append("numpuntoventa, "); + sb.append("descinfo, "); + sb.append("tipoEventoExtra, "); + sb.append("feccorte AS feccorte "); + sb.append("FROM ("); + sb.append("(SELECT SUM(CASE "); + sb.append(" WHEN c.MOTIVOCANCELACION_ID IS NULL THEN 1 ELSE -1 END * cfp.importe) AS precioBoleto, "); + sb.append("cfp.formapago_id AS formaPagoId, "); + sb.append("fp.DESCPAGO AS descripcionFormaPago, "); + sb.append("e.empresa_id AS empresa, "); + sb.append("ccp.PUNTOVENTA_ID AS puntoventaId, "); + sb.append("tee.contacontabil AS contacontabil, "); + sb.append("pv.numpuntoventa AS numpuntoventa, "); + sb.append("ee.descinfo AS descinfo, "); + sb.append("ee.tipoeventoextra_id AS tipoEventoExtra, "); + sb.append("ccp.feccorte AS feccorte "); + sb.append(" FROM forma_pago fp, caja c "); + sb.append(" left OUTER JOIN motivo_cancelacion mc ON c.motivocancelacion_id = mc.motivocancelacion_id"); + sb.append(" left OUTER JOIN marca m ON c.marca_id = m.marca_id"); + sb.append(" left OUTER JOIN empresa e ON m.empresa_id = e.empresa_id"); + sb.append(" INNER JOIN caja_formapago cfp ON c.caja_id = cfp.caja_id"); + sb.append(" left OUTER JOIN boleto b ON b.boleto_id = c.transacao_id"); + sb.append(" left OUTER JOIN evento_extra ee ON b.boleto_id = ee.boleto_id"); + sb.append(" left JOIN tipo_evento_extra tee ON tee.tipoeventoextra_id = ee.tipoeventoextra_id"); + sb.append(" left JOIN punto_venta pv ON pv.puntoventa_id = c.puntoventa_id and (cfp.activo = 1) "); + sb.append(" INNER JOIN CONTA_CORRENTE_PTOVTA ccp ON e.EMPRESA_ID = ccp.EMPRESA_ID"); + sb.append(" and ccp.PUNTOVENTA_ID = c.PUNTOVENTA_ID"); + sb.append(" and ccp.FECCORTE = c.FECCORTE"); + sb.append(" and ccp.TURNO_ID = c.turno_id"); + sb.append(" and ccp.ACTIVO = 1"); + sb.append(" and c.USUARIO_ID = ccp.USUARIO_ID"); + sb.append(" WHERE cfp.formapago_id = fp.formapago_id"); + sb.append(" and C.INDSTATUSOPERACION = 'F'"); + sb.append(" and c.INDREIMPRESION = 0"); + sb.append(" and c.tipoventa_id <> 6"); + sb.append(" and c.ACTIVO = 1"); + adicionaFiltroQuery(empresaId, sb, " and ccp.EMPRESA_ID = ", empresaId != null); + adicionaFiltroQuery(puntoVentaId, sb, " and ccp.PUNTOVENTA_ID = ", puntoVentaId != null && !puntoVentaId.equals(-1)); + sb.append(" and trunc(ccp.feccorte) = TO_DATE('"+fechaStr+"') "); + sb.append(" GROUP BY cfp.formapago_id,"); + sb.append(" fp.DESCPAGO,"); + sb.append(" e.empresa_id,"); + sb.append(" ccp.PUNTOVENTA_ID,"); + sb.append(" tee.contacontabil,"); + sb.append(" pv.numpuntoventa,"); + sb.append(" ee.descinfo, ee.tipoeventoextra_id, ccp.FECCORTE )"); + sb.append(" UNION"); + sb.append(" (SELECT SUM(cdp.IMPORTE) AS precioBoleto,"); + sb.append(" cdp.formapago_id AS formaPagoId,"); + sb.append(" fp.DESCPAGO AS descripcionFormaPago,"); + sb.append(" e.empresa_id AS empresa,"); + sb.append(" cd.PUNTOVENTA_ID AS puntoventaId,"); + sb.append(" tee.contacontabil AS contacontabil,"); + sb.append(" pv.numpuntoventa AS numpuntoventa,"); + sb.append(" ee.descinfo AS descinfo,"); + sb.append(" ee.tipoeventoextra_id AS tipoEventoExtra, ccp.feccorte AS feccorte "); + sb.append(" FROM CAJA_DIVERSOS cd"); + sb.append(" JOIN CAJA_DIVERSOS_PAGO cdp ON cdp.CAJADIVERSOS_ID = cd.CAJADIVERSOS_ID"); + sb.append(" INNER JOIN forma_pago fp ON fp.formapago_id = cdp.formapago_id"); + sb.append(" INNER JOIN EVENTO_EXTRA EE ON EE.EVENTOEXTRA_ID = cd.EVENTOEXTRA_ID"); + sb.append(" LEFT OUTER JOIN empresa e ON ee.empresa_id = e.empresa_id"); + sb.append(" LEFT JOIN boleto b ON b.boleto_id = ee.boleto_id"); + sb.append(" LEFT OUTER JOIN evento_extra ee ON b.boleto_id = ee.boleto_id"); + sb.append(" LEFT JOIN tipo_evento_extra tee ON tee.tipoeventoextra_id = ee.tipoeventoextra_id"); + sb.append(" LEFT JOIN punto_venta pv ON pv.puntoventa_id = cd.puntoventa_id "); + sb.append(" INNER JOIN CONTA_CORRENTE_PTOVTA ccp ON e.EMPRESA_ID = ccp.EMPRESA_ID "); + sb.append(" AND ccp.PUNTOVENTA_ID = cd.PUNTOVENTA_ID "); + sb.append("AND ccp.FECCORTE = cd.FECCORTE "); + sb.append(" AND ccp.TURNO_ID = cd.turno_id "); + sb.append(" AND cd.USUARIO_ID = ccp.USUARIO_ID "); + sb.append(" WHERE 1 = 1"); + sb.append(" AND cd.ACTIVO = 1"); + sb.append(" AND ccp.ACTIVO = 1"); + sb.append(" AND (ee.boleto_id IS NULL"); + sb.append(" OR ee.boleto_id = b.boleto_id)"); + adicionaFiltroQuery(empresaId, sb, " and ccp.EMPRESA_ID = ", empresaId != null); + adicionaFiltroQuery(puntoVentaId, sb, " and ccp.PUNTOVENTA_ID = ", puntoVentaId != null && !puntoVentaId.equals(-1)); + sb.append(" AND trunc(ccp.feccorte) = TO_DATE('"+fechaStr+"') "); + sb.append(" GROUP BY cdp.formapago_id, fp.DESCPAGO,"); + sb.append(" e.empresa_id, cd.PUNTOVENTA_ID, "); + sb.append(" tee.contacontabil,"); + sb.append(" pv.numpuntoventa, ee.descinfo,"); + sb.append(" ee.tipoeventoextra_id, ccp.FECCORTE )) x "); + sb.append("GROUP BY formaPagoId, descripcionFormaPago, empresa, "); + sb.append(" puntoventaId,"); + sb.append(" contacontabil,"); + sb.append(" numpuntoventa,"); + sb.append(" descinfo,"); + sb.append(" tipoEventoExtra,feccorte "); + sb.append("ORDER BY formaPagoId, descripcionFormaPago"); + + + PreparedStatement stmt = null; + ResultSet rs = null; + + try { + stmt = getConnection().prepareStatement(sb.toString()); + rs = stmt.executeQuery(); + + while (rs.next()) { + DespesaReceita receita = new DespesaReceita(); + receita.setCodigoEmpresa(rs.getInt(4)); + receita.setCodigoReceitaDespesa(rs.getString(6)); + receita.setDataLancamento(rs.getDate(10)); + receita.setDataMovimento(rs.getDate(10)); + receita.setLocalArrecadacao(rs.getString(7)); + if (rs.getBigDecimal(1).signum() == -1) { + receita.setIdentificadorReceitaDespesa("D"); + receita.setValorLancamento(df.format(rs.getBigDecimal(1).multiply(new BigDecimal(-1)))); + } else { + receita.setIdentificadorReceitaDespesa("R"); + receita.setValorLancamento(df.format(rs.getBigDecimal(1))); + } + + String desc =rs.getString(8); + if(StringUtils.isNotBlank(desc) && desc.contains("\t")){ + desc = desc.replaceAll("\t", ""); + } + receita.setDescricaoDetalhada(desc); + if (incluiTipoPagamentoTurismoBGM) { + receita.setTipoPagamentoTurismo(rs.getString("tipoEventoExtra")); + } + receita.setFormaPagamentoId(rs.getString("formaPagoId")); + despesas.add(receita); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new IntegracaoReceitaDespesaException("Erro ao processar Receitas"); + } finally { + try { + rs.close(); + } catch (Exception ignore) { + log.error(ignore.getMessage(), ignore); + } + try { + stmt.close(); + } catch (Exception ignore) { + log.error(ignore.getMessage(), ignore); + } + } + return despesas; + } + private void loadPuntosVenta() { PreparedStatement pstmt = null; ResultSet rs = null; @@ -105,6 +283,108 @@ public class Totalbus { } } } + + private Collection buscarComissoesContaCorrenteAgencia(Integer puntoVentaId,Integer empresaId, Date fechaParam, boolean incluiTipoPagamentoTurismoBGM) + throws IntegracaoReceitaDespesaException { + List despesas = new ArrayList(); + + StringBuilder sb = new StringBuilder(); + + SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyy"); + String fechaStr = sf.format(fechaParam); + if (fechaParam == null) { + fechaStr = sf.format(getData()); + } + + sb.append("SELECT CASE"); + sb.append(" WHEN E.INDRATEIOCOMISSAOGRUPOLINHA = 1"); + sb.append(" AND OP.TIPOOPERACIONCC_ID = 5"); + sb.append(" AND CCGL.CONTACORRENTEPTOVTAGRLIN_ID IS NOT NULL THEN CCGL.IMPORTE"); + sb.append(" ELSE CC.IMPORTETOTALEFECTIVO"); + sb.append(" END AS precioBoleto ,"); + sb.append(" CASE"); + sb.append(" WHEN OP.INDCREDITO = 1 THEN 'CREDITO'"); + sb.append(" ELSE 'DEBITO'"); + sb.append(" END AS descripcionFormaPago ,"); + sb.append(" CASE"); + sb.append(" WHEN OP.CVETIPO = 'CM' THEN 'COMISSAO' "); + sb.append(" WHEN OP.CVETIPO = 'LQ' THEN 'LQ' "); + sb.append(" END AS descripcionFormaPago,"); + sb.append(" cc.empresa_id, "); + sb.append(" cc.puntoventa_id, "); + sb.append(" pv.numpuntoventa, "); + sb.append(" cc.fechoroperacion "); + sb.append("FROM CONTA_CORRENTE_PTOVTA CC "); + sb.append("LEFT JOIN CONTA_CORRENTE_PTOVTA_GR_LIN CCGL ON CCGL.CONTACORRENTEPTOVTA_ID = CC.CONTACORRENTEPTOVTA_ID "); + sb.append("JOIN TIPO_OPERACION_CC OP ON CC.TIPOOPERACIONCC_ID = OP.TIPOOPERACIONCC_ID "); + sb.append("JOIN PUNTO_VENTA PV ON CC.PUNTOVENTA_ID = PV.PUNTOVENTA_ID "); + sb.append("JOIN EMPRESA E ON CC.EMPRESA_ID = E.EMPRESA_ID "); + sb.append("LEFT JOIN LOG_CONFERENCIA LG ON CC.CONTACORRENTEPTOVTA_ID = LG.CONTACORRENTEPTOVTA_ID "); + sb.append("LEFT JOIN CONFERENCIA_PENDENCIA CP ON CP.CONFERENCIAPENDENCIA_ID = LG.CONFERENCIAPENDENCIA_ID "); + sb.append("WHERE CC.ACTIVO = 1 "); + sb.append(" AND cc.feccorte = TO_DATE('"+fechaStr+" 00:00:00', 'dd/MM/yyyy HH24:mi:ss') "); + adicionaFiltroQuery(empresaId, sb, " and CC.EMPRESA_ID = ", empresaId != null); + adicionaFiltroQuery(puntoVentaId, sb, " and CC.PUNTOVENTA_ID = ", puntoVentaId != null && !puntoVentaId.equals(-1)); + sb.append(" ORDER BY PV.NOMBPUNTOVENTA,"); + sb.append(" E.NOMBEMPRESA,"); + sb.append(" OP.DESCTIPO,"); + sb.append(" OP.CVETIPO "); + + + PreparedStatement stmt = null; + ResultSet rs = null; + + + try { + stmt = getConnection().prepareStatement(sb.toString()); + + rs = stmt.executeQuery(); + + BigDecimal valorAcumulado = BigDecimal.ZERO; + + while (rs.next()) { + DespesaReceita receita = new DespesaReceita(); + receita.setCodigoEmpresa(rs.getInt(4)); + receita.setCodigoReceitaDespesa(""); + receita.setDataLancamento(rs.getDate(7)); + receita.setDataMovimento(rs.getDate(7)); + receita.setLocalArrecadacao(rs.getString(6)); + if (rs.getBigDecimal(1).signum() == -1) { + receita.setIdentificadorReceitaDespesa("R"); + valorAcumulado = valorAcumulado.add((rs.getBigDecimal(4).multiply(new BigDecimal(-1)))); + receita.setValorLancamento(df.format(valorAcumulado)); + } else { + receita.setIdentificadorReceitaDespesa("D"); + receita.setValorLancamento(df.format(rs.getBigDecimal(1))); + } + + + receita.setDescricaoDetalhada(""); + if (incluiTipoPagamentoTurismoBGM) { + receita.setTipoPagamentoTurismo(rs.getString("tipoeventoextra_id")); + } + receita.setFormaPagamentoId(rs.getString(2).equals("CREDITO") ? "2" : "3"); + despesas.add(receita); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new IntegracaoReceitaDespesaException("Erro ao processar Receitas"); + } finally { + try { + rs.close(); + } catch (Exception ignore) { + log.error(ignore.getMessage(), ignore); + } + try { + stmt.close(); + } catch (Exception ignore) { + log.error(ignore.getMessage(), ignore); + } + } + return despesas; + } + + private void loadEmpresas() { PreparedStatement pstmt = null; @@ -804,6 +1084,8 @@ public class Totalbus { public void setIsReceitasDespesasComporte(Boolean isReceitasDespesasComporte) { this.isReceitasDespesasComporte = isReceitasDespesasComporte; } - + public static void main(String[] args) { + System.out.println(new BigDecimal("0").signum()); + } }