Resubido todo

This commit is contained in:
Daniel Cortes
2018-12-29 01:15:35 -03:00
parent 29d7f910d7
commit 7e94207da3
91 changed files with 10525 additions and 0 deletions

View File

@@ -0,0 +1,321 @@
/*
* MIT License
*
* Copyright (c) 2018 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.models.caja.Caja;
import danielcortes.xyz.models.ingreso.Ingreso;
import danielcortes.xyz.models.ingreso.IngresoDAO;
import danielcortes.xyz.models.tipo_ingreso.TipoIngreso;
import danielcortes.xyz.models.tipo_ingreso.TipoIngresoDAO;
import danielcortes.xyz.views.IngresosView;
import danielcortes.xyz.views.components.IngresosTableModel;
import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class IngresosController {
private IngresosView view;
private IngresoDAO ingresoDAO;
private TipoIngresoDAO tipoIngresoDAO;
private Caja caja;
private int editingId;
private Ingreso editingIngreso;
private boolean editing;
public IngresosController(IngresosView view, IngresoDAO ingresoDAO, TipoIngresoDAO tipoIngresoDAO) {
this.view = view;
this.ingresoDAO = ingresoDAO;
this.tipoIngresoDAO = tipoIngresoDAO;
this.fillTipoIngresoCombo();
this.setupViewEvents();
this.updateButtonsEnabled();
}
public IngresoDAO getIngresoDAO() {
return ingresoDAO;
}
public TipoIngresoDAO getTipoIngresoDAO() {
return tipoIngresoDAO;
}
public void updateCaja(Caja caja){
this.caja = caja;
this.fillIngresosTable();
this.updateTotalIngresos();
}
private void fillTipoIngresoCombo() {
JComboBox<TipoIngreso> tipoCombo = this.view.getTipoCombo();
for (TipoIngreso tipo : this.tipoIngresoDAO.findAll()) {
tipoCombo.addItem(tipo);
}
}
private void fillIngresosTable() {
IngresosTableModel ingresosTableModel = this.view.getIngresosTableModel();
ingresosTableModel.removeRows();
for (Ingreso ingreso : this.ingresoDAO.findByCaja(this.caja)) {
ingresosTableModel.addRow(ingreso);
}
}
private void setupViewEvents() {
this.view.getIngresosTable().getSelectionModel().addListSelectionListener(e -> onSelectTableRowListener());
this.view.getGuardarButton().addActionListener(e -> guardarActionListener());
this.view.getValorField().addActionListener(e -> guardarActionListener());
this.view.getNroInicialField().addActionListener(e -> guardarActionListener());
this.view.getNroFinalField().addActionListener(e -> guardarActionListener());
this.view.getEliminarButton().addActionListener(e -> eliminarActionListener());
this.view.getEditarButton().addActionListener(e -> editarActionListener());
this.view.getTipoCombo().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
guardarActionListener();
}
}
});
this.view.getIngresosTable().addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent mouseEvent) {
JTable table = (JTable) mouseEvent.getSource();
if (mouseEvent.getClickCount() == 2 && table.getSelectedRow() != -1) {
IngresosController.this.editarActionListener();
}
}
});
}
private void guardarActionListener() {
this.normalizeInputs();
String valor = this.view.getValorField().getText();
String nroInicial = this.view.getNroInicialField().getText();
String nroFinal = this.view.getNroFinalField().getText();
TipoIngreso tipoIngreso = (TipoIngreso) this.view.getTipoCombo().getSelectedItem();
System.out.println(nroInicial);
System.out.println(nroFinal);
if(editing) {
this.editarIngreso(valor, nroInicial, nroFinal, tipoIngreso, this.caja);
} else {
this.guardarIngreso(valor, nroInicial, nroFinal, tipoIngreso, this.caja);
}
this.resetFocus();
}
private void eliminarActionListener() {
int selectedId = this.view.getIngresosTable().getSelectedRow();
if(selectedId >= 0){
Ingreso ingreso = this.view.getIngresosTableModel().getIngreso(selectedId);
this.view.getIngresosTableModel().removeRow(selectedId);
this.ingresoDAO.deleteIngreso(ingreso);
this.updateTotalIngresos();
this.updateButtonsEnabled();
}
}
private void editarActionListener() {
int selectedID = this.view.getIngresosTable().getSelectedRow();
if(selectedID >= 0) {
Ingreso ingreso = this.view.getIngresosTableModel().getIngreso(selectedID);
this.editingId = selectedID;
this.editingIngreso = ingreso;
this.editing = true;
this.view.getTipoCombo().setSelectedItem(ingreso.getTipoIngreso());
this.view.getValorField().setText(String.valueOf(ingreso.getValor()));
this.view.getNroInicialField().setText(String.valueOf(ingreso.getNroInicial()));
this.view.getNroFinalField().setText(String.valueOf(ingreso.getNroFinal()));
}
}
private void onSelectTableRowListener(){
this.view.getEliminarButton().setEnabled(true);
this.view.getEditarButton().setEnabled(true);
}
private void updateTotalIngresos(){
int total = this.ingresoDAO.getTotalIngreso(this.caja);
this.view.getTotalIngresoField().setText(String.valueOf(total));
}
private void updateButtonsEnabled() {
if(this.view.getIngresosTable().getSelectedRow()>=0){
this.view.getEliminarButton().setEnabled(true);
this.view.getEditarButton().setEnabled(true);
}else{
this.view.getEliminarButton().setEnabled(false);
this.view.getEditarButton().setEnabled(false);
}
}
private void guardarIngreso(String valor, String nroInicial, String nroFinal, TipoIngreso tipoIngreso, Caja caja){
if(this.validateInput(valor, nroInicial, nroFinal, tipoIngreso, caja)){
Ingreso ingreso = new Ingreso();
ingreso.setTipoIngreso(tipoIngreso);
ingreso.setCaja(caja);
ingreso.setValor(Integer.valueOf(valor));
ingreso.setNroInicial(nroInicial);
ingreso.setNroFinal(nroFinal);
this.ingresoDAO.insertIngreso(ingreso);
this.view.getIngresosTableModel().addRow(ingreso);
this.clearInputs();
this.updateTotalIngresos();
}
}
private void editarIngreso(String valor, String nroInicial, String nroFinal, TipoIngreso tipoIngreso, Caja caja){
if(this.validateInput(valor, nroInicial, nroFinal, tipoIngreso, caja)){
this.editingIngreso.setTipoIngreso(tipoIngreso);
this.editingIngreso.setValor(Integer.valueOf(valor));
this.editingIngreso.setNroInicial(nroInicial);
this.editingIngreso.setNroFinal(nroFinal);
this.ingresoDAO.updateIngreso(this.editingIngreso);
this.view.getIngresosTableModel().setIngreso(this.editingId, this.editingIngreso);
this.updateTotalIngresos();
this.clearInputs();
this.editing = false;
}
}
private boolean validateInput(String valor, String nroInicial, String nroFinal, TipoIngreso tipoIngreso, Caja caja) {
this.hideErrorMessages();
boolean valorValidation = this.validateValor(valor);
boolean nroInicialValidation = this.validateNroInicial(nroInicial);
boolean nroFinalValidation = this.validateNroFinal(nroFinal);
boolean tipoIngresoValidation = this.validateTipoIngreso(tipoIngreso);
boolean cajaValidation = this.validateCaja(caja);
return valorValidation && tipoIngresoValidation && cajaValidation;
}
private boolean validateCaja(Caja caja) {
return caja != null;
}
private boolean validateValor(String valor) {
if (valor == null) {
this.view.getErrorValor().setText("Hubo un problema con los datos");
this.view.getErrorValor().setVisible(true);
return false;
}
valor = valor.trim();
if (valor.isEmpty()) {
this.view.getErrorValor().setText("El campo esta vacio");
this.view.getErrorValor().setVisible(true);
return false;
}
if (!valor.chars().allMatch(Character::isDigit)) {
this.view.getErrorValor().setText("Deben ser numeros");
this.view.getErrorValor().setVisible(true);
return false;
}
if(valor.length() > 10){
this.view.getErrorValor().setText("El numero ingresado es demasiado largo");
this.view.getErrorValor().setVisible(true);
return false;
}
return true;
}
private boolean validateNroInicial(String nroInicial){
if (nroInicial == null) {
this.view.getErrorNroInicial().setText("Hubo un problema con los datos");
this.view.getErrorNroInicial().setVisible(true);
return false;
}
if (nroInicial.isEmpty()) {
this.view.getErrorNroInicial().setText("El campo esta vacio");
this.view.getErrorNroInicial().setVisible(true);
return false;
}
return true;
}
private boolean validateNroFinal(String nroFinal){
if (nroFinal == null) {
this.view.getErrorNroFinal().setText("Hubo un problema con los datos");
this.view.getErrorNroFinal().setVisible(true);
return false;
}
if (nroFinal.isEmpty()) {
this.view.getErrorNroFinal().setText("El campo esta vacio");
this.view.getErrorNroFinal().setVisible(true);
return false;
}
return true;
}
private boolean validateTipoIngreso(TipoIngreso tipoIngreso) {
if (tipoIngreso == null) {
this.view.getErrorTipoIngreso().setText("Hubo un problema con los datos");
this.view.getErrorTipoIngreso().setVisible(true);
return false;
}
return true;
}
private void hideErrorMessages() {
this.view.getErrorTipoIngreso().setVisible(false);
this.view.getErrorValor().setVisible(false);
this.view.getErrorNroInicial().setVisible(false);
this.view.getErrorNroFinal().setVisible(false);
}
private void clearInputs() {
this.view.getTipoCombo().setSelectedIndex(0);
this.view.getValorField().setText("");
this.view.getNroInicialField().setText("");
this.view.getNroFinalField().setText("");
}
private void normalizeInputs(){
this.view.getValorField().setText(this.view.getValorField().getText().trim());
this.view.getNroInicialField().setText(this.view.getNroInicialField().getText().trim());
this.view.getNroFinalField().setText(this.view.getNroFinalField().getText().trim());
}
private void resetFocus(){
this.view.getTipoCombo().requestFocus();
}
}