From c5de2fdd87613e822afdde31b92b805e444cdbb7 Mon Sep 17 00:00:00 2001 From: Alex <78383757+Lextical@users.noreply.github.com> Date: Mon, 13 Apr 2026 15:06:04 -0600 Subject: [PATCH] added store column to desktop and display only logged in data --- .../petshopdesktop/DTOs/AppointmentDTO.java | 6 +++++- .../petshopdesktop/DTOs/PurchaseOrderDTO.java | 7 +++++-- .../api/dto/adoption/AdoptionResponse.java | 9 +++++++++ .../purchaseorder/PurchaseOrderResponse.java | 9 +++++++++ .../api/endpoints/AdoptionApi.java | 5 ++++- .../api/endpoints/AppointmentApi.java | 5 ++++- .../api/endpoints/InventoryApi.java | 5 ++++- .../api/endpoints/PurchaseOrderApi.java | 5 ++++- .../petshopdesktop/api/endpoints/SaleApi.java | 10 ++++++++-- .../controllers/AdoptionController.java | 14 ++++++++++--- .../controllers/AnalyticsController.java | 3 ++- .../controllers/AppointmentController.java | 12 ++++++++--- .../controllers/InventoryController.java | 11 ++++++++-- .../controllers/PetController.java | 7 +++++-- .../controllers/PurchaseOrderController.java | 9 +++++++-- .../controllers/SaleController.java | 20 +++++++++++++------ .../RefundDialogController.java | 2 +- .../petshopdesktop/models/Adoption.java | 10 +++++++++- .../petshopdesktop/models/SaleLineItem.java | 8 +++++++- .../modelviews/adoption-view.fxml | 1 + .../modelviews/appointment-view.fxml | 1 + .../modelviews/inventory-view.fxml | 1 + .../modelviews/purchase-order-view.fxml | 1 + .../petshopdesktop/modelviews/sale-view.fxml | 1 + 24 files changed, 131 insertions(+), 31 deletions(-) diff --git a/desktop/src/main/java/org/example/petshopdesktop/DTOs/AppointmentDTO.java b/desktop/src/main/java/org/example/petshopdesktop/DTOs/AppointmentDTO.java index cab8e4cb..7f1c0a5a 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/DTOs/AppointmentDTO.java +++ b/desktop/src/main/java/org/example/petshopdesktop/DTOs/AppointmentDTO.java @@ -21,6 +21,7 @@ public class AppointmentDTO { private SimpleStringProperty appointmentDate; private SimpleStringProperty appointmentTime; private SimpleStringProperty appointmentStatus; + private SimpleStringProperty storeName; public AppointmentDTO(int appointmentId, int customerId, String customerName, @@ -30,7 +31,8 @@ public class AppointmentDTO { String employeeName, String appointmentDate, String appointmentTime, - String appointmentStatus) { + String appointmentStatus, + String storeName) { this.appointmentId = new SimpleIntegerProperty(appointmentId); this.customerId = new SimpleIntegerProperty(customerId); @@ -44,6 +46,7 @@ public class AppointmentDTO { this.appointmentDate = new SimpleStringProperty(appointmentDate); this.appointmentTime = new SimpleStringProperty(appointmentTime); this.appointmentStatus = new SimpleStringProperty(appointmentStatus); + this.storeName = new SimpleStringProperty(storeName != null ? storeName : ""); } public int getAppointmentId() { return appointmentId.get(); } @@ -62,4 +65,5 @@ public class AppointmentDTO { public String getAppointmentDate() { return appointmentDate.get(); } public String getAppointmentTime() { return appointmentTime.get(); } public String getAppointmentStatus() { return appointmentStatus.get(); } + public String getStoreName() { return storeName.get(); } } diff --git a/desktop/src/main/java/org/example/petshopdesktop/DTOs/PurchaseOrderDTO.java b/desktop/src/main/java/org/example/petshopdesktop/DTOs/PurchaseOrderDTO.java index acc28e2a..d30053cb 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/DTOs/PurchaseOrderDTO.java +++ b/desktop/src/main/java/org/example/petshopdesktop/DTOs/PurchaseOrderDTO.java @@ -8,18 +8,21 @@ public class PurchaseOrderDTO { private StringProperty supplierName; private StringProperty orderDate; private StringProperty status; + private StringProperty storeName; public PurchaseOrderDTO(long id, String supplierName, - String orderDate, String status) { + String orderDate, String status, String storeName) { this.purchaseOrderId = new SimpleLongProperty(id); this.supplierName = new SimpleStringProperty(supplierName); this.orderDate = new SimpleStringProperty(orderDate); this.status = new SimpleStringProperty(status); + this.storeName = new SimpleStringProperty(storeName != null ? storeName : ""); } public long getPurchaseOrderId() { return purchaseOrderId.get(); } public String getSupplierName() { return supplierName.get(); } public String getOrderDate() { return orderDate.get(); } public String getStatus() { return status.get(); } -} \ No newline at end of file + public String getStoreName() { return storeName.get(); } +} diff --git a/desktop/src/main/java/org/example/petshopdesktop/api/dto/adoption/AdoptionResponse.java b/desktop/src/main/java/org/example/petshopdesktop/api/dto/adoption/AdoptionResponse.java index 8d0d1093..715a1a06 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/api/dto/adoption/AdoptionResponse.java +++ b/desktop/src/main/java/org/example/petshopdesktop/api/dto/adoption/AdoptionResponse.java @@ -13,6 +13,7 @@ public class AdoptionResponse { private LocalDate adoptionDate; private java.math.BigDecimal adoptionFee; private String adoptionStatus; + private String sourceStoreName; public AdoptionResponse() { } @@ -96,4 +97,12 @@ public class AdoptionResponse { public void setAdoptionStatus(String adoptionStatus) { this.adoptionStatus = adoptionStatus; } + + public String getSourceStoreName() { + return sourceStoreName; + } + + public void setSourceStoreName(String sourceStoreName) { + this.sourceStoreName = sourceStoreName; + } } diff --git a/desktop/src/main/java/org/example/petshopdesktop/api/dto/purchaseorder/PurchaseOrderResponse.java b/desktop/src/main/java/org/example/petshopdesktop/api/dto/purchaseorder/PurchaseOrderResponse.java index 4b96eedc..c928e649 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/api/dto/purchaseorder/PurchaseOrderResponse.java +++ b/desktop/src/main/java/org/example/petshopdesktop/api/dto/purchaseorder/PurchaseOrderResponse.java @@ -6,6 +6,7 @@ import java.time.LocalDate; public class PurchaseOrderResponse { private Long purchaseOrderId; private String supplierName; + private String storeName; private LocalDate orderDate; private LocalDate expectedDeliveryDate; private String orderStatus; @@ -30,6 +31,14 @@ public class PurchaseOrderResponse { this.supplierName = supplierName; } + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + public LocalDate getOrderDate() { return orderDate; } diff --git a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/AdoptionApi.java b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/AdoptionApi.java index d4f90c85..e9291e8f 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/AdoptionApi.java +++ b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/AdoptionApi.java @@ -23,11 +23,14 @@ public class AdoptionApi { return INSTANCE; } - public List listAdoptions(String query) throws Exception { + public List listAdoptions(String query, Long storeId) throws Exception { String path = "/api/v1/adoptions?page=0&size=1000"; if (query != null && !query.isEmpty()) { path += "&q=" + URLEncoder.encode(query, StandardCharsets.UTF_8); } + if (storeId != null) { + path += "&storeId=" + storeId; + } String response = apiClient.getRawResponse(path); PageResponse pageResponse = apiClient.getObjectMapper().readValue( response, diff --git a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/AppointmentApi.java b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/AppointmentApi.java index 4dd65bf0..5462fff4 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/AppointmentApi.java +++ b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/AppointmentApi.java @@ -23,11 +23,14 @@ public class AppointmentApi { return INSTANCE; } - public List listAppointments(String query) throws Exception { + public List listAppointments(String query, Long storeId) throws Exception { String path = "/api/v1/appointments?page=0&size=1000"; if (query != null && !query.isEmpty()) { path += "&q=" + URLEncoder.encode(query, StandardCharsets.UTF_8); } + if (storeId != null) { + path += "&storeId=" + storeId; + } String response = apiClient.getRawResponse(path); PageResponse pageResponse = apiClient.getObjectMapper().readValue( response, diff --git a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/InventoryApi.java b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/InventoryApi.java index dbf08be7..bf34cf22 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/InventoryApi.java +++ b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/InventoryApi.java @@ -22,11 +22,14 @@ public class InventoryApi { return INSTANCE; } - public List listInventory(String query) throws Exception { + public List listInventory(String query, Long storeId) throws Exception { String path = "/api/v1/inventory?page=0&size=1000"; if (query != null && !query.isEmpty()) { path += "&q=" + URLEncoder.encode(query, StandardCharsets.UTF_8); } + if (storeId != null) { + path += "&storeId=" + storeId; + } String response = apiClient.getRawResponse(path); PageResponse pageResponse = apiClient.getObjectMapper().readValue( response, diff --git a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/PurchaseOrderApi.java b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/PurchaseOrderApi.java index accea0eb..5ce083f9 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/PurchaseOrderApi.java +++ b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/PurchaseOrderApi.java @@ -21,11 +21,14 @@ public class PurchaseOrderApi { return INSTANCE; } - public List listPurchaseOrders(String query) throws Exception { + public List listPurchaseOrders(String query, Long storeId) throws Exception { String path = "/api/v1/purchase-orders?page=0&size=1000"; if (query != null && !query.isEmpty()) { path += "&q=" + URLEncoder.encode(query, StandardCharsets.UTF_8); } + if (storeId != null) { + path += "&storeId=" + storeId; + } String response = apiClient.getRawResponse(path); PageResponse pageResponse = apiClient.getObjectMapper().readValue( response, diff --git a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/SaleApi.java b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/SaleApi.java index a087fd9f..ab1c4fa1 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/SaleApi.java +++ b/desktop/src/main/java/org/example/petshopdesktop/api/endpoints/SaleApi.java @@ -22,11 +22,14 @@ public class SaleApi { return INSTANCE; } - public List listSales(int page, int size, String query) throws Exception { + public List listSales(int page, int size, String query, Long storeId) throws Exception { String path = "/api/v1/sales?page=" + page + "&size=" + size; if (query != null && !query.isEmpty()) { path += "&q=" + URLEncoder.encode(query, StandardCharsets.UTF_8); } + if (storeId != null) { + path += "&storeId=" + storeId; + } String response = apiClient.getRawResponse(path); PageResponse pageResponse = apiClient.getObjectMapper().readValue( response, @@ -38,7 +41,7 @@ public class SaleApi { return pageResponse.getContent(); } - public List listAllSales(String query) throws Exception { + public List listAllSales(String query, Long storeId) throws Exception { int page = 0; int size = 250; List allSales = new java.util.ArrayList<>(); @@ -48,6 +51,9 @@ public class SaleApi { if (query != null && !query.isEmpty()) { path += "&q=" + URLEncoder.encode(query, StandardCharsets.UTF_8); } + if (storeId != null) { + path += "&storeId=" + storeId; + } String response = apiClient.getRawResponse(path); PageResponse pageResponse = apiClient.getObjectMapper().readValue( 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 a1745e85..2c9565b9 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java @@ -1,6 +1,7 @@ package org.example.petshopdesktop.controllers; import javafx.application.Platform; +import org.example.petshopdesktop.auth.UserSession; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; @@ -62,6 +63,9 @@ public class AdoptionController { @FXML private TableColumn colAdoptionStatus; + @FXML + private TableColumn colStoreName; + @FXML private TableView tvAdoptions; @@ -85,6 +89,7 @@ public class AdoptionController { colAdoptionDate.setCellValueFactory(new PropertyValueFactory<>("adoptionDate")); colAdoptionFee.setCellValueFactory(new PropertyValueFactory<>("adoptionFee")); colAdoptionStatus.setCellValueFactory(new PropertyValueFactory<>("adoptionStatus")); + colStoreName.setCellValueFactory(new PropertyValueFactory<>("storeName")); TableViewSupport.applyCurrencyColumn(colAdoptionFee); displayAdoptions(); @@ -184,7 +189,8 @@ public class AdoptionController { } else { new Thread(() -> { try { - List adoptions = AdoptionApi.getInstance().listAdoptions(filter); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List adoptions = AdoptionApi.getInstance().listAdoptions(filter, storeId); List adoptionList = adoptions.stream() .map(this::mapToAdoption) .sorted(Comparator.comparing(Adoption::getAdoptionDate).reversed()) @@ -210,7 +216,8 @@ public class AdoptionController { private void displayAdoptions() { new Thread(() -> { try { - List adoptions = AdoptionApi.getInstance().listAdoptions(null); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List adoptions = AdoptionApi.getInstance().listAdoptions(null, storeId); List adoptionList = adoptions.stream() .map(this::mapToAdoption) .sorted(Comparator.comparing(Adoption::getAdoptionDate).reversed()) @@ -276,7 +283,8 @@ public class AdoptionController { response.getEmployeeName(), response.getAdoptionDate() != null ? response.getAdoptionDate().toString() : "", response.getAdoptionFee() != null ? response.getAdoptionFee().doubleValue() : 0.0, - response.getAdoptionStatus() + response.getAdoptionStatus(), + response.getSourceStoreName() ); } } diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/AnalyticsController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/AnalyticsController.java index 040cf0d5..a231218f 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/AnalyticsController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/AnalyticsController.java @@ -327,7 +327,8 @@ public class AnalyticsController { } private DashboardResponse buildStaffFallbackDashboard() throws Exception { - List sales = SaleApi.getInstance().listSales(0, Integer.MAX_VALUE, null); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List sales = SaleApi.getInstance().listSales(0, Integer.MAX_VALUE, null, storeId); String employeeName = UserSession.getInstance().getEmployeeName(); if (employeeName == null || employeeName.isBlank()) { employeeName = UserSession.getInstance().getUsername(); 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 8027bfe7..9583b11c 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java @@ -1,6 +1,7 @@ package org.example.petshopdesktop.controllers; import javafx.application.Platform; +import org.example.petshopdesktop.auth.UserSession; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.collections.transformation.FilteredList; @@ -36,6 +37,7 @@ public class AppointmentController { @FXML private TableColumn colCustomerName; @FXML private TableColumn colEmployeeName; @FXML private TableColumn colAppointmentStatus; + @FXML private TableColumn colStoreName; @FXML private Button btnAdd; @FXML private Button btnEdit; @@ -63,6 +65,7 @@ public class AppointmentController { colCustomerName.setCellValueFactory(new PropertyValueFactory<>("customerName")); colEmployeeName.setCellValueFactory(new PropertyValueFactory<>("employeeName")); colAppointmentStatus.setCellValueFactory(new PropertyValueFactory<>("appointmentStatus")); + colStoreName.setCellValueFactory(new PropertyValueFactory<>("storeName")); filtered = new FilteredList<>(appointments, a -> true); TableViewSupport.bindSortedItems(tvAppointments, filtered); @@ -92,7 +95,8 @@ public class AppointmentController { private void loadAppointments(){ new Thread(() -> { try{ - List responses = AppointmentApi.getInstance().listAppointments(null); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List responses = AppointmentApi.getInstance().listAppointments(null, storeId); List appointmentDTOs = responses.stream() .map(this::mapToAppointmentDTO) .sorted(Comparator.comparing((AppointmentDTO a) -> a.getAppointmentDate() + "T" + a.getAppointmentTime()).reversed()) @@ -117,7 +121,8 @@ public class AppointmentController { String query = text == null || text.trim().isEmpty() ? null : text.trim(); new Thread(() -> { try { - List responses = AppointmentApi.getInstance().listAppointments(query); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List responses = AppointmentApi.getInstance().listAppointments(query, storeId); List appointmentDTOs = responses.stream() .map(this::mapToAppointmentDTO) .sorted(Comparator.comparing((AppointmentDTO a) -> a.getAppointmentDate() + "T" + a.getAppointmentTime()).reversed()) @@ -263,7 +268,8 @@ public class AppointmentController { response.getEmployeeName() != null ? response.getEmployeeName() : "", response.getAppointmentDate() != null ? response.getAppointmentDate().toString() : "", response.getAppointmentTime() != null ? response.getAppointmentTime().toString() : "", - normalizeAppointmentStatus(response.getAppointmentStatus()) + normalizeAppointmentStatus(response.getAppointmentStatus()), + response.getStoreName() ); } diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/InventoryController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/InventoryController.java index c5e6cd96..1ab06a41 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/InventoryController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/InventoryController.java @@ -10,6 +10,7 @@ import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; import javafx.stage.Modality; +import org.example.petshopdesktop.auth.UserSession; import javafx.stage.Stage; import org.example.petshopdesktop.api.dto.inventory.InventoryResponse; import org.example.petshopdesktop.api.endpoints.InventoryApi; @@ -53,6 +54,9 @@ public class InventoryController { @FXML private TableColumn colQuantity; + @FXML + private TableColumn colStoreName; + @FXML private TableView tvInventory; @@ -75,6 +79,7 @@ public class InventoryController { colProductId.setCellValueFactory(new PropertyValueFactory<>("prodId")); colProductName.setCellValueFactory(new PropertyValueFactory<>("prodName")); colQuantity.setCellValueFactory(new PropertyValueFactory<>("quantity")); + colStoreName.setCellValueFactory(new PropertyValueFactory<>("storeName")); displayInventory(); TableViewSupport.installDoubleClickAction(tvInventory, selected -> openDialog(selected, "Edit")); @@ -167,7 +172,8 @@ public class InventoryController { } else { new Thread(() -> { try { - List inventories = InventoryApi.getInstance().listInventory(filter); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List inventories = InventoryApi.getInstance().listInventory(filter, storeId); List inventoryList = inventories.stream() .map(this::mapToInventory) .collect(Collectors.toList()); @@ -192,7 +198,8 @@ public class InventoryController { private void displayInventory() { new Thread(() -> { try { - List inventories = InventoryApi.getInstance().listInventory(null); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List inventories = InventoryApi.getInstance().listInventory(null, storeId); List inventoryList = inventories.stream() .map(this::mapToInventory) .collect(Collectors.toList()); 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 95dad73f..f92799cc 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/PetController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/PetController.java @@ -1,6 +1,7 @@ package org.example.petshopdesktop.controllers; import javafx.application.Platform; +import org.example.petshopdesktop.auth.UserSession; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; @@ -228,7 +229,8 @@ public class PetController { } else { new Thread(() -> { try { - List pets = PetApi.getInstance().listPets(filter, species, status); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List pets = PetApi.getInstance().listPets(filter, species, status, storeId); List petList = pets.stream() .map(this::mapToPet) .collect(Collectors.toList()); @@ -253,7 +255,8 @@ public class PetController { private void displayPets() { new Thread(() -> { try { - List pets = PetApi.getInstance().listPets(null, selectedSpecies(), selectedStatus()); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List pets = PetApi.getInstance().listPets(null, selectedSpecies(), selectedStatus(), storeId); List petList = pets.stream() .map(this::mapToPet) .collect(Collectors.toList()); diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/PurchaseOrderController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/PurchaseOrderController.java index 19cb952f..ca688856 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/PurchaseOrderController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/PurchaseOrderController.java @@ -10,6 +10,7 @@ import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; import org.example.petshopdesktop.DTOs.PurchaseOrderDTO; +import org.example.petshopdesktop.auth.UserSession; import org.example.petshopdesktop.api.dto.purchaseorder.PurchaseOrderResponse; import org.example.petshopdesktop.api.endpoints.PurchaseOrderApi; import org.example.petshopdesktop.controllers.dialogcontrollers.PurchaseOrderDetailsDialogController; @@ -39,6 +40,7 @@ public class PurchaseOrderController { @FXML private TableColumn colSupplier; @FXML private TableColumn colOrderDate; @FXML private TableColumn colStatus; + @FXML private TableColumn colStoreName; private final ObservableList purchaseOrders = FXCollections.observableArrayList(); private FilteredList filtered; @@ -55,6 +57,7 @@ public class PurchaseOrderController { colOrderDate.setCellValueFactory( new PropertyValueFactory<>("orderDate")); + colStoreName.setCellValueFactory(new javafx.scene.control.cell.PropertyValueFactory<>("storeName")); colStatus.setCellValueFactory( new PropertyValueFactory<>("status")); @@ -72,7 +75,8 @@ public class PurchaseOrderController { private void loadPurchaseOrders() { new Thread(() -> { try { - List responses = PurchaseOrderApi.getInstance().listPurchaseOrders(null); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List responses = PurchaseOrderApi.getInstance().listPurchaseOrders(null, storeId); List dtos = responses.stream() .map(this::mapToPurchaseOrderDTO) .sorted(Comparator.comparing(PurchaseOrderDTO::getOrderDate).reversed()) @@ -154,7 +158,8 @@ public class PurchaseOrderController { response.getPurchaseOrderId(), response.getSupplierName(), response.getOrderDate() != null ? response.getOrderDate().toString() : "", - response.getOrderStatus() + response.getOrderStatus(), + response.getStoreName() ); } } 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 7edc9c9a..3a90b787 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/SaleController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/SaleController.java @@ -126,6 +126,9 @@ public class SaleController { @FXML private TableColumn colSalePaymentType; + @FXML + private TableColumn colStoreName; + @FXML private TableView tvSales; @@ -175,6 +178,7 @@ public class SaleController { colSaleUnitPrice.setCellValueFactory(new PropertyValueFactory<>("unitPrice")); colSaleTotal.setCellValueFactory(new PropertyValueFactory<>("total")); colSalePaymentType.setCellValueFactory(new PropertyValueFactory<>("paymentMethod")); + colStoreName.setCellValueFactory(new PropertyValueFactory<>("storeName")); colSaleId.setMinWidth(50); colSaleDate.setMinWidth(150); colEmployeeName.setMinWidth(150); @@ -263,7 +267,8 @@ public class SaleController { Task> task = new Task>() { @Override protected List call() throws Exception { - List sales = SaleApi.getInstance().listAllSales(null); + Long storeId = UserSession.getInstance().isAdmin() ? null : UserSession.getInstance().getStoreId(); + List sales = SaleApi.getInstance().listAllSales(null, storeId); sales.sort(Comparator.comparing(SaleResponse::getSaleDate, Comparator.nullsLast(Comparator.reverseOrder())) .thenComparing(SaleResponse::getSaleId, Comparator.nullsLast(Comparator.reverseOrder()))); List lineItems = new ArrayList<>(); @@ -291,7 +296,8 @@ public class SaleController { unitPrice, lineTotal, sale.getPaymentMethod(), - isRefund + isRefund, + sale.getStoreName() )); } } @@ -563,7 +569,7 @@ public class SaleController { private void updateSalesColumnWidths(double tableWidth) { double available = Math.max(tableWidth - 28.0, 0.0); - double baseWidth = 1125.0; + double baseWidth = 1255.0; if (available <= 0) { return; } @@ -577,18 +583,20 @@ public class SaleController { colSaleUnitPrice.setPrefWidth(115.0); colSaleTotal.setPrefWidth(120.0); colSalePaymentType.setPrefWidth(110.0); + colStoreName.setPrefWidth(130.0); return; } double extra = available - baseWidth; colSaleId.setPrefWidth(60.0); - colSaleDate.setPrefWidth(170.0 + extra * 0.18); - colEmployeeName.setPrefWidth(160.0 + extra * 0.18); - colServiceProduct.setPrefWidth(320.0 + extra * 0.42); + colSaleDate.setPrefWidth(170.0 + extra * 0.16); + colEmployeeName.setPrefWidth(160.0 + extra * 0.16); + colServiceProduct.setPrefWidth(320.0 + extra * 0.38); colSaleQuantity.setPrefWidth(70.0); colSaleUnitPrice.setPrefWidth(115.0 + extra * 0.08); colSaleTotal.setPrefWidth(120.0 + extra * 0.08); colSalePaymentType.setPrefWidth(110.0 + extra * 0.06); + colStoreName.setPrefWidth(130.0 + extra * 0.08); } private void updateCartColumnWidths(double tableWidth) { diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/RefundDialogController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/RefundDialogController.java index 65b2590a..2ffdbd03 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/RefundDialogController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/RefundDialogController.java @@ -158,7 +158,7 @@ public class RefundDialogController { Task task = new Task<>() { @Override protected LoadedSaleData call() throws Exception { - List allSales = SaleApi.getInstance().listAllSales(null); + List allSales = SaleApi.getInstance().listAllSales(null, null); SaleResponse sale = SaleApi.getInstance().getSale(saleId); if (Boolean.TRUE.equals(sale.getIsRefund())) { throw new IllegalStateException("Select an original sale, not a refund record."); diff --git a/desktop/src/main/java/org/example/petshopdesktop/models/Adoption.java b/desktop/src/main/java/org/example/petshopdesktop/models/Adoption.java index 98d1f4a6..4ab50dea 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/models/Adoption.java +++ b/desktop/src/main/java/org/example/petshopdesktop/models/Adoption.java @@ -15,8 +15,9 @@ public class Adoption { private SimpleStringProperty adoptionDate; private SimpleDoubleProperty adoptionFee; private SimpleStringProperty adoptionStatus; + private SimpleStringProperty storeName; - public Adoption(int adoptionId, int petId, int customerId, int employeeId, String petName, String customerName, String employeeName, String adoptionDate, double adoptionFee, String adoptionStatus) { + public Adoption(int adoptionId, int petId, int customerId, int employeeId, String petName, String customerName, String employeeName, String adoptionDate, double adoptionFee, String adoptionStatus, String storeName) { this.adoptionId = new SimpleIntegerProperty(adoptionId); this.petId = new SimpleIntegerProperty(petId); this.customerId = new SimpleIntegerProperty(customerId); @@ -27,6 +28,7 @@ public class Adoption { this.adoptionDate = new SimpleStringProperty(adoptionDate); this.adoptionFee = new SimpleDoubleProperty(adoptionFee); this.adoptionStatus = new SimpleStringProperty(adoptionStatus); + this.storeName = new SimpleStringProperty(storeName != null ? storeName : ""); } public int getAdoptionId() { return adoptionId.get(); } @@ -88,4 +90,10 @@ public class Adoption { public void setAdoptionStatus(String adoptionStatus) { this.adoptionStatus.set(adoptionStatus); } public SimpleStringProperty adoptionStatusProperty() { return adoptionStatus; } + + public String getStoreName() { return storeName.get(); } + + public void setStoreName(String storeName) { this.storeName.set(storeName); } + + public SimpleStringProperty storeNameProperty() { return storeName; } } diff --git a/desktop/src/main/java/org/example/petshopdesktop/models/SaleLineItem.java b/desktop/src/main/java/org/example/petshopdesktop/models/SaleLineItem.java index a8a3d134..0316e6be 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/models/SaleLineItem.java +++ b/desktop/src/main/java/org/example/petshopdesktop/models/SaleLineItem.java @@ -10,8 +10,9 @@ public class SaleLineItem { private final double total; private final String paymentMethod; private final boolean isRefund; + private final String storeName; - public SaleLineItem(int saleId, String saleDate, String employeeName, String itemName, int quantity, double unitPrice, double total, String paymentMethod, boolean isRefund) { + public SaleLineItem(int saleId, String saleDate, String employeeName, String itemName, int quantity, double unitPrice, double total, String paymentMethod, boolean isRefund, String storeName) { this.saleId = saleId; this.saleDate = saleDate; this.employeeName = employeeName; @@ -21,6 +22,7 @@ public class SaleLineItem { this.total = total; this.paymentMethod = paymentMethod; this.isRefund = isRefund; + this.storeName = storeName != null ? storeName : ""; } public int getSaleId() { @@ -58,4 +60,8 @@ public class SaleLineItem { public boolean isRefund() { return isRefund; } + + public String getStoreName() { + return storeName; + } } 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 0a7f00bd..c24826d3 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 @@ -88,6 +88,7 @@ + diff --git a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/appointment-view.fxml b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/appointment-view.fxml index b4840087..dd20555c 100644 --- a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/appointment-view.fxml +++ b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/appointment-view.fxml @@ -89,6 +89,7 @@ + diff --git a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/inventory-view.fxml b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/inventory-view.fxml index c3e1b9cf..a723127d 100644 --- a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/inventory-view.fxml +++ b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/inventory-view.fxml @@ -85,6 +85,7 @@ + diff --git a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/purchase-order-view.fxml b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/purchase-order-view.fxml index 2d5d50a6..4dd9f48e 100644 --- a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/purchase-order-view.fxml +++ b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/purchase-order-view.fxml @@ -70,6 +70,7 @@ + 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 c1c0c118..63569aa2 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 @@ -186,6 +186,7 @@ +