From 6e21e4fd6c60ab40b7334bc3291c75ff7cf855b5 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Thu, 9 Apr 2026 15:51:21 -0600 Subject: [PATCH] Refine GUI Behavior --- .../controllers/AppointmentController.java | 15 ++++++++++++- .../controllers/SaleController.java | 19 ++++++++++++++++ .../AppointmentDialogController.java | 19 +++++++++++++--- .../petshopdesktop/util/TableViewSupport.java | 2 -- .../modelviews/adoption-view.fxml | 2 +- .../modelviews/analytics-view.fxml | 2 +- .../modelviews/appointment-view.fxml | 2 +- .../modelviews/inventory-view.fxml | 2 +- .../petshopdesktop/modelviews/pet-view.fxml | 2 +- .../modelviews/product-supplier-view.fxml | 2 +- .../modelviews/product-view.fxml | 2 +- .../modelviews/purchase-order-view.fxml | 2 +- .../petshopdesktop/modelviews/sale-view.fxml | 22 +++++++++---------- .../modelviews/service-view.fxml | 2 +- .../modelviews/staff-accounts-view.fxml | 2 +- .../modelviews/supplier-view.fxml | 2 +- 16 files changed, 71 insertions(+), 28 deletions(-) diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java index 3cc4a904..8027bfe7 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java @@ -263,7 +263,20 @@ public class AppointmentController { response.getEmployeeName() != null ? response.getEmployeeName() : "", response.getAppointmentDate() != null ? response.getAppointmentDate().toString() : "", response.getAppointmentTime() != null ? response.getAppointmentTime().toString() : "", - response.getAppointmentStatus() != null ? response.getAppointmentStatus() : "" + normalizeAppointmentStatus(response.getAppointmentStatus()) ); } + + private String normalizeAppointmentStatus(String status) { + if (status == null) { + return "Booked"; + } + return switch (status.trim().toLowerCase()) { + case "booked" -> "Booked"; + case "completed" -> "Completed"; + case "missed" -> "Missed"; + case "cancelled", "canceled" -> "Cancelled"; + default -> "Booked"; + }; + } } diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/SaleController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/SaleController.java index 7e6573de..9bff8ac6 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/SaleController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/SaleController.java @@ -11,6 +11,7 @@ import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; +import javafx.scene.control.TableCell; import javafx.scene.control.Label; import javafx.scene.control.SelectionMode; import javafx.scene.control.Spinner; @@ -156,6 +157,8 @@ public class SaleController { colCartQty.setCellValueFactory(new PropertyValueFactory<>("quantity")); colCartUnitPrice.setCellValueFactory(new PropertyValueFactory<>("unitPrice")); colCartTotal.setCellValueFactory(new PropertyValueFactory<>("total")); + colCartUnitPrice.setCellFactory(column -> currencyCell()); + colCartTotal.setCellFactory(column -> currencyCell()); tvCart.setItems(cartItems); tvCart.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); @@ -169,6 +172,8 @@ public class SaleController { colSaleUnitPrice.setCellValueFactory(new PropertyValueFactory<>("unitPrice")); colSaleTotal.setCellValueFactory(new PropertyValueFactory<>("total")); colSalePaymentType.setCellValueFactory(new PropertyValueFactory<>("paymentMethod")); + colSaleUnitPrice.setCellFactory(column -> currencyCell()); + colSaleTotal.setCellFactory(column -> currencyCell()); filteredSales = new FilteredList<>(saleItems, s -> true); TableViewSupport.bindSortedItems(tvSales, filteredSales); @@ -539,6 +544,20 @@ public class SaleController { lblCartTotal.setText(currency.format(total)); } + private TableCell currencyCell() { + return new TableCell<>() { + @Override + protected void updateItem(Double value, boolean empty) { + super.updateItem(value, empty); + if (empty || value == null) { + setText(null); + } else { + setText(currency.format(value)); + } + } + }; + } + private void setCreateSaleControlsDisabled(boolean disabled) { cbProduct.setDisable(disabled); spQuantity.setDisable(disabled); diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java index 495813ac..1629187a 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java @@ -49,7 +49,7 @@ public class AppointmentDialogController { private ObservableList statusList = FXCollections.observableArrayList( - "Booked", "Completed", "Cancelled", "Missed" + "Booked", "Completed", "Missed", "Cancelled" ); public void setMode(String mode) { @@ -182,7 +182,7 @@ public class AppointmentDialogController { "Parsing appointment date"); } - cbAppointmentStatus.setValue(appt.getAppointmentStatus()); + cbAppointmentStatus.setValue(normalizeAppointmentStatus(appt.getAppointmentStatus())); try { LocalTime time = LocalTime.parse(appt.getAppointmentTime()); @@ -230,7 +230,7 @@ public class AppointmentDialogController { request.setEmployeeId(cbEmployee.getValue().getId()); request.setAppointmentDate(dpAppointmentDate.getValue()); request.setAppointmentTime(appointmentTime); - request.setAppointmentStatus(cbAppointmentStatus.getValue()); + request.setAppointmentStatus(normalizeAppointmentStatus(cbAppointmentStatus.getValue())); new Thread(() -> { try { @@ -451,4 +451,17 @@ public class AppointmentDialogController { } }).start(); } + + private String normalizeAppointmentStatus(String status) { + if (status == null) { + return "Booked"; + } + return switch (status.trim().toLowerCase()) { + case "booked" -> "Booked"; + case "completed" -> "Completed"; + case "missed" -> "Missed"; + case "cancelled", "canceled" -> "Cancelled"; + default -> "Booked"; + }; + } } diff --git a/desktop/src/main/java/org/example/petshopdesktop/util/TableViewSupport.java b/desktop/src/main/java/org/example/petshopdesktop/util/TableViewSupport.java index bd18548e..80d19dde 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/util/TableViewSupport.java +++ b/desktop/src/main/java/org/example/petshopdesktop/util/TableViewSupport.java @@ -32,11 +32,9 @@ public final class TableViewSupport { } label.setText(message); label.setVisible(true); - label.setManaged(true); PauseTransition delay = new PauseTransition(Duration.seconds(1.5)); delay.setOnFinished(event -> { label.setVisible(false); - label.setManaged(false); }); delay.playFromStart(); } diff --git a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/adoption-view.fxml b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/adoption-view.fxml index 0c9c5e4a..0a7f00bd 100644 --- a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/adoption-view.fxml +++ b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/adoption-view.fxml @@ -73,7 +73,7 @@ -