Projects / Hotel Management System / src / hoteldraft / UpdateReservationController.java
UpdateReservationController.java
Raw
/*
 * 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 hoteldraft;

import java.io.IOException;
import java.net.URL;
import java.sql.Date;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.List;
import java.util.ResourceBundle;
import javafx.animation.RotateTransition;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.effect.ColorAdjust;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.image.ImageView;
import javafx.scene.paint.Color;
import static javafx.scene.paint.Color.rgb;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Callback;
import javafx.util.Duration;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Hala
 */
public class UpdateReservationController implements Initializable {

    private double xOffSet = 0;
    private double yOffSet = 0;

    public static int indexOfUpdate = -1;

    private Stage stage;
    private Scene scene;
    private Parent root;
    @FXML
    private Button settingsImgBtn;
    @FXML
    private ImageView settingsImg;
    @FXML
    private Button updateBtn;
    private int ID;
    private Date ad;
    private Date dd;
    @FXML
    private TextField firstNameTextfield;
    @FXML
    private TextField LastNameTextfield;
    @FXML
    private TextField emailTextfield;
    @FXML
    private ComboBox<String> roomTypeCB;
    @FXML
    private Button decrementGuest;
    @FXML
    private TextField guestCount;
    @FXML
    private Button incrementGuest;
    @FXML
    private DatePicker arrivalDate;
    @FXML
    private DatePicker departureDate;
    @FXML
    private TextArea specialRequests;
    @FXML
    private Text NoOfGuestsAlert;
    @FXML
    private ComboBox<Integer> roomNumCb;
    @FXML
    private Text fieldsAlert;
    @FXML
    private Label exit;
    @FXML
    private Label minimize;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        //retrieve from DB
        //to initilize combobox items
        Session session1 = HibernateUtil.getSessionFactory().openSession();
        Query q = session1.createQuery("from Rooms");
        List<Rooms> RList = q.list();
        session1.close();
        for (Rooms R : RList) {
            if (!roomTypeCB.getItems().contains(R.getRoomType())) {
                roomTypeCB.getItems().add(R.getRoomType());
            }

        }

        //to make guestcount uneditable without validation
        guestCount.setEditable(false);
        //to make special requests textarea limited without scrollbar
        specialRequests.setWrapText(true);
        arrivalDate.setDisable(true);
        departureDate.setDisable(true);

