Compare commits

...

24 commits

Author SHA1 Message Date
arminribic
775916e584 #7 fixxed smt
All checks were successful
Quality Check / Linting Check (push) Successful in 16s
Quality Check / Javadoc Check (push) Successful in 40s
Quality Check / Linting Check (pull_request) Successful in 20s
Quality Check / Javadoc Check (pull_request) Successful in 27s
2024-05-17 13:44:38 +02:00
arminribic
cecc5edb62 Merge remote-tracking branch 'origin/story/sperre-und-loschung-behandlungsdaten' into story/sperre-und-loschung-behandlungsdaten
All checks were successful
Quality Check / Linting Check (push) Successful in 26s
Quality Check / Linting Check (pull_request) Successful in 28s
Quality Check / Javadoc Check (push) Successful in 42s
Quality Check / Javadoc Check (pull_request) Successful in 40s
2024-05-17 13:09:36 +02:00
arminribic
d3b95b0b5f #7: make lint executet 2024-05-17 13:09:29 +02:00
arminribic
7cacca89c5 #7: make lint executet
Some checks failed
Quality Check / Linting Check (push) Successful in 16s
Quality Check / Javadoc Check (push) Has been cancelled
Quality Check / Linting Check (pull_request) Successful in 20s
Quality Check / Javadoc Check (pull_request) Successful in 48s
2024-05-17 13:09:16 +02:00
Dorian Nemec
8219e24670 #7 Javadoc und calculateDeleteDate ergänzt #1
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 20s
Quality Check / Linting Check (pull_request) Failing after 12s
Quality Check / Javadoc Check (pull_request) Successful in 20s
2024-05-17 12:51:02 +02:00
Dorian Nemec
15f4c1f3b0 #7 Javadoc ergänzt #1
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 20s
2024-05-17 12:45:47 +02:00
arminribic
c852265649 #7: Automatisches Löschen nach 10Jahre implementiert und für
Some checks failed
Quality Check / Linting Check (push) Failing after 13s
Quality Check / Javadoc Check (push) Successful in 21s
#10: Nachtrag: Locked Nurses können nicht mehr zu neuen Treatments hinzugefügt werden
2024-05-17 11:37:20 +02:00
arminribic
5d92bb9b45 #7: (WIP) calculateDeleteDate
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 21s
2024-05-17 10:26:41 +02:00
arminribic
331c5697f1 #7: (WIP) calculateDeleteDate
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 20s
2024-05-17 09:56:05 +02:00
Dorian Nemec
d2e41c06f2 #7 Sperren/Entsperren
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 20s
2024-05-17 09:39:21 +02:00
arminribic
b5f4e1ad0d #7: (WIP) Savepoint
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 20s
2024-05-17 09:26:32 +02:00
Dorian Nemec
9ac68941e9 #7 Visible UI for locked treatments #2 all visible UIs
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 20s
2024-05-17 08:53:58 +02:00
Dorian Nemec
d69c738641 #7 Visible UI for locked treatments
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 21s
2024-05-17 08:41:43 +02:00
arminribic
89e4be5172 #7: (WIP) LockedTreatmentView.fxml angefangen & TreatmentDao angepasst.
Some checks failed
Quality Check / Linting Check (push) Failing after 13s
Quality Check / Javadoc Check (push) Successful in 22s
2024-05-17 08:04:04 +02:00
Dorian Nemec
6fff093b0a #7 Treatment structure for UI refactored
Some checks failed
Quality Check / Linting Check (push) Failing after 14s
Quality Check / Javadoc Check (push) Successful in 21s
2024-05-17 07:12:59 +02:00
arminribic
2b9734a764 #7: (WIP) LockedTreatmentView.fxml angefangen & TreatmentDao angepasst.
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 21s
2024-05-16 17:12:50 +02:00
Dorian Nemec
79ddf61c26 #7 Nicht fertig: Locked Treatment UI
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 21s
2024-05-16 16:28:11 +02:00
Dorian Nemec
ca30c413a5 #7 Nicht fertig: Locked Treatment UI
Some checks failed
Quality Check / Linting Check (push) Failing after 12s
Quality Check / Javadoc Check (push) Successful in 21s
2024-05-16 16:20:05 +02:00
Dorian Nemec
b05f4bcf59 #7 11 related problems mit locked geloest
All checks were successful
Quality Check / Linting Check (push) Successful in 12s
Quality Check / Javadoc Check (push) Successful in 22s
2024-05-16 15:52:38 +02:00
Dorian Nemec
01e07be6e2 #7 locked boolean zu Treatment addiert und initialisiert
Some checks failed
Quality Check / Linting Check (push) Successful in 12s
Quality Check / Javadoc Check (push) Failing after 13s
2024-05-16 15:49:48 +02:00
Dorian Nemec
84df7a7abb #7 MainWindowController Tabs added #2
All checks were successful
Quality Check / Linting Check (push) Successful in 12s
Quality Check / Javadoc Check (push) Successful in 21s
2024-05-16 15:43:21 +02:00
Dorian Nemec
e5af026223 #7 MainWindowController Tabs added
All checks were successful
Quality Check / Linting Check (push) Successful in 12s
Quality Check / Javadoc Check (push) Successful in 20s
2024-05-16 15:37:18 +02:00
Dorian Nemec
754535ca73 #7 Created Treatment and Locked Treatment UI
All checks were successful
Quality Check / Linting Check (push) Successful in 12s
Quality Check / Javadoc Check (push) Successful in 20s
2024-05-16 15:30:39 +02:00
Dorian Nemec
8c01fa5ae2 #7 sichtbar?
All checks were successful
Quality Check / Linting Check (push) Successful in 12s
Quality Check / Javadoc Check (push) Successful in 21s
2024-05-16 14:15:30 +02:00
13 changed files with 382 additions and 51 deletions

