/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.rjconsultores.ventaboletos.dao.hibernate; import com.rjconsultores.ventaboletos.dao.InformeVentasPuntoVentaDAO; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Date; import java.util.Map; import org.apache.log4j.Logger; import org.springframework.stereotype.Repository; /** * * @author Administrador */ @Repository("informeVentasPuntoVentaDAO") public class InformeVentasPuntoVentaDAOImpl implements InformeVentasPuntoVentaDAO { private static final Logger log = Logger.getLogger(InformeVentasPuntoVentaDAOImpl.class); private String getSql(PuntoVenta puntoVenta, Date dataInicio, Date dataFinal) { StringBuilder where = new StringBuilder(); if (dataInicio != null) { where.append(" AND bo.fechorventa >= ? "); } if (dataFinal != null) { where.append(" AND bo.fechorventa <= ? "); } if (puntoVenta != null) { where.append(" AND pu.puntoventa_id = ").append(puntoVenta.getPuntoventaId()); } StringBuilder sql = new StringBuilder(); sql.append(" SELECT vendidos.puntoventa_id, vendidos.nombpuntoventa, "); sql.append(" vendidos.qtde_total AS qtde_total_vendidos, "); sql.append(" vendidos.valor_total AS valor_total_vendidos, "); sql.append(" cancelado.qtde_total AS qtde_total_cancelado, "); sql.append(" cancelado.valor_total as valor_total_cancelado "); sql.append(" FROM (SELECT pu.puntoventa_id, pu.nombpuntoventa, "); sql.append(" COUNT(*) qtde_total, "); sql.append(" SUM(bo.preciopagado) valor_total "); sql.append(" FROM boleto bo "); sql.append(" INNER JOIN punto_venta pu ON pu.puntoventa_id = bo.puntoventa_id "); sql.append(" WHERE bo.motivocancelacion_id IS NOT NULL ").append(where); sql.append(" GROUP BY pu.puntoventa_id, pu.nombpuntoventa) cancelado "); sql.append(" INNER JOIN (SELECT pu.puntoventa_id, pu.nombpuntoventa, "); sql.append(" COUNT(*) qtde_total, "); sql.append(" SUM(bo.preciopagado) valor_total "); sql.append(" FROM boleto bo "); sql.append(" INNER JOIN punto_venta pu ON pu.puntoventa_id = bo.puntoventa_id "); sql.append(" WHERE bo.motivocancelacion_id IS NULL ").append(where); sql.append(" GROUP BY pu.puntoventa_id, pu.nombpuntoventa) vendidos "); sql.append(" ON cancelado.puntoventa_id = vendidos.puntoventa_id "); sql.append(" ORDER BY nombpuntoventa "); return sql.toString(); } public ResultSet executarSQL(Connection conn, Map parameters) { PuntoVenta puntoVenta = (PuntoVenta) parameters.get("puntoVenta"); Date dataInicio = (Date) parameters.get("dataInicio"); Date dataFinal = (Date) parameters.get("dataFinal"); String sql = getSql(puntoVenta, dataInicio, dataFinal); PreparedStatement stmt = null; ResultSet rset = null; try { stmt = conn.prepareStatement(sql); stmt.setDate(1, new java.sql.Date(dataInicio.getTime())); stmt.setDate(2, new java.sql.Date(dataFinal.getTime())); stmt.setDate(3, new java.sql.Date(dataInicio.getTime())); stmt.setDate(4, new java.sql.Date(dataFinal.getTime())); rset = stmt.executeQuery(); } catch (Exception ex) { log.error(ex); } return rset; } }