diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/ReceitaDespesaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/ReceitaDespesaHibernateDAO.java index f61840d67..11b4db0a6 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/ReceitaDespesaHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/ReceitaDespesaHibernateDAO.java @@ -15,6 +15,7 @@ import java.util.Map.Entry; import javax.sql.DataSource; +import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +24,7 @@ import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.ReceitaDespesaDAO; import com.rjconsultores.ventaboletos.exception.BusinessException; import com.rjconsultores.ventaboletos.relatorios.receitaDespesa.RelatorioFinanceiroReceitasDespesasBean; +import com.rjconsultores.ventaboletos.utilerias.MoneyHelper; import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; @Repository("receitaDespesaDAO") @@ -44,8 +46,7 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { StringBuilder sql = new StringBuilder(); sql.append(" SELECT ") .append("LISTAGG(fp.cvepago||' /'||CAST(cfp.IMPORTE AS VARCHAR(10)),';') WITHIN GROUP( ORDER BY 1 DESC ) AS descpago,") - .append(" C.FECHORVTA, P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.INDTIPO, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, ") - .append(" CASE WHEN TE.INDTIPO = 1 THEN C.PRECIO ELSE (CASE WHEN TE.INDTIPO = 0 THEN (C.PRECIO * -1) END) END PRECIO, ") + .append(" C.FECHORVTA, P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, ") .append(" C.NUMSERIEPREIMPRESA, C.NUMFOLIOPREIMPRESO, E.NUMDOCUMENTO,E.EVENTOEXTRA_ID ") .append(" FROM CAJA_DIVERSOS C ") .append(" JOIN EVENTO_EXTRA E ON E.EVENTOEXTRA_ID = C.EVENTOEXTRA_ID ") @@ -53,6 +54,7 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { .append(" JOIN PUNTO_VENTA P ON P.PUNTOVENTA_ID = C.PUNTOVENTA_ID ") .append(" JOIN CAJA_DIVERSOS_PAGO cfp ON ( c.cajadiversos_id = cfp.cajadiversos_id)") .append(" JOIN FORMA_PAGO fp ON ( cfp.formapago_id = fp.formapago_id )") + .append(" LEFT JOIN BOLETO B ON B.BOLETO_ID = E.BOLETO_ID ") .append("WHERE C.ACTIVO = 1 "); adicionarFiltros(sql, parametros); @@ -62,24 +64,13 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { .append("p.puntoventa_id, ") .append("p.nombpuntoventa, ") .append("p.numpuntoventa, ") - .append("te.indtipo, ") .append("te.tipoeventoextra_id, ") .append("te.desctipoevento, ") - .append("CASE ") - .append(" WHEN te.indtipo = 1 THEN c.precio ") - .append(" ELSE ( ") - .append(" CASE ") - .append(" WHEN te.indtipo = 0 THEN ( c.precio *-1 ) ") - .append(" END ") - .append(" ) ") - .append("END, ") .append("c.numseriepreimpresa, ") .append("c.numfoliopreimpreso, ") .append("e.numdocumento, ") .append("e.eventoextra_id "); - - sql.append("ORDER BY C.FECHORVTA, TE.DESCTIPOEVENTO, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA"); NamedParameterStatement stmt = new NamedParameterStatement(con, sql.toString()); @@ -94,8 +85,6 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { bean.setTipoEventoExtraId(resultSet.getString("TIPOEVENTOEXTRA_ID")); bean.setNombPuntoVenta(resultSet.getString("NOMBPUNTOVENTA")); bean.setNumPuntoVenta(resultSet.getString("NUMPUNTOVENTA")); - bean.setPrecio(resultSet.getBigDecimal("PRECIO")); - bean.setIndtipo(resultSet.getInt("INDTIPO")); bean.setPuntoVentaId(resultSet.getInt("PUNTOVENTA_ID")); bean.setFormaPagamento(resultSet.getString("DESCPAGO")); bean.setNumSeriePreImpresa(resultSet.getString("NUMSERIEPREIMPRESA")); @@ -103,6 +92,8 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { bean.setNumDocumento(resultSet.getString("NUMDOCUMENTO")); setFormasDePagamento(bean); setValorFormaPagamento(bean); + + bean.setIndtipo(MoneyHelper.isMaiorIgual(bean.getPrecio(), BigDecimal.ZERO) ? 1 : 0); lsBean.add(bean); } @@ -130,34 +121,44 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { con = dataSourceRead.getConnection(); StringBuilder sql = new StringBuilder(); - sql.append("SELECT P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, ") - .append("SUM(CASE WHEN TE.INDTIPO = 1 THEN C.PRECIO ELSE 0 END) RECEITA, ") - .append("SUM(CASE WHEN TE.INDTIPO = 1 THEN C.PRECIO ELSE (CASE WHEN TE.INDTIPO = 0 THEN (C.PRECIO * -1) END) END) DESPESA ") + sql.append("SELECT P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, CDP.IMPORTE ") .append("FROM CAJA_DIVERSOS C ") .append("JOIN EVENTO_EXTRA E ON E.EVENTOEXTRA_ID = C.EVENTOEXTRA_ID ") .append("JOIN TIPO_EVENTO_EXTRA TE ON TE.TIPOEVENTOEXTRA_ID = E.TIPOEVENTOEXTRA_ID ") .append("JOIN PUNTO_VENTA P ON P.PUNTOVENTA_ID = C.PUNTOVENTA_ID ") + .append("JOIN CAJA_DIVERSOS_PAGO CDP ON CDP.CAJADIVERSOS_ID = C.CAJADIVERSOS_ID ") + .append("LEFT JOIN BOLETO B ON B.BOLETO_ID = E.BOLETO_ID ") .append("WHERE C.ACTIVO = 1 "); adicionarFiltros(sql, parametros); - sql.append("GROUP BY P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA ") - .append("ORDER BY P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA"); + sql.append("ORDER BY P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA"); NamedParameterStatement stmt = new NamedParameterStatement(con, sql.toString()); setParametros(stmt); ResultSet resultSet = stmt.executeQuery(); - List lsBean = new ArrayList(); + Map map = new HashMap(); while (resultSet.next()) { RelatorioFinanceiroReceitasDespesasBean bean = new RelatorioFinanceiroReceitasDespesasBean(); bean.setPuntoVentaId(resultSet.getInt("PUNTOVENTA_ID")); bean.setNombPuntoVenta(resultSet.getString("NOMBPUNTOVENTA")); bean.setNumPuntoVenta(resultSet.getString("NUMPUNTOVENTA")); - bean.setReceita(resultSet.getBigDecimal("RECEITA")); - bean.setDespesa(resultSet.getBigDecimal("DESPESA")); - lsBean.add(bean); + + if(map.containsKey(bean.getPuntoVentaId())) { + bean = map.get(bean.getPuntoVentaId()); + } + + BigDecimal precio = resultSet.getBigDecimal("IMPORTE"); + if(MoneyHelper.isMaiorIgual(precio, BigDecimal.ZERO)) { + bean.setReceita(MoneyHelper.somar(bean.getReceita(), precio)); + } else { + bean.setDespesa(MoneyHelper.somar(bean.getDespesa(), precio)); + } + + map.put(bean.getPuntoVentaId(), bean); } + List lsBean = new ArrayList(map.values()); return lsBean; @@ -183,17 +184,19 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { con = dataSourceRead.getConnection(); StringBuilder sql = new StringBuilder(); - sql.append("SELECT P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, TE.INDTIPO, ") - .append("SUM(CASE WHEN TE.INDTIPO = 1 THEN C.PRECIO ELSE (CASE WHEN TE.INDTIPO = 0 THEN (C.PRECIO * -1) END) END) PRECIO ") + sql.append("SELECT P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, ") + .append("SUM(CDP.IMPORTE) PRECIO ") .append("FROM CAJA_DIVERSOS C ") .append("JOIN EVENTO_EXTRA E ON E.EVENTOEXTRA_ID = C.EVENTOEXTRA_ID ") .append("JOIN TIPO_EVENTO_EXTRA TE ON TE.TIPOEVENTOEXTRA_ID = E.TIPOEVENTOEXTRA_ID ") .append("JOIN PUNTO_VENTA P ON P.PUNTOVENTA_ID = C.PUNTOVENTA_ID ") + .append("JOIN CAJA_DIVERSOS_PAGO CDP ON CDP.CAJADIVERSOS_ID = C.CAJADIVERSOS_ID ") + .append("LEFT JOIN BOLETO B ON B.BOLETO_ID = E.BOLETO_ID ") .append("WHERE C.ACTIVO = 1 "); adicionarFiltros(sql, parametros); - sql.append("GROUP BY P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, TE.INDTIPO ") + sql.append("GROUP BY P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO ") .append("ORDER BY P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.DESCTIPOEVENTO"); NamedParameterStatement stmt = new NamedParameterStatement(con, sql.toString()); @@ -207,7 +210,7 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { bean.setNombPuntoVenta(resultSet.getString("NOMBPUNTOVENTA")); bean.setNumPuntoVenta(resultSet.getString("NUMPUNTOVENTA")); bean.setPrecio(resultSet.getBigDecimal("PRECIO")); - bean.setIndtipo(resultSet.getInt("INDTIPO")); + bean.setIndtipo(MoneyHelper.isMaiorIgual(bean.getPrecio(), BigDecimal.ZERO) ? 1 : 0); bean.setTipoEventoExtraId(resultSet.getString("TIPOEVENTOEXTRA_ID")); bean.setDescTipoEvento(resultSet.getString("DESCTIPOEVENTO")); lsBean.add(bean); @@ -237,18 +240,20 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { con = dataSourceRead.getConnection(); StringBuilder sql = new StringBuilder(); - sql.append("SELECT P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, TE.INDTIPO, ") - .append("SUM(CASE WHEN TE.INDTIPO = 1 THEN C.PRECIO ELSE (CASE WHEN TE.INDTIPO = 0 THEN (C.PRECIO * -1) END) END) PRECIO ") + sql.append("SELECT P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, ") + .append("SUM(CDP.IMPORTE) PRECIO ") .append("FROM CAJA_DIVERSOS C ") .append("JOIN EVENTO_EXTRA E ON E.EVENTOEXTRA_ID = C.EVENTOEXTRA_ID ") .append("JOIN TIPO_EVENTO_EXTRA TE ON TE.TIPOEVENTOEXTRA_ID = E.TIPOEVENTOEXTRA_ID ") .append("JOIN PUNTO_VENTA P ON P.PUNTOVENTA_ID = C.PUNTOVENTA_ID ") + .append("JOIN CAJA_DIVERSOS_PAGO CDP ON CDP.CAJADIVERSOS_ID = C.CAJADIVERSOS_ID ") + .append("LEFT JOIN BOLETO B ON B.BOLETO_ID = E.BOLETO_ID ") .append("WHERE C.ACTIVO = 1 "); adicionarFiltros(sql, parametros); - sql.append("GROUP BY P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, TE.INDTIPO ") - .append("ORDER BY TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, TE.INDTIPO, P.NOMBPUNTOVENTA"); + sql.append("GROUP BY P.PUNTOVENTA_ID, P.NOMBPUNTOVENTA, P.NUMPUNTOVENTA, TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO ") + .append("ORDER BY TE.TIPOEVENTOEXTRA_ID, TE.DESCTIPOEVENTO, P.NOMBPUNTOVENTA"); NamedParameterStatement stmt = new NamedParameterStatement(con, sql.toString()); setParametros(stmt); @@ -261,7 +266,7 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { bean.setNombPuntoVenta(resultSet.getString("NOMBPUNTOVENTA")); bean.setNumPuntoVenta(resultSet.getString("NUMPUNTOVENTA")); bean.setPrecio(resultSet.getBigDecimal("PRECIO")); - bean.setIndtipo(resultSet.getInt("INDTIPO")); + bean.setIndtipo(MoneyHelper.isMaiorIgual(bean.getPrecio(), BigDecimal.ZERO) ? 1 : 0); bean.setTipoEventoExtraId(resultSet.getString("TIPOEVENTOEXTRA_ID")); bean.setDescTipoEvento(resultSet.getString("DESCTIPOEVENTO")); lsBean.add(bean); @@ -287,19 +292,35 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { @SuppressWarnings({ "unchecked", "rawtypes" }) private void adicionarFiltros(StringBuilder sql, Map parametros) { parametrosFiltro = new HashMap(); + sql.append(" AND (E.BOLETO_ID IS NULL OR E.BOLETO_ID = B.BOLETO_ID) "); + if(parametros.containsKey("empresaId")) { sql.append("AND E.EMPRESA_ID = :empresaId "); parametrosFiltro.put("empresaId", parametros.get("empresaId")); } - if(parametros.containsKey("fecInicio")) { - sql.append("AND C.FECHORVTA >= TO_DATE(:fecInicio,'DD/MM/YYYY HH24:MI') "); - parametrosFiltro.put("fecInicio", parametros.get("fecInicio")); - } - - if(parametros.containsKey("fecFinal")) { - sql.append("AND C.FECHORVTA <= TO_DATE(:fecFinal,'DD/MM/YYYY HH24:MI') "); - parametrosFiltro.put("fecFinal", parametros.get("fecFinal")); + boolean isDataFechamentoCaixa = parametros.get("isDataFechamentoCaixa") != null ? BooleanUtils.toBoolean(parametros.get("isDataFechamentoCaixa").toString()) : false; + + if(isDataFechamentoCaixa) { + if(parametros.containsKey("fecInicio")) { + sql.append("AND C.FECCORTE >= TO_DATE(:fecInicio,'DD/MM/YYYY HH24:MI') "); + parametrosFiltro.put("fecInicio", parametros.get("fecInicio")); + } + + if(parametros.containsKey("fecFinal")) { + sql.append("AND C.FECCORTE <= TO_DATE(:fecFinal,'DD/MM/YYYY HH24:MI') "); + parametrosFiltro.put("fecFinal", parametros.get("fecFinal")); + } + } else { + if(parametros.containsKey("fecInicio")) { + sql.append("AND C.FECHORVTA >= TO_DATE(:fecInicio,'DD/MM/YYYY HH24:MI') "); + parametrosFiltro.put("fecInicio", parametros.get("fecInicio")); + } + + if(parametros.containsKey("fecFinal")) { + sql.append("AND C.FECHORVTA <= TO_DATE(:fecFinal,'DD/MM/YYYY HH24:MI') "); + parametrosFiltro.put("fecFinal", parametros.get("fecFinal")); + } } if(parametros.containsKey("numDocumento")) { @@ -378,6 +399,8 @@ public class ReceitaDespesaHibernateDAO implements ReceitaDespesaDAO { bean.setValorFormaPagamento1(formatarValorFormaDePagamento(formaPagamento[0])); } } + + bean.setPrecio(MoneyHelper.somar(bean.getValorFormaPagamento1(), bean.getValorFormaPagamento2(), bean.getValorFormaPagamento3())); } private String formatarFormaDePagamento(String formaDePagamento){ diff --git a/src/com/rjconsultores/ventaboletos/relatorios/receitaDespesa/RelatorioFinanceiroReceitasDespesasBean.java b/src/com/rjconsultores/ventaboletos/relatorios/receitaDespesa/RelatorioFinanceiroReceitasDespesasBean.java index 71f0f8c93..4570da924 100644 --- a/src/com/rjconsultores/ventaboletos/relatorios/receitaDespesa/RelatorioFinanceiroReceitasDespesasBean.java +++ b/src/com/rjconsultores/ventaboletos/relatorios/receitaDespesa/RelatorioFinanceiroReceitasDespesasBean.java @@ -79,7 +79,7 @@ public class RelatorioFinanceiroReceitasDespesasBean { } public BigDecimal getReceita() { - return receita; + return receita != null ? receita : BigDecimal.ZERO; } public void setReceita(BigDecimal receita) { @@ -87,7 +87,7 @@ public class RelatorioFinanceiroReceitasDespesasBean { } public BigDecimal getDespesa() { - return despesa; + return despesa != null ? despesa : BigDecimal.ZERO; } public void setDespesa(BigDecimal despesa) { @@ -103,7 +103,7 @@ public class RelatorioFinanceiroReceitasDespesasBean { } public BigDecimal getSaldo() { - return receita.subtract(despesa); + return getReceita().add(getDespesa()); } public Integer getIndtipo() { @@ -182,7 +182,7 @@ public class RelatorioFinanceiroReceitasDespesasBean { } public BigDecimal getValorFormaPagamento1() { - return ValorFormaPagamento1; + return ValorFormaPagamento1 != null ? ValorFormaPagamento1 : BigDecimal.ZERO; } public void setValorFormaPagamento1(BigDecimal valorFormaPagamento1) { @@ -190,7 +190,7 @@ public class RelatorioFinanceiroReceitasDespesasBean { } public BigDecimal getValorFormaPagamento2() { - return ValorFormaPagamento2; + return ValorFormaPagamento2 != null ? ValorFormaPagamento2 : BigDecimal.ZERO; } public void setValorFormaPagamento2(BigDecimal valorFormaPagamento2) { @@ -198,7 +198,7 @@ public class RelatorioFinanceiroReceitasDespesasBean { } public BigDecimal getValorFormaPagamento3() { - return ValorFormaPagamento3; + return ValorFormaPagamento3 != null ? ValorFormaPagamento3 : BigDecimal.ZERO; } public void setValorFormaPagamento3(BigDecimal valorFormaPagamento3) {