Se reescribio el informe de egresos
Para lograrlo se realizo el mismo procedimiento que con el informe de libro de ventas Primero que nada se elmino el objeto de InformeEgresosContent que se tenia porque realmente no aportaba nada, era basicamente lo mismo que el objeto egresos con un campo de fecha añadido y creo que un campo menos. Por lo que se paso a utilizar el objeto de Egresos directamente. Debido a lo anterior no era necesario tener una query especial para juntar los datos, ya que solo eran los egresos de todas las cajas de un tipo en especifico, por lo que solo se hizo una query nueva en el EgresoDAO en el que se satisfacia esta necesidad. Luego fue solo hacer compatible el InformeEgresosToExcel y listo!
This commit is contained in:
BIN
dist/Programa Caja.jar
vendored
BIN
dist/Programa Caja.jar
vendored
Binary file not shown.
@@ -25,7 +25,7 @@
|
||||
package danielcortes.xyz.controllers;
|
||||
|
||||
import danielcortes.xyz.data.Configuration;
|
||||
import danielcortes.xyz.informes.InformeEgresos;
|
||||
import danielcortes.xyz.informes.InformeEgresosToExcel;
|
||||
import danielcortes.xyz.informes.InformeLibroDeVentasToExcel;
|
||||
import danielcortes.xyz.models.tipo_egreso.TipoEgreso;
|
||||
import danielcortes.xyz.utils.SaveFile;
|
||||
@@ -96,7 +96,7 @@ public class InformesSideBarController {
|
||||
return;
|
||||
}
|
||||
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM YYYY");
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM yyyy");
|
||||
String formatedMonth = month.format(formatter);
|
||||
|
||||
Path saveFile = new XLSFileChooser(
|
||||
@@ -106,8 +106,9 @@ public class InformesSideBarController {
|
||||
return;
|
||||
}
|
||||
|
||||
InformeEgresos informe = new InformeEgresos(tipoEgreso.getId(), month, saveFile);
|
||||
Path generatedFile = informe.generarInforme();
|
||||
InformeEgresosToExcel informe = new InformeEgresosToExcel(tipoEgreso, month);
|
||||
Workbook wb = informe.generarInforme();
|
||||
SaveFile.save(wb, saveFile);
|
||||
|
||||
new InformeGeneratedConfirmation(saveFile).execute();
|
||||
}
|
||||
|
||||
@@ -36,8 +36,6 @@ import danielcortes.xyz.models.egreso.EgresoDAO;
|
||||
import danielcortes.xyz.models.egreso.SQLiteEgresoDAO;
|
||||
import danielcortes.xyz.models.estado_resultado.EstadoResultadoDAO;
|
||||
import danielcortes.xyz.models.estado_resultado.SQLiteEstadoResultadoDAO;
|
||||
import danielcortes.xyz.models.informes.egresos.InformeEgresosContentDAO;
|
||||
import danielcortes.xyz.models.informes.egresos.SQLiteInformeEgresosContentDAO;
|
||||
import danielcortes.xyz.models.ingreso.IngresoDAO;
|
||||
import danielcortes.xyz.models.ingreso.SQLiteIngresoDAO;
|
||||
import danielcortes.xyz.models.tipo_egreso.SQLiteTipoEgresoDAO;
|
||||
@@ -54,7 +52,6 @@ public class DAOManager {
|
||||
private static final DocumentosDAO documentosDAO;
|
||||
private static final EfectivoDAO efectivoDAO;
|
||||
private static final EgresoDAO egresoDAO;
|
||||
private static final InformeEgresosContentDAO egresosContentDAO;
|
||||
private static final IngresoDAO ingresoDAO;
|
||||
private static final TipoEgresoDAO tipoEgresoDAO;
|
||||
private static final TipoIngresoDAO tipoIngresoDAO;
|
||||
@@ -67,7 +64,6 @@ public class DAOManager {
|
||||
documentosDAO = new SQLiteDocumentosDAO();
|
||||
efectivoDAO = new SQLiteEfectivoDAO();
|
||||
egresoDAO = new SQLiteEgresoDAO();
|
||||
egresosContentDAO = new SQLiteInformeEgresosContentDAO();
|
||||
ingresoDAO = new SQLiteIngresoDAO();
|
||||
tipoEgresoDAO = new SQLiteTipoEgresoDAO();
|
||||
tipoIngresoDAO = new SQLiteTipoIngresoDAO();
|
||||
@@ -95,9 +91,6 @@ public class DAOManager {
|
||||
return egresoDAO;
|
||||
}
|
||||
|
||||
public static InformeEgresosContentDAO getEgresosContentDAO() {
|
||||
return egresosContentDAO;
|
||||
}
|
||||
|
||||
public static IngresoDAO getIngresoDAO() {
|
||||
return ingresoDAO;
|
||||
|
||||
@@ -1,324 +1,54 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018-2019 Daniel Cortes
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package danielcortes.xyz.informes;
|
||||
|
||||
import danielcortes.xyz.models.caja.SQLiteCajaDAO;
|
||||
import danielcortes.xyz.models.informes.egresos.InformeEgresosContent;
|
||||
import danielcortes.xyz.models.informes.egresos.SQLiteInformeEgresosContentDAO;
|
||||
import danielcortes.xyz.utils.Pair;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import danielcortes.xyz.data.DAOManager;
|
||||
import danielcortes.xyz.models.caja.Caja;
|
||||
import danielcortes.xyz.models.caja.CajaDAO;
|
||||
import danielcortes.xyz.models.egreso.Egreso;
|
||||
import danielcortes.xyz.models.egreso.EgresoDAO;
|
||||
import danielcortes.xyz.models.tipo_egreso.TipoEgreso;
|
||||
import java.time.LocalDate;
|
||||
import java.time.YearMonth;
|
||||
import java.time.ZoneId;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.BorderExtent;
|
||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||
import org.apache.poi.ss.usermodel.CellStyle;
|
||||
import org.apache.poi.ss.usermodel.CreationHelper;
|
||||
import org.apache.poi.ss.usermodel.FillPatternType;
|
||||
import org.apache.poi.ss.usermodel.Font;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.apache.poi.ss.util.PropertyTemplate;
|
||||
|
||||
public class InformeEgresos {
|
||||
|
||||
private final String[] titles = {
|
||||
"FECHA",
|
||||
"N°",
|
||||
"DESCRIPCION",
|
||||
"VALOR"
|
||||
};
|
||||
private HashMap<LocalDate, List<Egreso>> informe;
|
||||
|
||||
private List<InformeEgresosContent> informe;
|
||||
private Path saveFile;
|
||||
|
||||
//Filas donde se almacenaran los totales
|
||||
private ArrayList<Row> totalRows;
|
||||
//Filas donde se almacenaran los egresos.
|
||||
private ArrayList<Row> dataRows;
|
||||
//Fila que contiene el total final;
|
||||
private Row totalFinal;
|
||||
|
||||
|
||||
//Rango que corresponde a un dia de egresos;
|
||||
private ArrayList<Pair<Integer, Integer>> totalRange;
|
||||
private Workbook wb;
|
||||
private Sheet sheet;
|
||||
private CreationHelper createHelper;
|
||||
private HashMap<String, CellStyle> styles;
|
||||
|
||||
public InformeEgresos(int tipoEgresoId, YearMonth mes, Path saveFile) {
|
||||
new SQLiteCajaDAO().createCajasForMonth(mes);
|
||||
this.informe = new SQLiteInformeEgresosContentDAO()
|
||||
.getInformeEgresosFactuasMateriaPrima(mes, tipoEgresoId);
|
||||
this.saveFile = saveFile;
|
||||
|
||||
this.wb = new HSSFWorkbook();
|
||||
this.sheet = wb.createSheet();
|
||||
this.createHelper = wb.getCreationHelper();
|
||||
|
||||
this.totalRows = new ArrayList<>();
|
||||
this.totalRange = new ArrayList<>();
|
||||
this.dataRows = new ArrayList<>();
|
||||
|
||||
this.styles = this.generateStyles();
|
||||
private InformeEgresos() {
|
||||
}
|
||||
|
||||
private void fillHeaders() {
|
||||
Row titles = sheet.createRow(0);
|
||||
|
||||
for (int x = 0; x < this.titles.length; x++) {
|
||||
titles.createCell(x).setCellValue(this.titles[x]);
|
||||
}
|
||||
public List<Egreso> get(LocalDate localDate) {
|
||||
return informe.get(localDate);
|
||||
}
|
||||
|
||||
private void fillData() {
|
||||
int rowCounter = 1;
|
||||
int dayStart = rowCounter;
|
||||
int dayEnd;
|
||||
|
||||
for (int informeID = 0; informeID < informe.size(); informeID++) {
|
||||
InformeEgresosContent data = informe.get(informeID);
|
||||
int cellCounter = 0;
|
||||
Row dataRow = sheet.createRow(rowCounter);
|
||||
dataRows.add(dataRow);
|
||||
Date fecha = Date.from(data.getFecha().atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||
|
||||
dataRow.createCell(cellCounter++).setCellValue(fecha);
|
||||
dataRow.createCell(cellCounter++).setCellValue(data.getNro());
|
||||
dataRow.createCell(cellCounter++).setCellValue(data.getDescripcion());
|
||||
dataRow.createCell(cellCounter).setCellValue(data.getValor());
|
||||
|
||||
// Comprueba si es que el siguiente elemento en la lista de informe es del siguiente dia, si es asi, agrega una linea con los totales diarios.
|
||||
if (informeID + 1 >= informe.size() || !data.getFecha()
|
||||
.equals(informe.get(informeID + 1).getFecha())) {
|
||||
totalRows.add(sheet.createRow(rowCounter + 1));
|
||||
|
||||
dayEnd = rowCounter;
|
||||
totalRange.add(new Pair<>(dayStart, dayEnd));
|
||||
dayStart = rowCounter + 2;
|
||||
rowCounter++;
|
||||
}
|
||||
|
||||
rowCounter++;
|
||||
}
|
||||
private void put(LocalDate localDate, List<Egreso> egresos) {
|
||||
informe.put(localDate, egresos);
|
||||
}
|
||||
|
||||
private void fillTotales() {
|
||||
StringBuilder sumTotalFinal = new StringBuilder();
|
||||
|
||||
//Se aprovechara la iteracion para agregar los totales individuales y para construir la suma del total final
|
||||
for (int x = 0; x < totalRows.size(); x++) {
|
||||
Row row = totalRows.get(x);
|
||||
Pair<Integer, Integer> range = totalRange.get(x);
|
||||
|
||||
row.createCell(2).setCellValue("TOTAL DIARIO");
|
||||
row.createCell(3)
|
||||
.setCellFormula("SUM(D" + (range.getLeft() + 1) + ":D" + (range.getRight() + 1) + ")");
|
||||
|
||||
sumTotalFinal.append("D").append(row.getRowNum() + 1);
|
||||
if (x + 1 != totalRows.size()) {
|
||||
sumTotalFinal.append("+");
|
||||
} else {
|
||||
this.totalFinal = sheet.createRow(row.getRowNum() + 1);
|
||||
this.totalFinal.createCell(2).setCellValue("TOTAL MENSUAL");
|
||||
this.totalFinal.createCell(3).setCellFormula(sumTotalFinal.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int size(){
|
||||
return informe.size();
|
||||
}
|
||||
|
||||
private void freezeCells() {
|
||||
this.sheet.createFreezePane(0, 1);
|
||||
}
|
||||
public static InformeEgresos generate(YearMonth mes, TipoEgreso tipoEgreso) {
|
||||
InformeEgresos informeEgresos = new InformeEgresos();
|
||||
informeEgresos.informe = new HashMap<>();
|
||||
|
||||
private void addBorders() {
|
||||
int rows = this.totalRows.size() + this.dataRows.size() + 1;
|
||||
PropertyTemplate pt = new PropertyTemplate();
|
||||
LocalDate currentDate = mes.atDay(1);
|
||||
LocalDate endDatePlusOne = mes.atEndOfMonth().plusDays(1);
|
||||
|
||||
//Bordes Internos
|
||||
pt.drawBorders(new CellRangeAddress(0, rows, 0, 3), BorderStyle.THIN, BorderExtent.ALL);
|
||||
CajaDAO cajaDAO = DAOManager.getCajaDAO();
|
||||
EgresoDAO egresoDAO = DAOManager.getEgresoDAO();
|
||||
|
||||
//Bordes de los Headers
|
||||
pt.drawBorders(new CellRangeAddress(0, 0, 0, 3), BorderStyle.MEDIUM, BorderExtent.OUTSIDE);
|
||||
while (currentDate.isBefore(endDatePlusOne)) {
|
||||
Caja caja = cajaDAO.getByFecha(currentDate).orElse(Caja.EMPTY);
|
||||
|
||||
//Bordes de los Totales
|
||||
for (Row row : this.totalRows) {
|
||||
int index = row.getRowNum();
|
||||
pt.drawBorders(new CellRangeAddress(index, index, 0, 3), BorderStyle.NONE, BorderExtent.ALL);
|
||||
pt.drawBorders(new CellRangeAddress(index, index, 0, 3), BorderStyle.MEDIUM,
|
||||
BorderExtent.OUTSIDE);
|
||||
List<Egreso> egresos = egresoDAO.getByTipoEgresoEnCaja(tipoEgreso, caja);
|
||||
informeEgresos.put(currentDate, egresos);
|
||||
|
||||
currentDate = currentDate.plusDays(1);
|
||||
}
|
||||
|
||||
//Borde del Total Final
|
||||
pt.drawBorders(
|
||||
new CellRangeAddress(this.totalFinal.getRowNum(), this.totalFinal.getRowNum(), 0, 3),
|
||||
BorderStyle.NONE, BorderExtent.ALL);
|
||||
pt.drawBorders(
|
||||
new CellRangeAddress(this.totalFinal.getRowNum(), this.totalFinal.getRowNum(), 0, 3),
|
||||
BorderStyle.MEDIUM, BorderExtent.OUTSIDE);
|
||||
|
||||
//Borde externo
|
||||
pt.drawBorders(new CellRangeAddress(0, rows, 0, 3), BorderStyle.MEDIUM, BorderExtent.OUTSIDE);
|
||||
|
||||
pt.applyBorders(this.sheet);
|
||||
}
|
||||
|
||||
private void setStyles() {
|
||||
//Estilo para el header
|
||||
this.sheet.getRow(0).getCell(0).setCellStyle(this.styles.get("header"));
|
||||
this.sheet.getRow(0).getCell(1).setCellStyle(this.styles.get("header"));
|
||||
this.sheet.getRow(0).getCell(2).setCellStyle(this.styles.get("header"));
|
||||
this.sheet.getRow(0).getCell(3).setCellStyle(this.styles.get("header"));
|
||||
|
||||
//Estilo para el Total Final
|
||||
this.totalFinal.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("gray"));
|
||||
this.totalFinal.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("gray"));
|
||||
this.totalFinal.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("gray"));
|
||||
this.totalFinal.getCell(3).setCellStyle(this.styles.get("total_final"));
|
||||
|
||||
//Estilo para las filas de datos
|
||||
for (Row row : this.dataRows) {
|
||||
row.getCell(0).setCellStyle(this.styles.get("date"));
|
||||
row.getCell(1).setCellStyle(this.styles.get("regular"));
|
||||
row.getCell(2).setCellStyle(this.styles.get("regular"));
|
||||
row.getCell(3).setCellStyle(this.styles.get("money"));
|
||||
}
|
||||
|
||||
//Estilo para las filas de totales
|
||||
for (Row row : this.totalRows) {
|
||||
row.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("not_so_gray"));
|
||||
row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("not_so_gray"));
|
||||
row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("not_so_gray"));
|
||||
row.getCell(3, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("total"));
|
||||
}
|
||||
|
||||
//Setea el alto de las filas
|
||||
this.sheet.getRow(0).setHeightInPoints(30);
|
||||
this.totalFinal.setHeightInPoints(20);
|
||||
for (Row row : this.dataRows) {
|
||||
row.setHeightInPoints(15);
|
||||
}
|
||||
for (Row row : this.totalRows) {
|
||||
row.setHeightInPoints(18);
|
||||
}
|
||||
|
||||
//Setea el ancho de las columnas
|
||||
sheet.autoSizeColumn(0);
|
||||
sheet.autoSizeColumn(1);
|
||||
sheet.autoSizeColumn(2);
|
||||
sheet.autoSizeColumn(3);
|
||||
}
|
||||
|
||||
private HashMap<String, CellStyle> generateStyles() {
|
||||
Font font = this.wb.createFont();
|
||||
font.setBold(true);
|
||||
font.setColor(IndexedColors.WHITE.getIndex());
|
||||
|
||||
CellStyle regularStyle = this.wb.createCellStyle();
|
||||
|
||||
CellStyle grayStyle = this.wb.createCellStyle();
|
||||
grayStyle.setFont(font);
|
||||
grayStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
grayStyle.setFillForegroundColor(IndexedColors.GREY_80_PERCENT.getIndex());
|
||||
grayStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
|
||||
CellStyle notSoGrayStyle = this.wb.createCellStyle();
|
||||
notSoGrayStyle.setFont(font);
|
||||
notSoGrayStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
notSoGrayStyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||
notSoGrayStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
|
||||
CellStyle dateStyle = this.wb.createCellStyle();
|
||||
dateStyle.setDataFormat(this.createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
|
||||
|
||||
CellStyle moneyStyle = this.wb.createCellStyle();
|
||||
moneyStyle
|
||||
.setDataFormat(this.createHelper.createDataFormat().getFormat("\"$\"#,##0_);(\"$\"#,##0)"));
|
||||
|
||||
CellStyle headerStyle = this.wb.createCellStyle();
|
||||
headerStyle.cloneStyleFrom(grayStyle);
|
||||
headerStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
|
||||
CellStyle totalStyle = this.wb.createCellStyle();
|
||||
totalStyle.cloneStyleFrom(notSoGrayStyle);
|
||||
totalStyle
|
||||
.setDataFormat(this.createHelper.createDataFormat().getFormat("\"$\"#,##0_);(\"$\"#,##0)"));
|
||||
|
||||
CellStyle totalFinalStyle = this.wb.createCellStyle();
|
||||
totalFinalStyle.cloneStyleFrom(grayStyle);
|
||||
totalFinalStyle
|
||||
.setDataFormat(this.createHelper.createDataFormat().getFormat("\"$\"#,##0_);(\"$\"#,##0)"));
|
||||
|
||||
HashMap<String, CellStyle> styles = new HashMap<>();
|
||||
styles.put("regular", regularStyle);
|
||||
styles.put("gray", grayStyle);
|
||||
styles.put("not_so_gray", notSoGrayStyle);
|
||||
styles.put("date", dateStyle);
|
||||
styles.put("money", moneyStyle);
|
||||
styles.put("header", headerStyle);
|
||||
styles.put("total", totalStyle);
|
||||
styles.put("total_final", totalFinalStyle);
|
||||
|
||||
return styles;
|
||||
}
|
||||
|
||||
public Path generarInforme() {
|
||||
fillHeaders();
|
||||
fillData();
|
||||
fillTotales();
|
||||
freezeCells();
|
||||
setStyles();
|
||||
addBorders();
|
||||
|
||||
try (OutputStream fileOut = Files.newOutputStream(this.saveFile)) {
|
||||
wb.write(fileOut);
|
||||
return this.saveFile;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
return informeEgresos;
|
||||
}
|
||||
}
|
||||
|
||||
302
src/danielcortes/xyz/informes/InformeEgresosToExcel.java
Normal file
302
src/danielcortes/xyz/informes/InformeEgresosToExcel.java
Normal file
@@ -0,0 +1,302 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018-2019 Daniel Cortes
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package danielcortes.xyz.informes;
|
||||
|
||||
import danielcortes.xyz.models.egreso.Egreso;
|
||||
import danielcortes.xyz.models.tipo_egreso.TipoEgreso;
|
||||
import danielcortes.xyz.utils.Pair;
|
||||
import java.time.LocalDate;
|
||||
import java.time.YearMonth;
|
||||
import java.time.ZoneId;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.BorderExtent;
|
||||
import org.apache.poi.ss.usermodel.BorderStyle;
|
||||
import org.apache.poi.ss.usermodel.CellStyle;
|
||||
import org.apache.poi.ss.usermodel.CreationHelper;
|
||||
import org.apache.poi.ss.usermodel.FillPatternType;
|
||||
import org.apache.poi.ss.usermodel.Font;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.apache.poi.ss.util.PropertyTemplate;
|
||||
|
||||
public class InformeEgresosToExcel {
|
||||
|
||||
private final String[] titles = {
|
||||
"FECHA",
|
||||
"N°",
|
||||
"DESCRIPCION",
|
||||
"VALOR"
|
||||
};
|
||||
|
||||
private InformeEgresos informe;
|
||||
private YearMonth mes;
|
||||
|
||||
//Filas donde se almacenaran los totales
|
||||
private ArrayList<Row> totalRows;
|
||||
//Filas donde se almacenaran los egresos.
|
||||
private ArrayList<Row> dataRows;
|
||||
//Fila que contiene el total final;
|
||||
private Row totalFinal;
|
||||
|
||||
|
||||
//Rango que corresponde a un dia de egresos;
|
||||
private ArrayList<Pair<Integer, Integer>> totalRange;
|
||||
private Workbook wb;
|
||||
private Sheet sheet;
|
||||
private CreationHelper createHelper;
|
||||
private HashMap<String, CellStyle> styles;
|
||||
|
||||
public InformeEgresosToExcel(TipoEgreso tipoEgreso, YearMonth mes) {
|
||||
this.informe = InformeEgresos.generate(mes, tipoEgreso);
|
||||
this.mes = mes;
|
||||
|
||||
this.wb = new HSSFWorkbook();
|
||||
this.sheet = wb.createSheet();
|
||||
this.createHelper = wb.getCreationHelper();
|
||||
|
||||
this.totalRows = new ArrayList<>();
|
||||
this.totalRange = new ArrayList<>();
|
||||
this.dataRows = new ArrayList<>();
|
||||
|
||||
this.styles = this.generateStyles();
|
||||
}
|
||||
|
||||
private void fillHeaders() {
|
||||
Row titles = sheet.createRow(0);
|
||||
|
||||
for (int x = 0; x < this.titles.length; x++) {
|
||||
titles.createCell(x).setCellValue(this.titles[x]);
|
||||
}
|
||||
}
|
||||
|
||||
private void fillData() {
|
||||
int currentRow = 1;
|
||||
|
||||
LocalDate currentDay = mes.atDay(1);
|
||||
LocalDate endDayPlusOne = mes.atEndOfMonth().plusDays(1);
|
||||
|
||||
while (currentDay.isBefore(endDayPlusOne)) {
|
||||
int firstRow = currentRow;
|
||||
|
||||
Date fecha = Date.from(currentDay.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
||||
List<Egreso> egresos = informe.get(currentDay);
|
||||
|
||||
for (Egreso egreso : egresos) {
|
||||
Row dataRow = sheet.createRow(currentRow);
|
||||
this.dataRows.add(dataRow);
|
||||
|
||||
dataRow.createCell(0).setCellValue(fecha);
|
||||
dataRow.createCell(1).setCellValue(egreso.getNro());
|
||||
dataRow.createCell(2).setCellValue(egreso.getDescripcion());
|
||||
dataRow.createCell(3).setCellValue(egreso.getValor());
|
||||
|
||||
currentRow++;
|
||||
}
|
||||
|
||||
int lastRow = currentRow - 1;
|
||||
|
||||
if (egresos.size() > 0) {
|
||||
Row totalRow = sheet.createRow(currentRow++);
|
||||
totalRows.add(totalRow);
|
||||
totalRow.createCell(2).setCellValue("TOTAL DIARIO");
|
||||
totalRow.createCell(3)
|
||||
.setCellFormula("SUM(D" + (firstRow + 1) + ":D" + (lastRow + 1) + ")");
|
||||
}
|
||||
|
||||
currentDay = currentDay.plusDays(1);
|
||||
}
|
||||
}
|
||||
|
||||
private void fillTotales() {
|
||||
String operation = totalRows.stream().map(row -> "D" + (row.getRowNum() + 1))
|
||||
.reduce((a, b) -> String.join("+", a, b)).get();
|
||||
this.totalFinal = sheet.createRow(this.dataRows.get(this.dataRows.size()-1).getRowNum() + 2);
|
||||
this.totalFinal.createCell(2).setCellValue("TOTAL MENSUAL");
|
||||
this.totalFinal.createCell(3).setCellFormula(operation);
|
||||
|
||||
}
|
||||
|
||||
private void freezeCells() {
|
||||
this.sheet.createFreezePane(0, 1);
|
||||
}
|
||||
|
||||
private void addBorders() {
|
||||
int rows = this.totalRows.size() + this.dataRows.size() + 1;
|
||||
PropertyTemplate pt = new PropertyTemplate();
|
||||
|
||||
//Bordes Internos
|
||||
pt.drawBorders(new CellRangeAddress(0, rows, 0, 3), BorderStyle.THIN, BorderExtent.ALL);
|
||||
|
||||
//Bordes de los Headers
|
||||
pt.drawBorders(new CellRangeAddress(0, 0, 0, 3), BorderStyle.MEDIUM, BorderExtent.OUTSIDE);
|
||||
|
||||
//Bordes de los Totales
|
||||
for (Row row : this.totalRows) {
|
||||
int index = row.getRowNum();
|
||||
pt.drawBorders(new CellRangeAddress(index, index, 0, 3), BorderStyle.NONE, BorderExtent.ALL);
|
||||
pt.drawBorders(new CellRangeAddress(index, index, 0, 3), BorderStyle.MEDIUM,
|
||||
BorderExtent.OUTSIDE);
|
||||
}
|
||||
|
||||
//Borde del Total Final
|
||||
pt.drawBorders(
|
||||
new CellRangeAddress(this.totalFinal.getRowNum(), this.totalFinal.getRowNum(), 0, 3),
|
||||
BorderStyle.NONE, BorderExtent.ALL);
|
||||
pt.drawBorders(
|
||||
new CellRangeAddress(this.totalFinal.getRowNum(), this.totalFinal.getRowNum(), 0, 3),
|
||||
BorderStyle.MEDIUM, BorderExtent.OUTSIDE);
|
||||
|
||||
//Borde externo
|
||||
pt.drawBorders(new CellRangeAddress(0, rows, 0, 3), BorderStyle.MEDIUM, BorderExtent.OUTSIDE);
|
||||
|
||||
pt.applyBorders(this.sheet);
|
||||
}
|
||||
|
||||
private void setStyles() {
|
||||
//Estilo para el header
|
||||
this.sheet.getRow(0).getCell(0).setCellStyle(this.styles.get("header"));
|
||||
this.sheet.getRow(0).getCell(1).setCellStyle(this.styles.get("header"));
|
||||
this.sheet.getRow(0).getCell(2).setCellStyle(this.styles.get("header"));
|
||||
this.sheet.getRow(0).getCell(3).setCellStyle(this.styles.get("header"));
|
||||
|
||||
//Estilo para el Total Final
|
||||
this.totalFinal.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("gray"));
|
||||
this.totalFinal.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("gray"));
|
||||
this.totalFinal.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("gray"));
|
||||
this.totalFinal.getCell(3).setCellStyle(this.styles.get("total_final"));
|
||||
|
||||
//Estilo para las filas de datos
|
||||
for (Row row : this.dataRows) {
|
||||
row.getCell(0).setCellStyle(this.styles.get("date"));
|
||||
row.getCell(1).setCellStyle(this.styles.get("regular"));
|
||||
row.getCell(2).setCellStyle(this.styles.get("regular"));
|
||||
row.getCell(3).setCellStyle(this.styles.get("money"));
|
||||
}
|
||||
|
||||
//Estilo para las filas de totales
|
||||
for (Row row : this.totalRows) {
|
||||
row.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("not_so_gray"));
|
||||
row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("not_so_gray"));
|
||||
row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("not_so_gray"));
|
||||
row.getCell(3, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)
|
||||
.setCellStyle(this.styles.get("total"));
|
||||
}
|
||||
|
||||
//Setea el alto de las filas
|
||||
this.sheet.getRow(0).setHeightInPoints(30);
|
||||
this.totalFinal.setHeightInPoints(20);
|
||||
for (Row row : this.dataRows) {
|
||||
row.setHeightInPoints(15);
|
||||
}
|
||||
for (Row row : this.totalRows) {
|
||||
row.setHeightInPoints(18);
|
||||
}
|
||||
|
||||
//Setea el ancho de las columnas
|
||||
sheet.autoSizeColumn(0);
|
||||
sheet.autoSizeColumn(1);
|
||||
sheet.autoSizeColumn(2);
|
||||
sheet.autoSizeColumn(3);
|
||||
}
|
||||
|
||||
private HashMap<String, CellStyle> generateStyles() {
|
||||
Font font = this.wb.createFont();
|
||||
font.setBold(true);
|
||||
font.setColor(IndexedColors.WHITE.getIndex());
|
||||
|
||||
CellStyle regularStyle = this.wb.createCellStyle();
|
||||
|
||||
CellStyle grayStyle = this.wb.createCellStyle();
|
||||
grayStyle.setFont(font);
|
||||
grayStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
grayStyle.setFillForegroundColor(IndexedColors.GREY_80_PERCENT.getIndex());
|
||||
grayStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
|
||||
CellStyle notSoGrayStyle = this.wb.createCellStyle();
|
||||
notSoGrayStyle.setFont(font);
|
||||
notSoGrayStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
notSoGrayStyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||
notSoGrayStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
|
||||
CellStyle dateStyle = this.wb.createCellStyle();
|
||||
dateStyle.setDataFormat(this.createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
|
||||
|
||||
CellStyle moneyStyle = this.wb.createCellStyle();
|
||||
moneyStyle
|
||||
.setDataFormat(this.createHelper.createDataFormat().getFormat("\"$\"#,##0_);(\"$\"#,##0)"));
|
||||
|
||||
CellStyle headerStyle = this.wb.createCellStyle();
|
||||
headerStyle.cloneStyleFrom(grayStyle);
|
||||
headerStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
|
||||
CellStyle totalStyle = this.wb.createCellStyle();
|
||||
totalStyle.cloneStyleFrom(notSoGrayStyle);
|
||||
totalStyle
|
||||
.setDataFormat(this.createHelper.createDataFormat().getFormat("\"$\"#,##0_);(\"$\"#,##0)"));
|
||||
|
||||
CellStyle totalFinalStyle = this.wb.createCellStyle();
|
||||
totalFinalStyle.cloneStyleFrom(grayStyle);
|
||||
totalFinalStyle
|
||||
.setDataFormat(this.createHelper.createDataFormat().getFormat("\"$\"#,##0_);(\"$\"#,##0)"));
|
||||
|
||||
HashMap<String, CellStyle> styles = new HashMap<>();
|
||||
styles.put("regular", regularStyle);
|
||||
styles.put("gray", grayStyle);
|
||||
styles.put("not_so_gray", notSoGrayStyle);
|
||||
styles.put("date", dateStyle);
|
||||
styles.put("money", moneyStyle);
|
||||
styles.put("header", headerStyle);
|
||||
styles.put("total", totalStyle);
|
||||
styles.put("total_final", totalFinalStyle);
|
||||
|
||||
return styles;
|
||||
}
|
||||
|
||||
public Workbook generarInforme() {
|
||||
fillHeaders();
|
||||
fillData();
|
||||
fillTotales();
|
||||
freezeCells();
|
||||
setStyles();
|
||||
addBorders();
|
||||
|
||||
return this.wb;
|
||||
}
|
||||
}
|
||||
@@ -55,6 +55,8 @@ public abstract class EgresoDAO {
|
||||
|
||||
public abstract List<Egreso> findByTipoEgreso(TipoEgreso tipoEgreso);
|
||||
|
||||
public abstract List<Egreso> getByTipoEgresoEnCaja(TipoEgreso tipoEgreso, Caja caja);
|
||||
|
||||
public abstract boolean insertEgreso(Egreso egreso);
|
||||
|
||||
public abstract boolean updateEgreso(Egreso egreso);
|
||||
|
||||
@@ -150,6 +150,29 @@ public class SQLiteEgresoDAO extends EgresoDAO {
|
||||
return egresoList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Egreso> getByTipoEgresoEnCaja(TipoEgreso tipoEgreso, Caja caja) {
|
||||
List<Egreso> egresoList = new ArrayList<>();
|
||||
|
||||
if (caja == Caja.EMPTY) {
|
||||
return egresoList;
|
||||
}
|
||||
|
||||
String query = "select * from egresos where tipo_egreso_id = ? and caja_id = ?";
|
||||
try (Connection conn = connectionHolder.getConnection()) {
|
||||
try (PreparedStatement ps = conn.prepareStatement(query)) {
|
||||
ps.setInt(1, tipoEgreso.getId());
|
||||
ps.setInt(2, caja.getId());
|
||||
try (ResultSet rs = ps.executeQuery()) {
|
||||
egresoList = this.egresosFromResultSet(rs);
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
LOGGER.log(Level.SEVERE, e.toString(), e);
|
||||
}
|
||||
return egresoList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean insertEgreso(Egreso egreso) {
|
||||
int updates;
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018-2019 Daniel Cortes
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package danielcortes.xyz.models.informes.egresos;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class InformeEgresosContent {
|
||||
|
||||
private LocalDate fecha;
|
||||
private String nro;
|
||||
private String descripcion;
|
||||
private int valor;
|
||||
|
||||
public LocalDate getFecha() {
|
||||
return fecha;
|
||||
}
|
||||
|
||||
public void setFecha(LocalDate fecha) {
|
||||
this.fecha = fecha;
|
||||
}
|
||||
|
||||
public String getNro() {
|
||||
return nro;
|
||||
}
|
||||
|
||||
public void setNro(String nro) {
|
||||
this.nro = nro;
|
||||
}
|
||||
|
||||
public String getDescripcion() {
|
||||
return descripcion;
|
||||
}
|
||||
|
||||
public void setDescripcion(String descripcion) {
|
||||
this.descripcion = descripcion;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValor(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "InformeEgresosContent{" +
|
||||
"fecha=" + fecha +
|
||||
", nro='" + nro + '\'' +
|
||||
", descripcion='" + descripcion + '\'' +
|
||||
", valor=" + valor +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018-2019 Daniel Cortes
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package danielcortes.xyz.models.informes.egresos;
|
||||
|
||||
import danielcortes.xyz.data.ConnectionHolder;
|
||||
import java.time.YearMonth;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class InformeEgresosContentDAO {
|
||||
|
||||
protected ConnectionHolder connectionHolder;
|
||||
|
||||
/**
|
||||
* Genera el informe con nombre muy largo
|
||||
*
|
||||
* @param mes mes sobre el cual se quiere le informe
|
||||
* @return lista del objeto que contiene los datos necesarios para el informe
|
||||
*/
|
||||
public abstract List<InformeEgresosContent> getInformeEgresosFactuasMateriaPrima(YearMonth mes,
|
||||
int tipoEgresoId);
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018-2019 Daniel Cortes
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package danielcortes.xyz.models.informes.egresos;
|
||||
|
||||
import danielcortes.xyz.data.SQLiteConnectionHolder;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.LocalDate;
|
||||
import java.time.YearMonth;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class SQLiteInformeEgresosContentDAO extends InformeEgresosContentDAO {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(InformeEgresosContentDAO.class.getName());
|
||||
|
||||
private List<InformeEgresosContent> list;
|
||||
|
||||
public SQLiteInformeEgresosContentDAO() {
|
||||
this.connectionHolder = new SQLiteConnectionHolder();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InformeEgresosContent> getInformeEgresosFactuasMateriaPrima(YearMonth mes,
|
||||
int tipoEgresoId) {
|
||||
list = new ArrayList<>();
|
||||
try (Connection conn = connectionHolder.getConnection()) {
|
||||
|
||||
String query = "select caja.fecha as \"fecha\"," +
|
||||
"egresos.nro as \"nro\"," +
|
||||
"egresos.descripcion as \"descripcion\"," +
|
||||
"egresos.valor as \"valor\"" +
|
||||
"from egresos inner join caja on egresos.caja_id = caja.id " +
|
||||
"where caja.fecha between date(?) and date(?) and egresos.tipo_egreso_id = ? " +
|
||||
"order by caja.fecha;";
|
||||
|
||||
PreparedStatement ps = conn.prepareStatement(query);
|
||||
ps.setString(1, mes.atDay(1).toString());
|
||||
ps.setString(2, mes.atEndOfMonth().toString());
|
||||
ps.setInt(3, tipoEgresoId);
|
||||
ResultSet rs = ps.executeQuery();
|
||||
|
||||
LOGGER.log(Level.FINE, "QUERY: {0} | values: [{1},{2},{3}]",
|
||||
new Object[]{mes.atDay(1), mes.atEndOfMonth(), tipoEgresoId});
|
||||
|
||||
this.fillInforme(rs);
|
||||
} catch (SQLException e) {
|
||||
LOGGER.log(Level.SEVERE, e.toString(), e);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private void fillInforme(ResultSet rs) throws SQLException {
|
||||
while (rs.next()) {
|
||||
InformeEgresosContent content = new InformeEgresosContent();
|
||||
content.setFecha(LocalDate.parse(rs.getString("fecha")));
|
||||
content.setDescripcion(rs.getString("descripcion"));
|
||||
content.setNro(rs.getString("nro"));
|
||||
content.setValor(rs.getInt("valor"));
|
||||
LOGGER.log(Level.FINER, "Se a creado: {0}", content);
|
||||
list.add(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user