Documentado el controlador de egresos

This commit is contained in:
Daniel Cortes
2018-12-30 17:57:49 -03:00
parent aa7876563f
commit b9f4c4ccd9
2 changed files with 320 additions and 50 deletions

View File

@@ -48,6 +48,15 @@ public class EgresosController {
private boolean editing;
private Egreso editingEgreso;
/**
* Crea el controlador para la vista de egresos y ejecuta:
* - Metodo que genera los eventos para la vista.
* - Metodo que llena los tipos de egresos en la vista.
* - Actualiza el estado de los botones.
* @param view
* @param egresoDAO
* @param tipoEgresoDAO
*/
public EgresosController(EgresosView view, EgresoDAO egresoDAO, TipoEgresoDAO tipoEgresoDAO) {
this.view = view;
this.egresoDAO = egresoDAO;
@@ -57,20 +66,35 @@ public class EgresosController {
this.updateButtonsEnabled();
}
/**
* Getter!
* @return
*/
public EgresoDAO getEgresoDAO() {
return egresoDAO;
}
/**
* Getter
* @return
*/
public TipoEgresoDAO getTipoEgresoDAO() {
return tipoEgresoDAO;
}
/**
* Actualiza los datos de la tabla de egresos y actualiza el field con el total de egresos.
* @param caja
*/
public void updateCaja(Caja caja){
this.caja = caja;
this.fillEgresosTable();
this.updateTotalEgresos();
}
/**
* Rellena el ComboBox con los tipos de egresos disponibles
*/
private void fillTipoEgresoCombo() {
JComboBox<TipoEgreso> tipoCombo = view.getTipoCombo();
for (TipoEgreso tipoEgreso : this.tipoEgresoDAO.findAll()) {
@@ -78,6 +102,9 @@ public class EgresosController {
}
}
/**
* Rellena la tabla de egresos con los egresos correspondientes a la caja seleccionada
*/
private void fillEgresosTable() {
EgresosTableModel egresosTableModel = view.getEgresosTableModel();
egresosTableModel.removeRows();
@@ -86,8 +113,15 @@ public class EgresosController {
}
}
/**
* Asigna todos los eventos para la vista de egresos.
* - Cuando se apreta el boton de guardar o se apreta enter en los fields de descripcion, nro, valor y tipo
* Se llama al metodo guardarActionListener.
* - Cuando se apreta el boton de eliminar se llama al metodos eliminarActionListener
* - Cuando se presuiona editar o se realizan 2 clicks en la tabla de egresos se llama al metodo editar.
*/
private void setUpViewEvents() {
this.view.getEgresosTable().getSelectionModel().addListSelectionListener(e -> onSelectTableRowListener());
this.view.getEgresosTable().getSelectionModel().addListSelectionListener(e -> updateButtonsEnabled());
this.view.getGuardarButton().addActionListener(e -> guardarActionListener());
this.view.getEliminarButton().addActionListener(e -> eliminarActionListener());
this.view.getEditarButton().addActionListener(e -> editarActionListener());
@@ -112,8 +146,16 @@ public class EgresosController {
});
}
/**
* Realiza las actiones necesarias para guardar un egreso
* Primero llama a normalizar los inputs y a ocultar los mensajes de error
* Luego si es que esta colocada la flag de editing se llama al metodo editarEgreso y si no, se llama a guardarEgreso
* Al terminar esto, se llama a resetear el focus en los inputs y a actualizar el total de egresos
*
*/
private void guardarActionListener() {
this.normalizeInputs();
this.hideErrorMessages();
String nro = this.view.getNroField().getText();
String descripcion = this.view.getDescripcionField().getText();
@@ -128,6 +170,10 @@ public class EgresosController {
this.resetFocus();
}
/**
* Realiza las acciones necesarias para eliminar un egreso
* Obtiene el egreso seleccionado y lo elimina, luego llama a actualizar el total de egresos y a actualizar el estado de los botones.
*/
private void eliminarActionListener() {
int selectedID = this.view.getEgresosTable().getSelectedRow();
if (selectedID >= 0) {
@@ -139,7 +185,16 @@ public class EgresosController {
}
}
/**
* Realiza lo necesario para comenzar a editar un egreso
* Llama a esconder los mensajes de error y a normalizar los inputs
* Guarda globalmente en la clase el egreso que se esta editando, su id y una flag indicando que se esta en modo editar.
* Ademas rellena los campos de input con los valores del egreso que se esta editando.
*/
private void editarActionListener() {
this.normalizeInputs();
this.hideErrorMessages();
int selectedID = this.view.getEgresosTable().getSelectedRow();
if (selectedID >= 0) {
Egreso egreso = this.view.getEgresosTableModel().getEgreso(selectedID);
@@ -155,16 +210,18 @@ public class EgresosController {
}
}
private void onSelectTableRowListener() {
this.view.getEliminarButton().setEnabled(true);
this.view.getEditarButton().setEnabled(true);
}
/**
* Obtiene el total de egresos y los coloca en el campo de totalEgresosField.
*/
private void updateTotalEgresos() {
int total = this.egresoDAO.getTotalEgreso(this.caja);
this.view.getTotalEgresosField().setText(String.valueOf(total));
}
/**
* Cuando se tiene seleccionada una fila de la tabla activa los botones de eliminar y editar
* Si no esta seleccionada los desactiva
*/
private void updateButtonsEnabled() {
if (this.view.getEgresosTable().getSelectedRow() >= 0) {
this.view.getEliminarButton().setEnabled(true);
@@ -175,6 +232,10 @@ public class EgresosController {
}
}
/**
* Guarda un egreso tras llamar a validar su input
* Luego de guardar, agrega el egreso a la tabla, llama a actualizar el total de egresos y llama a limpiar a los inputs
*/
private void guardarEgreso(String nro, String descripcion, String valor, TipoEgreso tipo, Caja caja) {
if (this.validateInput(nro, descripcion, valor, tipo, caja)) {
Egreso egreso = new Egreso();
@@ -190,6 +251,11 @@ public class EgresosController {
}
}
/**
* Actualiza un egreso tras llamar a validar su input
* Tras esto actualiza el egreso en la tabla, llama a actualizar el total de egresos y a limpiar los inputs
* Finalmente setea la flag editing a false
*/
private void editarEgreso(String nro, String descripcion, String valor, TipoEgreso tipo, Caja caja) {
if (this.validateInput(nro, descripcion, valor, tipo, caja)) {
this.editingEgreso.setValor(Integer.valueOf(valor));
@@ -204,8 +270,10 @@ public class EgresosController {
}
}
/**
* llama a los metodos necesarios para validar los inputs entregados
*/
private boolean validateInput(String nro, String descripcion, String valor, TipoEgreso tipoEgreso, Caja caja) {
this.hideErrorMessages();
boolean nroValidation = this.validateNro(nro);
boolean descripcionValidation = this.validateDescripcion(descripcion);
@@ -216,6 +284,13 @@ public class EgresosController {
return nroValidation && descripcionValidation && valorValidation && tipoEgresoValidation;
}
/**
* Valida la variable nro 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 validateNro(String nro) {
if (nro == null) {
this.view.getErrorNumero().setText("Hubo un problema con los datos");
@@ -233,6 +308,13 @@ public class EgresosController {
}
/**
* Valida la variable descripcion 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 validateDescripcion(String descripcion) {
if (descripcion == null) {
this.view.getErrorDescripcion().setText("Hubo un problema con los datos");
@@ -240,7 +322,6 @@ public class EgresosController {
return false;
}
descripcion = descripcion.trim();
if (descripcion.isEmpty()) {
this.view.getErrorDescripcion().setText("El campo esta vacio");
this.view.getErrorDescripcion().setVisible(true);
@@ -249,6 +330,15 @@ public class EgresosController {
return true;
}
/**
* Valida la variable valor contra los casos
* - Es null
* - Esta vacio
* - Los caracteres no son todos digitos
* - El largo del string es mayot 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");
@@ -256,7 +346,6 @@ public class EgresosController {
return false;
}
valor = valor.trim();
if (valor.isEmpty()) {
this.view.getErrorValor().setText("El campo esta vacio");
this.view.getErrorValor().setVisible(true);
@@ -279,6 +368,12 @@ public class EgresosController {
}
/**
* Valida la variable tipoEgreso contra los casos
* - Es null
* Cuando este caso sea true, colocara un mensaje de error correspondiente en el jlabel correspondiente
* @return Si este caso es true se retornara false, si no, se retorna true
*/
private boolean validateTipoEgreso(TipoEgreso tipoEgreso) {
if (tipoEgreso == null) {
this.view.getErrorTipoEgreso().setText("Hubo un problema con los datos");
@@ -288,10 +383,18 @@ public class EgresosController {
return true;
}
/**
* Valida la variable caja contra los casos
* - Es null
* @return Si este caso es true se retornara false, si no, se retorna true
*/
private boolean validateCaja(Caja caja){
return caja != null;
}
/**
* Esconde los mensajes de error en la ventana de egresos
*/
private void hideErrorMessages() {
this.view.getErrorTipoEgreso().setVisible(false);
this.view.getErrorValor().setVisible(false);
@@ -299,6 +402,9 @@ public class EgresosController {
this.view.getErrorNumero().setVisible(false);
}
/**
* Vacia los campos de texto y selecciona la primera opcion en el jcombobox
*/
private void clearInputs() {
this.view.getTipoCombo().setSelectedIndex(0);
this.view.getNroField().setText("");
@@ -306,6 +412,9 @@ public class EgresosController {
this.view.getDescripcionField().setText("");
}
/**
* Ejecuta trim sobre todos los campos de texto
*/
private void normalizeInputs(){
this.view.getValorField().setText(this.view.getValorField().getText().trim());
this.view.getNroField().setText(this.view.getNroField().getText().trim());
@@ -313,6 +422,9 @@ public class EgresosController {
}
/**
* Setea el focus en el campo nroField
*/
private void resetFocus() {
this.view.getNroField().requestFocus();
}