package com.rjconsultores.integracaoreceitadespesa.dao; import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import com.rjconsultores.integracaoreceitadespesa.entidades.DespesaReceita; import com.rjconsultores.integracaoreceitadespesa.entidades.Empresa; import com.rjconsultores.integracaoreceitadespesa.entidades.PuntoVenta; public class Totalbus { private static final Logger log = Logger.getLogger(Totalbus.class); private static final int DAYS_AGO = -1; private Connection conn; private List pontosVenda = new ArrayList(); private List empresas = new ArrayList(); private DecimalFormat df = new DecimalFormat("#0.00"); public Totalbus(Connection con){ this.conn = con; loadEmpresas(); loadPuntosVenta(); } public List getDespesasReceitas(Integer puntoventaId, Integer empresaId,Date fechaParam){ log.debug("gerando depósitos..."); List despesasReceitas = getDepositos(puntoventaId, empresaId, fechaParam); log.debug("gerando despesas..."); despesasReceitas.addAll(getDespesas(puntoventaId, empresaId, fechaParam)); log.debug("gerando despesas cartão..."); despesasReceitas.addAll(getDespesaCartaoDebCred(puntoventaId, empresaId, fechaParam)); log.debug("gerando receitas..."); despesasReceitas.addAll(getReceitas(puntoventaId, empresaId, fechaParam)); List rows = new ArrayList(); for (DespesaReceita item : despesasReceitas){ item.preencheLinha(rows); } return rows; } private void loadPuntosVenta(){ PreparedStatement pstmt = null; ResultSet rs = null; try{ pstmt = getConnection().prepareStatement("Select puntoventa_id, nombpuntoventa from punto_venta order by nombpuntoventa"); rs = pstmt.executeQuery(); while (rs.next()){ PuntoVenta puntoVenta = new PuntoVenta(); puntoVenta.codigo = rs.getInt(1); puntoVenta.nombpuntoventa = rs.getString(2); pontosVenda.add(puntoVenta); } } catch (Exception e){ log.error(e.getMessage(), e); } finally { try { rs.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } try { pstmt.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } } } private void loadEmpresas(){ PreparedStatement pstmt = null; ResultSet rs = null; try{ pstmt = getConnection().prepareStatement("Select empresa_id, nombempresa from empresa order by nombempresa"); rs = pstmt.executeQuery(); while (rs.next()){ Empresa empresa = new Empresa(); empresa.codigo = rs.getInt(1); empresa.nombempresa = rs.getString(2); empresas.add(empresa); } } catch (Exception e){ log.error(e.getMessage(), e); } finally { try { rs.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } try { pstmt.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } } } public Connection getConnection(){ return this.conn; } public List getDespesaCartaoDebCred(final Integer puntoVentaId, final Integer empresaId, Date fechaParam) { List despesas = new ArrayList(); StringBuffer sb = new StringBuffer(); sb.append(" select "); sb.append(" cd.feccorte AS fechorvta, "); sb.append(" e.empresa_id AS empresa, "); sb.append(" pv.puntoventa_id AS puntoventaId, "); sb.append(" sum(cdp.importe) AS valor, "); sb.append(" case when cdp.formapago_id = 2 then 802 else 803 end as contacontabil, "); sb.append(" pv.numpuntoventa AS numpuntoventa "); sb.append(" from "); sb.append(" caja_diversos cd "); sb.append(" left join evento_extra ev on ev.eventoextra_id = cd.eventoextra_id "); sb.append(" left join empresa e on e.empresa_id = ev.empresa_id "); sb.append(" left join punto_venta pv on pv.puntoventa_id = cd.puntoventa_id "); sb.append(" left join caja_diversos_pago cdp on cdp.cajadiversos_id = cd.cajadiversos_id "); sb.append(" left join tipo_evento_extra tee on tee.tipoeventoextra_id = ev.tipoeventoextra_id "); sb.append(" left join ptovta_integra pi on e.empresa_id = pi.empresa_id and pi.puntoventa_id = pv.puntoventa_id "); sb.append(" where "); sb.append(" cd.feccorte = ? "); if (puntoVentaId != null && !puntoVentaId.equals(-1)){ sb.append(" and cd.puntoventa_id = " + puntoVentaId); } if (empresaId != null){ sb.append(" and e.empresa_id = " + empresaId); } sb.append(" and cd.activo = 1 "); sb.append(" and tee.indtipo = 1 "); sb.append(" and cdp.formapago_id in (2,3) "); sb.append(" group by "); sb.append(" cd.feccorte, "); sb.append(" e.empresa_id, "); sb.append(" pv.puntoventa_id, "); sb.append(" case when cdp.formapago_id = 2 then 802 else 803 end, "); sb.append(" pv.numpuntoventa "); PreparedStatement stmt = null; ResultSet rs = null; Date fecha = fechaParam; if(fechaParam== null){ fecha = getData(); } try{ stmt = getConnection().prepareStatement(sb.toString()); stmt.setDate(1, new java.sql.Date(fecha.getTime())); rs = stmt.executeQuery(); while (rs.next()){ DespesaReceita despesa = new DespesaReceita(); despesa.setCodigoEmpresa(rs.getInt(2)); despesa.setCodigoReceitaDespesa(rs.getInt(5)); despesa.setDataLancamento(rs.getDate(1)); despesa.setDataMovimento(rs.getDate(1)); despesa.setLocalArrecadação(rs.getInt(6)); despesa.setValorLancamento(df.format(rs.getBigDecimal(4))); despesa.setIdentificadorReceitaDespesa("D"); despesas.add(despesa); } } catch (Exception e){ log.error(e.toString(),e); } finally { try { rs.close(); } catch (Exception ignore) { log.error("", ignore); } try { stmt.close(); } catch (Exception ignore) { log.error("", ignore); } } return despesas; } public List getReceitas(final Integer puntoVentaId, final Integer empresaId, Date fechaParam) { List despesas = new ArrayList(); StringBuffer sb = new StringBuffer(); sb.append(" select "); sb.append(" cd.feccorte AS fechorvta, "); sb.append(" e.empresa_id AS empresa, "); sb.append(" pv.puntoventa_id AS puntoventaId, "); sb.append(" sum(cdp.importe) AS valor, "); sb.append(" tee.contacontabil AS contacontabil, "); sb.append(" pv.numpuntoventa AS numpuntoventa "); sb.append(" from "); sb.append(" caja_diversos cd "); sb.append(" left join evento_extra ev on ev.eventoextra_id = cd.eventoextra_id "); sb.append(" left join empresa e on e.empresa_id = ev.empresa_id "); sb.append(" left join punto_venta pv on pv.puntoventa_id = cd.puntoventa_id "); sb.append(" left join caja_diversos_pago cdp on cdp.cajadiversos_id = cd.cajadiversos_id "); sb.append(" left join tipo_evento_extra tee on tee.tipoeventoextra_id = ev.tipoeventoextra_id "); sb.append(" left join ptovta_integra pi on e.empresa_id = pi.empresa_id and pi.puntoventa_id = pv.puntoventa_id "); sb.append(" where "); sb.append(" cd.feccorte = ? "); if (puntoVentaId != null && !puntoVentaId.equals(-1)){ sb.append(" and cd.puntoventa_id = " + puntoVentaId); } if (empresaId != null){ sb.append(" and e.empresa_id = " + empresaId); } sb.append(" and cd.activo = 1 "); sb.append(" and tee.indtipo = 1 "); //sb.append(" and cd.usuario_id=7061 "); sb.append(" group by "); sb.append(" cd.feccorte, "); sb.append(" e.empresa_id, "); sb.append(" pv.puntoventa_id, "); sb.append(" tee.contacontabil, "); sb.append(" pv.numpuntoventa "); PreparedStatement stmt = null; ResultSet rs = null; Date fecha = fechaParam; if(fechaParam== null){ fecha = getData(); } try{ stmt = getConnection().prepareStatement(sb.toString()); stmt.setDate(1, new java.sql.Date(fecha.getTime())); rs = stmt.executeQuery(); while (rs.next()){ DespesaReceita receita = new DespesaReceita(); receita.setCodigoEmpresa(rs.getInt(2)); receita.setCodigoReceitaDespesa(rs.getInt(5)); receita.setDataLancamento(rs.getDate(1)); receita.setDataMovimento(rs.getDate(1)); receita.setLocalArrecadação(rs.getInt(6)); receita.setValorLancamento(df.format(rs.getBigDecimal(4))); receita.setIdentificadorReceitaDespesa("R"); despesas.add(receita); } } catch (Exception e){ log.error(e.getMessage(),e); } 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; } public List getDespesas(Integer puntoventaId, Integer empresaId, Date fechaParam){ List despesas = new ArrayList(); StringBuilder sb = new StringBuilder(); sb.append(" select "); sb.append(" cd.feccorte as feccorte, "); sb.append(" e.empresa_id as empresa_id, "); sb.append(" pv.numpuntoventa as numpuntoventa, "); sb.append(" cdp.importe as valor, "); sb.append(" tee.contacontabil as contacontabil "); sb.append(" from "); sb.append(" caja_diversos cd "); sb.append(" left join evento_extra ev on ev.eventoextra_id = cd.eventoextra_id "); sb.append(" left join empresa e on e.empresa_id = ev.empresa_id "); sb.append(" left join punto_venta pv on pv.puntoventa_id = cd.puntoventa_id "); sb.append(" left join caja_diversos_pago cdp on cdp.cajadiversos_id = cd.cajadiversos_id "); sb.append(" left join tipo_evento_extra tee on tee.tipoeventoextra_id = ev.tipoeventoextra_id "); sb.append(" left join ptovta_integra pi on e.empresa_id = pi.empresa_id and pi.puntoventa_id = pv.puntoventa_id "); sb.append(" where "); sb.append(" cd.feccorte = ? "); sb.append(" and tee.indtipo = 0 "); if (puntoventaId != null && !puntoventaId.equals(-1)){ sb.append(" and cd.puntoventa_id = " + puntoventaId); } if (empresaId != null){ sb.append(" and e.empresa_id = " + empresaId); } sb.append(" and cd.activo = 1 "); //sb.append(" and cd.usuario_id=7061 "); sb.append(" and not exists (select ee.EVENTOEXTRA_ID from evento_extra ee where ev.EVENTOEXTRA_ID = ee.EVENTOEXTRACANC_ID) "); sb.append(" and ev.EVENTOEXTRACANC_ID is null "); Date fecha = fechaParam; if(fechaParam== null){ fecha = getData(); } PreparedStatement pstmt = null; ResultSet rs = null; try{ pstmt = getConnection().prepareStatement(sb.toString()); pstmt.setDate(1, new java.sql.Date(fecha.getTime())); rs = pstmt.executeQuery(); while (rs.next()){ DespesaReceita despesa = new DespesaReceita(); despesa.setCodigoEmpresa(rs.getInt(2)); despesa.setCodigoReceitaDespesa(rs.getInt(5)); despesa.setDataLancamento(rs.getDate(1)); despesa.setDataMovimento(rs.getDate(1)); despesa.setLocalArrecadação(rs.getInt(3)); despesa.setValorLancamento(df.format(rs.getBigDecimal(4).doubleValue() * -1)); despesa.setIdentificadorReceitaDespesa("D"); despesas.add(despesa); } } catch (Exception e){ log.error(e.getMessage(), e); } finally { try { rs.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } try { pstmt.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } } return despesas; } public List getDepositos(Integer puntoventaId, Integer empresaId, Date fechaParam){ List depositos = new ArrayList(); // StringBuilder sb = new StringBuilder(); // sb.append("select fdep.fechamentodeposito_id, fdep.valor, fdep.numdeposito, fdep.FECCREACION, fdep.fecha_deposito "); // sb.append("from fechamento_deposito fdep "); // sb.append("where trunc(FECCREACION) = :fecha and fdep.activo = 1 "); StringBuilder strFechamentos = new StringBuilder(); strFechamentos.append("Select sum(fdep.valor), fdep.numdeposito, fdep.fecha_deposito, fc.empresa_id, pv.numpuntoventa, ec.numagencia, ec.numconta, if.CODIGO, ec.numintegracion "); strFechamentos.append(" from fechamento_deposito fdep "); strFechamentos.append(" join fechamento_cct_deposito fd on fd.fechamentodeposito_id = fdep.fechamentodeposito_id "); strFechamentos.append(" join fechamento_cntcorrente fc on fc.fechamentocntcorrente_id = fd.fechamentocntcorrente_id "); strFechamentos.append(" inner join PUNTO_VENTA pv on PV.PUNTOVENTA_ID = FC.PUNTOVENTA_ID "); strFechamentos.append(" join empresa_contabancaria ec on ec.EMPRESACONTABANCARIA_ID = fdep.EMPRESACONTABANCARIA_ID "); strFechamentos.append(" join INSTI_FINANCEIRA if on if.INSTIFINANCEIRA_ID = EC.INSTIFINANCEIRA_ID "); strFechamentos.append(" join EMPRESA e on e.empresa_id = fc.empresa_id "); strFechamentos.append(" where trunc(fdep.feccreacion) = :fecha and fd.activo = 1 and fc.activo = 1 "); if (puntoventaId != null && !puntoventaId.equals(-1)){ strFechamentos.append(" and fc.puntoventa_id = " + puntoventaId); } if (empresaId != null){ strFechamentos.append(" and fc.empresa_id = " + empresaId); } strFechamentos.append(" group by fdep.numdeposito, fdep.fecha_deposito, fc.empresa_id, pv.numpuntoventa, ec.numagencia, ec.numconta, if.CODIGO, ec.numintegracion "); Date fecha = fechaParam; if(fechaParam == null){ fecha = getData(); } //PreparedStatement pstmt = null; //ResultSet rs = null; // pstmt = getConnection().prepareStatement(sb.toString()); // pstmt.setDate(1, new java.sql.Date(fecha.getTime())); // // rs = pstmt.executeQuery(); Integer codigoReceitaDespesaGlobus = getCodigoReceitaDespesaGlobus(); SimpleDateFormat sdf = new SimpleDateFormat("MM/yy"); PreparedStatement pstmtFechamentos = null; ResultSet rsFechamentos = null; BigDecimal soma = BigDecimal.ZERO; try{ // while (rs.next()){ pstmtFechamentos = getConnection().prepareStatement(strFechamentos.toString()); pstmtFechamentos.setDate(1, new java.sql.Date(fecha.getTime())); rsFechamentos = pstmtFechamentos.executeQuery(); while (rsFechamentos.next()){ Integer empId = null; Integer pvId = null; String banco = "" ; String agencia = ""; String contaCorrente = ""; String numDep = " Dep: " + rsFechamentos.getString(2); String valor = " R$ " + df.format(rsFechamentos.getBigDecimal(1)); String ref = " Ref: "; Integer codRecDesp = null; if (empId == null ){ empId = rsFechamentos.getInt(4); } if (banco.isEmpty()){banco = "Bco: " + DespesaReceita.lpad(rsFechamentos.getString(8), "0", 3);} if (pvId == null){ pvId = rsFechamentos.getInt(5); } if (agencia.isEmpty()){ agencia = " Ag: " + rsFechamentos.getString(6); } if (contaCorrente.isEmpty()){ contaCorrente = " C/C: " + rsFechamentos.getString(7); } //ref += ref.length() <= 6 ? sdf.format(rsFechamentos.getDate(3)) : ", " + sdf.format(rsFechamentos.getDate(3)); if (codRecDesp == null){ codRecDesp = rsFechamentos.getInt(9); } DespesaReceita deposito = new DespesaReceita(); deposito.setCodigoEmpresa(empId); deposito.setDataLancamento(rsFechamentos.getDate(3)); deposito.setDataMovimento(rsFechamentos.getDate(3)); deposito.setLocalArrecadação(pvId); deposito.setValorLancamento(df.format(rsFechamentos.getBigDecimal(1))); deposito.setIdentificadorReceitaDespesa("D"); deposito.setCodigoReceitaDespesa(codRecDesp); deposito.setDescricaoDetalhada(banco + agencia + contaCorrente + numDep + valor); depositos.add(deposito); soma = soma.add(rsFechamentos.getBigDecimal(1)); } log.debug("Total depósitos: " + soma); } catch (Exception e){ log.error(e.getMessage(), e); } finally { try { pstmtFechamentos.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } try { rsFechamentos.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } } return depositos; } public Integer getCodigoReceitaDespesaGlobus(){ StringBuilder sb = new StringBuilder(); sb.append("Select valorconstante from constante where nombconstante = 'CODIGO_RECEITA_DESPESA_GLOBUS' "); PreparedStatement pstmt = null; ResultSet rs = null; Integer result = null; try{ pstmt = getConnection().prepareStatement(sb.toString()); rs = pstmt.executeQuery(); if (rs.next()){ result = rs.getInt(1); } } catch (Exception e){ log.error(e.getMessage(), e); } finally { try { rs.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } try { pstmt.close(); } catch (Exception ignore) { log.error(ignore.getMessage(), ignore); } } return result; } private Date getData(){ Calendar cal = Calendar.getInstance(); cal.set(2015, 10, 13); cal.setTime(new Date()); cal.add(Calendar.DAY_OF_MONTH, DAYS_AGO); return cal.getTime(); } public List getPontosVenda() { return pontosVenda; } public void setPontosVenda(List pontosVenda) { this.pontosVenda = pontosVenda; } public List getEmpresas() { return empresas; } public void setEmpresas(List empresas) { this.empresas = empresas; } }