alessandrafx.VentanaEgresoController.java Source code

Java tutorial

Introduction

Here is the source code for alessandrafx.VentanaEgresoController.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package alessandrafx;

import Excepciones.DatoFaltante;
import alessandramc.SistemaAleMC;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import entidades.Colaborador;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;
import javafx.stage.FileChooser;
import util.ControlledScreen;
import util.FXGenerico;
import util.ScreensController;

/**
 * FXML Controller class
 *
 * @author gerar
 */
public class VentanaEgresoController extends FXGenerico implements Initializable, ControlledScreen {

    private SistemaAleMC sistema;
    private ScreensController myController;
    private MarcoVentanaController padre;
    private Colaborador colaboradorElegido;
    private int pagoSugerido;

    @FXML
    private TabPane tabPane;
    @FXML
    private Tab mensualidadTab;
    @FXML
    private Button botonSeleccionarColaborador;
    @FXML
    private TextField textFieldPagoColaborador;
    @FXML
    private Button botonCancelarPagoColaborador;
    @FXML
    private Button botonGuardarPagoColaborador;
    @FXML
    private Tab anualidadTab;
    @FXML
    private TextField textFieldMontoGasto;
    @FXML
    private TextArea textFieldMotivoGasto;
    @FXML
    private Button botonCancelarGasto;
    @FXML
    private Button botonGuardarGasto;
    @FXML
    private Label labelNombreColaborador;
    @FXML
    private Label labelPagoIdeal;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        sistema = new SistemaAleMC();
    }

    @Override
    public void setScreenParent(ScreensController screenParent) {
        myController = screenParent;
        padre = (MarcoVentanaController) myController.getScreenPadre();
    }

    @FXML
    private void seleccionarColaborador(MouseEvent event) {
        Dialog ventana = new Dialog();
        ventana.setTitle("Selecciona un colaborador");
        ventana.setHeaderText("Selecciona un colaborador");
        ventana.getDialogPane().getButtonTypes().add(ButtonType.APPLY);
        ventana.getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
        //Creacin de lista que ir dentro del tableView
        ArrayList<Colaborador> listaColaboradores = sistema.getTodosColaboradoresActivos();
        ObservableList listaColaboradoresObs = FXCollections.observableArrayList(listaColaboradores);
        //Creacin del grid dnde ir el tableView
        GridPane panel = new GridPane();
        //Creacin del TableView
        TableView tabla = new TableView();
        tabla.setMaxHeight(500);
        //Columna para el nombre
        TableColumn columnaNombre = new TableColumn();
        columnaNombre.setPrefWidth(150);
        columnaNombre.setText("Nombre");
        columnaNombre.setCellValueFactory(new PropertyValueFactory<>("nombre"));
        //Columna para la cantidad
        TableColumn columnaApPat = new TableColumn();
        columnaApPat.setPrefWidth(100);
        columnaApPat.setText("Apellido paterno");
        columnaApPat.setCellValueFactory(new PropertyValueFactory<>("apellidoPaterno"));
        //Columna para el porcentaje de descuento
        TableColumn columnaMatricula = new TableColumn();
        columnaMatricula.setPrefWidth(100);
        columnaMatricula.setText("Matrcula");
        columnaMatricula.setCellValueFactory(new PropertyValueFactory<>("matriculaColaborador"));
        //Columna para el porcentaje de descuento
        TableColumn columnaTelefono = new TableColumn();
        columnaTelefono.setPrefWidth(100);
        columnaTelefono.setText("telfono");
        columnaTelefono.setCellValueFactory(new PropertyValueFactory<>("telefono"));
        //Columna para el porcentaje de descuento
        TableColumn columnaTitulo = new TableColumn();
        columnaTitulo.setPrefWidth(100);
        columnaTitulo.setText("Ttulo");
        columnaTitulo.setCellValueFactory(new PropertyValueFactory<>("titulo"));
        //Asigna la lista al TableView, este al grid y este a la ventana
        tabla.setItems(listaColaboradoresObs);
        tabla.getColumns().addAll(columnaNombre, columnaApPat, columnaMatricula, columnaTelefono, columnaTitulo);
        panel.getChildren().add(tabla);
        ventana.getDialogPane().setContent(panel);

        //clic para agregar alumnos inscritos
        tabla.getSelectionModel().selectedItemProperty()
                .addListener((ObservableValue observableValue, Object oldValue, Object newValue) -> {
                    //Check whether item is selected and set value of selected item to Label
                    Colaborador promocion = (Colaborador) newValue;
                    labelNombreColaborador.setText(promocion.getNombre());
                    colaboradorElegido = (Colaborador) newValue;
                    labelPagoIdeal.setText(sistema.calcularPagoColaborador(colaboradorElegido));
                    textFieldPagoColaborador.setText(sistema.calcularPagoColaboradorPeriodo(colaboradorElegido));
                });
        ventana.showAndWait();
    }

    @FXML
    private void clicCancelarPagoColaborador(MouseEvent event) {
        padre.irAEgresos(event);
    }

    private int recuperarPagoColaborador() throws DatoFaltante {
        int pagoColaborador = 0;
        try {
            pagoColaborador = Integer.parseInt(textFieldPagoColaborador.getText());
        } catch (Exception e) {
            throw new DatoFaltante("Dato erroneo",
                    "Parece que algo diferente al dinero no es una forma de pago aqu");
        }
        return pagoColaborador;
    }

    private int recuperarTotalGasto() throws DatoFaltante {
        int montoPagado = 0;
        try {
            montoPagado = Integer.parseInt(textFieldMontoGasto.getText());
        } catch (Exception e) {
            throw new DatoFaltante("Dato erroneo",
                    "Parece que algo diferente al dinero no es una forma de pago aqu");
        }
        return montoPagado;
    }

    private String recuperarMotivoGasto() throws DatoFaltante {
        String motivoGasto = "";
        try {
            motivoGasto = textFieldMotivoGasto.getText();
        } catch (Exception e) {
            throw new DatoFaltante("Dato erroneo", "Algo no est bien, menos caracteres por favor");
        }
        if (motivoGasto.length() > 560) {
            throw new DatoFaltante("Dato erroneo", "Algo no est bien, menos caracteres por favor");
        }
        return motivoGasto;
    }

    @FXML
    private void clicGuardarPagoColaborador(MouseEvent event) {
        try {
            int pagoColaborador = recuperarPagoColaborador();
            String motivo = "Al colaborador " + colaboradorElegido.toString() + " se la ha hecho un pago de "
                    + pagoColaborador + " en la fecha " + new Date();
            generarReportePagoColaborador(pagoColaborador, pagoSugerido);
            //S es salida de capital
            sistema.agregarCapital(String.valueOf(pagoColaborador), motivo, 'S');
            Alert alerta = new Alert(Alert.AlertType.INFORMATION);
            alerta.setTitle("Pago registrado");
            alerta.setHeaderText(null);
            alerta.setContentText("Parece que alguien ir con dinero a casa ;)");
            alerta.showAndWait();
            padre.irAEgresos(event);
        } catch (DatoFaltante e) {
            Alert alerta = new Alert(Alert.AlertType.INFORMATION);
            alerta.setTitle(e.getMessage());
            alerta.setHeaderText(null);
            alerta.setContentText(e.getDescripcion());
            alerta.showAndWait();
        } catch (Exception e) {
            Alert alerta = new Alert(Alert.AlertType.INFORMATION);
            alerta.setTitle("Lo sentimos");
            alerta.setHeaderText(null);
            alerta.setContentText("Parece que tenemos problemas con la BD :s");
            alerta.showAndWait();
        }
    }

    @FXML
    private void clicCancelarOtroGasto(MouseEvent event) {
        padre.irAEgresos(event);
    }

    @FXML
    private void clicGuardarOtroGasto(MouseEvent event) {
        try {
            int montoPagado = recuperarTotalGasto();
            String motivoGasto = recuperarMotivoGasto();
            generarReporteOtroGasto(montoPagado, motivoGasto);
            //S es salida de capital
            sistema.agregarCapital(String.valueOf(montoPagado), motivoGasto, 'S');
            Alert alerta = new Alert(Alert.AlertType.INFORMATION);
            alerta.setTitle("Pago registrado");
            alerta.setHeaderText(null);
            alerta.setContentText("El gasto se ha registrado ;)");
            alerta.showAndWait();

            padre.irAEgresos(event);
        } catch (DatoFaltante e) {
            Alert alerta = new Alert(Alert.AlertType.INFORMATION);
            alerta.setTitle(e.getMessage());
            alerta.setHeaderText(null);
            alerta.setContentText(e.getDescripcion());
            alerta.showAndWait();
        } catch (Exception e) {
            Alert alerta = new Alert(Alert.AlertType.INFORMATION);
            alerta.setTitle("Lo sentimos");
            alerta.setHeaderText(null);
            alerta.setContentText("Parece que tenemos problemas con la BD :s");
            alerta.showAndWait();
        }
    }

    private void generarReportePagoColaborador(int pagoColaborador, int pagoSugerido) throws DatoFaltante {
        try {
            FileChooser fileChooser = new FileChooser();
            fileChooser.setInitialFileName("facturaNueva.pdf");
            File file = fileChooser.showSaveDialog(null);
            file.getParentFile().mkdir();

            Document document = new Document();
            try {
                try {
                    PdfWriter.getInstance(document, new FileOutputStream(file));
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(VentanaEgresoController.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (DocumentException ex) {
                Logger.getLogger(VentanaEgresoController.class.getName()).log(Level.SEVERE, null, ex);
            }

            document.open();
            PdfPTable table = new PdfPTable(3);
            PdfPCell cell = new PdfPCell(new Phrase("Factura emitida el " + new Date()));
            cell.setColspan(3);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            //Agrega el pago IDEAL
            cell = new PdfPCell(new Phrase("Pago sugerido recibido"));
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            table.addCell(cell);
            cell = new PdfPCell(new Phrase("Pago sugerido"));
            cell.setColspan(2);
            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.addCell(cell);

            //Agrega el pago realizado
            cell = new PdfPCell(new Phrase("Pago realizado"));
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            table.addCell(cell);
            cell = new PdfPCell(new Phrase(String.valueOf(pagoColaborador)));
            cell.setColspan(2);
            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.addCell(cell);
            try {
                document.add(table);
            } catch (DocumentException ex) {
                Logger.getLogger(VentanaEgresoController.class.getName()).log(Level.SEVERE, null, ex);
            }
            document.close();

        } catch (Exception e) {
            throw new DatoFaltante("ubicacin no vlida", "La ubicacin que has escogido no es vlida");
        }

    }

    private void generarReporteOtroGasto(int cantidad, String motivo) throws DatoFaltante {
        try {
            FileChooser fileChooser = new FileChooser();
            fileChooser.setInitialFileName("facturaHecha.pdf");
            File file = fileChooser.showSaveDialog(null);
            file.getParentFile().mkdir();

            Document document = new Document();
            try {
                try {
                    PdfWriter.getInstance(document, new FileOutputStream(file));
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(VentanaEgresoController.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (DocumentException ex) {
                Logger.getLogger(VentanaEgresoController.class.getName()).log(Level.SEVERE, null, ex);
            }

            document.open();
            PdfPTable table = new PdfPTable(3);
            PdfPCell cell = new PdfPCell(new Phrase("Factura emitida el " + new Date()));
            cell.setColspan(3);
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.addCell(cell);

            //Agrega el monto pagado
            cell = new PdfPCell(new Phrase("Pago realizado"));
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            table.addCell(cell);
            cell = new PdfPCell(new Phrase(String.valueOf(cantidad)));
            cell.setColspan(2);
            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.addCell(cell);

            //Agrega el motivo del pago
            cell = new PdfPCell(new Phrase("Motivo: \n" + motivo));
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            cell.setColspan(3);
            table.addCell(cell);
            try {
                document.add(table);
            } catch (DocumentException ex) {
                Logger.getLogger(VentanaEgresoController.class.getName()).log(Level.SEVERE, null, ex);
            }
            document.close();

        } catch (Exception e) {
            throw new DatoFaltante("ubicacin no vlida", "La ubicacin que has escogido no es vlida");
        }

    }

}