Documentado el controlador de ingresos

This commit is contained in:
Daniel Cortes
2018-12-30 21:22:39 -03:00
parent b9f4c4ccd9
commit 1e45becc97
4 changed files with 317 additions and 208 deletions

View File

@@ -31,6 +31,7 @@ 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 org.jetbrains.annotations.Contract;
import javax.swing.*;
import java.awt.event.KeyAdapter;
@@ -48,6 +49,13 @@ public class IngresosController {
private Ingreso editingIngreso;
private boolean editing;
/**
* Crea el controlado de egresos, el cual esta acoplado con la vista de ingresos, controlando el estado y contenido de esta.
* Al iniciarse ejecuta.
* - Metodo que llena el combobox de tipos de ingreso
* - Metodo que genera los eventos para la vista
* - Metodo que actualiza el estado de los botones
*/
public IngresosController(IngresosView view, IngresoDAO ingresoDAO, TipoIngresoDAO tipoIngresoDAO) {
this.view = view;
this.ingresoDAO = ingresoDAO;
@@ -57,20 +65,34 @@ public class IngresosController {
this.updateButtonsEnabled();
}
/**
* Getter!!
*/
public IngresoDAO getIngresoDAO() {
return ingresoDAO;
}
/**
* Getter!!!
* @return
*/
public TipoIngresoDAO getTipoIngresoDAO() {
return tipoIngresoDAO;
}
/**
* Guarda la caja ingresada y actualiza el contenido de la tabla de ingresos y el campo de total de ingresos
* @param caja
*/
public void updateCaja(Caja caja){
this.caja = caja;
this.fillIngresosTable();
this.updateTotalIngresos();
}
/**
* LLena el combobox de tipos de ingresos
*/
private void fillTipoIngresoCombo() {
JComboBox<TipoIngreso> tipoCombo = this.view.getTipoCombo();
for (TipoIngreso tipo : this.tipoIngresoDAO.findAll()) {
@@ -78,6 +100,9 @@ public class IngresosController {
}
}
/**
* Llena la tabla de ingresos con los ingresos pertenecientes a la caja guarda
*/
private void fillIngresosTable() {
IngresosTableModel ingresosTableModel = this.view.getIngresosTableModel();
ingresosTableModel.removeRows();
@@ -86,8 +111,16 @@ public class IngresosController {
}
}
/**
* Genera los eventos para los distintos componentes de la vista
* - Cuando se presiona el boton de guardar o se apreta enter en los fields de valor, nro inicial,
* nro final y tipo se llama a guardarActionListener
* - Cuando se presiona el boton de eliminar se llama al eliminarActionListener
* - Cuando se selecciona una fila en la tabla se llama a updateButtonsEnabled
* - Cuando se presiona el boton de editar o se hace doble click sobre una fila de la tabla se llama a editarActionListener
*/
private void setupViewEvents() {
this.view.getIngresosTable().getSelectionModel().addListSelectionListener(e -> onSelectTableRowListener());
this.view.getIngresosTable().getSelectionModel().addListSelectionListener(e -> updateButtonsEnabled());
this.view.getGuardarButton().addActionListener(e -> guardarActionListener());
this.view.getValorField().addActionListener(e -> guardarActionListener());
this.view.getNroInicialField().addActionListener(e -> guardarActionListener());
@@ -114,16 +147,21 @@ public class IngresosController {
});
}
/**
* Realiza las preparaciones previas a guardar un ingreso
* Primero llama a normalizar los inputs y a esconder los mensajes de error
* Luego dependiendo si se tiene la flag editing en true o false se llama a editar ingreso o a guardarlo
* Tras terminar esto se llama a resetear el focus.
*/
private void guardarActionListener() {
this.normalizeInputs();
this.hideErrorMessages();
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 {
@@ -132,6 +170,11 @@ public class IngresosController {
this.resetFocus();
}
/**
* Realiza las acciones necesarias para eliminar un ingreso
* Solo lo va a realizar si es que esta seleccionada una fila de la tabla, se eliminara el ingreso seleccionado
* Una vez eliminado se llama a actualizar el total de ingresos y el estado de los botones
*/
private void eliminarActionListener() {
int selectedId = this.view.getIngresosTable().getSelectedRow();
if(selectedId >= 0){
@@ -143,7 +186,15 @@ public class IngresosController {
}
}
/**
* Realiza las preparaciones previas a editar un ingreso
* Primero llama a esconder los mensajes de error.
* Guarda globlarmente el ingreso a ser editar, el id de este y una flag que indica que se esta en modo de editar.
* Finalmente llena los campos de inputs con los datos del ingreso a editar.
*/
private void editarActionListener() {
this.hideErrorMessages();
int selectedID = this.view.getIngresosTable().getSelectedRow();
if(selectedID >= 0) {
Ingreso ingreso = this.view.getIngresosTableModel().getIngreso(selectedID);
@@ -159,16 +210,19 @@ public class IngresosController {
}
}
private void onSelectTableRowListener(){
this.view.getEliminarButton().setEnabled(true);
this.view.getEditarButton().setEnabled(true);
}
/**
* Obtiene el total de ingresos de la caja y lo coloca en el el field totalingresos
*/
private void updateTotalIngresos(){
int total = this.ingresoDAO.getTotalIngreso(this.caja);
this.view.getTotalIngresoField().setText(String.valueOf(total));
}
/**
* Actualiza si los botones estan habilitados
* Esto depende de si se encuentra al menos una fila en la tabla seleccionada
* Si es asi, son habilidatos, si no, de deshabilitan
*/
private void updateButtonsEnabled() {
if(this.view.getIngresosTable().getSelectedRow()>=0){
this.view.getEliminarButton().setEnabled(true);
@@ -179,6 +233,10 @@ public class IngresosController {
}
}
/**
* Guarda un ingreso tras llamar a validar el input
* Luego de guardar agrega a la tabla el ingreso, llama a limpiar los campos de input y a actualizar el total de ingresos
*/
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();
@@ -196,6 +254,11 @@ public class IngresosController {
}
}
/**
* Edita el ingreso tras llamar a validar el input
* Tras esto actualiza el ingreso en la tabla, llama a actualizar el total de ingresos, a limpiar los campos de input y a desactivar la flag de editing.
*
*/
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);
@@ -210,6 +273,10 @@ public class IngresosController {
}
}
/**
* Llama a los metodos necesarios para validar el input
* @return true cuando todas las validaciones retoran true, si no, false
*/
private boolean validateInput(String valor, String nroInicial, String nroFinal, TipoIngreso tipoIngreso, Caja caja) {
this.hideErrorMessages();
@@ -222,10 +289,24 @@ public class IngresosController {
return valorValidation && tipoIngresoValidation && cajaValidation;
}
/**
* Valida la variable caja este caso
* - Es null
* @return Si este caso es true se retornara false, si no, se retorna true
*/
private boolean validateCaja(Caja caja) {
return caja != null;
}
/**
* Valida la variable valor contra los casos
* - Es null
* - Esta vacio
* - Los caracteres no son solamente digitos
* - El largo del string es mayor a 10
* Cuando el primer caso sea true, colocara un mensaje de error correspondiente en el jlabel correspondiente
* @return Si cualquiera de estos casos son true se retornara false, si no, se retorna true
*/
private boolean validateValor(String valor) {
if (valor == null) {
this.view.getErrorValor().setText("Hubo un problema con los datos");
@@ -233,7 +314,6 @@ public class IngresosController {
return false;
}
valor = valor.trim();
if (valor.isEmpty()) {
this.view.getErrorValor().setText("El campo esta vacio");
this.view.getErrorValor().setVisible(true);
@@ -256,6 +336,13 @@ public class IngresosController {
}
/**
* Valida la variable nroInicial contra los casos
* - Es null
* - Esta vacio
* Cuando el primer caso sea true, colocara un mensaje de error correspondiente en el jlabel correspondiente
* @return Si cualquiera de estos casos son true se retornara false, si no, se retorna true
*/
private boolean validateNroInicial(String nroInicial){
if (nroInicial == null) {
this.view.getErrorNroInicial().setText("Hubo un problema con los datos");
@@ -271,6 +358,13 @@ public class IngresosController {
return true;
}
/**
* Valida la variable nroFinal contra los casos
* - Es null
* - Esta vacio
* Cuando el primer caso sea true, colocara un mensaje de error correspondiente en el jlabel correspondiente
* @return Si cualquiera de estos casos son true se retornara false, si no, se retorna true
*/
private boolean validateNroFinal(String nroFinal){
if (nroFinal == null) {
this.view.getErrorNroFinal().setText("Hubo un problema con los datos");
@@ -286,6 +380,12 @@ public class IngresosController {
return true;
}
/**
* Valida la variable caja este caso
* - Es null
* Cuando sea true, colocara un mensaje de error en el jlabel correspondiente
* @return Si este caso es true se retornara false, si no, se retorna true
*/
private boolean validateTipoIngreso(TipoIngreso tipoIngreso) {
if (tipoIngreso == null) {
this.view.getErrorTipoIngreso().setText("Hubo un problema con los datos");
@@ -295,6 +395,9 @@ public class IngresosController {
return true;
}
/**
* Esconde los mensajes de error en la ventana de ingresos
*/
private void hideErrorMessages() {
this.view.getErrorTipoIngreso().setVisible(false);
this.view.getErrorValor().setVisible(false);
@@ -302,6 +405,9 @@ public class IngresosController {
this.view.getErrorNroFinal().setVisible(false);
}
/**
* Vacia los jtextfields y selecciona la primera opcion del jcombobox
*/
private void clearInputs() {
this.view.getTipoCombo().setSelectedIndex(0);
this.view.getValorField().setText("");
@@ -309,12 +415,18 @@ public class IngresosController {
this.view.getNroFinalField().setText("");
}
/**
* Ejecuta un trim sobre todos los jtextfield
*/
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());
}
/**
* Le pide focus al tipo combo
*/
private void resetFocus(){
this.view.getTipoCombo().requestFocus();
}