From 8b4e39416bfecec3fb9d96070ed53e95cd133c6a Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Thu, 9 Apr 2026 17:29:03 -0600 Subject: [PATCH] Refine Desktop Pricing --- .../controllers/AdoptionController.java | 1 + .../controllers/PetController.java | 1 + .../controllers/ProductController.java | 1 + .../controllers/SaleController.java | 23 +--- .../controllers/ServiceController.java | 1 + .../petshopdesktop/util/TableViewSupport.java | 19 ++++ .../petshopdesktop/modelviews/sale-view.fxml | 101 +++++++++--------- 7 files changed, 79 insertions(+), 68 deletions(-) diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java index e139450c..a1745e85 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java @@ -85,6 +85,7 @@ public class AdoptionController { colAdoptionDate.setCellValueFactory(new PropertyValueFactory<>("adoptionDate")); colAdoptionFee.setCellValueFactory(new PropertyValueFactory<>("adoptionFee")); colAdoptionStatus.setCellValueFactory(new PropertyValueFactory<>("adoptionStatus")); + TableViewSupport.applyCurrencyColumn(colAdoptionFee); displayAdoptions(); TableViewSupport.installDoubleClickAction(tvAdoptions, selected -> openDialog(selected, "Edit")); diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/PetController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/PetController.java index fa091671..95dad73f 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/PetController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/PetController.java @@ -183,6 +183,7 @@ public class PetController { colPetAge.setCellValueFactory(new PropertyValueFactory("petAge")); colPetStatus.setCellValueFactory(new PropertyValueFactory("petStatus")); colPetPrice.setCellValueFactory(new PropertyValueFactory("petPrice")); + TableViewSupport.applyCurrencyColumn(colPetPrice); colCustomerName.setCellValueFactory(new PropertyValueFactory("customerName")); colStoreName.setCellValueFactory(new PropertyValueFactory("storeName")); configureImageColumn(colPetImage); diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/ProductController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/ProductController.java index 25f1bf14..07b94d0a 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/ProductController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/ProductController.java @@ -98,6 +98,7 @@ public class ProductController { colProductPrice.setCellValueFactory(new PropertyValueFactory("prodPrice")); colProductCategory.setCellValueFactory(new PropertyValueFactory("categoryName")); colProductDesc.setCellValueFactory(new PropertyValueFactory("prodDesc")); + TableViewSupport.applyCurrencyColumn(colProductPrice); configureImageColumn(colProductImage); loadCategoryFilter(); 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 9bff8ac6..81094e1d 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/SaleController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/SaleController.java @@ -11,7 +11,6 @@ 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; @@ -157,8 +156,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()); + TableViewSupport.applyCurrencyColumn(colCartUnitPrice); + TableViewSupport.applyCurrencyColumn(colCartTotal); tvCart.setItems(cartItems); tvCart.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); @@ -172,8 +171,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()); + TableViewSupport.applyCurrencyColumn(colSaleUnitPrice); + TableViewSupport.applyCurrencyColumn(colSaleTotal); filteredSales = new FilteredList<>(saleItems, s -> true); TableViewSupport.bindSortedItems(tvSales, filteredSales); @@ -544,20 +543,6 @@ 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/ServiceController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/ServiceController.java index 04a72dba..10acb9ed 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/ServiceController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/ServiceController.java @@ -56,6 +56,7 @@ public class ServiceController { colServiceDesc.setCellValueFactory(new PropertyValueFactory<>("serviceDesc")); colServiceDuration.setCellValueFactory(new PropertyValueFactory<>("serviceDuration")); colServicePrice.setCellValueFactory(new PropertyValueFactory<>("servicePrice")); + TableViewSupport.applyCurrencyColumn(colServicePrice); displayServices(); TableViewSupport.installDoubleClickAction(tvServices, selected -> openDialog(selected, "Edit")); 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 80d19dde..addf56ce 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/util/TableViewSupport.java +++ b/desktop/src/main/java/org/example/petshopdesktop/util/TableViewSupport.java @@ -3,12 +3,16 @@ package org.example.petshopdesktop.util; import javafx.collections.transformation.FilteredList; import javafx.collections.transformation.SortedList; import javafx.animation.PauseTransition; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; import javafx.scene.control.Label; import javafx.scene.control.TableRow; import javafx.scene.control.TableView; import javafx.scene.input.MouseButton; import javafx.util.Duration; +import java.text.NumberFormat; +import java.util.Locale; import java.util.function.Consumer; public final class TableViewSupport { @@ -39,6 +43,21 @@ public final class TableViewSupport { delay.playFromStart(); } + public static void applyCurrencyColumn(TableColumn column) { + if (column == null) { + return; + } + column.setCellFactory(col -> new TableCell<>() { + private final NumberFormat currency = NumberFormat.getCurrencyInstance(Locale.CANADA); + + @Override + protected void updateItem(T value, boolean empty) { + super.updateItem(value, empty); + setText(empty || value == null ? null : currency.format(value.doubleValue())); + } + }); + } + public static void installDoubleClickAction(TableView tableView, Consumer action) { tableView.setRowFactory(tv -> { TableRow row = new TableRow<>(); diff --git a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/sale-view.fxml b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/sale-view.fxml index 5e3650be..24254bd2 100644 --- a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/sale-view.fxml +++ b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/sale-view.fxml @@ -14,31 +14,39 @@ - - - - - - + + + + + + - - - + @@ -103,16 +106,16 @@ - - + + - - - - + - + - +