        //Listener to limit textfield to 20 letters length
        firstNameTextfield.textProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(final ObservableValue<? extends String> ov, final String oldValue, final String newValue) {
                if (firstNameTextfield.getText().length() > 20) {
                    String s = firstNameTextfield.getText().substring(0, 20);
                    firstNameTextfield.setText(s);
                }
            }
        });
        //Listener to limit textfield to 20 letters length
        LastNameTextfield.textProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(final ObservableValue<? extends String> ov, final String oldValue, final String newValue) {
                if (LastNameTextfield.getText().length() > 20) {
                    String s = LastNameTextfield.getText().substring(0, 20);
                    LastNameTextfield.setText(s);
                }
            }
        });
        //Listener to limit textfield to 30 letters length
        emailTextfield.textProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(final ObservableValue<? extends String> ov, final String oldValue, final String newValue) {
                if (emailTextfield.getText().length() > 30) {
                    String s = emailTextfield.getText().substring(0, 30);
                    emailTextfield.setText(s);
                }
            }
        });

        //to change settings imageview color
        Lighting lighting = new Lighting(new Light.Distant(45, 90, rgb(105, 152, 171)));
        ColorAdjust bright = new ColorAdjust(0, 1, 1, 1);
        lighting.setContentInput(bright);
        lighting.setSurfaceScale(0.0);
        settingsImg.setEffect(lighting);

        // to rotate settings button on hover
        RotateTransition rotation = new RotateTransition(Duration.seconds(0.5), settingsImgBtn);
        rotation.setCycleCount(1);
        rotation.setByAngle(180);
        settingsImgBtn.setOnMouseEntered(e -> rotation.play());
        settingsImgBtn.setOnMouseExited(e -> rotation.pause());

        Session session = HibernateUtil.getSessionFactory().openSession();
        List<Reservation> rList = null;
        String queryStr = "from Reservation";
        Query query = session.createQuery(queryStr);
        rList = query.list();
        session.close();
        int rIndex = 0;

        if (indexOfUpdate == (-1)) {
            System.out.println("index -1");
        } else {
            for (Reservation r : rList) {
                if (indexOfUpdate == rIndex) {
                    ID = r.getID();
                    ad = r.getArrivalDate();
                    dd = r.getDepartureDate();
                    firstNameTextfield.setText(r.getFname());
                    LastNameTextfield.setText(r.getLname());
                    emailTextfield.setText(r.getEmail());
                    roomTypeCB.setValue(r.getRoomType());
                    roomNumCb.setValue(r.getRoomNo());
                    guestCount.setText(Integer.toString(r.getGuestCount()));
                    specialRequests.setText(r.getSpecialRequest());
                }
                rIndex++;
            }
        }
    }

    public void passInfo(int roomNo, String Fname, String Lname, String email, String roomType, int guestCo, String arrivalD, String departureD, String specialRequest) {
        roomNumCb.setValue(roomNo);
        firstNameTextfield.setText(Fname);
        LastNameTextfield.setText(Lname);
        emailTextfield.setText(email);
        roomTypeCB.setValue(roomType);
        guestCount.setText(Integer.toString(guestCo));
        arrivalDate.setValue(LocalDate.parse(arrivalD));
        departureDate.setValue(LocalDate.parse(departureD));
        specialRequests.setText(specialRequest);
    }

    @FXML
    private void update(ActionEvent event) throws IOException {

        boolean validateFillAllFields = (roomNumCb.getSelectionModel().isEmpty()) || (firstNameTextfield.getText().isEmpty())
                || (LastNameTextfield.getText().isEmpty()) || (emailTextfield.getText().isEmpty())
                || (roomTypeCB.getSelectionModel().isEmpty()) || (guestCount.getText().isEmpty());

        if (validateFillAllFields == true) {
            fieldsAlert.setText("*Please fill all required fields");
        } else {
            String fn = firstNameTextfield.getText();
            String ln = LastNameTextfield.getText();
            String em = emailTextfield.getText();
            String rt = roomTypeCB.getValue();
            int rn = roomNumCb.getValue();
            int gc = Integer.valueOf(guestCount.getText());
            String sr = specialRequests.getText();
            if (specialRequests.getText().isEmpty()) {
                sr = "none";
            }

            Reservation R = new Reservation(ID, fn, ln, em, rt, rn, gc, ad, dd, sr);

            Session session = HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
            session.update(R);
            tx.commit();
            session.close();

            Parent root = FXMLLoader.load(getClass().getResource("Reservations.fxml"));

            root.setOnMousePressed((e) -> {
                xOffSet = e.getSceneX();
                yOffSet = e.getSceneY();
            });
            root.setOnMouseDragged((e) -> {
                stage.setX(e.getScreenX() - xOffSet);
                stage.setY(e.getScreenY() - yOffSet);
            });

            stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
            scene = new Scene(root, Color.TRANSPARENT);
            stage.setScene(scene);
            stage.show();
        }
    }

    //To assign room Number that is attatched to the room type
    @FXML
    private void RTCBtoRN(ActionEvent event) {

        Session session = HibernateUtil.getSessionFactory().openSession();
        Query q = session.createQuery("from Rooms");
        List<Rooms> RList = q.list();
        session.close();
        if (roomTypeCB.getValue().equals("Single")) {
            roomNumCb.getItems().clear();
            for (Rooms R : RList) {
                if (R.getRoomType().equals("Single")) {
                    roomNumCb.getItems().add(R.getRoomNum());
                }
            }
        } else if (roomTypeCB.getValue().equals("Twin")) {
            roomNumCb.getItems().clear();
            for (Rooms R : RList) {
                if (R.getRoomType().equals("Twin")) {
                    roomNumCb.getItems().add(R.getRoomNum());
                }
            }
        } else if (roomTypeCB.getValue().equals("Queen")) {
            roomNumCb.getItems().clear();
            for (Rooms R : RList) {
                if (R.getRoomType().equals("Queen")) {
                    roomNumCb.getItems().add(R.getRoomNum());
                }
            }
        } else if (roomTypeCB.getValue().equals("King")) {
            roomNumCb.getItems().clear();
            for (Rooms R : RList) {
                if (R.getRoomType().equals("King")) {
                    roomNumCb.getItems().add(R.getRoomNum());
                }
            }
        } else if (roomTypeCB.getValue().equals("Suite")) {
            roomNumCb.getItems().clear();
            for (Rooms R : RList) {
                if (R.getRoomType().equals("Suite")) {
                    roomNumCb.getItems().add(R.getRoomNum());
                }
            }
        } else if (roomTypeCB.getValue().equals("Mini Suite")) {
            roomNumCb.getItems().clear();
            for (Rooms R : RList) {
                if (R.getRoomType().equals("Mini Suite")) {
                    roomNumCb.getItems().add(R.getRoomNum());
                }
            }
        }

        roomNumCb.setDisable(false);
    }

    //To decrement count on guestcount textfield
    @FXML
    private void decrementGuest(ActionEvent event) {
        if (Integer.parseInt(guestCount.getText()) > 1) {
            int decrement = Integer.parseInt(guestCount.getText()) - 1;
            guestCount.setText(Integer.toString(decrement));

            NoOfGuestsAlert.setText("");
        } else if (Integer.parseInt(guestCount.getText()) == 1) {
            NoOfGuestsAlert.setText("1 MINIMUM");
        }
    }

    //To increment count on guestcount textfield
    @FXML
    private void incrementGuest(ActionEvent event) {
        if (Integer.parseInt(guestCount.getText()) < 10) {
            int increment = Integer.parseInt(guestCount.getText()) + 1;
            guestCount.setText(Integer.toString(increment));

            NoOfGuestsAlert.setText("");
        } else if (Integer.parseInt(guestCount.getText()) == 10) {
            NoOfGuestsAlert.setText("10 MAXIMUM");
        }
    }

    //Methods to close and minimize window.
    @FXML
    private void close_app(javafx.scene.input.MouseEvent event) {
        System.exit(0);
    }

    @FXML
    private void minimize_app(javafx.scene.input.MouseEvent event) {
        stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
        stage.setIconified(true);
    }

    /*---------------------class switching events---------------------*/
    @FXML
    private void switchToReservations(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Reservations.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    private void switchToNewReservation(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("NewReservation.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();

    }

    @FXML
    private void switchToLoggedIn(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("LoggedIn.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    private void switchToRooms(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Rooms.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });/**/

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    private void switchToServices(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Services.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    private void switchToSearch(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Search.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }

    @FXML
    private void switchToSettings(ActionEvent e) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("Settings.fxml"));

        root.setOnMousePressed((event) -> {
            xOffSet = event.getSceneX();
            yOffSet = event.getSceneY();
        });
        root.setOnMouseDragged((event) -> {
            stage.setX(event.getScreenX() - xOffSet);
            stage.setY(event.getScreenY() - yOffSet);
        });

        stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
        scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }
}