diff --git a/.idea/dataSources/6e2ee496-6ca2-4cc4-a2b0-4f122e6bfd50.xml b/.idea/dataSources/6e2ee496-6ca2-4cc4-a2b0-4f122e6bfd50.xml
index 96521f8..018ad8a 100644
--- a/.idea/dataSources/6e2ee496-6ca2-4cc4-a2b0-4f122e6bfd50.xml
+++ b/.idea/dataSources/6e2ee496-6ca2-4cc4-a2b0-4f122e6bfd50.xml
@@ -207,11 +207,11 @@
7
- text|0s
+ ''
8
- text|0s
+ ''
id
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 61b39c9..9f8fd85 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -11,24 +11,27 @@
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -49,7 +52,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -61,80 +80,10 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -150,8 +99,6 @@
- id
- index
tipo_id
getEliminarB
onSelec
@@ -180,6 +127,8 @@
rendido
style
formula
+ setS
+ or
2018 Daniel Cortes
@@ -200,19 +149,6 @@
@@ -296,6 +245,7 @@
+
@@ -319,12 +269,22 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
@@ -345,7 +305,6 @@
-
@@ -359,7 +318,7 @@
-
+
@@ -376,16 +335,16 @@
+
+
+
+
-
-
-
-
@@ -484,8 +443,8 @@
-
+
@@ -561,7 +520,12 @@
-
+
+
+
+
+
+
1545280618093
@@ -808,11 +772,18 @@
1546790523141
-
+
+ 1546900333240
+
+
+
+ 1546900333240
+
+
-
+
@@ -827,16 +798,16 @@
-
+
-
+
-
+
@@ -855,7 +826,7 @@
-
+
@@ -917,7 +888,6 @@
-
@@ -942,251 +912,14 @@
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1208,17 +941,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -1240,24 +962,9 @@
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
@@ -1292,37 +999,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1358,13 +1034,6 @@
-
-
-
-
-
-
-
@@ -1375,67 +1044,75 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
-
-
-
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -1451,10 +1128,8 @@
-
-
@@ -1492,8 +1167,8 @@
-
-
+
+
@@ -1509,7 +1184,6 @@
-
@@ -1538,15 +1212,10 @@
-
-
-
-
-
@@ -1563,6 +1232,253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dist/caja.jar b/dist/caja.jar
index 811ed04..bbf26ba 100644
Binary files a/dist/caja.jar and b/dist/caja.jar differ
diff --git a/dist/database.sqlite b/dist/database.sqlite
index 6564604..20f6a62 100644
Binary files a/dist/database.sqlite and b/dist/database.sqlite differ
diff --git a/src/danielcortes/xyz/Main.java b/src/danielcortes/xyz/Main.java
index ca7fab4..2011031 100644
--- a/src/danielcortes/xyz/Main.java
+++ b/src/danielcortes/xyz/Main.java
@@ -113,8 +113,4 @@ public class Main {
frame.setVisible(true);
}
- private static void test(){
- InformeMensual informeMensual = new InformeMensual(LocalDate.now());
- informeMensual.generarInforme();
- }
}
diff --git a/src/danielcortes/xyz/controllers/ArqueoController.java b/src/danielcortes/xyz/controllers/ArqueoController.java
index 0da01ca..8a828c5 100644
--- a/src/danielcortes/xyz/controllers/ArqueoController.java
+++ b/src/danielcortes/xyz/controllers/ArqueoController.java
@@ -184,7 +184,6 @@ public class ArqueoController {
this.view.getCienField().getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ENTER"),"nextField");
this.view.getCincuentaField().getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ENTER"),"nextField");
this.view.getDiezField().getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ENTER"),"save");
- this.view.getGuardarEfectivoButton().getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ENTER"),"save");
this.view.getVeinteMilField().getActionMap().put("nextField", new NextAction(this.view.getDiezMilField()));
this.view.getDiezMilField().getActionMap().put("nextField", new NextAction(this.view.getCincoMilField()));
@@ -195,14 +194,20 @@ public class ArqueoController {
this.view.getCienField().getActionMap().put("nextField", new NextAction(this.view.getCincuentaField()));
this.view.getCincuentaField().getActionMap().put("nextField", new NextAction(this.view.getDiezField()));
this.view.getDiezField().getActionMap().put("save", new GuardarEfectivoAction(this));
- this.view.getGuardarEfectivoButton().getActionMap().put("save", new GuardarEfectivoAction(this));
this.view.getChequesField().getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ENTER"),"nextField");
this.view.getTarjetasField().getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("ENTER"),"save");
this.view.getChequesField().getActionMap().put("nextField", new NextAction(this.view.getTarjetasField()));
this.view.getTarjetasField().getActionMap().put("save", new GuardarDocumentosAction(this));
- this.view.getGuardarDocumentosButton().getActionMap().put("save", new GuardarDocumentosAction(this));
+
+ this.view.getGuardarEfectivoButton().addActionListener(e ->{
+ this.guardarEfectivoActionListener();
+ });
+ this.view.getGuardarDocumentosButton().addActionListener(e ->{
+ this.guardarEfectivoActionListener();
+ });
+
}
diff --git a/src/danielcortes/xyz/controllers/InformesController.java b/src/danielcortes/xyz/controllers/InformesController.java
new file mode 100644
index 0000000..5647a0c
--- /dev/null
+++ b/src/danielcortes/xyz/controllers/InformesController.java
@@ -0,0 +1,93 @@
+/*
+ * 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.controllers;
+
+import danielcortes.xyz.informes.InformeMensual;
+import danielcortes.xyz.views.InformeMensualDialog;
+import danielcortes.xyz.views.InformesView;
+
+import javax.swing.*;
+import javax.swing.filechooser.FileNameExtensionFilter;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+public class InformesController {
+ private InformesView view;
+
+ public InformesController(InformesView view) {
+ this.view = view;
+ this.setupViewEvents();
+ }
+
+ private void setupViewEvents() {
+ this.view.getInformeMensualButton().addActionListener(e -> generarInformeMensualListener());
+ }
+
+ private void generarInformeMensualListener() {
+ LocalDate month = askForMonth();
+ if (month == null) {
+ return;
+ }
+
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM YYYY");
+ String formatedName = month.format(formatter);
+ String capitalized = formatedName.substring(0, 1).toUpperCase() + formatedName.substring(1);
+ File saveFile = askForFile("Informe "+ capitalized);
+ if (saveFile == null) {
+ return;
+ }
+
+ InformeMensual informeMensual = new InformeMensual(month, saveFile);
+ informeMensual.generarInforme();
+ }
+
+ private LocalDate askForMonth() {
+ InformeMensualDialog informeMensualDialog = new InformeMensualDialog(this.view.getContentPanel());
+ if (informeMensualDialog.isAcepted()) {
+ return informeMensualDialog.getMonth();
+ } else {
+ return null;
+ }
+ }
+
+ private File askForFile(String suggestedName) {
+ JFileChooser chooser = new JFileChooser();
+ chooser.setDialogType(JFileChooser.SAVE_DIALOG);
+ chooser.setSelectedFile(new File(suggestedName+".xls"));
+ chooser.setFileFilter(new FileNameExtensionFilter("Excel 2007", "xls"));
+
+ if (chooser.showSaveDialog(this.view.getContentPanel()) == JFileChooser.APPROVE_OPTION) {
+ String filename = chooser.getSelectedFile().toString();
+ if (!filename.endsWith(".xls"))
+ filename += ".xls";
+
+ return new File(filename);
+ } else {
+ return null;
+ }
+ }
+
+}
diff --git a/src/danielcortes/xyz/controllers/ManagerController.java b/src/danielcortes/xyz/controllers/ManagerController.java
index fa0ac72..0f2dd35 100644
--- a/src/danielcortes/xyz/controllers/ManagerController.java
+++ b/src/danielcortes/xyz/controllers/ManagerController.java
@@ -41,10 +41,7 @@ import danielcortes.xyz.models.tipo_egreso.MysqlTipoEgresoDAO;
import danielcortes.xyz.models.tipo_ingreso.MysqlTipoIngresoDAO;
import danielcortes.xyz.models.tipo_ingreso.TipoIngreso;
import danielcortes.xyz.models.tipo_ingreso.TipoIngresoDAO;
-import danielcortes.xyz.views.ArqueoView;
-import danielcortes.xyz.views.EgresosView;
-import danielcortes.xyz.views.IngresosView;
-import danielcortes.xyz.views.ManagerView;
+import danielcortes.xyz.views.*;
import javax.swing.*;
import java.awt.*;
@@ -60,6 +57,7 @@ public class ManagerController {
private IngresosController ingresosController;
private EgresosController egresosController;
private ArqueoController arqueoController;
+ private InformesController informesController;
private CajaDAO cajaDAO;
private DocumentosDAO documentosDAO;
@@ -123,6 +121,10 @@ public class ManagerController {
CardLayout layout = (CardLayout) this.view.getCardPanel().getLayout();
layout.show(this.view.getCardPanel(), "ARQUEO");
});
+ this.view.getInformesButton().addActionListener(e -> {
+ CardLayout layout = (CardLayout) this.view.getCardPanel().getLayout();
+ layout.show(this.view.getCardPanel(), "INFORMES");
+ });
this.view.getDatePicker().addDateChangeListener(e -> updateCaja());
}
@@ -159,6 +161,7 @@ public class ManagerController {
this.loadEgresosView();
this.loadIngresosView();
this.loadArqueoView();
+ this.loadInformesView();
}
/**
@@ -194,6 +197,13 @@ public class ManagerController {
this.arqueoController = new ArqueoController(arqueoView, this.efectivoDAO, this.documentosDAO, this.ingresoDAO, this.egresoDAO);
}
+ private void loadInformesView() {
+ InformesView informesView = new InformesView();
+ this.view.getCardPanel().add(informesView.getContentPanel(), "INFORMES");
+
+ this.informesController = new InformesController(informesView);
+ }
+
/**
* Activa el primer boton del manager
*/
diff --git a/src/danielcortes/xyz/informes/InformeMensual.java b/src/danielcortes/xyz/informes/InformeMensual.java
index 738e313..7e0c2f0 100644
--- a/src/danielcortes/xyz/informes/InformeMensual.java
+++ b/src/danielcortes/xyz/informes/InformeMensual.java
@@ -24,11 +24,16 @@
package danielcortes.xyz.informes;
+import danielcortes.xyz.models.caja.Caja;
+import danielcortes.xyz.models.caja.SQLiteCajaDAO;
+import danielcortes.xyz.models.documentos.Documentos;
+import danielcortes.xyz.models.efectivo.Efectivo;
import danielcortes.xyz.models.informe.InformeMensualContent;
import danielcortes.xyz.models.informe.SQLiteInformeMensualContentDAO;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
+import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@@ -40,88 +45,137 @@ import java.util.List;
public class InformeMensual {
private final String[] titles = {"DIA", "FECHA", "FISCALES", "MANUALES", "FACTURAS", "GUIAS", "TOTAL", "ACUMULADO"};
+ private final String[] dias = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
+
private List informe;
+ private File saveFile;
+
private Workbook wb;
private Sheet sheet;
private CreationHelper createHelper;
private HashMap styles;
- public InformeMensual(LocalDate date){
+
+ private int headerStartRow;
+ private int dataStartRow;
+ private int columnStart;
+ private int totalColumns;
+
+ public InformeMensual(LocalDate date, File saveFile){
+ new SQLiteCajaDAO().createCajasForMonth(date);
+
this.informe = new SQLiteInformeMensualContentDAO().getInformeMensual(date);
+ this.saveFile = saveFile;
this.wb = new HSSFWorkbook();
this.sheet = wb.createSheet();
this.createHelper = wb.getCreationHelper();
this.styles = this.generateStyles();
+
+ this.headerStartRow = 1;
+ this.columnStart = 1;
+ this.dataStartRow = 2;
+ this.totalColumns = 7;
}
- public void generarInforme(){
- for (int x = 0; x < informe.size(); x++) {
- InformeMensualContent data = informe.get(x);
- Row dataRow = sheet.createRow(x + 1);
+ private void fillHeaders(){
+ Row headers = sheet.createRow(this.headerStartRow);
+ for (int x = this.columnStart; x < titles.length + this.columnStart; x++) {
+ headers.createCell(x).setCellValue(titles[x - this.columnStart]);
+ }
+ }
+
+ private void fillData(){
+ for (int x = this.dataStartRow; x < this.dataStartRow + informe.size(); x++) {
+ Row dataRow = sheet.createRow(x);
+
+ InformeMensualContent data = informe.get(x-this.dataStartRow);
Date fecha = Date.from(data.getFecha().atStartOfDay(ZoneId.systemDefault()).toInstant());
- dataRow.createCell(0).setCellValue(data.getDia());
- dataRow.createCell(1).setCellValue(fecha);
- dataRow.createCell(2).setCellValue(data.getFiscales());
- dataRow.createCell(3).setCellValue(data.getManuales());
- dataRow.createCell(4).setCellValue(data.getFacturas());
- dataRow.createCell(5).setCellValue(data.getGuias());
- dataRow.createCell(6).setCellValue(data.getTotal());
- if(x>0){
- dataRow.createCell(7).setCellFormula(("H"+(x+1))+("+")+("G"+(x+2)));
+ dataRow.createCell(this.columnStart).setCellValue(this.dias[data.getDia()]);
+ dataRow.createCell(this.columnStart + 1).setCellValue(fecha);
+ dataRow.createCell(this.columnStart + 2).setCellValue(data.getFiscales());
+ dataRow.createCell(this.columnStart + 3).setCellValue(data.getManuales());
+ dataRow.createCell(this.columnStart + 4).setCellValue(data.getFacturas());
+ dataRow.createCell(this.columnStart + 5).setCellValue(data.getGuias());
+ dataRow.createCell(this.columnStart + 6).setCellValue(data.getTotal());
+
+ if(x==this.dataStartRow){
+ dataRow.createCell(this.columnStart + 7).setCellFormula(("H"+(x+1)));
}else{
- dataRow.createCell(7).setCellFormula(("G"+(x+2)));
+ dataRow.createCell(this.columnStart + 7).setCellFormula(("I"+(x))+("+")+("H"+(x+1)));
}
-
- dataRow.getCell(1).setCellStyle(this.styles.get("date"));
- dataRow.getCell(2).setCellStyle(this.styles.get("money"));
- dataRow.getCell(3).setCellStyle(this.styles.get("money"));
- dataRow.getCell(4).setCellStyle(this.styles.get("money"));
- dataRow.getCell(5).setCellStyle(this.styles.get("money"));
- dataRow.getCell(6).setCellStyle(this.styles.get("money"));
- dataRow.getCell(7).setCellStyle(this.styles.get("money"));
}
+ }
- Row headers = sheet.createRow(0);
- headers.setHeightInPoints(30);
- for (int x = 0; x < titles.length; x++) {
- headers.createCell(x).setCellValue(titles[x]);
- headers.getCell(x).setCellStyle(this.styles.get("header"));
+ private void setStyles(){
+ this.sheet.getRow(this.headerStartRow).setHeightInPoints(30);
+ for(int x = this.columnStart; x <= this.totalColumns + this.columnStart; x++){
+ this.sheet.getRow(this.headerStartRow).getCell(x).setCellStyle(this.styles.get("header"));
sheet.autoSizeColumn(x);
}
- try (OutputStream fileOut = new FileOutputStream("workbook.xls")) {
+
+ for(int x = this.dataStartRow; x < informe.size() + this.dataStartRow; x++){
+ Row row = this.sheet.getRow(x);
+ row.getCell(this.columnStart).setCellStyle(this.styles.get("borders"));
+ row.getCell(this.columnStart + 1).setCellStyle(this.styles.get("date"));
+ row.getCell(this.columnStart + 2).setCellStyle(this.styles.get("money"));
+ row.getCell(this.columnStart + 3).setCellStyle(this.styles.get("money"));
+ row.getCell(this.columnStart + 4).setCellStyle(this.styles.get("money"));
+ row.getCell(this.columnStart + 5).setCellStyle(this.styles.get("money"));
+ row.getCell(this.columnStart + 6).setCellStyle(this.styles.get("money"));
+ row.getCell(this.columnStart + 7).setCellStyle(this.styles.get("money"));
+ }
+
+ for(int x = this.columnStart; x <= this.totalColumns + this.columnStart; x++){
+ sheet.autoSizeColumn(x);
+ }
+ }
+
+ public void generarInforme(){
+ fillData();
+ fillHeaders();
+ setStyles();
+
+ try (OutputStream fileOut = new FileOutputStream(this.saveFile)) {
wb.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
}
}
- private HashMap generateStyles(){
- CellStyle dateCellStyle = this.wb.createCellStyle();
- dateCellStyle.setDataFormat(this.createHelper.createDataFormat().getFormat("d/m/yyyy"));
- CellStyle moneyCellStyle = this.wb.createCellStyle();
- moneyCellStyle.setDataFormat(this.createHelper.createDataFormat().getFormat("\"$\"#,##0_);(\"$\"#,##0)"));
+ private HashMap generateStyles(){
+ CellStyle bordersStyle = this.wb.createCellStyle();
+ bordersStyle.setBorderBottom(BorderStyle.THIN);
+ bordersStyle.setBorderTop(BorderStyle.THIN);
+ bordersStyle.setBorderLeft(BorderStyle.THIN);
+ bordersStyle.setBorderRight(BorderStyle.THIN);
+
+ CellStyle dateStyle = this.wb.createCellStyle();
+ dateStyle.cloneStyleFrom(bordersStyle);
+ dateStyle.setDataFormat(this.createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
+
+ CellStyle moneyStyle = this.wb.createCellStyle();
+ moneyStyle.cloneStyleFrom(bordersStyle);
+ moneyStyle.setDataFormat(this.createHelper.createDataFormat().getFormat("\"$\"#,##0_);(\"$\"#,##0)"));
Font headerFont = this.wb.createFont();
headerFont.setColor(IndexedColors.WHITE.getIndex());
CellStyle headerStyle = this.wb.createCellStyle();
+ headerStyle.cloneStyleFrom(bordersStyle);
headerStyle.setFont(headerFont);
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
- headerStyle.setBorderBottom(BorderStyle.THICK);
- headerStyle.setBorderTop(BorderStyle.THIN);
- headerStyle.setBorderLeft(BorderStyle.THIN);
- headerStyle.setBorderRight(BorderStyle.THIN);
headerStyle.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
HashMap styles = new HashMap<>();
- styles.put("date", dateCellStyle);
- styles.put("money", moneyCellStyle);
+ styles.put("date", dateStyle);
+ styles.put("money", moneyStyle);
styles.put("header", headerStyle);
+ styles.put("borders", bordersStyle);
return styles;
}
diff --git a/src/danielcortes/xyz/models/caja/CajaDAO.java b/src/danielcortes/xyz/models/caja/CajaDAO.java
index 6d6cfe5..6de63b3 100644
--- a/src/danielcortes/xyz/models/caja/CajaDAO.java
+++ b/src/danielcortes/xyz/models/caja/CajaDAO.java
@@ -42,6 +42,8 @@ public abstract class CajaDAO {
public abstract boolean insertCaja(Caja caja);
public abstract boolean updateCaja(Caja caja);
+ public abstract void createCajasForMonth(LocalDate month);
+
protected List cajasFromResultSet(ResultSet rs) throws SQLException {
List cajaList = new ArrayList<>();
while (rs.next()) {
diff --git a/src/danielcortes/xyz/models/caja/MysqlCajaDAO.java b/src/danielcortes/xyz/models/caja/MysqlCajaDAO.java
index bc163b4..03b90d3 100644
--- a/src/danielcortes/xyz/models/caja/MysqlCajaDAO.java
+++ b/src/danielcortes/xyz/models/caja/MysqlCajaDAO.java
@@ -25,6 +25,14 @@
package danielcortes.xyz.models.caja;
import danielcortes.xyz.data.MysqlConnectionHolder;
+import danielcortes.xyz.models.documentos.Documentos;
+import danielcortes.xyz.models.documentos.DocumentosDAO;
+import danielcortes.xyz.models.documentos.MysqlDocumentosDAO;
+import danielcortes.xyz.models.documentos.SQLiteDocumentosDAO;
+import danielcortes.xyz.models.efectivo.Efectivo;
+import danielcortes.xyz.models.efectivo.EfectivoDAO;
+import danielcortes.xyz.models.efectivo.MysqlEfectivoDAO;
+import danielcortes.xyz.models.efectivo.SQLiteEfectivoDAO;
import java.sql.*;
import java.time.LocalDate;
@@ -149,4 +157,35 @@ public class MysqlCajaDAO extends CajaDAO {
}
return updates > 0;
}
+
+
+ @Override
+ public void createCajasForMonth(LocalDate month) {
+ LocalDate date = month.withDayOfMonth(1);
+ LocalDate endDate = date.withDayOfMonth(date.lengthOfMonth());
+
+ while(date.isBefore(endDate)) {
+ if(this.findByFecha(date) != null){
+ date = date.plusDays(1);
+ continue;
+ }
+
+ Caja caja = new Caja();
+ caja.setFecha(date);
+ this.insertCaja(caja);
+
+ Efectivo efectivo = new Efectivo();
+ EfectivoDAO efectivoDAO = new MysqlEfectivoDAO();
+ efectivo.setCaja(caja);
+ efectivoDAO.insertDefaultEfectivo(efectivo);
+
+ Documentos documentos = new Documentos();
+ DocumentosDAO documentosDAO = new MysqlDocumentosDAO();
+ documentos.setCaja(caja);
+ documentosDAO.insertDefaultDocumentos(documentos);
+
+ date = date.plusDays(1);
+ }
+
+ }
}
diff --git a/src/danielcortes/xyz/models/caja/SQLiteCajaDAO.java b/src/danielcortes/xyz/models/caja/SQLiteCajaDAO.java
index e222696..6dd70b5 100644
--- a/src/danielcortes/xyz/models/caja/SQLiteCajaDAO.java
+++ b/src/danielcortes/xyz/models/caja/SQLiteCajaDAO.java
@@ -25,6 +25,12 @@
package danielcortes.xyz.models.caja;
import danielcortes.xyz.data.SQLiteConnectionHolder;
+import danielcortes.xyz.models.documentos.Documentos;
+import danielcortes.xyz.models.documentos.DocumentosDAO;
+import danielcortes.xyz.models.documentos.SQLiteDocumentosDAO;
+import danielcortes.xyz.models.efectivo.Efectivo;
+import danielcortes.xyz.models.efectivo.EfectivoDAO;
+import danielcortes.xyz.models.efectivo.SQLiteEfectivoDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -152,4 +158,34 @@ public class SQLiteCajaDAO extends CajaDAO {
}
return updates > 0;
}
+
+ @Override
+ public void createCajasForMonth(LocalDate month) {
+ LocalDate date = month.withDayOfMonth(1);
+ LocalDate endDate = date.withDayOfMonth(date.lengthOfMonth());
+
+ while(date.isBefore(endDate)) {
+ if(this.findByFecha(date) != null){
+ date = date.plusDays(1);
+ continue;
+ }
+
+ Caja caja = new Caja();
+ caja.setFecha(date);
+ this.insertCaja(caja);
+
+ Efectivo efectivo = new Efectivo();
+ EfectivoDAO efectivoDAO = new SQLiteEfectivoDAO();
+ efectivo.setCaja(caja);
+ efectivoDAO.insertDefaultEfectivo(efectivo);
+
+ Documentos documentos = new Documentos();
+ DocumentosDAO documentosDAO = new SQLiteDocumentosDAO();
+ documentos.setCaja(caja);
+ documentosDAO.insertDefaultDocumentos(documentos);
+
+ date = date.plusDays(1);
+ }
+
+ }
}
diff --git a/src/danielcortes/xyz/models/informe/InformeMensualContent.java b/src/danielcortes/xyz/models/informe/InformeMensualContent.java
index 8911afc..1249c71 100644
--- a/src/danielcortes/xyz/models/informe/InformeMensualContent.java
+++ b/src/danielcortes/xyz/models/informe/InformeMensualContent.java
@@ -36,7 +36,7 @@ public class InformeMensualContent {
private int total;
public int getDia() {
- return dia;
+ return this.dia;
}
public void setDia(int dia) {
diff --git a/src/danielcortes/xyz/models/informe/SQLiteInformeMensualContentDAO.java b/src/danielcortes/xyz/models/informe/SQLiteInformeMensualContentDAO.java
index 0257697..a495108 100644
--- a/src/danielcortes/xyz/models/informe/SQLiteInformeMensualContentDAO.java
+++ b/src/danielcortes/xyz/models/informe/SQLiteInformeMensualContentDAO.java
@@ -34,23 +34,23 @@ import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
-public class SQLiteInformeMensualContentDAO extends InformeMensualContentDAO{
+public class SQLiteInformeMensualContentDAO extends InformeMensualContentDAO {
@Override
public List getInformeMensual(LocalDate date) {
ArrayList list = new ArrayList<>();
try {
Connection conn = new SQLiteConnectionHolder().getConnection();
String query = "select strftime(\"%w\", caja.fecha) \"dia\"," +
- "caja.fecha \"fecha\"," +
- "sum(case when ingresos.tipo_ingreso_id = 1 then ingresos.valor else 0 end) as \"fiscales\"," +
- "sum(case when ingresos.tipo_ingreso_id = 2 then ingresos.valor else 0 end) as \"manuales\"," +
- "sum(case when ingresos.tipo_ingreso_id = 3 then ingresos.valor else 0 end) as \"facturas\"," +
- "sum(case when ingresos.tipo_ingreso_id = 4 then ingresos.valor else 0 end) as \"guias\"," +
- "sum(ingresos.valor) \"total\" " +
- "from caja join ingresos on (caja.id = ingresos.caja_id) " +
- "where caja.fecha between date(?) and date(?) " +
- "group by caja.fecha " +
- "order by caja.fecha ";
+ "caja.fecha \"fecha\"," +
+ "sum(case when ingresos.tipo_ingreso_id = 1 then ingresos.valor else 0 end) as \"fiscales\"," +
+ "sum(case when ingresos.tipo_ingreso_id = 2 then ingresos.valor else 0 end) as \"manuales\"," +
+ "sum(case when ingresos.tipo_ingreso_id = 3 then ingresos.valor else 0 end) as \"facturas\"," +
+ "sum(case when ingresos.tipo_ingreso_id = 4 then ingresos.valor else 0 end) as \"guias\"," +
+ "sum(case when ingresos.valor not null then ingresos.valor else 0 end) \"total\" " +
+ "from caja left join ingresos on (caja.id = ingresos.caja_id) " +
+ "where caja.fecha between date(?) and date(?) " +
+ "group by caja.fecha " +
+ "order by caja.fecha ";
PreparedStatement ps = conn.prepareStatement(query);
@@ -58,7 +58,7 @@ public class SQLiteInformeMensualContentDAO extends InformeMensualContentDAO{
ps.setString(2, date.withDayOfMonth(LocalDate.now().lengthOfMonth()).toString());
ResultSet rs = ps.executeQuery();
- while(rs.next()){
+ while (rs.next()) {
InformeMensualContent informeMensualContent = new InformeMensualContent();
informeMensualContent.setDia(rs.getInt("dia"));
informeMensualContent.setFecha(LocalDate.parse(rs.getString("fecha")));
diff --git a/src/danielcortes/xyz/views/InformeMensualDialog.form b/src/danielcortes/xyz/views/InformeMensualDialog.form
new file mode 100644
index 0000000..c249f10
--- /dev/null
+++ b/src/danielcortes/xyz/views/InformeMensualDialog.form
@@ -0,0 +1,100 @@
+
+
diff --git a/src/danielcortes/xyz/views/InformeMensualDialog.java b/src/danielcortes/xyz/views/InformeMensualDialog.java
new file mode 100644
index 0000000..2b413e0
--- /dev/null
+++ b/src/danielcortes/xyz/views/InformeMensualDialog.java
@@ -0,0 +1,180 @@
+/*
+ * 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.views;
+
+import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.core.GridLayoutManager;
+import com.intellij.uiDesigner.core.Spacer;
+import danielcortes.xyz.views.components.YearSpinnerModel;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+public class InformeMensualDialog extends JDialog {
+ private JPanel contentPane;
+ private JButton buttonOK;
+ private JButton buttonCancel;
+ private JComboBox monthCombo;
+ private JSpinner yearSpinner;
+
+ private ArrayList months;
+
+ private boolean acepted;
+
+ public InformeMensualDialog(JComponent parent) {
+ $$$setupUI$$$();
+ setContentPane(contentPane);
+ setModalityType(ModalityType.APPLICATION_MODAL);
+ getRootPane().setDefaultButton(buttonOK);
+
+
+ buttonOK.addActionListener(e -> onOK());
+
+ buttonCancel.addActionListener(e -> onCancel());
+
+ setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
+ addWindowListener(new WindowAdapter() {
+ public void windowClosing(WindowEvent e) {
+ onCancel();
+ }
+ });
+
+ contentPane.registerKeyboardAction(e -> onCancel(), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+
+ pack();
+ setLocationRelativeTo(parent);
+ setVisible(true);
+ }
+
+ private void onOK() {
+ this.acepted = true;
+ dispose();
+ }
+
+ private void onCancel() {
+ this.acepted = false;
+ dispose();
+ }
+
+ public boolean isAcepted() {
+ return this.acepted;
+ }
+
+ public LocalDate getMonth() {
+ int year = Integer.valueOf((String) yearSpinner.getValue());
+ int month = this.months.indexOf((String) this.monthCombo.getSelectedItem()) + 1;
+
+ LocalDate monthDate = LocalDate.of(year, month, 1);
+ return monthDate;
+ }
+
+ /**
+ * Method generated by IntelliJ IDEA GUI Designer
+ * >>> IMPORTANT!! <<<
+ * DO NOT edit this method OR call it in your code!
+ *
+ * @noinspection ALL
+ */
+ private void $$$setupUI$$$() {
+ createUIComponents();
+ contentPane = new JPanel();
+ contentPane.setLayout(new GridLayoutManager(2, 1, new Insets(10, 10, 10, 10), -1, -1));
+ final JPanel panel1 = new JPanel();
+ panel1.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1));
+ contentPane.add(panel1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false));
+ final Spacer spacer1 = new Spacer();
+ panel1.add(spacer1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
+ final JPanel panel2 = new JPanel();
+ panel2.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 0), -1, -1, true, false));
+ panel1.add(panel2, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ buttonOK = new JButton();
+ buttonOK.setText("OK");
+ panel2.add(buttonOK, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ buttonCancel = new JButton();
+ buttonCancel.setText("Cancel");
+ panel2.add(buttonCancel, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel3 = new JPanel();
+ panel3.setLayout(new GridLayoutManager(3, 2, new Insets(0, 0, 0, 0), -1, -1));
+ contentPane.add(panel3, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ final JLabel label1 = new JLabel();
+ label1.setText("Mes");
+ panel3.add(label1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ panel3.add(monthCombo, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label2 = new JLabel();
+ label2.setText("Año");
+ panel3.add(label2, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ panel3.add(yearSpinner, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label3 = new JLabel();
+ label3.setText("Seleccione Mes y Año");
+ panel3.add(label3, new GridConstraints(0, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ }
+
+ /**
+ * @noinspection ALL
+ */
+ public JComponent $$$getRootComponent$$$() {
+ return contentPane;
+ }
+
+ private void createUIComponents() {
+ createYearSpinner();
+ createMonthCombo();
+ }
+
+ private void createYearSpinner() {
+ SpinnerModel model = new YearSpinnerModel();
+ this.yearSpinner = new JSpinner();
+ this.yearSpinner.setModel(model);
+ ((JSpinner.DefaultEditor) this.yearSpinner.getEditor()).getTextField().setEditable(true);
+ }
+
+ private void createMonthCombo() {
+ months = new ArrayList<>();
+ months.add("Enero");
+ months.add("Febrero");
+ months.add("Marzo");
+ months.add("Abril");
+ months.add("Mayo");
+ months.add("Junio");
+ months.add("Julio");
+ months.add("Agosto");
+ months.add("Septiembre");
+ months.add("Octubre");
+ months.add("Noviembre");
+ months.add("Diciembre");
+
+ monthCombo = new JComboBox<>();
+ for (String month : months) {
+ monthCombo.addItem(month);
+ }
+
+ }
+}
diff --git a/src/danielcortes/xyz/views/InformesView.form b/src/danielcortes/xyz/views/InformesView.form
new file mode 100644
index 0000000..086838d
--- /dev/null
+++ b/src/danielcortes/xyz/views/InformesView.form
@@ -0,0 +1,163 @@
+
+
diff --git a/src/danielcortes/xyz/views/InformesView.java b/src/danielcortes/xyz/views/InformesView.java
new file mode 100644
index 0000000..075d365
--- /dev/null
+++ b/src/danielcortes/xyz/views/InformesView.java
@@ -0,0 +1,124 @@
+/*
+ * 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.views;
+
+import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.core.GridLayoutManager;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class InformesView {
+ private JButton informeMensualButton;
+ private JPanel contentPanel;
+
+ public JPanel getContentPanel() {
+ return contentPanel;
+ }
+
+ public JButton getInformeMensualButton() {
+ return informeMensualButton;
+ }
+
+ {
+// GUI initializer generated by IntelliJ IDEA GUI Designer
+// >>> IMPORTANT!! <<<
+// DO NOT EDIT OR ADD ANY CODE HERE!
+ $$$setupUI$$$();
+ }
+
+ /**
+ * Method generated by IntelliJ IDEA GUI Designer
+ * >>> IMPORTANT!! <<<
+ * DO NOT edit this method OR call it in your code!
+ *
+ * @noinspection ALL
+ */
+ private void $$$setupUI$$$() {
+ contentPanel = new JPanel();
+ contentPanel.setLayout(new GridLayoutManager(1, 3, new Insets(0, 0, 0, 0), -1, -1));
+ final JPanel panel1 = new JPanel();
+ panel1.setLayout(new GridLayoutManager(5, 1, new Insets(0, 0, 0, 0), -1, -1));
+ contentPanel.add(panel1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ informeMensualButton = new JButton();
+ informeMensualButton.setText("Informe Mensual");
+ panel1.add(informeMensualButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button1 = new JButton();
+ button1.setText("Button");
+ panel1.add(button1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button2 = new JButton();
+ button2.setText("Button");
+ panel1.add(button2, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button3 = new JButton();
+ button3.setText("Button");
+ panel1.add(button3, new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button4 = new JButton();
+ button4.setText("Button");
+ panel1.add(button4, new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel2 = new JPanel();
+ panel2.setLayout(new GridLayoutManager(5, 1, new Insets(0, 0, 0, 0), -1, -1));
+ contentPanel.add(panel2, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ final JButton button5 = new JButton();
+ button5.setText("Button");
+ panel2.add(button5, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button6 = new JButton();
+ button6.setText("Button");
+ panel2.add(button6, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button7 = new JButton();
+ button7.setText("Button");
+ panel2.add(button7, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button8 = new JButton();
+ button8.setText("Button");
+ panel2.add(button8, new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button9 = new JButton();
+ button9.setText("Button");
+ panel2.add(button9, new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel3 = new JPanel();
+ panel3.setLayout(new GridLayoutManager(5, 1, new Insets(0, 0, 0, 0), -1, -1));
+ contentPanel.add(panel3, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ final JButton button10 = new JButton();
+ button10.setText("Button");
+ panel3.add(button10, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button11 = new JButton();
+ button11.setText("Button");
+ panel3.add(button11, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button12 = new JButton();
+ button12.setText("Button");
+ panel3.add(button12, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button13 = new JButton();
+ button13.setText("Button");
+ panel3.add(button13, new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JButton button14 = new JButton();
+ button14.setText("Button");
+ panel3.add(button14, new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ }
+
+ /**
+ * @noinspection ALL
+ */
+ public JComponent $$$getRootComponent$$$() {
+ return contentPanel;
+ }
+}
diff --git a/src/danielcortes/xyz/views/ManagerView.form b/src/danielcortes/xyz/views/ManagerView.form
index 099a22b..2fc2326 100644
--- a/src/danielcortes/xyz/views/ManagerView.form
+++ b/src/danielcortes/xyz/views/ManagerView.form
@@ -3,7 +3,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
@@ -65,6 +65,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/danielcortes/xyz/views/ManagerView.java b/src/danielcortes/xyz/views/ManagerView.java
index 785b794..f17ef71 100644
--- a/src/danielcortes/xyz/views/ManagerView.java
+++ b/src/danielcortes/xyz/views/ManagerView.java
@@ -40,6 +40,7 @@ public class ManagerView {
private JPanel controlsPanel;
private JToggleButton arqueoButton;
private DatePicker datePicker;
+ private JToggleButton informesButton;
public JToggleButton getEgresosButton() {
return egresosButton;
@@ -53,6 +54,10 @@ public class ManagerView {
return arqueoButton;
}
+ public JToggleButton getInformesButton() {
+ return informesButton;
+ }
+
public DatePicker getDatePicker() {
return datePicker;
}
@@ -86,7 +91,7 @@ public class ManagerView {
cardPanel.setLayout(new CardLayout(0, 0));
contentPanel.add(cardPanel, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
controlsPanel = new JPanel();
- controlsPanel.setLayout(new GridLayoutManager(1, 5, new Insets(0, 0, 0, 0), -1, -1));
+ controlsPanel.setLayout(new GridLayoutManager(1, 6, new Insets(0, 0, 0, 0), -1, -1));
contentPanel.add(controlsPanel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_NORTH, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false));
egresosButton = new JToggleButton();
egresosButton.setText("Egresos");
@@ -107,6 +112,9 @@ public class ManagerView {
controlsPanel.add(datePicker, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
final Spacer spacer1 = new Spacer();
controlsPanel.add(spacer1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
+ informesButton = new JToggleButton();
+ informesButton.setText("Informes");
+ controlsPanel.add(informesButton, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, new Dimension(200, -1), null, 0, false));
ButtonGroup buttonGroup;
buttonGroup = new ButtonGroup();
buttonGroup.add(egresosButton);
diff --git a/src/danielcortes/xyz/views/components/YearSpinnerModel.java b/src/danielcortes/xyz/views/components/YearSpinnerModel.java
new file mode 100644
index 0000000..3236338
--- /dev/null
+++ b/src/danielcortes/xyz/views/components/YearSpinnerModel.java
@@ -0,0 +1,91 @@
+/*
+ * 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.views.components;
+
+import javax.swing.*;
+import java.time.Year;
+
+public class YearSpinnerModel extends AbstractSpinnerModel {
+ private int value;
+ private String showingValue;
+
+ public YearSpinnerModel() {
+ this.value = Year.now().getValue();
+ this.showingValue = String.valueOf(value);
+ }
+
+ @Override
+ public Object getValue() {
+ return this.showingValue;
+ }
+
+ @Override
+ public void setValue(Object value) {
+ this.showingValue = String.valueOf(value);
+ this.value = Integer.parseInt(this.showingValue);
+ }
+
+ @Override
+ public Object getNextValue() {
+ if (this.value == 9999) {
+ return null;
+ }
+
+ if (this.value > 9999) {
+ this.value = 9999;
+ this.showingValue = String.valueOf(this.value);
+ } else if (this.value < 0) {
+ this.value = 0;
+ this.showingValue = String.valueOf(this.value);
+ } else {
+ this.value++;
+ this.showingValue = String.valueOf(value);
+ }
+
+ this.fireStateChanged();
+ return this.showingValue;
+ }
+
+ @Override
+ public Object getPreviousValue() {
+ if (this.value == 0) {
+ return null;
+ }
+
+ if (this.value > 9999) {
+ this.value = 9999;
+ this.showingValue = String.valueOf(this.value);
+ } else if (this.value < 0) {
+ this.value = 0;
+ this.showingValue = String.valueOf(this.value);
+ } else {
+ this.value--;
+ this.showingValue = String.valueOf(value);
+ }
+
+ this.fireStateChanged();
+ return this.showingValue;
+ }
+}