diff --git a/src/main/java/com/gitrekt/resort/DatabaseTestDataLoader.java b/src/main/java/com/gitrekt/resort/DatabaseTestDataLoader.java index 4042366..05d3b4d 100644 --- a/src/main/java/com/gitrekt/resort/DatabaseTestDataLoader.java +++ b/src/main/java/com/gitrekt/resort/DatabaseTestDataLoader.java @@ -7,12 +7,13 @@ import com.gitrekt.resort.model.entities.Booking; import com.gitrekt.resort.model.entities.Employee; import com.gitrekt.resort.model.entities.Guest; -import com.gitrekt.resort.model.entities.Room; -import com.gitrekt.resort.model.entities.RoomCategory; import com.gitrekt.resort.model.entities.GuestFeedback; import com.gitrekt.resort.model.entities.MailingAddress; import com.gitrekt.resort.model.entities.Package; +import com.gitrekt.resort.model.entities.Room; +import com.gitrekt.resort.model.entities.RoomCategory; import com.gitrekt.resort.model.services.GuestFeedbackService; +import com.gitrekt.resort.model.services.PackageService; import com.gitrekt.resort.model.services.RoomService; import java.util.Calendar; import java.util.Date; @@ -23,22 +24,22 @@ /** * This class is responsible for preparing the database with test data for the * program to operate on. - * + * * It's a temporary solution and pretty lame, but it's the fastest way to solve * our problem and keep from hindering further progress. If time permits, we * will try to migrate to a more permanent solution like a stored SQL script, - * but there isn't really a reason to do that right now. - * + * but there isn't really a reason to do that right now. + * * This class is just meant to be a quick and dirty solution to the problem. - * + * * It's also not finished. It doesn't create half of the data we need yet. */ public class DatabaseTestDataLoader { - + public static void initializeTestData() { - + // Populate database with data on all of the rooms available - + RoomCategory basic = new RoomCategory( "Basic", "This room is as basic as you are. Includes complimentary bedbugs " @@ -48,7 +49,7 @@ public static void initializeTestData() { "Beds not provided", 100.00 ); - + RoomCategory familyBasic = new RoomCategory( "Family Basic", "With the Family basic room, you can be treated like the dirt you" @@ -57,7 +58,7 @@ public static void initializeTestData() { "2 Queen, 2 twin", 125.99 ); - + RoomCategory luxury = new RoomCategory( "Luxury", "Because in 2017 being able to go to a resort at all is a luxury. " @@ -66,7 +67,7 @@ public static void initializeTestData() { "2 Queen", 159.99 ); - + RoomCategory luxuryFamily = new RoomCategory( "Luxury Family", "This room is almost bearable. Too bad you have kids and you won't " @@ -75,7 +76,7 @@ public static void initializeTestData() { "2 Queen, 2 twin", 179.67 ); - + RoomCategory king = new RoomCategory( "King", "The room that says, \"I'm better than everyone else, and I want" @@ -87,71 +88,71 @@ public static void initializeTestData() { "2 King", 259.99 ); - + EntityManager entityManager = HibernateUtil.getEntityManager(); - + // Put the data in the database entityManager.getTransaction().begin(); - + // 1st floor rooms don't exist - + // 2nd floor rooms for(int roomNumber = 200; roomNumber < 200+50; roomNumber++) { entityManager.persist(new Room(String.valueOf(roomNumber), basic)); } - + // 3rd floor rooms for(int roomNumber = 300; roomNumber < 300+50; roomNumber++) { Room room = new Room(String.valueOf(roomNumber), basic); entityManager.persist(room); } - + // 4th floor rooms for(int roomNumber = 400; roomNumber < 400+40; roomNumber++) { Room room = new Room(String.valueOf(roomNumber), familyBasic); entityManager.persist(room); } - + // 5th floor rooms for(int roomNumber = 500; roomNumber < 500+30; roomNumber++) { Room room = new Room(String.valueOf(roomNumber), luxury); entityManager.persist(room); } - + // 6th floor rooms for(int roomNumber = 600; roomNumber < 600+20; roomNumber++) { Room room = new Room(String.valueOf(roomNumber), luxuryFamily); entityManager.persist(room); } - + // 7th floor rooms for(int roomNumber = 700; roomNumber < 700+10; roomNumber++) { Room room = new Room(String.valueOf(roomNumber), king); entityManager.persist(room); } - + // Generate package data. Package package1 = new Package("Loch-Ness monster viewing", 3.50); Package package2 = new Package("Basement tour", 10.00); Package package3 = new Package("Drug cartel abduction experience", 650.00); Package package4 = new Package("Surfing with sharks", 580.99); - + entityManager.persist(package1); entityManager.persist(package2); entityManager.persist(package3); entityManager.persist(package4); - + // Generate test guest data Guest g1 = new Guest("Chris", "Mailldfghoux", "mailloux.cl@gmail.com", "239-242-4256", new MailingAddress("525 fake way", null, "33969", UsState.FLORIDA, "United States")); Guest g2 = new Guest("Chrsfgmis", "Mailloux", "mailsfghux.cl@gmail.com", "239-242-4256", new MailingAddress("525 fake way", null, "33969", UsState.FLORIDA, "United States")); Guest g3 = new Guest("Chris", "Mailldfghoux", "maillsfghsfghsoux.cl@gmail.com", "239-242-4256", new MailingAddress("525 fake way", null, "33969", UsState.FLORIDA, "United States")); Guest g4 = new Guest("Chrawetis", "Mailloux", "maillojytfkdfux.cl@gmail.com", "239-242-4256", new MailingAddress("525 fake way", null, "33969", UsState.FLORIDA, "United States")); - + entityManager.persist(g1); entityManager.persist(g2); entityManager.persist(g3); entityManager.persist(g4); - + // Load test employee data Employee e1 = new Employee(1L, "gitrekt", true, "Chris", "Mailloux"); Employee e2 = new Employee(2L, "bassface", false, "Chris", "Kael"); @@ -160,7 +161,7 @@ public static void initializeTestData() { Employee e5 = new Employee(Long.valueOf(5),"1234", false, "Juana" , "Gomez"); Employee e6 = new Employee(Long.valueOf(6),"1234", false, "Juanita" , "Gomez"); Employee e7 = new Employee(Long.valueOf(7),"1234", true, "Juanucho" , "Gomez"); - + entityManager.persist(e1); entityManager.persist(e2); // Ignore the variable name changes here, it's from a copy and paste. @@ -169,49 +170,49 @@ public static void initializeTestData() { entityManager.persist(e5); entityManager.persist(e6); entityManager.persist(e7); - + entityManager.getTransaction().commit(); - + // Don't forget to close the entityManager when done with it entityManager.close(); - + // Load test feedback data GuestFeedbackService s = new GuestFeedbackService(); s.createNewGuestFeedback(new GuestFeedback("You suck.", "mailloux.cl@gmail.com")); s.createNewGuestFeedback(new GuestFeedback("You suck a lot.", "mailloux.cl@gmail.com")); s.createNewGuestFeedback(new GuestFeedback("You're the worst programmer ever and this simple feature took you all night to implement.", "mailloux.cl@gmail.com")); s.createNewGuestFeedback(new GuestFeedback("You're bad and you should feel bad.", "mailloux.cl@gmail.com")); - - // TODO: Room pricing data - + createTestBookingData(); } - + private static void createTestBookingData() { EntityManager entityManager = HibernateUtil.getEntityManager(); - + Guest g1 = new Guest("Chris", "Mailldfghoux", "maillasdgoux.cl@gmail.com", "239-242-4256", new MailingAddress("525 fake way", null, "33969", UsState.FLORIDA, "United States")); entityManager.persist(g1); - + RoomService r = new RoomService(); List testRooms = r.getAllRoomsInCategory("Basic"); System.out.println(testRooms.size() + " Basic rooms added to test booking"); - + Calendar testCalendar = new GregorianCalendar(); Date d1 = new Date(); System.out.println(d1); testCalendar.add(Calendar.DAY_OF_MONTH, 3); Date d2 = testCalendar.getTime(); System.out.println(d2); - - Booking b1 = new Booking(g1, d1, d2, new Bill(), "you suck", null, testRooms); + + PackageService packageService = new PackageService(); + List allPackages = packageService.getAllPackages(); + Booking b1 = new Booking(g1, d1, d2, new Bill(), "you suck", allPackages, testRooms); Booking b2 = new Booking(g1, d1, d2, new Bill(), null, null, null); - + entityManager.getTransaction().begin(); entityManager.persist(b1); entityManager.persist(b2); entityManager.getTransaction().commit(); entityManager.close(); } - + } diff --git a/src/main/java/com/gitrekt/resort/controller/BookingDetailsScreenController.java b/src/main/java/com/gitrekt/resort/controller/BookingDetailsScreenController.java index 3a580c4..b71b5b7 100644 --- a/src/main/java/com/gitrekt/resort/controller/BookingDetailsScreenController.java +++ b/src/main/java/com/gitrekt/resort/controller/BookingDetailsScreenController.java @@ -1,16 +1,24 @@ package com.gitrekt.resort.controller; import com.gitrekt.resort.model.entities.Booking; +import com.gitrekt.resort.model.entities.Guest; +import com.gitrekt.resort.model.entities.Package; +import com.gitrekt.resort.model.entities.Room; import com.gitrekt.resort.model.services.BookingService; import java.net.URL; import java.util.Optional; import java.util.ResourceBundle; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleStringProperty; +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.Alert.AlertType; import javafx.scene.control.ButtonType; import javafx.scene.control.Label; +import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; /** @@ -18,13 +26,23 @@ */ public class BookingDetailsScreenController implements Initializable { - // TODO fix rawtype @FXML - private TableView bookedRoomsTableView; + private TableView bookedRoomsTableView; - // TODO fix rawtype @FXML - private TableView bookedPackagesTableView; + private TableColumn roomNumberColumn; + + @FXML + private TableColumn roomCategoryColumn; + + @FXML + private TableView bookedPackagesTableView; + + @FXML + private TableColumn packageNameColumn; + + @FXML + private TableColumn packageQuantityColumn; @FXML private Label guestNameLabel; @@ -35,36 +53,106 @@ public class BookingDetailsScreenController implements Initializable { @FXML private Label checkOutDateLabel; + @FXML + private Label bookingCanceledLabel; + private Booking booking; + private ObservableList bookedRooms; + + private ObservableList bookedPackagesList; + /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { - // TODO: Remove test code - BookingService bookingService = new BookingService(); - this.booking = bookingService.getBookingById(1L); + bookedRooms = FXCollections.observableArrayList(); + bookedRoomsTableView.setItems(bookedRooms); + roomNumberColumn.setCellValueFactory( + (param) -> { + return new SimpleStringProperty( + String.valueOf(param.getValue().getRoomNumber()) + ); + } + ); + roomCategoryColumn.setCellValueFactory( + (param) -> { + return new SimpleStringProperty( + param.getValue().getRoomCategory().getName() + ); + } + ); + + bookedPackagesList = FXCollections.observableArrayList(); + bookedPackagesTableView.setItems(bookedPackagesList); + packageNameColumn.setCellValueFactory( + (param) -> { + return new SimpleStringProperty( + param.getValue().packageName + ); + } + ); + packageQuantityColumn.setCellValueFactory( + (param) -> { + return new SimpleIntegerProperty( + param.getValue().bookedQty + ).asObject(); + } + ); + } + + /** + * Initializes a reference to the booking in question to allow the screen to display information + * about it without having to hit the database. Once this method is called, the information is + * displayed on the screen automatically. + * + * @param booking The booking to display information about. + */ + public void intializeBookingData(Booking booking) { + this.booking = booking; + + Guest guest = booking.getGuest(); + String guestNameLastFirst = guest.getLastName() + ", " + guest.getFirstName(); + this.guestNameLabel.setText(guestNameLastFirst); + this.checkInDateLabel.setText(booking.getCheckInDate().toString()); + this.checkOutDateLabel.setText(booking.getCheckOutDate().toString()); + bookedRooms.addAll(booking.getBookedRooms()); + + // Not the most efficient way to do this but it was quick to figure out and it works. + for(Package p : booking.getPackages()) { + boolean alreadyPresent = false; + for(BookedPackagesWrapper w : bookedPackagesList) { + if(w.packageName.equals(p.getName())) { + alreadyPresent = true; + w.bookedQty++; + } + } + if(!alreadyPresent) { + BookedPackagesWrapper newWrapper = new BookedPackagesWrapper(p.getName(), 1); + bookedPackagesList.add(newWrapper); + } + } } + /** + * Returns to the previous screen. + */ @FXML private void onBackButtonClicked() { - ScreenManager.getInstance().switchToScreen( - "/fxml/GuestHomeScreen.fxml" - ); + ScreenManager.getInstance().switchToScreen("/fxml/GuestHomeScreen.fxml"); + } + /** + * Displays the customer bill for the booking displayed by this screen. + */ @FXML private void onViewBillButtonClicked() { - Object temp = ScreenManager.getInstance().switchToScreen( - "/fxml/CustomerBillScreen.fxml" - ); - CustomerBillScreenController controller; - controller = (CustomerBillScreenController) temp; - - // Fix LazyInitializationException by forcing initialization here. + Object temp = ScreenManager.getInstance().switchToScreen("/fxml/CustomerBillScreen.fxml"); + CustomerBillScreenController controller = (CustomerBillScreenController) temp; + // Fix LazyInitializationException by forcing initialization here with println System.out.println(this.booking.toString()); - controller.initializeData(this.booking); } @@ -89,8 +177,25 @@ private void onCancelBookingButtonClicked() { // User chose OK BookingService bookingService = new BookingService(); bookingService.cancelBooking(this.booking); - onBackButtonClicked(); + bookingCanceledLabel.setVisible(true); + } + } + + /** + * It might have been better to use a Map here instead of an inner class but in practice it's + * simple enough. + */ + private class BookedPackagesWrapper { + + String packageName; + + Integer bookedQty; + + BookedPackagesWrapper(String packageName, Integer bookedQty) { + this.packageName = packageName; + this.bookedQty = bookedQty; } + } } diff --git a/src/main/java/com/gitrekt/resort/controller/CustomerBillScreenController.java b/src/main/java/com/gitrekt/resort/controller/CustomerBillScreenController.java index 6ace495..8a4c96b 100644 --- a/src/main/java/com/gitrekt/resort/controller/CustomerBillScreenController.java +++ b/src/main/java/com/gitrekt/resort/controller/CustomerBillScreenController.java @@ -7,7 +7,6 @@ import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; -import java.util.concurrent.ThreadLocalRandom; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleStringProperty; import javafx.collections.FXCollections; @@ -22,105 +21,95 @@ * FXML controller class for the customer bill view screen. */ public class CustomerBillScreenController implements Initializable { - + @FXML private Label billTotalText; - + @FXML private Label customerNameText; - + @FXML private Label bookingNumberText; - + @FXML private TableView billTable; - + @FXML private TableColumn itemNameColumn; - + @FXML private TableColumn qtyColumn; - + @FXML private TableColumn priceColumn; - + private Booking booking; - + private ObservableList billItems; - + /** * Initializes the controller class. */ @Override - public void initialize(URL url, ResourceBundle rb) { + public void initialize(URL url, ResourceBundle rb) { billItems = FXCollections.observableArrayList(); - + itemNameColumn.setCellValueFactory((param) -> { return new SimpleStringProperty(param.getValue().getName()); }); - + qtyColumn.setCellValueFactory((param) -> { return new SimpleIntegerProperty(param.getValue().getQuantity()) .asObject(); }); - + priceColumn.setCellValueFactory((param) -> { return new SimpleStringProperty( String.format("%.2f", param.getValue().getTotalPrice()) ); }); - + billTable.setItems(billItems); } - + /** * Initializes the view bill screen with the data for the bill to display. * Once this method is called, the proper data is displayed on the screen. - * - * It's not ideal to have to send the entire booking into this class to - * display just the bill, but we need several bits of extra information - * that the bill itself just doesn't contain (such as the guest name), and - * I don't have the time to implement a more robust solution, so for now, it - * works. - * + * * @param booking The booking to display the bill for. */ public void initializeData(Booking booking) { this.booking = booking; - - // TODO: Remove test code - for(int i = 0; i < 30; i++) { - double price = ThreadLocalRandom.current().nextDouble(0,500); - int qty = ThreadLocalRandom.current().nextInt(10); - booking.getBill().getCharges().add(new BillItem("Test bill item", price, qty)); - } - billItems.addAll(booking.getBill().getCharges()); initializeInfoLabels(); - prepareTableView(); } - + + /** + * Returns to the previous screen, and passes a reference to the relevant booking data. + * + * I don't like that this class needs to know about it's parent screen, but this is the + * simplest and fastest way to implement it. + */ @FXML private void onBackButtonClicked() { - ScreenManager.getInstance().switchToScreen( - "/fxml/BookingDetailsScreen.fxml" - ); + Object temp = ScreenManager.getInstance().switchToScreen("/fxml/BookingDetailsScreen.fxml"); + BookingDetailsScreenController parentController = (BookingDetailsScreenController) temp; + parentController.intializeBookingData(this.booking); } - + /** * Prints the guest bill on a physical printer. The user is first prompted * with a print options dialog. - * + * * @throws IOException - * @throws PrinterException + * @throws PrinterException */ @FXML - private void onPrintBillButtonClicked() - throws IOException, PrinterException { + private void onPrintBillButtonClicked() throws IOException, PrinterException { BillService billService = new BillService(); billService.printBillForBooking(booking); } - + /** * Initializes the information displayed in the various labels displayed on * this screen, such as the customer name label, the total price label, etc. @@ -130,13 +119,7 @@ private void initializeInfoLabels() { String lastName = booking.getGuest().getFirstName(); String firstName = booking.getGuest().getLastName(); customerNameText.setText(lastName + ", " + firstName); - billTotalText.setText( - String.format("$%.2f", booking.getBill().getTotal()) - ); - } - - private void prepareTableView() { - // TODO + billTotalText.setText(String.format("$%.2f", booking.getBill().getTotal())); } } diff --git a/src/main/java/com/gitrekt/resort/controller/GuestHomeScreenController.java b/src/main/java/com/gitrekt/resort/controller/GuestHomeScreenController.java index 99fca29..ee01671 100644 --- a/src/main/java/com/gitrekt/resort/controller/GuestHomeScreenController.java +++ b/src/main/java/com/gitrekt/resort/controller/GuestHomeScreenController.java @@ -1,73 +1,77 @@ package com.gitrekt.resort.controller; +import com.gitrekt.resort.model.entities.Booking; +import com.gitrekt.resort.model.services.BookingService; import java.io.IOException; import java.net.URL; +import java.util.Optional; import java.util.ResourceBundle; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; -import javafx.scene.Parent; -import javafx.scene.Scene; import javafx.scene.control.Button; -import javafx.stage.Modality; -import javafx.stage.Stage; +import javafx.scene.control.TextInputDialog; +import javax.persistence.EntityNotFoundException; /** * FXML Controller class for the guest home screen. */ public class GuestHomeScreenController implements Initializable { - - @FXML - private Button backButton; - - @FXML - private Button browseRoomsButton; - - @FXML - private Button leaveFeedbackButton; - + @FXML private Button viewBookingButton; - + @Override public void initialize(URL url, ResourceBundle rb) { // TODO } - - public void onBrowseRoomsButtonClicked() { - ScreenManager.getInstance().switchToScreen( - "/fxml/BrowseRoomsScreen.fxml" - ); + + @FXML + private void onBrowseRoomsButtonClicked() { + ScreenManager.getInstance().switchToScreen("/fxml/BrowseRoomsScreen.fxml"); } - - public void onLeaveFeedbackButtonClicked() { - ScreenManager.getInstance().switchToScreen( - "/fxml/LeaveFeedbackScreen.fxml" - ); + + @FXML + private void onLeaveFeedbackButtonClicked() { + ScreenManager.getInstance().switchToScreen("/fxml/LeaveFeedbackScreen.fxml"); } - - public void onBackButtonClicked() { - ScreenManager.getInstance().switchToScreen( - "/fxml/HomeScreen.fxml" - ); + + @FXML + private void onBackButtonClicked() { + ScreenManager.getInstance().switchToScreen("/fxml/HomeScreen.fxml"); } - - public void onViewBookingButtonClicked() throws IOException { - Stage bookingNumberDialogStage = new Stage(); - Parent bookingNumberDialogRoot = FXMLLoader.load( - getClass().getResource("/fxml/BookingNumberDialog.fxml") - ); - Scene bookingNumberDialog = new Scene(bookingNumberDialogRoot); - - bookingNumberDialogStage.setScene(bookingNumberDialog); - bookingNumberDialogStage.initModality(Modality.APPLICATION_MODAL); - bookingNumberDialogStage.initOwner( - viewBookingButton.getScene().getWindow() - ); - bookingNumberDialogStage.setResizable(false); - bookingNumberDialogStage.setTitle("Find Booking"); - bookingNumberDialogStage.centerOnScreen(); - - bookingNumberDialogStage.show(); + + @FXML + private void onViewBookingButtonClicked() throws IOException { + TextInputDialog dialog = new TextInputDialog(); + dialog.setTitle("Find booking"); + dialog.setHeaderText("Enter booking number"); + dialog.setContentText("Please enter your booking number: "); + + Optional result = dialog.showAndWait(); + if(result.isPresent()) { + Long bookingId = Long.valueOf(result.get()); + BookingService bookingService = new BookingService(); + try { + Booking booking = bookingService.getBookingById(bookingId); + // Force loading of booking from DB (because of lazy loading) + System.out.println(booking.toString()); + Object temp = ScreenManager.getInstance().switchToScreen( + "/fxml/BookingDetailsScreen.fxml" + ); + BookingDetailsScreenController controller = (BookingDetailsScreenController) temp; + controller.intializeBookingData(booking); + } catch (EntityNotFoundException e) { + return; + } + Booking booking = bookingService.getBookingById(bookingId); + if(booking != null) { + Object temp = ScreenManager.getInstance().switchToScreen( + "/fxml/BookingDetailsScreen.fxml" + ); + BookingDetailsScreenController controller = (BookingDetailsScreenController) temp; + controller.intializeBookingData(booking); + } + + } } } diff --git a/src/main/java/com/gitrekt/resort/model/entities/Booking.java b/src/main/java/com/gitrekt/resort/model/entities/Booking.java index 5cb48be..6059cea 100644 --- a/src/main/java/com/gitrekt/resort/model/entities/Booking.java +++ b/src/main/java/com/gitrekt/resort/model/entities/Booking.java @@ -23,10 +23,10 @@ public class Booking { @ManyToOne(cascade = CascadeType.MERGE) private Guest guest; - + @Temporal(TemporalType.DATE) private Date checkInDate; - + @Temporal(TemporalType.DATE) private Date checkOutDate; @@ -35,14 +35,14 @@ public class Booking { private String specialInstructions; - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(cascade = CascadeType.MERGE, orphanRemoval = true) private List packages; @OneToMany(cascade = CascadeType.MERGE) private List bookedRooms; - + private boolean isCanceled = false; - + @CreationTimestamp @Temporal(TemporalType.DATE) private Date createdDate; @@ -55,7 +55,7 @@ protected Booking() { } public Booking(Guest guest, Date checkInDate, Date checkOutDate, Bill bill, - String specialInstructions, List packages, + String specialInstructions, List packages, List bookedRooms) { this.guest = guest; @@ -90,15 +90,15 @@ public List getPackages() { public List getBookedRooms() { return bookedRooms; } - + public boolean isCanceled() { return isCanceled; } - + public Date getCreatedDate() { return createdDate; } - + public void setCanceled(boolean canceled) { this.isCanceled = canceled; } @@ -106,14 +106,14 @@ public void setCanceled(boolean canceled) { public Guest getGuest() { return guest; } - + /** * @return The booking id, which is currently being used as the confirmation - * number until a scheme for generating confirmation numbers in the + * number until a scheme for generating confirmation numbers in the * database can be properly devised. */ public Long getId() { return this.id; } - + } diff --git a/src/main/java/com/gitrekt/resort/model/services/PackageService.java b/src/main/java/com/gitrekt/resort/model/services/PackageService.java new file mode 100644 index 0000000..985c5de --- /dev/null +++ b/src/main/java/com/gitrekt/resort/model/services/PackageService.java @@ -0,0 +1,37 @@ + +package com.gitrekt.resort.model.services; + +import com.gitrekt.resort.hibernate.HibernateUtil; +import com.gitrekt.resort.model.entities.Package; +import java.util.List; +import javax.persistence.EntityManager; +import javax.persistence.Query; + +/** + * Responsible retrieval, storage, and business logic related specifically to Package objects. + */ +public class PackageService { + + private final EntityManager entityManager; + + public PackageService() { + this.entityManager = HibernateUtil.getEntityManager(); + } + + @Override + public void finalize() throws Throwable { + super.finalize(); + + entityManager.close(); + } + + /** + * @return A List of all packages available in the database. + */ + public List getAllPackages() { + String queryString = "FROM Package"; + Query query = entityManager.createQuery(queryString); + return query.getResultList(); + } + +} diff --git a/src/main/resources/fxcss/Master.css b/src/main/resources/fxcss/Master.css index 4d65e2b..8cf0461 100644 --- a/src/main/resources/fxcss/Master.css +++ b/src/main/resources/fxcss/Master.css @@ -35,3 +35,12 @@ .invalidField { -fx-background-color: rgba(255, 0, 0, 0.5); } + +.subheader { + -fx-font-weight: bold; +} + +.bookingStatusLabel { + -fx-font-weight: bold; + -fx-text-fill: red; +} diff --git a/src/main/resources/fxml/BookingDetailsScreen.fxml b/src/main/resources/fxml/BookingDetailsScreen.fxml index 1c3771a..372d907 100644 --- a/src/main/resources/fxml/BookingDetailsScreen.fxml +++ b/src/main/resources/fxml/BookingDetailsScreen.fxml @@ -11,9 +11,9 @@ - + - +