From bdde1d39dcbce0d4dddd74b0214614d5000379e6 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Tue, 10 Mar 2026 18:49:59 -0600 Subject: [PATCH] Fix desktop mappings --- .../api/dto/adoption/AdoptionResponse.java | 27 +++++++++++ .../dto/appointment/AppointmentRequest.java | 9 ++++ .../dto/appointment/AppointmentResponse.java | 45 +++++++++++++++++++ .../api/dto/auth/UserInfoResponse.java | 45 +++++++++++++++++++ .../api/dto/common/DropdownOption.java | 5 +++ .../controllers/AdoptionController.java | 6 +-- .../controllers/AppointmentController.java | 7 +-- .../controllers/LoginController.java | 10 +---- .../controllers/PetController.java | 10 +---- .../controllers/SaleController.java | 4 ++ .../AppointmentDialogController.java | 23 +++++++--- .../PetDialogController.java | 4 +- .../RefundDialogController.java | 4 +- .../petshopdesktop/modelviews/sale-view.fxml | 18 ++++---- 14 files changed, 175 insertions(+), 42 deletions(-) diff --git a/src/main/java/org/example/petshopdesktop/api/dto/adoption/AdoptionResponse.java b/src/main/java/org/example/petshopdesktop/api/dto/adoption/AdoptionResponse.java index 8fa617e6..60667217 100644 --- a/src/main/java/org/example/petshopdesktop/api/dto/adoption/AdoptionResponse.java +++ b/src/main/java/org/example/petshopdesktop/api/dto/adoption/AdoptionResponse.java @@ -4,9 +4,12 @@ import java.time.LocalDate; public class AdoptionResponse { private Long adoptionId; + private Long petId; + private Long customerId; private String petName; private String customerName; private LocalDate adoptionDate; + private java.math.BigDecimal adoptionFee; private String adoptionStatus; public AdoptionResponse() { @@ -20,6 +23,22 @@ public class AdoptionResponse { this.adoptionId = adoptionId; } + public Long getPetId() { + return petId; + } + + public void setPetId(Long petId) { + this.petId = petId; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + public String getPetName() { return petName; } @@ -44,6 +63,14 @@ public class AdoptionResponse { this.adoptionDate = adoptionDate; } + public java.math.BigDecimal getAdoptionFee() { + return adoptionFee; + } + + public void setAdoptionFee(java.math.BigDecimal adoptionFee) { + this.adoptionFee = adoptionFee; + } + public String getAdoptionStatus() { return adoptionStatus; } diff --git a/src/main/java/org/example/petshopdesktop/api/dto/appointment/AppointmentRequest.java b/src/main/java/org/example/petshopdesktop/api/dto/appointment/AppointmentRequest.java index fe4f7faa..a81faaff 100644 --- a/src/main/java/org/example/petshopdesktop/api/dto/appointment/AppointmentRequest.java +++ b/src/main/java/org/example/petshopdesktop/api/dto/appointment/AppointmentRequest.java @@ -7,6 +7,7 @@ import java.util.List; public class AppointmentRequest { private List petIds; private Long customerId; + private Long storeId; private Long serviceId; private LocalDate appointmentDate; private LocalTime appointmentTime; @@ -31,6 +32,14 @@ public class AppointmentRequest { this.customerId = customerId; } + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + public Long getServiceId() { return serviceId; } diff --git a/src/main/java/org/example/petshopdesktop/api/dto/appointment/AppointmentResponse.java b/src/main/java/org/example/petshopdesktop/api/dto/appointment/AppointmentResponse.java index af76cb8f..1d904bd0 100644 --- a/src/main/java/org/example/petshopdesktop/api/dto/appointment/AppointmentResponse.java +++ b/src/main/java/org/example/petshopdesktop/api/dto/appointment/AppointmentResponse.java @@ -5,8 +5,13 @@ import java.time.LocalTime; public class AppointmentResponse { private Long appointmentId; + private Long customerId; private String customerName; + private Long storeId; + private String storeName; + private Long serviceId; private java.util.List petNames; + private java.util.List petIds; private String serviceName; private LocalDate appointmentDate; private LocalTime appointmentTime; @@ -23,6 +28,14 @@ public class AppointmentResponse { this.appointmentId = appointmentId; } + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + public String getCustomerName() { return customerName; } @@ -31,6 +44,30 @@ public class AppointmentResponse { this.customerName = customerName; } + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + public Long getServiceId() { + return serviceId; + } + + public void setServiceId(Long serviceId) { + this.serviceId = serviceId; + } + public java.util.List getPetNames() { return petNames; } @@ -39,6 +76,14 @@ public class AppointmentResponse { this.petNames = petNames; } + public java.util.List getPetIds() { + return petIds; + } + + public void setPetIds(java.util.List petIds) { + this.petIds = petIds; + } + public String getServiceName() { return serviceName; } diff --git a/src/main/java/org/example/petshopdesktop/api/dto/auth/UserInfoResponse.java b/src/main/java/org/example/petshopdesktop/api/dto/auth/UserInfoResponse.java index 16ee1204..4fc49442 100644 --- a/src/main/java/org/example/petshopdesktop/api/dto/auth/UserInfoResponse.java +++ b/src/main/java/org/example/petshopdesktop/api/dto/auth/UserInfoResponse.java @@ -3,7 +3,12 @@ package org.example.petshopdesktop.api.dto.auth; public class UserInfoResponse { private Long id; private String username; + private String email; + private String fullName; + private String avatarUrl; private String role; + private Long storeId; + private String storeName; public UserInfoResponse() { } @@ -24,6 +29,30 @@ public class UserInfoResponse { this.username = username; } + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getAvatarUrl() { + return avatarUrl; + } + + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; + } + public String getRole() { return role; } @@ -31,4 +60,20 @@ public class UserInfoResponse { public void setRole(String role) { this.role = role; } + + public Long getStoreId() { + return storeId; + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + public String getStoreName() { + return storeName; + } + + public void setStoreName(String storeName) { + this.storeName = storeName; + } } diff --git a/src/main/java/org/example/petshopdesktop/api/dto/common/DropdownOption.java b/src/main/java/org/example/petshopdesktop/api/dto/common/DropdownOption.java index 08678e53..bacbad0b 100644 --- a/src/main/java/org/example/petshopdesktop/api/dto/common/DropdownOption.java +++ b/src/main/java/org/example/petshopdesktop/api/dto/common/DropdownOption.java @@ -22,4 +22,9 @@ public class DropdownOption { public void setLabel(String label) { this.label = label; } + + @Override + public String toString() { + return label == null ? "" : label; + } } diff --git a/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java b/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java index 97c25fd4..65edcebd 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/AdoptionController.java @@ -247,12 +247,12 @@ public class AdoptionController { private Adoption mapToAdoption(AdoptionResponse response) { return new Adoption( response.getAdoptionId().intValue(), - 0, - 0, + response.getPetId() != null ? response.getPetId().intValue() : 0, + response.getCustomerId() != null ? response.getCustomerId().intValue() : 0, response.getPetName(), response.getCustomerName(), response.getAdoptionDate() != null ? response.getAdoptionDate().toString() : "", - 0.0, + response.getAdoptionFee() != null ? response.getAdoptionFee().doubleValue() : 0.0, response.getAdoptionStatus() ); } diff --git a/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java b/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java index 7a932c1e..221140b0 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java @@ -230,13 +230,14 @@ public class AppointmentController { } private AppointmentDTO mapToAppointmentDTO(AppointmentResponse response) { + Long petId = response.getPetIds() != null && !response.getPetIds().isEmpty() ? response.getPetIds().get(0) : null; return new AppointmentDTO( response.getAppointmentId().intValue(), - 0, + response.getCustomerId() != null ? response.getCustomerId().intValue() : 0, response.getCustomerName(), - 0, + petId != null ? petId.intValue() : 0, String.join(", ", response.getPetNames()), - 0, + response.getServiceId() != null ? response.getServiceId().intValue() : 0, response.getServiceName(), response.getAppointmentDate().toString(), response.getAppointmentTime().toString(), diff --git a/src/main/java/org/example/petshopdesktop/controllers/LoginController.java b/src/main/java/org/example/petshopdesktop/controllers/LoginController.java index 36d2951c..96dece06 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/LoginController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/LoginController.java @@ -14,14 +14,10 @@ import org.example.petshopdesktop.api.ApiClient; import org.example.petshopdesktop.api.dto.auth.LoginRequest; import org.example.petshopdesktop.api.dto.auth.LoginResponse; import org.example.petshopdesktop.api.dto.auth.UserInfoResponse; -import org.example.petshopdesktop.api.dto.common.DropdownOption; -import org.example.petshopdesktop.api.endpoints.DropdownApi; import org.example.petshopdesktop.auth.Role; import org.example.petshopdesktop.auth.UserSession; import org.example.petshopdesktop.util.ActivityLogger; -import java.util.List; - public class LoginController { @FXML @@ -79,11 +75,7 @@ public class LoginController { throw new IllegalStateException("User info is null"); } UserSession.getInstance().login(userInfo.getId(), username, role, token); - - List stores = DropdownApi.getInstance().getStores(); - if (stores != null && !stores.isEmpty()) { - UserSession.getInstance().setStoreId(stores.get(0).getId()); - } + UserSession.getInstance().setStoreId(userInfo.getStoreId()); openMainLayout(); diff --git a/src/main/java/org/example/petshopdesktop/controllers/PetController.java b/src/main/java/org/example/petshopdesktop/controllers/PetController.java index c4991272..55ccb3e1 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/PetController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/PetController.java @@ -18,8 +18,6 @@ import org.example.petshopdesktop.models.Pet; import org.example.petshopdesktop.util.ActivityLogger; import java.io.IOException; -import java.time.LocalDate; -import java.time.Period; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -257,19 +255,15 @@ public class PetController { } private Pet mapToPet(PetResponse response) { - int age = 0; - if (null != null) { - age = Period.between(null, LocalDate.now()).getYears(); - } return new Pet( response.getPetId().intValue(), response.getPetName(), response.getPetSpecies(), response.getPetBreed(), - age, + response.getPetAge() != null ? response.getPetAge() : 0, response.getPetStatus(), response.getPetPrice().doubleValue() ); } -} \ No newline at end of file +} diff --git a/src/main/java/org/example/petshopdesktop/controllers/SaleController.java b/src/main/java/org/example/petshopdesktop/controllers/SaleController.java index 2d956ddf..0e6315b8 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/SaleController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/SaleController.java @@ -142,6 +142,8 @@ public class SaleController { } private void setupTables() { + tvCart.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); + tvCart.setFixedCellSize(34); colCartProduct.setCellValueFactory(new PropertyValueFactory<>("prodName")); colCartQty.setCellValueFactory(new PropertyValueFactory<>("quantity")); colCartUnitPrice.setCellValueFactory(new PropertyValueFactory<>("unitPrice")); @@ -149,6 +151,8 @@ public class SaleController { tvCart.setItems(cartItems); tvCart.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + tvSales.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); + tvSales.setFixedCellSize(34); colSaleId.setCellValueFactory(new PropertyValueFactory<>("saleId")); colSaleDate.setCellValueFactory(new PropertyValueFactory<>("saleDate")); colEmployeeName.setCellValueFactory(new PropertyValueFactory<>("employeeName")); diff --git a/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java b/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java index f0db4368..932d10d5 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java @@ -12,10 +12,10 @@ import javafx.scene.control.ListCell; import org.example.petshopdesktop.DTOs.AppointmentDTO; import org.example.petshopdesktop.api.dto.appointment.AppointmentRequest; -import org.example.petshopdesktop.api.dto.appointment.AppointmentResponse; import org.example.petshopdesktop.api.dto.common.DropdownOption; import org.example.petshopdesktop.api.endpoints.AppointmentApi; import org.example.petshopdesktop.api.endpoints.DropdownApi; +import org.example.petshopdesktop.auth.UserSession; import org.example.petshopdesktop.util.ActivityLogger; import java.time.LocalTime; @@ -89,6 +89,7 @@ public class AppointmentDialogController { if (pets != null) { cbPet.setItems(FXCollections.observableArrayList(pets)); } + syncSelectedAppointment(); }); } catch (Exception e) { Platform.runLater(() -> { @@ -194,15 +195,15 @@ public class AppointmentDialogController { } cbService.getItems().forEach(s -> { - if (s.getId() == appt.getServiceId()) cbService.setValue(s); + if (s.getId() != null && s.getId().longValue() == appt.getServiceId()) cbService.setValue(s); }); cbCustomer.getItems().forEach(c -> { - if (c.getId() == appt.getCustomerId()) cbCustomer.setValue(c); + if (c.getId() != null && c.getId().longValue() == appt.getCustomerId()) cbCustomer.setValue(c); }); cbPet.getItems().forEach(p -> { - if (p.getId() == appt.getPetId()) cbPet.setValue(p); + if (p.getId() != null && p.getId().longValue() == appt.getPetId()) cbPet.setValue(p); }); } @@ -225,10 +226,16 @@ public class AppointmentDialogController { } LocalTime appointmentTime = LocalTime.of(cbHour.getValue(), cbMinute.getValue()); + Long storeId = UserSession.getInstance().getStoreId(); + if (storeId == null || storeId <= 0) { + showError("Store is not set for this account"); + return; + } AppointmentRequest request = new AppointmentRequest(); request.setPetIds(Collections.singletonList(cbPet.getValue().getId())); request.setCustomerId(cbCustomer.getValue().getId()); + request.setStoreId(storeId); request.setServiceId(cbService.getValue().getId()); request.setAppointmentDate(dpAppointmentDate.getValue()); request.setAppointmentTime(appointmentTime); @@ -275,4 +282,10 @@ public class AppointmentDialogController { alert.setContentText(msg); alert.showAndWait(); } -} \ No newline at end of file + + private void syncSelectedAppointment() { + if (selectedAppointment != null) { + displayAppointmentDetails(selectedAppointment); + } + } +} diff --git a/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/PetDialogController.java b/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/PetDialogController.java index 7d210e73..cd7f2690 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/PetDialogController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/PetDialogController.java @@ -16,8 +16,6 @@ import org.example.petshopdesktop.models.Pet; import org.example.petshopdesktop.util.ActivityLogger; import java.math.BigDecimal; -import java.time.LocalDate; - public class PetDialogController { @FXML @@ -158,7 +156,7 @@ public class PetDialogController { } catch (NumberFormatException e) { throw new IllegalArgumentException("Invalid age format"); } - LocalDate dateOfBirth = LocalDate.now().minusYears(age); + request.setPetAge(age); return request; } diff --git a/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/RefundDialogController.java b/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/RefundDialogController.java index e7a5e218..5abe261f 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/RefundDialogController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/RefundDialogController.java @@ -171,7 +171,7 @@ public class RefundDialogController { } int alreadyRefunded = refundItems.stream() - .filter(r -> r.getProdId() == selected.getSaleItemId().intValue()) + .filter(r -> r.getProdId() == selected.getProdId().intValue()) .mapToInt(RefundItem::getQuantity) .sum(); @@ -200,7 +200,7 @@ public class RefundDialogController { } refundItems.add(new RefundItem( - selected.getSaleItemId().intValue(), + selected.getProdId().intValue(), selected.getProductName(), quantity, selected.getUnitPrice().doubleValue() diff --git a/src/main/resources/org/example/petshopdesktop/modelviews/sale-view.fxml b/src/main/resources/org/example/petshopdesktop/modelviews/sale-view.fxml index a63beeb6..b6f7f0c5 100644 --- a/src/main/resources/org/example/petshopdesktop/modelviews/sale-view.fxml +++ b/src/main/resources/org/example/petshopdesktop/modelviews/sale-view.fxml @@ -151,16 +151,16 @@ - + - - - - - - - - + + + + + + + +