From 4fcaa7f2ebdb50823e699e2e7d5edbb1c94971f0 Mon Sep 17 00:00:00 2001 From: Nikitha Date: Mon, 23 Feb 2026 16:08:55 -0700 Subject: [PATCH] Appointment page --- .../petshopdesktop/DTOs/AppointmentDTO.java | 59 ++++ .../controllers/AppointmentController.java | 181 +++++++------ .../AppointmentDialogController.java | 252 ++++++++++++------ .../database/AppointmentDB.java | 202 +++++++++++--- .../petshopdesktop/models/Appointment.java | 48 ++-- .../dialogviews/appointment-dialog-view.fxml | 58 +++- 6 files changed, 560 insertions(+), 240 deletions(-) create mode 100644 src/main/java/org/example/petshopdesktop/DTOs/AppointmentDTO.java diff --git a/src/main/java/org/example/petshopdesktop/DTOs/AppointmentDTO.java b/src/main/java/org/example/petshopdesktop/DTOs/AppointmentDTO.java new file mode 100644 index 00000000..f749b5b5 --- /dev/null +++ b/src/main/java/org/example/petshopdesktop/DTOs/AppointmentDTO.java @@ -0,0 +1,59 @@ +package org.example.petshopdesktop.DTOs; + +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleStringProperty; + +public class AppointmentDTO { + + private SimpleIntegerProperty appointmentId; + + private SimpleIntegerProperty customerId; + private SimpleStringProperty customerName; + + private SimpleIntegerProperty petId; + private SimpleStringProperty petName; + + private SimpleIntegerProperty serviceId; + private SimpleStringProperty serviceName; + + private SimpleStringProperty appointmentDate; + private SimpleStringProperty appointmentTime; + private SimpleStringProperty appointmentStatus; + + // Constructor + public AppointmentDTO(int appointmentId, + int customerId, String customerName, + int petId, String petName, + int serviceId, String serviceName, + String appointmentDate, + String appointmentTime, + String appointmentStatus) { + + this.appointmentId = new SimpleIntegerProperty(appointmentId); + this.customerId = new SimpleIntegerProperty(customerId); + this.customerName = new SimpleStringProperty(customerName); + this.petId = new SimpleIntegerProperty(petId); + this.petName = new SimpleStringProperty(petName); + this.serviceId = new SimpleIntegerProperty(serviceId); + this.serviceName = new SimpleStringProperty(serviceName); + this.appointmentDate = new SimpleStringProperty(appointmentDate); + this.appointmentTime = new SimpleStringProperty(appointmentTime); + this.appointmentStatus = new SimpleStringProperty(appointmentStatus); + } + + // Getters + public int getAppointmentId() { return appointmentId.get(); } + + public int getCustomerId() { return customerId.get(); } + public String getCustomerName() { return customerName.get(); } + + public int getPetId() { return petId.get(); } + public String getPetName() { return petName.get(); } + + public int getServiceId() { return serviceId.get(); } + public String getServiceName() { return serviceName.get(); } + + public String getAppointmentDate() { return appointmentDate.get(); } + public String getAppointmentTime() { return appointmentTime.get(); } + public String getAppointmentStatus() { return appointmentStatus.get(); } +} \ No newline at end of file diff --git a/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java b/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java index 3d5f6d13..4616abcf 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/AppointmentController.java @@ -1,138 +1,135 @@ package org.example.petshopdesktop.controllers; -import javafx.event.ActionEvent; -import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; -import javafx.scene.control.TextField; import javafx.collections.FXCollections; import javafx.collections.ObservableList; - +import javafx.event.ActionEvent; +import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.stage.Modality; import javafx.stage.Stage; -import java.io.IOException; +import org.example.petshopdesktop.DTOs.AppointmentDTO; +import org.example.petshopdesktop.controllers.dialogcontrollers.AppointmentDialogController; import org.example.petshopdesktop.database.AppointmentDB; -import org.example.petshopdesktop.models.Appointment; - public class AppointmentController { + @FXML private TableView tvAppointments; - private ObservableList appointments = - FXCollections.observableArrayList(); + @FXML private TableColumn colAppointmentId; + @FXML private TableColumn colPetName; + @FXML private TableColumn colServiceName; + @FXML private TableColumn colAppointmentDate; + @FXML private TableColumn colAppointmentTime; + @FXML private TableColumn colCustomerName; + @FXML private TableColumn colAppointmentStatus; + + @FXML private Button btnAdd; + @FXML private Button btnEdit; + @FXML private Button btnDelete; + + @FXML private TextField txtSearch; + + private ObservableList data = FXCollections.observableArrayList(); @FXML + public void initialize(){ + colAppointmentId.setCellValueFactory(new PropertyValueFactory<>("appointmentId")); + colPetName.setCellValueFactory(new PropertyValueFactory<>("petName")); + colServiceName.setCellValueFactory(new PropertyValueFactory<>("serviceName")); + colAppointmentDate.setCellValueFactory(new PropertyValueFactory<>("appointmentDate")); + colAppointmentTime.setCellValueFactory(new PropertyValueFactory<>("appointmentTime")); + colCustomerName.setCellValueFactory(new PropertyValueFactory<>("customerName")); + colAppointmentStatus.setCellValueFactory(new PropertyValueFactory<>("appointmentStatus")); - public void initialize() { loadAppointments(); } - - - private void loadAppointments() { - appointments.setAll(AppointmentDB.getAllAppointments()); - tvAppointments.setItems(appointments); + private void loadAppointments(){ + try{ + data = AppointmentDB.getAppointmentDTOs(); + tvAppointments.setItems(data); + }catch(Exception e){ + e.printStackTrace(); + } } @FXML - private Button btnAdd; + void btnAddClicked(ActionEvent event){ + openDialog(null, "Add"); + } @FXML - private Button btnDelete; + void btnEditClicked(ActionEvent event){ + + AppointmentDTO selected = + tvAppointments.getSelectionModel().getSelectedItem(); + + if(selected == null){ + showAlert("Select Appointment", "Please select appointment to edit."); + return; + } + + openDialog(selected, "Edit"); + } @FXML - private Button btnEdit; + void btnDeleteClicked(ActionEvent event){ - @FXML - private TableColumn colAppointmentDate; + AppointmentDTO selected = + tvAppointments.getSelectionModel().getSelectedItem(); - @FXML - private TableColumn colAppointmentId; + if(selected == null) return; - @FXML - private TableColumn colAppointmentStatus; + try{ + AppointmentDB.deleteAppointment(selected.getAppointmentId()); + loadAppointments(); + }catch(Exception e){ + e.printStackTrace(); + } + } - @FXML - private TableColumn colAppointmentTime; + private void openDialog(AppointmentDTO appt, String mode){ - @FXML - private TableColumn colCustomerName; - - @FXML - private TableColumn colPetName; - - @FXML - private TableColumn colServiceName; - - @FXML - private TableView tvAppointments; - - @FXML - private TextField txtSearch; - - @FXML - void btnAddClicked(ActionEvent event) { - - try { + try{ FXMLLoader loader = new FXMLLoader( - getClass().getResource("/appointment-dialog-view.fxml") + getClass().getResource( + "/org/example/petshopdesktop/dialogviews/appointment-dialog-view.fxml" + ) ); + Scene scene = new Scene(loader.load()); + + AppointmentDialogController controller = + loader.getController(); + + controller.setMode(mode); + + if(mode.equals("Edit")){ + controller.displayAppointmentDetails(appt); + } + Stage stage = new Stage(); - stage.setScene(new Scene(loader.load())); + stage.initModality(Modality.APPLICATION_MODAL); + stage.setScene(scene); stage.showAndWait(); loadAppointments(); - } catch (Exception e) { + }catch(Exception e){ e.printStackTrace(); } } - @FXML - void btnDeleteClicked(ActionEvent event) { - - Appointment selected = tvAppointments.getSelectionModel().getSelectedItem(); - - if (selected == null) return; - - try { - AppointmentDB.deleteAppointment( - selected.getAppointmentId() - ); - loadAppointments(); - } catch (Exception e) { - e.printStackTrace(); - } + private void showAlert(String title, String msg){ + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(msg); + alert.showAndWait(); } - - @FXML - void btnEditClicked(ActionEvent event) { - - Appointment selected = tvAppointments.getSelectionModel().getSelectedItem(); - - if (selected == null) return; - - try { - FXMLLoader loader = new FXMLLoader( - getClass().getResource("/appointment-dialog-view.fxml") - ); - - Stage stage = new Stage(); - stage.setScene(new Scene(loader.load())); - stage.showAndWait(); - - loadAppointments(); - - } catch (Exception e) { - e.printStackTrace(); - } - } - } - 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 af607180..61fa04e8 100644 --- a/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java +++ b/src/main/java/org/example/petshopdesktop/controllers/dialogcontrollers/AppointmentDialogController.java @@ -2,110 +2,208 @@ package org.example.petshopdesktop.controllers.dialogcontrollers; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.scene.Node; -import javafx.scene.control.Button; -import javafx.scene.control.ComboBox; -import javafx.scene.control.DatePicker; -import javafx.scene.control.Label; +import javafx.scene.control.*; import javafx.scene.input.MouseEvent; import javafx.stage.Stage; +import javafx.scene.control.ListCell; -import org.example.petshopdesktop.database.AppointmentDB; -import org.example.petshopdesktop.models.Appointment; +import org.example.petshopdesktop.DTOs.AppointmentDTO; +import org.example.petshopdesktop.database.*; +import org.example.petshopdesktop.models.*; import java.sql.Time; public class AppointmentDialogController { - @FXML - private Button btnCancel; + // ============================ + // FXML + // ============================ - @FXML - private Button btnSave; + @FXML private Button btnCancel; + @FXML private Button btnSave; - @FXML - private ComboBox cbAppointmentStatus; + @FXML private ComboBox cbService; + @FXML private ComboBox cbCustomer; + @FXML private ComboBox cbPet; - @FXML - private ComboBox