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 @@ - + + + + + + + + + + + + + + + + + - @@ -359,7 +318,7 @@ - + @@ -376,16 +335,16 @@ + + + + - - - - - @@ -827,16 +798,16 @@ - + - + - + @@ -855,7 +826,7 @@ - + @@ -917,7 +888,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -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; + } +}