Binary file not shown.

View file

@ -67,7 +67,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
"Gespräch", "Gespräch",
"Der Patient hat enorme Angstgefühle und glaubt, er sei überfallen worden." "Der Patient hat enorme Angstgefühle und glaubt, er sei überfallen worden."
+ "Ihm seien alle Wertsachen gestohlen worden." + "Ihm seien alle Wertsachen gestohlen worden."
+ "Patient beruhigt sich erst, als alle Wertsachen im Zimmer gefunden worden sind." + "Patient beruhigt sich erst, als alle Wertsachen im Zimmer gefunden worden sind.",
false
)); ));
treatments.add(new Treatment( treatments.add(new Treatment(
2, 2,
@ -79,7 +80,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
"Gespräch", "Gespräch",
"Patient irrt auf der Suche nach gestohlenen Wertsachen durch die Etage " "Patient irrt auf der Suche nach gestohlenen Wertsachen durch die Etage "
+ "und bezichtigt andere Bewohner des Diebstahls." + "und bezichtigt andere Bewohner des Diebstahls."
+ "Patient wird in seinen Raum zurückbegleitet und erhält Beruhigungsmittel." + "Patient wird in seinen Raum zurückbegleitet und erhält Beruhigungsmittel.",
false
)); ));
treatments.add(new Treatment( treatments.add(new Treatment(
3, 3,
@ -89,7 +91,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
convertStringToLocalTime("07:30"), convertStringToLocalTime("07:30"),
convertStringToLocalTime("08:00"), convertStringToLocalTime("08:00"),
"Waschen", "Waschen",
"Patient mit Waschlappen gewaschen und frisch angezogen. Patient gewendet." "Patient mit Waschlappen gewaschen und frisch angezogen. Patient gewendet.",
false
)); ));
treatments.add(new Treatment( treatments.add(new Treatment(
4, 4,
@ -99,7 +102,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
convertStringToLocalTime("15:10"), convertStringToLocalTime("15:10"),
convertStringToLocalTime("16:00"), convertStringToLocalTime("16:00"),
"Spaziergang", "Spaziergang",
"Spaziergang im Park, Patient döst im Rollstuhl ein") "Spaziergang im Park, Patient döst im Rollstuhl ein",
false)
); );
treatments.add(new Treatment( treatments.add(new Treatment(
8, 8,
@ -109,7 +113,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
convertStringToLocalTime("15:00"), convertStringToLocalTime("15:00"),
convertStringToLocalTime("16:00"), convertStringToLocalTime("16:00"),
"Spaziergang", "Spaziergang",
"Parkspaziergang; Patient ist heute lebhafter und hat klare Momente; erzählt von seiner Tochter") "Parkspaziergang; Patient ist heute lebhafter und hat klare Momente; erzählt von seiner Tochter",
false)
); );
treatments.add(new Treatment( treatments.add(new Treatment(
9, 9,
@ -119,7 +124,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
convertStringToLocalTime("11:00"), convertStringToLocalTime("11:00"),
convertStringToLocalTime("11:30"), convertStringToLocalTime("11:30"),
"Waschen", "Waschen",
"Waschen per Dusche auf einem Stuhl; Patientin gewendet;") "Waschen per Dusche auf einem Stuhl; Patientin gewendet;",
false)
); );
treatments.add(new Treatment( treatments.add(new Treatment(
12, 12,
@ -129,7 +135,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
convertStringToLocalTime("15:00"), convertStringToLocalTime("15:00"),
convertStringToLocalTime("15:30"), convertStringToLocalTime("15:30"),
"Physiotherapie", "Physiotherapie",
"Übungen zur Stabilisation und Mobilisierung der Rückenmuskulatur") "Übungen zur Stabilisation und Mobilisierung der Rückenmuskulatur",
false)
); );
treatments.add(new Treatment( treatments.add(new Treatment(
14, 14,
@ -139,7 +146,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
convertStringToLocalTime("09:30"), convertStringToLocalTime("09:30"),
convertStringToLocalTime("10:15"), convertStringToLocalTime("10:15"),
"KG", "KG",
"Lympfdrainage")); "Lympfdrainage",
false));
treatments.add(new Treatment( treatments.add(new Treatment(
16, 16,
elisabeth, elisabeth,
@ -148,7 +156,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
convertStringToLocalTime("13:30"), convertStringToLocalTime("13:30"),
convertStringToLocalTime("13:45"), convertStringToLocalTime("13:45"),
"Toilettengang", "Toilettengang",
"Hilfe beim Toilettengang; Patientin klagt über Schmerzen beim Stuhlgang. Gabe von Iberogast") "Hilfe beim Toilettengang; Patientin klagt über Schmerzen beim Stuhlgang. Gabe von Iberogast",
false)
); );
treatments.add(new Treatment( treatments.add(new Treatment(
17, 17,
@ -158,7 +167,8 @@ public class TreatmentFixture implements Fixture<Treatment> {
convertStringToLocalTime("16:00"), convertStringToLocalTime("16:00"),
convertStringToLocalTime("17:00"), convertStringToLocalTime("17:00"),
"KG", "KG",
"Massage der Extremitäten zur Verbesserung der Durchblutung") "Massage der Extremitäten zur Verbesserung der Durchblutung",
true)
); );
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao(); TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();

View file

@ -9,6 +9,9 @@ import javafx.scene.control.Tab;
import javafx.scene.control.TabPane; import javafx.scene.control.TabPane;
import javafx.scene.layout.AnchorPane; import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import de.hitec.nhplus.treatment.Treatment;
import de.hitec.nhplus.medication.Medication;
import de.hitec.nhplus.patient.Patient;
import java.io.IOException; import java.io.IOException;
import java.util.Objects; import java.util.Objects;
@ -29,10 +32,18 @@ public class MainWindowController {
@FXML @FXML
private Tab patientTab; private Tab patientTab;
@FXML @FXML
private AnchorPane treatmentPage; private AnchorPane activeTreatmentPage;
@FXML @FXML
private Tab treatmentTab; private Tab treatmentTab;
@FXML @FXML
private TabPane treatmentTabPane;
@FXML
private Tab activeTreatmentTab;
@FXML
private AnchorPane lockedTreatmentPage;
@FXML
private Tab lockedTreatmentTab;
@FXML
private Tab nurseTab; private Tab nurseTab;
@FXML @FXML
private TabPane nurseTabPane; private TabPane nurseTabPane;
@ -58,19 +69,25 @@ public class MainWindowController {
mainTabPane.getSelectionModel().select(patientTab); mainTabPane.getSelectionModel().select(patientTab);
patientTab.setOnSelectionChanged(event -> loadPatientPage()); patientTab.setOnSelectionChanged(event -> loadPatientPage());
treatmentTab.setOnSelectionChanged(event -> loadTreatmentsPage());
nurseTab.setOnSelectionChanged(event -> loadNursePage());
medicationTab.setOnSelectionChanged(event -> loadMedicationPage()); medicationTab.setOnSelectionChanged(event -> loadMedicationPage());
nurseTab.setOnSelectionChanged(event -> loadNursePage());
nurseTabPane.getSelectionModel().select(activeNurseTab); nurseTabPane.getSelectionModel().select(activeNurseTab);
activeNurseTab.setOnSelectionChanged(event -> loadActiveNursePage()); activeNurseTab.setOnSelectionChanged(event -> loadActiveNursePage());
lockedNurseTab.setOnSelectionChanged(event -> loadLockedNursePage()); lockedNurseTab.setOnSelectionChanged(event -> loadLockedNursePage());
treatmentTab.setOnSelectionChanged(event -> loadTreatmentPage());
treatmentTabPane.getSelectionModel().select(activeTreatmentTab);
activeTreatmentTab.setOnSelectionChanged(event -> loadActiveTreatmentPage());
lockedTreatmentTab.setOnSelectionChanged(event -> loadLockedTreatmentPage());
} }
/** /**
* Loads the patient page into its tab. * Loads the {@link Patient} page into its tab.
*/ */
private void loadPatientPage() { private void loadPatientPage() {
try { try {
@ -88,14 +105,46 @@ public class MainWindowController {
} }
/** /**
* Loads the {@link } page into its tab. * Loads the {@link Treatment } tab.
*/ */
private void loadTreatmentsPage() { private void loadTreatmentPage() {
SelectionModel<Tab> selectionModel = treatmentTabPane.getSelectionModel();
Tab selectedTab = selectionModel.getSelectedItem();
if (selectedTab == activeTreatmentTab) {
loadActiveTreatmentPage();
}
if (selectedTab == lockedTreatmentTab) {
loadLockedTreatmentPage();
}
}
/**
* Loads the active {@link Treatment} page into its tab.
*/
private void loadActiveTreatmentPage() {
try { try {
BorderPane treatmentsPane = FXMLLoader.load( BorderPane activeTreatmentPane = FXMLLoader.load(
Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/treatment/AllTreatmentView.fxml")) Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/treatment/AllTreatmentView.fxml"))
); );
treatmentPage.getChildren().setAll(treatmentsPane); activeTreatmentPage.getChildren().setAll(activeTreatmentPane);
AnchorPane.setTopAnchor(activeTreatmentPane, 0d);
AnchorPane.setBottomAnchor(activeTreatmentPane, 0d);
AnchorPane.setLeftAnchor(activeTreatmentPane, 0d);
AnchorPane.setRightAnchor(activeTreatmentPane, 0d);
} catch (IOException exception) {
exception.printStackTrace();
}
}
/**
* Loads the locked {@link Treatment} page into its tab.
*/
private void loadLockedTreatmentPage() {
try {
BorderPane treatmentsPane = FXMLLoader.load(
Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/treatment/LockedTreatmentView.fxml"))
);
lockedTreatmentPage.getChildren().setAll(treatmentsPane);
AnchorPane.setTopAnchor(treatmentsPane, 0d); AnchorPane.setTopAnchor(treatmentsPane, 0d);
AnchorPane.setBottomAnchor(treatmentsPane, 0d); AnchorPane.setBottomAnchor(treatmentsPane, 0d);
AnchorPane.setLeftAnchor(treatmentsPane, 0d); AnchorPane.setLeftAnchor(treatmentsPane, 0d);
@ -106,15 +155,15 @@ public class MainWindowController {
} }
/** /**
* Loads the nurse page into its tab. * Loads the {@link Nurse} page into its tab.
*/ */
private void loadNursePage() { private void loadNursePage() {
SelectionModel<Tab> selectionModel = nurseTabPane.getSelectionModel(); SelectionModel<Tab> selectionModel = nurseTabPane.getSelectionModel();
Tab selectedTab = selectionModel.getSelectedItem(); Tab selectedTab = selectionModel.getSelectedItem();
if(selectedTab == activeNurseTab){ if (selectedTab == activeNurseTab) {
loadActiveNursePage(); loadActiveNursePage();
} }
if(selectedTab == lockedNurseTab){ if (selectedTab == lockedNurseTab) {
loadLockedNursePage(); loadLockedNursePage();
} }
} }
@ -156,7 +205,7 @@ public class MainWindowController {
} }
/** /**
* Loads the medication page into its tab. * Loads the {@link Medication} page into its tab.
*/ */
private void loadMedicationPage() { private void loadMedicationPage() {
try { try {

View file

@ -22,6 +22,7 @@ import java.sql.SQLException;
* *
* @author Dominik Säume * @author Dominik Säume
* @author Ole Kück * @author Ole Kück
* @author Armin Ribic
*/ */
public class AllNurseController { public class AllNurseController {
@FXML @FXML

View file

@ -20,6 +20,7 @@ import javafx.stage.Stage;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@ -27,6 +28,8 @@ import java.util.ArrayList;
* *
* @author Bernd Heidemann * @author Bernd Heidemann
* @author Dominik Säume * @author Dominik Säume
* @author Armin Ribic
* @author Dorian Nemec
*/ */
public class AllTreatmentController { public class AllTreatmentController {
@ -61,7 +64,7 @@ public class AllTreatmentController {
public ComboBox<String> comboBoxNurseSelection; public ComboBox<String> comboBoxNurseSelection;
@FXML @FXML
private Button buttonDelete; private Button buttonLock;
private final ObservableList<Treatment> treatments = FXCollections.observableArrayList(); private final ObservableList<Treatment> treatments = FXCollections.observableArrayList();
private TreatmentDao dao; private TreatmentDao dao;
@ -100,15 +103,16 @@ public class AllTreatmentController {
this.columnDescription.setCellValueFactory(new PropertyValueFactory<>("description")); this.columnDescription.setCellValueFactory(new PropertyValueFactory<>("description"));
this.tableView.setItems(this.treatments); this.tableView.setItems(this.treatments);
this.buttonDelete.setDisable(true); this.buttonLock.setDisable(true);
this.tableView this.tableView
.getSelectionModel() .getSelectionModel()
.selectedItemProperty() .selectedItemProperty()
.addListener((observableValue, oldTreatment, newTreatment) -> .addListener((observableValue, oldTreatment, newTreatment) ->
AllTreatmentController.this.buttonDelete.setDisable(newTreatment == null) AllTreatmentController.this.buttonLock.setDisable(newTreatment == null)
); );
this.createComboBoxData(); this.createComboBoxData();
} }
/** /**
@ -136,7 +140,7 @@ public class AllTreatmentController {
this.patientSelection.add(patient.getSurName()); this.patientSelection.add(patient.getSurName());
} }
nurseList = (ArrayList<Nurse>) nurseDao.readAll(); nurseList = (ArrayList<Nurse>) nurseDao.readAllActive();
for (Nurse nurse : nurseList) { for (Nurse nurse : nurseList) {
this.nurseSelection.add(nurse.getSurName()); this.nurseSelection.add(nurse.getSurName());
} }
@ -258,18 +262,6 @@ public class AllTreatmentController {
} }
} }
@FXML
public void handleDelete() {
int index = this.tableView.getSelectionModel().getSelectedIndex();
Treatment t = this.treatments.remove(index);
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
try {
dao.delete(t.getId());
} catch (SQLException exception) {
exception.printStackTrace();
}
}
@FXML @FXML
public void handleNewTreatment() { public void handleNewTreatment() {
String selectedPatient = this.comboBoxPatientSelection.getSelectionModel().getSelectedItem(); String selectedPatient = this.comboBoxPatientSelection.getSelectionModel().getSelectedItem();
@ -316,4 +308,22 @@ public class AllTreatmentController {
}); });
} }
@FXML
public void handleLock(){
Treatment selectedItem = this.tableView.getSelectionModel().getSelectedItem();
if (selectedItem == null){
return;
}
try {
selectedItem.setLocked(true);
this.dao.update(selectedItem);
}catch (SQLException exception){
exception.printStackTrace();
}
readAllAndShowInTableView();
}
} }

View file

@ -0,0 +1,127 @@
package de.hitec.nhplus.treatment;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.nurse.Nurse;
import de.hitec.nhplus.patient.Patient;
import de.hitec.nhplus.treatment.database.TreatmentDao;
import de.hitec.nhplus.utils.DateConverter;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
* Controller for all locked treatments.
*
* @author Armin Ribic
* @author Dorian Nemec
*/
public class LockedTreatmentController {
@FXML
public Button buttonUnlock;
@FXML
public TableView<Treatment> tableView;
@FXML
public TableColumn<Treatment, Long> columnId;
@FXML
private TableColumn<Treatment, String> columnPatient;
@FXML
private TableColumn<Treatment, String> columnNurse;
@FXML
private TableColumn<Treatment, String> columnDeleteDate;
private final ObservableList<Treatment> treatments = FXCollections.observableArrayList();
private TreatmentDao treatmentDao;
/**
* This method allows initializing a {@link LockedTreatmentController} object
* that is called after the binding of all the fields.
*/
public void initialize() {
this.readAllAndShowInTableView();
this.columnId.setCellValueFactory(new PropertyValueFactory<>("id"));
this.columnPatient.setCellValueFactory(
cellData -> {
Patient patient = cellData.getValue().getPatient();
return new SimpleStringProperty(patient.getSurName() + ", " + patient.getFirstName());
}
);
this.columnNurse.setCellValueFactory(
cellData -> {
Nurse nurse = cellData.getValue().getNurse();
return new SimpleStringProperty(nurse.getSurName() + ", " + nurse.getFirstName());
}
);
this.columnDeleteDate.setCellValueFactory(cellData -> new SimpleStringProperty(
DateConverter.convertLocalDateToString(cellData.getValue().calculateDeleteDate())));
this.tableView.setItems(this.treatments);
handleDelete();
}
/**
* Reads all locked {@link Treatment} data and shows it in the table.
*/
private void readAllAndShowInTableView() {
this.treatments.clear();
this.treatmentDao = DaoFactory.getInstance().createTreatmentDao();
try {
this.treatments.addAll(this.treatmentDao.readAllLocked());
} catch (SQLException exception) {
exception.printStackTrace();
}
}
@FXML
private void unlockTreatment() {
Treatment selectedItem = this.tableView.getSelectionModel().getSelectedItem();
if (selectedItem == null) {
return;
}
try {
selectedItem.setLocked(false);
this.treatmentDao.update(selectedItem);
} catch (SQLException exception) {
exception.printStackTrace();
}
readAllAndShowInTableView();
}
@FXML
public void handleDelete() {
Treatment selecteditem;
LocalDate today = LocalDate.now();
LocalDate deleteDate;
for (Treatment treatment : treatments) {
selecteditem = treatment;
deleteDate = selecteditem.calculateDeleteDate();
if (today.isEqual(deleteDate) || today.isAfter(deleteDate)) {
try {
treatmentDao.delete(selecteditem.getId());
} catch (SQLException exception) {
exception.printStackTrace();
}
}
}
readAllAndShowInTableView();
}
}

View file

@ -1,14 +1,17 @@
package de.hitec.nhplus.treatment; package de.hitec.nhplus.treatment;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.nurse.Nurse; import de.hitec.nhplus.nurse.Nurse;
import de.hitec.nhplus.patient.Patient; import de.hitec.nhplus.patient.Patient;
import de.hitec.nhplus.utils.DateConverter; import de.hitec.nhplus.utils.DateConverter;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.List;
import java.util.StringJoiner; import java.util.StringJoiner;
/** /**
@ -16,6 +19,8 @@ import java.util.StringJoiner;
* *
* @author Bernd Heidemann * @author Bernd Heidemann
* @author Dominik Säume * @author Dominik Säume
* @author Armin Ribic
* @author Dorian Nemec
*/ */
public class Treatment { public class Treatment {
private SimpleIntegerProperty id; private SimpleIntegerProperty id;
@ -26,6 +31,8 @@ public class Treatment {
private final SimpleObjectProperty<LocalTime> end; private final SimpleObjectProperty<LocalTime> end;
private final SimpleStringProperty description; private final SimpleStringProperty description;
private final SimpleStringProperty remarks; private final SimpleStringProperty remarks;
private final SimpleBooleanProperty locked;
private final int sperrfrist = 10;
/** /**
* This constructor allows instantiating a {@link Treatment} object, * This constructor allows instantiating a {@link Treatment} object,
@ -50,6 +57,7 @@ public class Treatment {
this.end = new SimpleObjectProperty<>(end); this.end = new SimpleObjectProperty<>(end);
this.description = new SimpleStringProperty(description); this.description = new SimpleStringProperty(description);
this.remarks = new SimpleStringProperty(remarks); this.remarks = new SimpleStringProperty(remarks);
this.locked = new SimpleBooleanProperty(false);
} }
/** /**
@ -63,7 +71,8 @@ public class Treatment {
LocalTime begin, LocalTime begin,
LocalTime end, LocalTime end,
String description, String description,
String remarks String remarks,
Boolean isLocked
) { ) {
this.id = new SimpleIntegerProperty(id); this.id = new SimpleIntegerProperty(id);
this.patient = new SimpleObjectProperty<>(patient); this.patient = new SimpleObjectProperty<>(patient);
@ -73,6 +82,19 @@ public class Treatment {
this.end = new SimpleObjectProperty<>(end); this.end = new SimpleObjectProperty<>(end);
this.description = new SimpleStringProperty(description); this.description = new SimpleStringProperty(description);
this.remarks = new SimpleStringProperty(remarks); this.remarks = new SimpleStringProperty(remarks);
this.locked = new SimpleBooleanProperty(isLocked);
}
public boolean isLocked() {
return locked.get();
}
public SimpleBooleanProperty lockedProperty() {
return locked;
}
public void setLocked(boolean locked) {
this.locked.set(locked);
} }
public int getId() { public int getId() {
@ -168,4 +190,11 @@ public class Treatment {
.add("Remarks: " + this.getRemarks()) .add("Remarks: " + this.getRemarks())
.toString(); .toString();
} }
/**
* Calculates delete date of treatment.
*/
public LocalDate calculateDeleteDate() {
return DateConverter.convertStringToLocalDate(getDate()).plusYears(sperrfrist);
}
} }

View file

@ -11,6 +11,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -20,6 +21,8 @@ import java.util.List;
* *
* @author Bernd Heidemannn * @author Bernd Heidemannn
* @author Dominik Säume * @author Dominik Säume
* @author Armin Ribic
* @author Dorian Nemec
*/ */
public class TreatmentDao extends DaoImp<Treatment> { public class TreatmentDao extends DaoImp<Treatment> {
@ -31,8 +34,8 @@ public class TreatmentDao extends DaoImp<Treatment> {
protected PreparedStatement getCreateStatement(Treatment treatment) throws SQLException { protected PreparedStatement getCreateStatement(Treatment treatment) throws SQLException {
final String SQL = """ final String SQL = """
INSERT INTO treatment INSERT INTO treatment
(patientId, nurseId, date, begin, end, description, remark) (patientId, nurseId, date, begin, end, description, remark, isLocked)
VALUES (?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
"""; """;
PreparedStatement statement = this.connection.prepareStatement(SQL); PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, treatment.getPatient().getId()); statement.setInt(1, treatment.getPatient().getId());
@ -42,6 +45,7 @@ public class TreatmentDao extends DaoImp<Treatment> {
statement.setString(5, treatment.getEnd()); statement.setString(5, treatment.getEnd());
statement.setString(6, treatment.getDescription()); statement.setString(6, treatment.getDescription());
statement.setString(7, treatment.getRemarks()); statement.setString(7, treatment.getRemarks());
statement.setBoolean(8,treatment.isLocked());
return statement; return statement;
} }
@ -63,13 +67,14 @@ public class TreatmentDao extends DaoImp<Treatment> {
DateConverter.convertStringToLocalTime(result.getString(5)), DateConverter.convertStringToLocalTime(result.getString(5)),
DateConverter.convertStringToLocalTime(result.getString(6)), DateConverter.convertStringToLocalTime(result.getString(6)),
result.getString(7), result.getString(7),
result.getString(8) result.getString(8),
false
); );
} }
@Override @Override
protected PreparedStatement getReadAllStatement() throws SQLException { protected PreparedStatement getReadAllStatement() throws SQLException {
final String SQL = "SELECT * FROM treatment"; final String SQL = "SELECT * FROM treatment where isLocked = false";
return this.connection.prepareStatement(SQL); return this.connection.prepareStatement(SQL);
} }
@ -120,7 +125,8 @@ public class TreatmentDao extends DaoImp<Treatment> {
begin = ?, begin = ?,
end = ?, end = ?,
description = ?, description = ?,
remark = ? remark = ?,
isLocked = ?
WHERE id = ? WHERE id = ?
"""; """;
PreparedStatement statement = this.connection.prepareStatement(SQL); PreparedStatement statement = this.connection.prepareStatement(SQL);
@ -129,7 +135,8 @@ public class TreatmentDao extends DaoImp<Treatment> {
statement.setString(3, treatment.getEnd()); statement.setString(3, treatment.getEnd());
statement.setString(4, treatment.getDescription()); statement.setString(4, treatment.getDescription());
statement.setString(5, treatment.getRemarks()); statement.setString(5, treatment.getRemarks());
statement.setInt(6, treatment.getId()); statement.setBoolean(6,treatment.isLocked());
statement.setInt(7, treatment.getId());
return statement; return statement;
} }
@ -141,4 +148,12 @@ public class TreatmentDao extends DaoImp<Treatment> {
statement.setInt(1, id); statement.setInt(1, id);
return statement; return statement;
} }
/**
* Returns all locked treatments.
*/
public List<Treatment> readAllLocked() throws SQLException {
final String SQL = "SELECT * FROM treatment WHERE isLocked = true";
return getListFromResultSet(this.connection.prepareStatement(SQL).executeQuery());
}
} }

View file

@ -12,8 +12,15 @@
<Tab fx:id="patientTab" text="Patienten"> <Tab fx:id="patientTab" text="Patienten">
<AnchorPane fx:id="patientPage"/> <AnchorPane fx:id="patientPage"/>
</Tab> </Tab>
<Tab fx:id="treatmentTab" text="Behandlungen"> <Tab fx:id="treatmentTab" text="Behandlungen">
<AnchorPane fx:id="treatmentPage"/> <TabPane fx:id="treatmentTabPane" tabClosingPolicy="UNAVAILABLE">
<Tab fx:id="activeTreatmentTab" text="Behandlungen">
<AnchorPane fx:id="activeTreatmentPage"/>
</Tab>
<Tab fx:id="lockedTreatmentTab" text="Gesperrte Behandlungen">
<AnchorPane fx:id="lockedTreatmentPage" />
</Tab>
</TabPane>
</Tab> </Tab>
<Tab fx:id="nurseTab" text="Pfleger"> <Tab fx:id="nurseTab" text="Pfleger">
<TabPane fx:id="nurseTabPane" tabClosingPolicy="UNAVAILABLE"> <TabPane fx:id="nurseTabPane" tabClosingPolicy="UNAVAILABLE">

View file

@ -12,7 +12,11 @@
<Insets top="8" left="8" right="8" bottom="8"/> <Insets top="8" left="8" right="8" bottom="8"/>
</padding> </padding>
<center> <center>
<TableView fx:id="tableView" layoutX="31.0" layoutY="40" onMouseClicked="#handleMouseClick" > <TableView
fx:id="tableView"
layoutX="31.0"
layoutY="40"
onMouseClicked="#handleMouseClick" >
<columns> <columns>
<TableColumn <TableColumn
fx:id="columnId" fx:id="columnId"

View file

@ -88,11 +88,11 @@
</center> </center>
<right> <right>
<Button <Button
fx:id="buttonDelete" fx:id="buttonLock"
mnemonicParsing="false" mnemonicParsing="false"
onAction="#handleDelete" onAction="#handleLock"
prefWidth="200.0" prefWidth="200.0"
text="Löschen" text="Sperren"
GridPane.columnIndex="2" GridPane.columnIndex="2"
/> />
</right> </right>

View file

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<BorderPane prefHeight="400.0"
prefWidth="600.0"
xmlns="http://javafx.com/javafx/17.0.2-ea"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="de.hitec.nhplus.treatment.LockedTreatmentController">
<padding>
<Insets bottom="8" left="8" right="8" top="8" />
</padding>
<center>
<TableView
fx:id="tableView"
layoutX="31.0"
layoutY="40">
<columns>
<TableColumn
fx:id="columnId"
minWidth="40.0"
prefWidth="102.0"
text="ID"
/>
<TableColumn
fx:id="columnPatient"
minWidth="40.0"
prefWidth="102.0"
text="Patient"
/>
<TableColumn
fx:id="columnNurse"
minWidth="40.0"
prefWidth="102.0"
text="Pflegekraft"
/>
<TableColumn
fx:id="columnDeleteDate"
minWidth="40.0"
prefWidth="102.0"
text="Geloescht am"
/>
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY"/>
</columnResizePolicy>
</TableView>
</center>
<bottom>
<BorderPane>
<BorderPane.margin>
<Insets top="8.0"/>
</BorderPane.margin>
<center>
<HBox spacing="8.0">
<padding>
<Insets right="8.0"/>
</padding>
</HBox>
</center>
<right>
<HBox>
<spacing>8.0</spacing>
<Button
fx:id="buttonUnlock"
mnemonicParsing="false"
onAction="#unlockTreatment"
prefWidth="90.0"
text="Entsperren"
/>
</HBox>
</right>
</BorderPane>
</bottom>
</BorderPane>

View file

@ -8,6 +8,7 @@ CREATE TABLE treatment
end TEXT NOT NULL, end TEXT NOT NULL,
description TEXT NOT NULL, description TEXT NOT NULL,
remark TEXT NOT NULL, remark TEXT NOT NULL,
isLocked BOOLEAN NOT NULL DEFAULT false,
FOREIGN KEY (patientId) REFERENCES patient (id) ON DELETE CASCADE, FOREIGN KEY (patientId) REFERENCES patient (id) ON DELETE CASCADE,
FOREIGN KEY (nurseId) REFERENCES nurse (id) ON DELETE SET NULL FOREIGN KEY (nurseId) REFERENCES nurse (id) ON DELETE SET NULL
) )