controller.application.employee.ViewEmployeController.java Source code

Java tutorial

Introduction

Here is the source code for controller.application.employee.ViewEmployeController.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 controller.application.employee;

import JDBC.Employee;
import JDBC.EmployeeStringProp;
import JDBC.PSJDBCTemplate;
import JDBC.RFID;
import JDBC.RFIDTimestamp;
import JDBC.TimeStampProp;
import JDBC.ToExcelEmployee;
import JDBC.Users;
import JDBC.timeUsers;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.sql.Timestamp;
import static java.sql.Timestamp.valueOf;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * FXML Controller class
 *
 * @author rifat
 */
public class ViewEmployeController implements Initializable {

    @FXML
    private AnchorPane anchorPane;
    @FXML
    private TextField rfidTextField;
    @FXML
    private TextField forNameTextField;
    @FXML
    private TextField lastNameTextField;
    @FXML
    private TextField employeeIdTextField;
    @FXML
    private TableView<EmployeeStringProp> tableView;
    @FXML
    private TableColumn<EmployeeStringProp, String> ForNameColumn;
    @FXML
    private TableColumn<EmployeeStringProp, String> LastNameColumn;
    @FXML
    private Button update;
    @FXML
    private StackPane spEmployeCont;
    @FXML
    private TableView<TimeStampProp> timeTableView;
    @FXML
    private TableColumn<TimeStampProp, String> RFIDColumn;
    @FXML
    private TableColumn<TimeStampProp, String> dateColumn;
    @FXML
    private TableColumn<TimeStampProp, String> inOutColumn;
    @FXML
    private TextField timeTf;
    @FXML
    private TextField inOutTf;
    @FXML
    private Button updtTime, editTime, remove;

    private List<TimeStampProp> timeList;

    private ObservableList timedata;

    private timeUsers timeUsers;

    private List<EmployeeStringProp> empList;

    private PSJDBCTemplate empTemp;

    private ObservableList empdata;

