Corregido error en la generacion del informe, mucho se tuvo que cambiar del mismo para que voliera a funcionar

Presentaba errores al intentar conseguir los numeros de las distintos numeros de boleta dado a la query que se estaba realizando, se corrige creando 2 querys separadas y se comprueba que los numeros de boleta sean minimos o maimos en el codigo
This commit is contained in:
Daniel Cortes
2019-01-12 17:39:10 -03:00
parent 0024ed1376
commit 06b2de9f65
10 changed files with 369 additions and 339 deletions

View File

@@ -38,6 +38,7 @@ import danielcortes.xyz.models.efectivo.SQLiteEfectivoDAO;
import danielcortes.xyz.models.egreso.EgresoDAO;
import danielcortes.xyz.models.egreso.MysqlEgresoDAO;
import danielcortes.xyz.models.egreso.SQLiteEgresoDAO;
import danielcortes.xyz.models.informe.SQLiteInformeMensualContentDAO;
import danielcortes.xyz.models.ingreso.IngresoDAO;
import danielcortes.xyz.models.ingreso.MysqlIngresoDAO;
import danielcortes.xyz.models.ingreso.SQLiteIngresoDAO;
@@ -49,6 +50,7 @@ import danielcortes.xyz.models.tipo_ingreso.SQLiteTipoIngresoDAO;
import danielcortes.xyz.models.tipo_ingreso.TipoIngresoDAO;
import danielcortes.xyz.views.ManagerView;
import javax.swing.*;
import java.time.LocalDate;
import java.util.Locale;
public class Main {

View File

@@ -38,10 +38,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.*;
public class InformeMensual {
private final String[] titles = {
@@ -68,7 +65,8 @@ public class InformeMensual {
private final String[] dias = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
private List<InformeMensualContent> informe;
private ArrayList<InformeMensualContent> informe;
private int informeSize;
private File saveFile;
private Workbook wb;
@@ -79,7 +77,8 @@ public class InformeMensual {
public InformeMensual(LocalDate date, File saveFile) {
new SQLiteCajaDAO().createCajasForMonth(date);
this.informe = new SQLiteInformeMensualContentDAO().getInformeMensual(date);
this.informe = new ArrayList<>(new SQLiteInformeMensualContentDAO().getInformeMensual(date));
this.informeSize = this.informe.size();
this.saveFile = saveFile;
this.wb = new HSSFWorkbook();
@@ -89,6 +88,10 @@ public class InformeMensual {
this.styles = this.generateStyles();
}
private void sortInforme(){
this.informe.sort(Comparator.comparing(InformeMensualContent::getFecha));
}
private void fillHeaders() {
Row titles = sheet.createRow(0);
Row subtitles = sheet.createRow(1);
@@ -103,38 +106,39 @@ public class InformeMensual {
}
private void fillData() {
for (int x = 2; x < 2 + informe.size(); x++) {
int x = 2;
for(InformeMensualContent data : this.informe){
int y = 0;
Row dataRow = sheet.createRow(x);
InformeMensualContent data = informe.get(x - 2);
Date fecha = Date.from(data.getFecha().atStartOfDay(ZoneId.systemDefault()).toInstant());
dataRow.createCell(y++).setCellValue(this.dias[data.getDia()]);
dataRow.createCell(y++).setCellValue(fecha);
dataRow.createCell(y++).setCellValue(data.getManualesInicial());
dataRow.createCell(y++).setCellValue(data.getManualesFinal());
dataRow.createCell(y++).setCellValue(data.getManualesInicial() == null ? "0": data.getManualesInicial());
dataRow.createCell(y++).setCellValue(data.getManualesFinal() == null ? "0" : data.getManualesFinal());
dataRow.createCell(y++).setCellValue(data.getManuales());
dataRow.createCell(y++).setCellValue(data.getFiscalesZInicial());
dataRow.createCell(y++).setCellValue(data.getFiscalesZFinal());
dataRow.createCell(y++).setCellValue(data.getFiscalesInicial());
dataRow.createCell(y++).setCellValue(data.getFiscalesFinal());
dataRow.createCell(y++).setCellValue(data.getFiscalesZInicial() == null ? "0" : data.getFiscalesZInicial());
dataRow.createCell(y++).setCellValue(data.getFiscalesZFinal() == null ? "0" : data.getFiscalesZFinal());
dataRow.createCell(y++).setCellValue(data.getFiscalesInicial() == null ? "0" : data.getFiscalesInicial());
dataRow.createCell(y++).setCellValue(data.getFiscalesFinal() == null ? "0" : data.getFiscalesFinal());
dataRow.createCell(y++).setCellValue(data.getFiscales());
dataRow.createCell(y++).setCellValue(data.getExentasInicial());
dataRow.createCell(y++).setCellValue(data.getExentasFinal());
dataRow.createCell(y++).setCellValue(data.getExentasInicial() == null ? "0" : data.getExentasInicial());
dataRow.createCell(y++).setCellValue(data.getExentasFinal() == null ? "0" : data.getExentasFinal());
dataRow.createCell(y++).setCellValue(data.getExentas());
dataRow.createCell(y++).setCellValue(data.getSubTotal());
dataRow.createCell(y++).setCellValue(data.getFacturasInicial());
dataRow.createCell(y++).setCellValue(data.getFacturasFinal());
dataRow.createCell(y++).setCellValue(data.getFacturasInicial() == null ? "0" : data.getFacturasInicial());
dataRow.createCell(y++).setCellValue(data.getFacturasFinal() == null ? "0" : data.getFacturasFinal());
dataRow.createCell(y++).setCellValue(data.getFacturas());
dataRow.createCell(y++).setCellValue(data.getGuiasInicial());
dataRow.createCell(y++).setCellValue(data.getGuiasFinal());
dataRow.createCell(y++).setCellValue(data.getGuiasInicial() == null ? "0" : data.getGuiasInicial());
dataRow.createCell(y++).setCellValue(data.getGuiasFinal() == null ? "0" : data.getGuiasFinal());
dataRow.createCell(y++).setCellValue(data.getGuias());
dataRow.createCell(y++).setCellValue(data.getTotal());
@@ -144,11 +148,12 @@ public class InformeMensual {
} else {
dataRow.createCell(y).setCellFormula(("U" + (x + 1)) + ("+") + ("V" + (x)));
}
x++;
}
}
private void fillTotales() {
int row = 2 + informe.size();
int row = 2 + this.informeSize;
Row totalesRow = sheet.createRow(row);
totalesRow.createCell(0).setCellValue("TOTALES");
@@ -223,7 +228,7 @@ public class InformeMensual {
}
//Estilos para las celdas de los datos
for (int x = 2; x < informe.size() + 2; x++) {
for (int x = 2; x < this.informeSize + 2; x++) {
Row row = this.sheet.getRow(x);
int y = 0;
@@ -294,6 +299,7 @@ public class InformeMensual {
}
public File generarInforme() {
sortInforme();
fillData();
fillHeaders();
fillTotales();

View File

@@ -74,6 +74,7 @@ public class InformeMensualContent {
}
public String getManualesFinal() {
return manualesFinal;
}
@@ -110,7 +111,7 @@ public class InformeMensualContent {
}
public void setFiscalesInicial(String fiscalesInicial) {
this.fiscalesInicial = fiscalesInicial;
this.fiscalesInicial = fiscalesInicial;
}
public String getFiscalesFinal() {
@@ -222,12 +223,18 @@ public class InformeMensualContent {
return "InformeMensualContent{" +
"dia=" + dia +
", fecha=" + fecha +
", fiscalesInicial='" + fiscalesInicial + '\'' +
", fiscalesFinal='" + fiscalesFinal + '\'' +
", fiscales=" + fiscales +
", manualesInicial='" + manualesInicial + '\'' +
", manualesFinal='" + manualesFinal + '\'' +
", manuales=" + manuales +
", fiscalesZInicial='" + fiscalesZInicial + '\'' +
", fiscalesZFinal='" + fiscalesZFinal + '\'' +
", fiscalesInicial='" + fiscalesInicial + '\'' +
", fiscalesFinal='" + fiscalesFinal + '\'' +
", fiscales=" + fiscales +
", exentasInicial='" + exentasInicial + '\'' +
", exentasFinal='" + exentasFinal + '\'' +
", exentas=" + exentas +
", subTotal=" + subTotal +
", facturasInicial='" + facturasInicial + '\'' +
", facturasFinal='" + facturasFinal + '\'' +
", facturas=" + facturas +

View File

@@ -25,7 +25,7 @@
package danielcortes.xyz.models.informe;
import java.time.LocalDate;
import java.util.List;
import java.util.Collection;
public abstract class InformeMensualContentDAO {
/**
@@ -33,5 +33,5 @@ public abstract class InformeMensualContentDAO {
* @param date fecha que esta dentro del mes en el que se necesita el informe
* @return Lista con las columnas principales necesarias para el informe
*/
public abstract List<InformeMensualContent> getInformeMensual(LocalDate date);
public abstract Collection<InformeMensualContent> getInformeMensual(LocalDate date);
}

View File

@@ -31,78 +31,57 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
public class SQLiteInformeMensualContentDAO extends InformeMensualContentDAO {
HashMap<Integer, InformeMensualContent> map;
public SQLiteInformeMensualContentDAO(){
this.map = new HashMap<>();
}
@Override
public List<InformeMensualContent> getInformeMensual(LocalDate date) {
ArrayList<InformeMensualContent> list = new ArrayList<>();
public Collection<InformeMensualContent> getInformeMensual(LocalDate date) {
try {
Connection conn = new SQLiteConnectionHolder().getConnection();
String query =
String queryTotales =
"select " +
"caja.id as \"caja\",\n" +
"strftime(\"%w\", caja.fecha) as \"dia\",\n" +
"caja.fecha as \"fecha\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 2 then ingresos.valor else 0 end) as \"manuales\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 1 then ingresos.valor else 0 end) as \"fiscales\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 5 then ingresos.valor else 0 end) as \"exentas\",\n" +
"sum(case when ingresos.tipo_ingreso_id in (2, 1, 5) then ingresos.valor else 0 end) as \"sub_total\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 3 then ingresos.valor else 0 end) as \"facturas\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 4 then ingresos.valor else 0 end) as \"guias\",\n" +
"sum(case when ingresos.valor not null then ingresos.valor else 0 end) as \"total\"\n" +
"from caja left join ingresos on (caja.id = ingresos.caja_id)\n" +
"where caja.fecha between date(?) and date(?)\n" +
"group by caja.fecha\n";
String queryNumeros =
"select\n" +
"strftime(\"%w\", caja.fecha) as \"dia\",\n" +
"caja.fecha as \"fecha\",\n" +
"min(case when ingresos.tipo_ingreso_id = 2 and ingresos.valor > 0 then ingresos.nro_inicial else 0 end) as \"manuales_inicial\",\n" +
"max(case when ingresos.tipo_ingreso_id = 2 and ingresos.valor > 0 then ingresos.nro_final else 0 end) as \"manuales_final\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 2 then ingresos.valor else 0 end) as \"manuales\",\n" +
"min(case when ingresos.tipo_ingreso_id = 1 and ingresos.valor > 0 then ingresos.nro_inicial else 0 end) as \"fiscales_inicial\",\n" +
"max(case when ingresos.tipo_ingreso_id = 1 and ingresos.valor > 0 then ingresos.nro_final else 0 end) as \"fiscales_final\",\n" +
"min(case when ingresos.tipo_ingreso_id = 1 and ingresos.valor > 0 then ingresos.nro_z_inicial else 0 end) as \"fiscales_z_inicial\",\n" +
"max(case when ingresos.tipo_ingreso_id = 1 and ingresos.valor > 0 then ingresos.nro_z_final else 0 end) as \"fiscales_z_final\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 1 then ingresos.valor else 0 end) as \"fiscales\",\n" +
"min(case when ingresos.tipo_ingreso_id = 5 and ingresos.valor > 0 then ingresos.nro_inicial else 0 end) as \"exentas_inicial\",\n" +
"max(case when ingresos.tipo_ingreso_id = 5 and ingresos.valor > 0 then ingresos.nro_final else 0 end) as \"exentas_final\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 5 then ingresos.valor else 0 end) as \"exentas\",\n" +
"sum(case when ingresos.tipo_ingreso_id in (2, 1, 5) then ingresos.valor else 0 end ) as \"sub_total\",\n" +
"min(case when ingresos.tipo_ingreso_id = 3 and ingresos.valor > 0 then ingresos.nro_inicial else 0 end) as \"facturas_inicial\",\n" +
"max(case when ingresos.tipo_ingreso_id = 3 and ingresos.valor > 0 then ingresos.nro_final else 0 end) as \"facturas_final\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 3 then ingresos.valor else 0 end) as \"facturas\",\n" +
"min(case when ingresos.tipo_ingreso_id = 4 and ingresos.valor > 0 then ingresos.nro_inicial else 0 end) as \"guias_inicial\",\n" +
"max(case when ingresos.tipo_ingreso_id = 4 and ingresos.valor > 0 then ingresos.nro_final else 0 end) as \"guias_final\",\n" +
"sum(case when ingresos.tipo_ingreso_id = 4 then ingresos.valor else 0 end) as \"guias\",\n" +
"sum(case when ingresos.valor not null then ingresos.valor else 0 end) as \"total\"\n" +
"from caja\n" +
"left join ingresos on (caja.id = ingresos.caja_id)\n" +
"where caja.fecha between date(?) and date(?)\n" +
"group by caja.fecha\n" +
"order by caja.fecha\n";
PreparedStatement ps = conn.prepareStatement(query);
"caja.id as \"caja\",\n" +
"caja.fecha as \"fecha\",\n" +
"ingresos.nro_inicial as \"inicial\",\n" +
"ingresos.nro_final as \"final\",\n" +
"ingresos.nro_z_inicial as \"z_inicial\",\n" +
"ingresos.nro_z_final as \"z_final\",\n" +
"ingresos.tipo_ingreso_id as \"tipo_ingreso\"\n" +
"from caja join ingresos on (caja.id = ingresos.caja_id)\n" +
"where caja.fecha between date(?) and date(?)\n";
PreparedStatement ps = conn.prepareStatement(queryTotales);
ps.setString(1, date.withDayOfMonth(1).toString());
ps.setString(2, date.withDayOfMonth(date.lengthOfMonth()).toString());
ResultSet rs = ps.executeQuery();
while (rs.next()) {
InformeMensualContent informeMensualContent = new InformeMensualContent();
informeMensualContent.setDia(rs.getInt("dia"));
informeMensualContent.setFecha(LocalDate.parse(rs.getString("fecha")));
informeMensualContent.setManualesInicial(rs.getString("manuales_inicial"));
informeMensualContent.setManualesFinal(rs.getString("manuales_final"));
informeMensualContent.setManuales(rs.getInt("manuales"));
informeMensualContent.setFiscalesZInicial(rs.getString("fiscales_z_inicial"));
informeMensualContent.setFiscalesZFinal(rs.getString("fiscales_z_final"));
informeMensualContent.setFiscalesInicial(rs.getString("fiscales_inicial"));
informeMensualContent.setFiscalesFinal(rs.getString("fiscales_final"));
informeMensualContent.setFiscales(rs.getInt("fiscales"));
informeMensualContent.setExentasInicial(rs.getString("exentas_inicial"));
informeMensualContent.setExentasFinal(rs.getString("exentas_final"));
informeMensualContent.setExentas(rs.getInt("exentas"));
informeMensualContent.setSubTotal(rs.getInt("sub_total"));
informeMensualContent.setFiscales(rs.getInt("fiscales"));
informeMensualContent.setFacturasInicial(rs.getString("facturas_inicial"));
informeMensualContent.setFacturasFinal(rs.getString("facturas_final"));
informeMensualContent.setFacturas(rs.getInt("facturas"));
informeMensualContent.setGuiasInicial(rs.getString("guias_inicial"));
informeMensualContent.setGuiasFinal(rs.getString("guias_final"));
informeMensualContent.setGuias(rs.getInt("guias"));
informeMensualContent.setTotal(rs.getInt("total"));
this.fillTotalesFromResultSet(rs);
list.add(informeMensualContent);
}
ps = conn.prepareStatement(queryNumeros);
ps.setString(1, date.withDayOfMonth(1).toString());
ps.setString(2, date.withDayOfMonth(date.lengthOfMonth()).toString());
rs = ps.executeQuery();
this.fillBoletasFromResultSet(rs);
rs.close();
ps.close();
@@ -110,6 +89,150 @@ public class SQLiteInformeMensualContentDAO extends InformeMensualContentDAO {
} catch (SQLException e) {
e.printStackTrace();
}
return list;
return map.values();
}
private void fillTotalesFromResultSet(ResultSet rs) throws SQLException {
while (rs.next()) {
InformeMensualContent informe = new InformeMensualContent();
informe.setDia(rs.getInt("dia"));
informe.setFecha(LocalDate.parse(rs.getString("fecha")));
informe.setManuales(rs.getInt("manuales"));
informe.setFiscales(rs.getInt("fiscales"));
informe.setExentas(rs.getInt("exentas"));
informe.setSubTotal(rs.getInt("sub_total"));
informe.setFacturas(rs.getInt("facturas"));
informe.setGuias(rs.getInt("guias"));
informe.setTotal(rs.getInt("total"));
map.put(rs.getInt("caja"), informe);
}
}
private void fillBoletasFromResultSet(ResultSet rs) throws SQLException{
while (rs.next()) {
InformeMensualContent informe = map.get(rs.getInt("caja"));
int tipoIngreso = rs.getInt("tipo_ingreso");
switch (tipoIngreso) {
case 1:
String fiscalesInicial = rs.getString("inicial");
String fiscalesFinal = rs.getString("final");
String fiscalesZInicial = rs.getString("z_inicial");
String fiscalesZFinal = rs.getString("z_final");
if (informe.getFiscalesInicial() != null) {
if (fiscalesInicial.compareTo(informe.getFiscalesInicial()) < 0) {
informe.setFiscalesInicial(fiscalesInicial);
}
} else {
informe.setFiscalesInicial(fiscalesInicial);
}
if (informe.getFiscalesFinal() != null) {
if (fiscalesFinal.compareTo(informe.getFiscalesFinal()) > 0) {
informe.setFiscalesFinal(fiscalesFinal);
}
} else {
informe.setFiscalesFinal(fiscalesFinal);
}
if (informe.getFiscalesZInicial() != null) {
if (fiscalesZInicial.compareTo(informe.getFiscalesZInicial()) < 0) {
informe.setFiscalesZInicial(fiscalesZInicial);
}
} else {
informe.setFiscalesZInicial(fiscalesZInicial);
}
if (informe.getFiscalesZFinal() != null) {
if (fiscalesZFinal.compareTo(informe.getFiscalesZFinal()) > 0) {
informe.setFiscalesZFinal(fiscalesZFinal);
}
} else {
informe.setFiscalesZFinal(fiscalesZFinal);
}
break;
case 2:
String manualesInicial = rs.getString("inicial");
String manualesFinal = rs.getString("final");
if (informe.getManualesInicial() != null) {
if (manualesInicial.compareTo(informe.getManualesInicial()) < 0) {
informe.setManualesInicial(manualesInicial);
}
} else {
informe.setManualesInicial(manualesInicial);
}
if (informe.getManualesFinal() != null) {
if (manualesFinal.compareTo(informe.getManualesFinal()) > 0) {
informe.setManualesFinal(manualesFinal);
}
} else {
informe.setManualesFinal(manualesFinal);
}
break;
case 3:
String facturasInicial = rs.getString("inicial");
String facturasFinal = rs.getString("final");
if (informe.getFacturasInicial() != null) {
if (facturasInicial.compareTo(informe.getFacturasInicial()) < 0) {
informe.setFacturasInicial(facturasInicial);
}
} else {
informe.setFacturasInicial(facturasInicial);
}
if (informe.getFacturasFinal() != null) {
if (facturasFinal.compareTo(informe.getFacturasFinal()) > 0) {
informe.setFacturasFinal(facturasFinal);
}
} else {
informe.setFacturasFinal(facturasFinal);
}
break;
case 4:
String guiasInicial = rs.getString("inicial");
String guiasFinal = rs.getString("final");
if (informe.getGuiasInicial() != null) {
if (guiasInicial.compareTo(informe.getGuiasInicial()) < 0) {
informe.setGuiasInicial(guiasInicial);
}
} else {
informe.setGuiasInicial(guiasInicial);
}
if (informe.getGuiasFinal() != null) {
if (guiasFinal.compareTo(informe.getGuiasFinal()) > 0) {
informe.setGuiasFinal(guiasFinal);
}
} else {
informe.setGuiasFinal(guiasFinal);
}
break;
case 5:
String exentasInicial = rs.getString("inicial");
String exentasFinal = rs.getString("final");
if (informe.getExentasInicial() != null) {
if (exentasInicial.compareTo(informe.getExentasInicial()) < 0) {
informe.setExentasInicial(exentasInicial);
}
} else {
informe.setExentasInicial(exentasInicial);
}
if (informe.getExentasFinal() != null) {
if (exentasFinal.compareTo(informe.getExentasFinal()) > 0) {
informe.setExentasFinal(exentasFinal);
}
} else {
informe.setExentasFinal(exentasFinal);
}
break;
}
}
}
}