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