    private Users users;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        //Set up connection to database
        empTemp = new PSJDBCTemplate();
        updateTimeTblView();
        updateTblView();
        users = new Users();
        timeUsers = new timeUsers();
    }

    @FXML
    private void btnDltOnAction(ActionEvent event) {
        if (rfidTextField.getText().trim().equals("") || forNameTextField.getText().trim().equals("")
                || lastNameTextField.getText().trim().equals("")
                || employeeIdTextField.getText().trim().equals("")) {
            Alert fail = new Alert(Alert.AlertType.INFORMATION);
            fail.setContentText("Du mste markera en anstlld");
            fail.showAndWait();
        } else {
            Alert alert = new Alert(AlertType.CONFIRMATION);
            alert.setTitle("Ta bort");
            alert.setContentText("r du sker p att du vill ta bort " + forNameTextField.getText() + " "
                    + lastNameTextField.getText() + "?");

            Optional<ButtonType> result = alert.showAndWait();
            if (result.get() == ButtonType.OK) {
                empTemp.deleteEmployee(new RFID(rfidTextField.getText()));
                updateTblView();
                clearAll();
            }

        }

    }

    @FXML
    private void btnAddOnAction(ActionEvent event) {

        Stage stage = new Stage();
        stage.initStyle(StageStyle.UTILITY);
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setTitle("Lgg till Anstlld");

        VBox vbox = new VBox();

        TextField RFID = new TextField();
        TextField forename = new TextField();
        TextField surname = new TextField();
        TextField empId = new TextField();

        RFID.setPromptText("Rfid nummer");
        forename.setPromptText("Frnamn");
        surname.setPromptText("Efternamn");
        empId.setPromptText("Anstllnings id");

        Button confirmBtn = new Button();
        confirmBtn.setText("Lgg Till");

        vbox.getChildren().addAll(RFID, forename, surname, empId, confirmBtn);
        vbox.setSpacing(10);
        vbox.setPadding(new Insets(30, 30, 30, 30));

        Scene scene = new Scene(vbox);

        stage.setScene(scene);

        confirmBtn.setOnAction(e -> {

            if (RFID.getText().trim().equals("") || forename.getText().trim().equals("")
                    || surname.getText().trim().equals("") || empId.getText().trim().equals("")) {
                Alert fail = new Alert(Alert.AlertType.INFORMATION);
                fail.setContentText("Du mste fylla i alla flt");
                fail.showAndWait();

            } else {
                empTemp.createEmployeeFromUserGUI(RFID.getText(), forename.getText(), surname.getText(),
                        empId.getText());
                Alert alert = new Alert(Alert.AlertType.INFORMATION);
                updateTblView();
                alert.setHeaderText("Klart!");
                alert.setContentText("Ny Anstlld tillagd");
                alert.showAndWait();
                stage.close();

            }

        });
        confirmBtn.requestFocus();
        stage.showAndWait();
    }

    @FXML
    private void btnUpdtOnAction(ActionEvent event) {
        if (rfidTextField.getText().trim().equals("") || forNameTextField.getText().trim().equals("")
                || lastNameTextField.getText().trim().equals("")
                || employeeIdTextField.getText().trim().equals("")) {
            Alert fail = new Alert(Alert.AlertType.INFORMATION);
            fail.setContentText("Du mste fylla i alla flt");
            fail.showAndWait();

        } else {
            empTemp.UpdateEmployee(rfidTextField.getText(), forNameTextField.getText(), lastNameTextField.getText(),
                    employeeIdTextField.getText());
            buttonDisables();
            setTfDisableTrue();
            updateTblView();
        }
    }

    @FXML
    public void btnHandleTimesOnAction(ActionEvent event) throws IOException {
        FXMLLoader fXMLLoader = new FXMLLoader();
        FXMLLoader.load(getClass().getResource("/view/application/employee/ViewTimesFXML.fxml"));

        AnchorPane acPane = fXMLLoader.getRoot();

        spEmployeCont.getChildren().clear();

        spEmployeCont.getChildren().add(acPane);

    }

    @FXML
    private void btnChangeOnAction(ActionEvent event) {

        /*if(rfidTextField.getText().trim().equals("") || forNameTextField.getText().trim().equals("") ||
        lastNameTextField.getText().trim().equals("") ||
        employeeIdTextField.getText().trim().equals("")){
                
        }*/
        buttonEnables();
        setTfDisableFalse();
    }

    @FXML
    private void tfSearchOnAction(ActionEvent event) {
    }

    private void clearAll() {
        rfidTextField.clear();
        forNameTextField.clear();
        lastNameTextField.clear();
        employeeIdTextField.clear();
    }

    public void tblEmployeeOnClick(Event event) {
        setselectedView();
    }

    @FXML
    private void tblViewOnClick(KeyEvent event) {
        if (event.getCode().equals(KeyCode.UP)) {
            setselectedView();
        } else if (event.getCode().equals(KeyCode.DOWN)) {
            setselectedView();
        }
    }

    public void setselectedView() {
        clearAll();
        buttonDisables();
        setTfDisableTrue();
        EmployeeStringProp empProp = tableView.getSelectionModel().getSelectedItem();

        if (empProp != null) {
            users.RFID = empProp.getRFID();
            users.forname = empProp.getForename();
            users.surname = empProp.getSurname();
            users.empId = empProp.getEmployeeId();
            rfidTextField.setText(users.RFID);
            forNameTextField.setText(users.forname);
            lastNameTextField.setText(users.surname);
            employeeIdTextField.setText(users.empId);
        }
    }

    public void setTfDisableTrue() {
        //rfidTextField.setDisable(true);
        forNameTextField.setDisable(true);
        lastNameTextField.setDisable(true);
        employeeIdTextField.setDisable(true);
    }

    public void setTfDisableFalse() {
        //rfidTextField.setDisable(false);
        forNameTextField.setDisable(false);
        lastNameTextField.setDisable(false);
        employeeIdTextField.setDisable(false);
    }

    public void buttonDisables() {
        update.setDisable(true);
        remove.setDisable(true);
    }

    public void buttonEnables() {
        update.setDisable(false);
        remove.setDisable(false);
    }

    public void updateTblView() {
        empList = empTemp.listEmployeesProp();
        empdata = FXCollections.observableList(empList);
        ForNameColumn.setCellValueFactory(empdata -> empdata.getValue().Forenameproperty());
        LastNameColumn.setCellValueFactory(empdata -> empdata.getValue().Surnameproperty());
        tableView.setItems(empdata);
    }

    /**
     * ----------------------------------------------------TIME TAB STARTS
     * HERE------------------------------------------------------*
     */
    public void updateTimeTblView() {
        timeList = empTemp.listTimeProp();
        timedata = FXCollections.observableList(timeList);

        RFIDColumn.setCellValueFactory(timedata -> timedata.getValue().RFIDproperty());
        dateColumn.setCellValueFactory(timedata -> timedata.getValue().timeproperty());
        inOutColumn.setCellValueFactory(timedata -> timedata.getValue().inOutproperty());

        timeTableView.setItems(timedata);
        timeTableView.getSortOrder().add(dateColumn);
    }

    private Timestamp curtime;

    public void timeTblEmployeeOnClick(Event event) {
        timeSetselectedView();
        curtime = valueOf(timeTf.getText());
    }

    @FXML
    private void timeTblViewOnClick(KeyEvent event) {
        if (event.getCode().equals(KeyCode.UP)) {
            timeSetselectedView();
            curtime = valueOf(timeTf.getText());
        } else if (event.getCode().equals(KeyCode.DOWN)) {
            timeSetselectedView();
            curtime = valueOf(timeTf.getText());
        }
    }

    public void timeSetselectedView() {
        TimeStampProp timeProp = timeTableView.getSelectionModel().getSelectedItem();
        if (timeProp != null) {
            timeUsers.time = timeProp.getTime();
            timeUsers.inOut = timeProp.getInOut();
            timeTf.setText(timeUsers.time);
            inOutTf.setText(timeUsers.inOut);
        }
    }

    @FXML
    private void btnEditOnAction(ActionEvent event) {

        if (timeTf.getText().trim().equals("") || inOutTf.getText().trim().equals("")) {
            Alert fail = new Alert(Alert.AlertType.INFORMATION);
            fail.setContentText("Du mste markera en anstlld.");
            fail.showAndWait();
        } else {
            updtTime.setDisable(false);
            editTime.setDisable(true);
            timeTf.setDisable(false);
        }

    }

    private Timestamp newTime;

    @FXML
    private void btnUpdtTimeOnAction(ActionEvent event) {

        if (!timeTf.getText()
                .matches("(\\p{Digit}){4}(\\-(\\p{Digit}){2}){2}\\s((\\p{Digit}){2}\\:){2}(\\p{Digit}){2}")) {
            Alert fail = new Alert(Alert.AlertType.WARNING);
            fail.setContentText("Du mste fylla i alla flt korrekt\nKorrekt format: yyyy-mm-dd HH:mm:ss");
            fail.showAndWait();
            timeTf.setText("yyyy-mm-dd HH:mm:ss");
        } else {
            newTime = valueOf(timeTf.getText());
            empTemp.UpdateTime(curtime, newTime);
            updtTime.setDisable(true);
            editTime.setDisable(false);
            timeTf.setDisable(true);
            updateTimeTblView();

        }

    }

    /**
     * ----------------------------------------------------EXPORT TAB STARTS
     * HERE------------------------------------------------------*
     */
    @FXML
    private DatePicker fromDateSum;
    @FXML
    private DatePicker toDateSum;
    @FXML
    private DatePicker fromDatePerson;
    @FXML
    private DatePicker toDatePerson;
    @FXML
    private TextField empIdTF;

    private ArrayList<Employee> empArrList;
    private ArrayList<RFIDTimestamp> timeArrList;
    private ArrayList<String> loggedINNames = new ArrayList<String>();

    private Timestamp fromDate;
    private Timestamp toDate;

    @FXML
    private void btnExportSum(ActionEvent event) throws ParseException, IOException {
        // If one of the dates is not selected.
        if (fromDateSum.getValue() == null || toDateSum.getValue() == null) {
            Alert fail = new Alert(Alert.AlertType.INFORMATION);
            fail.setHeaderText("Fel");
            fail.setContentText("Du mste fylla i alla flt");
            fail.showAndWait();
        } else {

            fromDate = valueOf(fromDateSum.getValue().atStartOfDay());
            toDate = valueOf(toDateSum.getValue().atTime(23, 59, 59));
            empArrList = (ArrayList<Employee>) empTemp.listEmployees();
            ArrayList<ToExcelEmployee> excelList = new ArrayList();
            ToExcelEmployee excEmp;
            String name;
            String surname;
            String id;
            String time;
            long inTime = 0;
            long outTime = 0;
            double totTime = 0;

            int nrOfIn = 0, nrOfOut = 0;

            for (int i = 0; i < empArrList.size(); i++) {
                name = empArrList.get(i).getForename();
                surname = empArrList.get(i).getSurname();
                id = empArrList.get(i).getEmployeeId();
                timeArrList = (ArrayList<RFIDTimestamp>) empTemp
                        .getTimestamps(new RFID(empArrList.get(i).getRFID()));
                for (int j = 0; j < timeArrList.size(); j++) {
                    if (timeArrList.get(j).getTime().compareTo(toDate.toString()) <= 0
                            && timeArrList.get(j).getTime().compareTo(fromDate.toString()) >= 0) {
                        if (timeArrList.get(j).getInOut().equals("IN")) {
                            Date in = timeArrList.get(j).getDateTime();
                            inTime += in.getTime();
                            nrOfIn++;
                        } else if (timeArrList.get(j).getInOut().equals("OUT")) {
                            Date out = timeArrList.get(j).getDateTime();
                            outTime += out.getTime();
                            nrOfOut++;
                        }
                    }
                }

                //If there is more logins than logouts i.e. someone is still
                //Logged in!
                if (nrOfIn != nrOfOut) {
                    loggedINNames.add(name + " " + surname);
                    outTime += System.currentTimeMillis();
                }

                double hours = (double) (outTime - inTime) / 3600000.0;

                totTime = Math.round(hours * 100) / 100.0;

                excelList.add(excEmp = new ToExcelEmployee(name, surname, id, totTime));

                time = "";
                inTime = outTime = nrOfIn = nrOfOut = 0;

            }

            //If someone/several people is still logged into the system
            //Then raise a warning dialog.
            Alert al = new Alert(AlertType.WARNING);
            for (String n : loggedINNames) {
                al.setContentText(al.getContentText() + n + "\n");
            }
            al.setContentText(al.getContentText() + "\nr fortfarande inloggad/inloggade i systemet!"
                    + "\nTidsberkningen fr dagens datum r ej slutgiltig...");
            al.showAndWait();

            ArrayList<RFIDTimestamp> times = (ArrayList<RFIDTimestamp>) empTemp.getAllTimestamps();
            for (int j = 0; j < times.size(); j++) {
                if (times.get(j).getTime().compareTo(toDate.toString()) >= 0
                        || times.get(j).getTime().compareTo(fromDate.toString()) <= 0) {
                    times.remove(j);
                    j--;
                }
            }

            //Open a dialog to save the file
            FileChooser fs = new FileChooser();
            FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("Excel files (*.xlsx)",
                    "*.xlsx");
            fs.getExtensionFilters().add(extFilter);
            fs.setInitialFileName("*.xlsx");
            File saveFile = fs.showSaveDialog(anchorPane.getScene().getWindow());

            //Make sure the file was created
            if (saveFile != null) {

                //Make shure the file-extension is .xlsx
                if (!saveFile.getName().endsWith(".xlsx")) {
                    saveFile = new File(saveFile.getAbsolutePath().replaceAll("\\..++", "") + ".xlsx");
                }

                toExcel(excelList, times, saveFile, fromDate, toDate);
                for (int k = 0; k < excelList.size(); k++) {
                    System.out.println(excelList.get(k));
                }
            }
        }
    }

    private void toExcel(ArrayList<ToExcelEmployee> lst, ArrayList<RFIDTimestamp> times, File file, Timestamp from,
            Timestamp to) throws IOException {

        try {
            XSSFWorkbook workbook = new XSSFWorkbook();
            XSSFSheet spreadsheet = workbook.createSheet("Total arbetad tid " + file.getName());
            XSSFRow row = spreadsheet.createRow(0);
            XSSFCell cell;
            cell = row.createCell(0);
            cell.setCellValue("Frnamn:");
            cell = row.createCell(1);
            cell.setCellValue("Efternamn:");
            cell = row.createCell(2);
            cell.setCellValue("Anstllningsnummer:");
            cell = row.createCell(3);
            cell.setCellValue("Individuell tid (h) from.: " + (from.toString() + " tom.: " + to.toString())
                    .replaceAll("(\\s)((\\p{Digit}{2}:){2}\\p{Digit}{2})\\..", ""));
            Double totAllTime = 0.0;
            for (int i = 1; i <= lst.size(); i++) {
                row = spreadsheet.createRow(i);
                cell = row.createCell(0);
                cell.setCellValue(lst.get(i - 1).surname);
                cell = row.createCell(1);
                cell.setCellValue(lst.get(i - 1).lastname);
                cell = row.createCell(2);
                cell.setCellValue(lst.get(i - 1).id);
                cell = row.createCell(3);
                cell.setCellValue(lst.get(i - 1).time);
                totAllTime += lst.get(i - 1).time;
                if (i == lst.size()) {
                    row = spreadsheet.createRow(i + 1);
                    cell = row.createCell(3);
                    cell.setCellValue("Sammanstllning:");
                    row = spreadsheet.createRow(i + 2);
                    cell = row.createCell(3);
                    cell.setCellValue(totAllTime);
                }

            }

            XSSFSheet spreadsheetTimes = workbook.createSheet("Tider");
            row = spreadsheetTimes.createRow(0);
            cell = row.createCell(0);
            cell.setCellValue("RFID");
            cell = row.createCell(1);
            cell.setCellValue("IN/UT");
            cell = row.createCell(2);
            cell.setCellValue("Datum/Tid");

            for (int i = 1; i <= times.size(); i++) {
                row = spreadsheetTimes.createRow(i);
                cell = row.createCell(0);
                cell.setCellValue(times.get(i - 1).getRFID().toString());
                cell = row.createCell(1);
                cell.setCellValue(times.get(i - 1).getInOut());
                cell = row.createCell(2);
                cell.setCellValue(times.get(i - 1).getTime());
            }
            for (int k = 0; k < spreadsheet.getRow(0).getLastCellNum(); k++) {
                spreadsheet.autoSizeColumn(k);
            }
            for (int j = 0; j < spreadsheetTimes.getRow(0).getLastCellNum(); j++) {
                spreadsheetTimes.autoSizeColumn(j);
            }

            try (FileOutputStream out = new FileOutputStream(file)) {
                workbook.write(out);
            }
            System.out.println(file.getName() + " written successfully");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}