Projects / Hotel Management System / src / hoteldraft / NewServicesController.java
NewServicesController.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.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.Label;
import javafx.scene.control.ListView;
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.input.MouseEvent;
import javafx.scene.paint.Color;
import static javafx.scene.paint.Color.rgb;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

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

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

    private Stage stage;
    private Scene scene;
    private Parent root;
    @FXML
    private Label exit;
    @FXML
    private Label minimize;
    @FXML
    private ImageView settingsImg;
    @FXML
    private Button settingsImgBtn;

    @FXML
    private TextField roomNo;
    @FXML
    private ComboBox<String> foodCB;
    @FXML
    private ComboBox<String> spaCB;
    @FXML
    private ComboBox<String> transportationCB;
    @FXML
    private ListView serviceList;
    @FXML
    private Text success;

    private String food = "None";
    private String spa = "None";
    private String transportation = "None";
    private String gym = "None";
    private String doctor = "None";
    private String clean = "None";
    private String flower = "None";

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        //initialize values
        foodCB.getItems().addAll("Breakfast", "Lunch", "Dinner", "Breakfast & Lunch", "Breakfast & Dinner", "Lunch & Dinner", "All");
        spaCB.getItems().addAll("Full-body mud mask", "Herbal body wrap", "Paraffin body wrap", "Full body massage", "Full-body facial",
                "Body tanning", "Water therapy", "Spot treatment", "Turkish bath massage", "full package");
        transportationCB.getItems().addAll("Car rent", "Car parking", "Taxi", "Tour bus");

        //Listener to limit textfield to 5 letters length and prevent letters from input
        roomNo.textProperty().addListener(new ChangeListener<String>() {
            public void changed(ObservableValue<? extends String> observable, String oldValue,
                    String newValue) {
                if (!newValue.matches("\\d*")) {
                    roomNo.setText(newValue.replaceAll("[^\\d]", ""));
                }
                if (roomNo.getText().length() > 5) {
                    String s = roomNo.getText().substring(0, 5);
                    roomNo.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());
    }

    //Add the food order to the list 
    @FXML
    private void foodOrder(ActionEvent event) {
        if (!serviceList.getItems().contains(foodCB.getValue())) {
            if (!food.isEmpty()) {
                serviceList.getItems().remove(food);
            }
            serviceList.getItems().add(foodCB.getValue());
            food = foodCB.getValue();
        }
    }

    //Add the spa order to the list 
    @FXML
    private void spaOrder(ActionEvent event) {
        if (!serviceList.getItems().contains(spaCB.getValue())) {
            if (!spa.isEmpty()) {
                serviceList.getItems().remove(spa);
            }
            serviceList.getItems().add(spaCB.getValue());
            spa = spaCB.getValue();
        }
    }

    //Add the gym avilability to the list 
    @FXML
    private void gym(ActionEvent event) {
        if (!serviceList.getItems().contains("Gym ticket")) {
            serviceList.getItems().add("Gym ticket");
            gym = "true";
        } else if (serviceList.getItems().contains("Gym ticket")) {
            serviceList.getItems().remove("Gym ticket");
            gym = "None";
        }
    }

    //Add the transportation order to the list 
    @FXML
    private void transportationOrder(ActionEvent event) {
        if (!serviceList.getItems().contains(transportationCB.getValue())) {
            if (!transportation.isEmpty()) {
                serviceList.getItems().remove(transportation);
            }
            serviceList.getItems().add(transportationCB.getValue());
            transportation = transportationCB.getValue();
        }
    }

    //Calling a doctor added to the list 
    @FXML
    private void doctorCall(ActionEvent event) {
        if (!serviceList.getItems().contains("Call doctor")) {
            serviceList.getItems().add("Call doctor");
            doctor = "true";
        } else if (serviceList.getItems().contains("Call doctor")) {
            serviceList.getItems().remove("Call doctor");
            doctor = "None";
        }
    }

    //Add the cleaning avilability to the list 
    @FXML
    private void clean(ActionEvent event) {
        if (!serviceList.getItems().contains("Cleaning")) {
            serviceList.getItems().add("Cleaning");
            clean = "Cleaning";
        } else if (serviceList.getItems().contains("Cleaning")) {
            serviceList.getItems().remove("Cleaning");
            clean = "None";
        }
    }

    //Add the flowers arrangment to the list 
    @FXML
    private void flowers(ActionEvent event) {
        if (!serviceList.getItems().contains("Flowers arrangment")) {
            serviceList.getItems().add("Flowers arrangment");
            flower = "Flowers arrangment";
        } else if (serviceList.getItems().contains("Flowers arrangment")) {
            serviceList.getItems().remove("Flowers arrangment");
            flower = "None";
        }
    }

    //Clear the list 
    @FXML
    private void clear(ActionEvent event) {
        serviceList.getItems().clear();
        food = "None";
        spa = "None";
        transportation = "None";
        doctor = "None";
        clean = "None";
        flower = "None";
    }

    //Delete the list 
    @FXML
    private void delete(ActionEvent event) {
        String o = String.valueOf(serviceList.getItems().remove(serviceList.getSelectionModel().getSelectedIndex()));

        if (gym.equals(o)) {
            gym = "None";
        } else if (doctor.equals(o)) {
            doctor = "None";
        } else if (clean.equals(o)) {
            clean = "None";
        } else if (flower.equals(o)) {
            flower = "None";
        } else if (food.equals(o)) {
            food = "None";
        } else if (spa.equals(o)) {
            spa = "None";
        } else if (transportation.equals(o)) {
            transportation = "None";
        }
    }

    //Submitting
    @FXML
    private void submit(ActionEvent event) throws IOException {
        boolean exists = false;
        Session session3 = HibernateUtil.getSessionFactory().openSession();
        Query q3 = session3.createQuery("from Rooms");
        List<Rooms> RList = q3.list();
        session3.close();
        for (Rooms R : RList) {
            if (Integer.parseInt(roomNo.getText()) == R.getRoomNum()) {
                exists = true;
                break;
            }
        }

        boolean no = false;
        Session session1 = HibernateUtil.getSessionFactory().openSession();
        Query Q = session1.createQuery("from Reservation");
        List<Reservation> rList = Q.list();
        session1.close();
        for (Reservation R : rList) {
            if (roomNo.getText().equals(String.valueOf(R.getRoomNo()))) {
                no = true;
                break;
            }
        }

        if (roomNo.getText().isEmpty()) {
            success.setText("There is no room number!");
        } else if (serviceList.getItems().isEmpty()) {
            success.setText("No services added!");
        } else if (exists == false) {
            System.out.println(exists);
            success.setText("Room doesnt exist!");
        } else if (no == false) {
            success.setText("There is no reservation in that room no!");
        } else {
            int rn = Integer.valueOf(roomNo.getText());
            List<Services> SList = null;
            Session session = HibernateUtil.getSessionFactory().openSession();
            Query q = session.createQuery("from Services");
            SList = q.list();
            session.close();
            for (Services s : SList) {
                if (Integer.valueOf(roomNo.getText()).equals(s.getRoomNo())) {

                    Services services = new Services(rn, s.getFoodOrder(), s.getSpa(), s.getGym(), s.getTransportation(), s.getDoctor(), s.getCleaning(), s.getFlower());
                    if (!food.equals("None")) {
                        services.setFoodOrder(food);
                    }
                    if (!spa.equals("None")) {
                        services.setSpa(spa);
                    }
                    if (!gym.equals("None")) {
                        services.setGym(gym);
                    }
                    if (!transportation.equals("None")) {
                        services.setTransportation(transportation);
                    }
                    if (!doctor.equals("None")) {
                        services.setDoctor(doctor);
                    }
                    if (!clean.equals("None")) {
                        services.setCleaning(clean);
                    }
                    if (!flower.equals("None")) {
                        services.setFlower(flower);
                    }

                    Session session2 = HibernateUtil.getSessionFactory().openSession();
                    Transaction tx = session2.beginTransaction();
                    session2.update(services);
                    tx.commit();
                    session2.close();

                    Parent root = FXMLLoader.load(getClass().getResource("Services.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();

                    return;
                }
            }
            Services s = new Services(rn, food, spa, gym, transportation, doctor, clean, flower);

            Session session2 = HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session2.beginTransaction();
            session2.save(s);
            tx.commit();
            session2.close();

            Parent root = FXMLLoader.load(getClass().getResource("Services.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();
        }
    }

    //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
    public 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();
    }

    public 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
    public 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
    public 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
    public 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
    public 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
    public 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();
    }
}