diff --git a/src/main/java/de/uniluebeck/mi/projmi6/Main.java b/src/main/java/de/uniluebeck/mi/projmi6/Main.java index 18cd949..6d934bf 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/Main.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/Main.java @@ -6,6 +6,7 @@ import de.uniluebeck.mi.projmi6.model.Kasse; import de.uniluebeck.mi.projmi6.model.Mitarbeiter; import de.uniluebeck.mi.projmi6.model.OpsCode; import javafx.application.Application; +import javafx.beans.property.ReadOnlyStringProperty; import javafx.collections.FXCollections; import javafx.concurrent.Task; import javafx.fxml.FXMLLoader; @@ -13,6 +14,7 @@ import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.control.ProgressIndicator; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.Background; @@ -36,27 +38,37 @@ public class Main extends Application { @Override protected Parent call() throws Exception { - FXMLLoader fxmlLoader = new FXMLLoader(); - fxmlLoader.setLocation(getClass().getClassLoader().getResource("main.fxml")); - - MainController mainController = new MainController(); - fxmlLoader.setControllerFactory(mainController.getControllerFactory()); + updateMessage("Lade OPS-Codes..."); + mainController.getStammdaten().setOpsCodes(FXCollections.observableArrayList( + DBHandler.getAllOpsCodes() + )); - mainController.setOpsCodes(FXCollections.observableArrayList( - new OpsCode("1234", "Hallo OPS", 20), - new OpsCode("876-3", "Darmspiegelung", 20) + updateMessage("Lade ICD-10-Codes..."); + mainController.getStammdaten().setIcd10Codes(FXCollections.observableArrayList( + DBHandler.getAllIcd10Codes() )); - mainController.setKassen(FXCollections.observableArrayList( - new Kasse(2, "TK", "Strasse 2", false) + updateMessage("Lade Krankenkassen..."); + mainController.getStammdaten().setKassen(FXCollections.observableArrayList( + DBHandler.getAllKassen() )); - mainController.setMitarbeiter(FXCollections.observableArrayList( - //TODO + updateMessage("Lade Mitarbeiter..."); + mainController.getStammdaten().setMitarbeiter(FXCollections.observableArrayList( + DBHandler.getAllMitarbeiter() )); - mainController.setStationen(FXCollections.observableArrayList(DBHandler.getAllStationen())); + + updateMessage("Lade Stationen..."); + mainController.getStammdaten().setStationen(FXCollections.observableArrayList( + DBHandler.getAllStationen()) + ); + + updateMessage("Lade GUI..."); + FXMLLoader fxmlLoader = new FXMLLoader(); + fxmlLoader.setLocation(getClass().getClassLoader().getResource("main.fxml")); + fxmlLoader.setControllerFactory(mainController.getControllerFactory()); Parent root = fxmlLoader.load(); @@ -76,7 +88,7 @@ public class Main extends Application { primaryStage.getIcons().add(icon); - Stage loadingMessage = createLoadWindow(); + Stage loadingMessage = createLoadWindow(loadMainWindowTask.messageProperty()); loadMainWindowTask.setOnFailed(event -> { loadMainWindowTask.getException().printStackTrace(); @@ -91,6 +103,7 @@ public class Main extends Application { primaryStage.setScene(new Scene(root, 1000, 800)); primaryStage.show(); }); + Thread thread = new Thread(loadMainWindowTask); thread.setDaemon(true); thread.start(); @@ -104,17 +117,20 @@ public class Main extends Application { * * @return the splash screen */ - public Stage createLoadWindow(){ + public Stage createLoadWindow(ReadOnlyStringProperty progressMessage){ Text kis = new Text("KIS"); kis.setFont(Font.font(50)); Text gruppe6 = new Text("Gruppe 06"); gruppe6.setFont(Font.font(20)); - VBox root = new VBox(gruppe6, new ImageView(icon), kis); + Text progress = new Text(); + progress.textProperty().bind(progressMessage); + + VBox root = new VBox(gruppe6, new ImageView(icon), kis, progress); root.setSpacing(20); root.setAlignment(Pos.CENTER); - Scene scene = new Scene(root, 400, 400); + Scene scene = new Scene(root, 400, 500); Stage stage = new Stage(StageStyle.UNDECORATED); stage.getIcons().add(icon); diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java index d3b1595..ecd269f 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/DiagnoseController.java @@ -5,14 +5,13 @@ package de.uniluebeck.mi.projmi6.controller; */ import de.uniluebeck.mi.projmi6.model.*; +import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; -import javafx.scene.control.Button; +import javafx.scene.control.*; import javafx.event.ActionEvent; -import javafx.scene.control.ComboBox; -import javafx.scene.control.Label; -import javafx.scene.control.TextArea; public class DiagnoseController { @@ -22,11 +21,38 @@ public class DiagnoseController { this.mainController = mainController; } + + public ObservableList getDiagnosen() { + return diagnosen.get(); + } + + public SimpleObjectProperty> diagnosenProperty() { + return diagnosen; + } + + public void setDiagnosen(ObservableList diagnosen) { + this.diagnosen.set(diagnosen); + } + + private SimpleObjectProperty> diagnosen = new SimpleObjectProperty<>(); + + + + @FXML + private ListView diagnoseList; + @FXML public void initialize(){ - diagDiagnose.itemsProperty().bind(mainController.icd10CodesProperty()); + diagDiagnose.itemsProperty().bind(mainController.getStammdaten().icd10CodesProperty()); diagDiagnoseArt.setItems(FXCollections.observableArrayList(DiagArt.values())); - diagDiagnoseArzt.itemsProperty().bind(mainController.mitarbeiterProperty()); + diagDiagnoseArzt.itemsProperty().bind(mainController.getStammdaten().mitarbeiterProperty()); + diagnoseList.itemsProperty().bind(diagnosen); + + diagnoseList.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + diagnoseList.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + this.setDiagnose(newValue); + }); + } @@ -90,27 +116,26 @@ public class DiagnoseController { if(diagnose==null){ clearFields(); }else { - copyDiagnoseDataIntoFields(); + copyDiagnoseDataIntoFields(diagnose); } } - private void copyDiagnoseDataIntoFields(){ + private void copyDiagnoseDataIntoFields(Diagnose diagnose){ diagDiagnoseArzt.setValue(diagnose.getArzt()); - //diagFreitext.setText(diagnose.getFreitext()); + diagFreitext.setText(diagnose.getFreiText()); diagDiagnoseArt.setValue(diagnose.getDiagArt()); - //diagDiagnose.setValue(diagnose.getIcd10Code()); + diagDiagnose.setValue(diagnose.getIcd10code()); diagCreator.setText(Integer.toString(diagnose.getErsteller())); diagCreateTime.setText(diagnose.getErstellDatumZeit().toString()); diagChanger.setText(Integer.toString(diagnose.getBearbeiter())); diagChangeTime.setText(diagnose.getBearbeitetDatumZeit().toString()); - } private void copyFieldDataIntoDiagnose(Diagnose diagnose){ - + diagnose.setIcd10code(diagDiagnose.getValue()); diagnose.setArzt(diagDiagnoseArzt.getValue()); diagnose.setFreiText(diagFreitext.getText()); diagnose.setDiagArt(diagDiagnoseArt.getValue()); diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/FallController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/FallController.java index 23137e3..1dbf9ac 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/FallController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/FallController.java @@ -3,10 +3,9 @@ package de.uniluebeck.mi.projmi6.controller; /** * Created by 631806 on 12.11.15. */ -import de.uniluebeck.mi.projmi6.model.Diagnose; -import de.uniluebeck.mi.projmi6.model.Fall; -import de.uniluebeck.mi.projmi6.model.FallArt; -import de.uniluebeck.mi.projmi6.model.Kasse; + +import de.uniluebeck.mi.projmi6.db.DBHandler; +import de.uniluebeck.mi.projmi6.model.*; import de.uniluebeck.mi.projmi6.view.DateTimePicker; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; @@ -19,6 +18,8 @@ import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; +import java.sql.SQLException; + public class FallController { private MainController mainController; @@ -76,7 +77,7 @@ public class FallController { private SimpleObjectProperty fallProperty = new SimpleObjectProperty<>(); - public Fall getFallProperty() { + public Fall getFall() { return fallProperty.get(); } @@ -84,8 +85,8 @@ public class FallController { return fallProperty; } - public void setFallProperty(Fall fallProperty) { - this.fallProperty.set(fallProperty); + public void setFall(Fall fall) { + this.fallProperty.set(fall); } public enum State { @@ -99,7 +100,7 @@ public class FallController { public void initialize(){ fallEinweisenderArzt.disableProperty().bind(fallSelbsteinweisung.selectedProperty()); fallFallart.setItems(FXCollections.observableArrayList(FallArt.values())); - fallKasse.setItems(mainController.getKassen()); + fallKasse.setItems(mainController.getStammdaten().getKassen()); btnFallEnableEdit.visibleProperty().bind( state.isEqualTo(State.VIEW).and(fallProperty.isNotNull()) @@ -108,14 +109,13 @@ public class FallController { state.isNotEqualTo(State.VIEW) ); btnFallSave.visibleProperty().bind( - state.isEqualTo(State.VIEW) + state.isNotEqualTo(State.VIEW) ); btnFallCancel.visibleProperty().bind( state.isEqualTo(State.VIEW).and(fallProperty.isNotNull()) ); - fallFields.disableProperty().bind(state.isEqualTo(State.VIEW)); fallProperty.addListener(((observable, oldValue, newValue) -> { @@ -145,27 +145,68 @@ public class FallController { @FXML void clickedFallAbort(ActionEvent event) { - + this.state.set(State.VIEW); + copyFallDataIntoField(fallProperty.get()); + mainController.fallCreationComplete(); } @FXML void clickedFallSave(ActionEvent event) { + if (this.state.get() == State.CREATE) { + Fall fall = new Fall(); + copyFieldDataIntoFall(fall); + try { + DBHandler.setFall(fall, mainController.getCurrentMitarbeiter().getMitarbID()); + //TODO Reload Faelle for Patient im MainController + } catch (SQLException e) { + e.printStackTrace(); + } + } else { + try { + DBHandler.setFall(fallProperty.get(), mainController.getCurrentMitarbeiter().getMitarbID(), true); + } catch (SQLException e) { + e.printStackTrace(); + } + } + mainController.fallCreationComplete(); + this.state.set(State.VIEW); + //TODO Update/create in db } public void createNewFall() { clearFields(); this.state.set(State.CREATE); + + Patient patient = mainController.getPatientTablesController().getSelectedPatient(); + + // Kasse by Default auf die im Patienten hinterlegten Kasse setzen. + for (Kasse kasse : fallKasse.getItems()) { + if (kasse.getKassenID() == patient.getKassenID()) { + fallKasse.getSelectionModel().select(kasse); + break; + } + } + fallVersichertennummer.setText(patient.getVersichertennummer()); + + // TODO: Jojo: Kannst Du das wieder heile machen? :D + // fallProperty.unbind(); + // fallProperty.set(new Fall()); } private void clearFields(){ - dtTmAufnahme.setToCurrentDateTime(); - dtTmEntlassung.setToCurrentDateTime(); + if(state.get() == State.CREATE) { + dtTmAufnahme.setToCurrentDateTime(); + dtTmEntlassung.setToCurrentDateTime(); + }else{ + dtTmAufnahme.setDateTime(null); + dtTmEntlassung.setDateTime(null); + } - fallPatID.setText(""); //TODO + fallPatID.setText(""); //TODO fallCreateTime.setText(""); fallCreator.setText(""); @@ -186,11 +227,7 @@ public class FallController { private void copyFieldDataIntoFall(Fall fall){ - if(fall==null){ - clearFields(); - return; - } - + fall.setPatient(mainController.getPatientTablesController().getSelectedPatient()); fall.setAufnahmeDatum(dtTmAufnahme.getDateTime()); fall.setEntlassungsDatum(dtTmEntlassung.getDateTime()); if(fallSelbsteinweisung.isSelected()) { @@ -209,14 +246,20 @@ public class FallController { private void copyFallDataIntoField(Fall fall){ + if(fall==null){ + System.out.println("copyFallDataIntoFiled - Fall ist null"); + clearFields(); + return; + } + dtTmAufnahme.setDateTime(fall.getAufnahmeDatum()); dtTmEntlassung.setDateTime(fall.getEntlassungsDatum()); - //fallPatID.setText(fall.getPatient().getVorname()+" "+fall.getPatient().getNachname()); //TODO + fallPatID.setText(fallProperty.get().getPatient()+""); //(fall.getPatient().getVorname()+" "+fall.getPatient().getNachname()); //TODO - fallCreateTime.setText(fall.getErstellDatumZeit().toString()); + fallCreateTime.setText(fall.getErstellDatumZeit() !=null ? fall.getErstellDatumZeit().toString():""); fallCreator.setText(Integer.toString(fall.getErsteller())); - fallEditTime.setText(fall.getBearbeitetDatumZeit().toString()); + fallEditTime.setText(fall.getBearbeitetDatumZeit()!=null? fall.getBearbeitetDatumZeit().toString():""); fallEditor.setText(Integer.toString(fall.getBearbeiter())); // fallEinweisenderArzt.setText(fall.getEinweisenderArzt()); diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java index 4dd8b43..1f9332a 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/MainController.java @@ -2,16 +2,22 @@ package de.uniluebeck.mi.projmi6.controller; import de.uniluebeck.mi.projmi6.db.DBHandler; import de.uniluebeck.mi.projmi6.model.*; +import javafx.beans.binding.Bindings; +import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.value.ChangeListener; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.concurrent.Task; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.util.Callback; +import javax.swing.*; import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.concurrent.ThreadFactory; public class MainController { @@ -22,47 +28,7 @@ public class MainController { private StationsHistorieController stationsHistorieController; private UntersuchungenController untersuchungenController; - private SimpleObjectProperty> opsCodes = new SimpleObjectProperty<>(); - private SimpleObjectProperty> icd10Codes = new SimpleObjectProperty<>(); - private SimpleObjectProperty> mitarbeiter = new SimpleObjectProperty<>(); - private SimpleObjectProperty> kassen = new SimpleObjectProperty<>(); - private SimpleObjectProperty> stationen = new SimpleObjectProperty<>(); - public ObservableList getStationen() { - return stationen.get(); - } - - public SimpleObjectProperty> stationenProperty() { - return stationen; - } - - public void setStationen(ObservableList stationen) { - this.stationen.set(stationen); - } - - public ObservableList getMitarbeiter() { - return mitarbeiter.get(); - } - - public SimpleObjectProperty> mitarbeiterProperty() { - return mitarbeiter; - } - - public void setMitarbeiter(ObservableList mitarbeiter) { - this.mitarbeiter.set(mitarbeiter); - } - - public ObservableList getKassen() { - return kassen.get(); - } - - public SimpleObjectProperty> kassenProperty() { - return kassen; - } - - public void setKassen(ObservableList kassen) { - this.kassen.set(kassen); - } @@ -73,6 +39,7 @@ public class MainController { @FXML private ProgressIndicator progressIndicator; + @FXML private Button btnFallCreate; @@ -80,7 +47,7 @@ public class MainController { private SplitPane fallOverview; @FXML - private ListView lvFall; + private ListView lvFall; @FXML private TabPane tabPaneFall; @@ -89,6 +56,8 @@ public class MainController { private Tab tabFallOverview, tabFallUntersuchungen, tabFallDiagnose, tabFallStationsHistorie ; + private Stammdaten stammdaten = new Stammdaten(); + private Callback, Object> controllerFactory = clazz -> { if(clazz.equals(MainController.class)) { @@ -122,7 +91,9 @@ public class MainController { } - + public Stammdaten getStammdaten(){ + return stammdaten; + } public Callback, Object> getControllerFactory(){ return controllerFactory; @@ -153,77 +124,214 @@ public class MainController { public void increaseParallelTaskCount(){ parallelTaskCount++; - if(parallelTaskCount>0){ + if(parallelTaskCount>0 && progressIndicator!=null){ progressIndicator.setVisible(true); } } public void decreaseParallelTaskCount(){ - parallelTaskCount++; - if(parallelTaskCount<=0){ + parallelTaskCount--; + if(parallelTaskCount<=0 && progressIndicator!=null){ parallelTaskCount = 0; progressIndicator.setVisible(false); } } - public ObservableList getOpsCodes() { - return opsCodes.get(); - } + @FXML + private Label lvFallPlaceholder; - public SimpleObjectProperty> opsCodesProperty() { - return opsCodes; - } - public void setOpsCodes(ObservableList opsCodes){ - this.opsCodesProperty().set(opsCodes); - } - public ObservableList getIcd10Codes() { - return icd10Codes.get(); - } + private Task> loadFallTask = null; - public SimpleObjectProperty> icd10CodesProperty() { - return icd10Codes; - } - public void setIcd10Codes(ObservableList icd10Codes) { - this.icd10Codes.set(icd10Codes); - } + private ChangeListener onPatientChanged = (observableValue,oldValue,newValue)-> { + lvFall.setItems(null); //clear list + + if(newValue==null){ // If no patient is selected + lvFallPlaceholder.setText("Kein Patient ausgew\u00e4hlt!"); + return; + } + + if(loadFallTask!=null && loadFallTask.isRunning()){ + loadFallTask.cancel(); + } + + + loadFallTask = new Task>() { + @Override + protected List call() throws Exception { + return DBHandler.getFaelleByPatID(newValue.getPatID()); + + } + + @Override + protected void succeeded() { + super.succeeded(); + if(isCancelled()){ + System.out.println("Task wurde gecancelt"); + return; + } + lvFallPlaceholder.setText("Keine F\u00e4lle vorhanden!"); + lvFall.setItems(FXCollections.observableArrayList(getValue())); + decreaseParallelTaskCount(); + } + + @Override + protected void cancelled() { + super.cancelled(); + decreaseParallelTaskCount(); + } + + @Override + protected void failed() { + super.failed(); + lvFallPlaceholder.setText("Laden fehlgeschlagen!"); + lvFall.setItems(null); + decreaseParallelTaskCount(); + } + }; + + lvFallPlaceholder.setText("Liste wird geladen..."); + increaseParallelTaskCount(); + Thread thread = new Thread(loadFallTask); + thread.setDaemon(true); + thread.start(); + }; @FXML private void initialize(){ - cmbUserChoose.itemsProperty().bind(this.mitarbeiterProperty()); + //Init user data. + cmbUserChoose.itemsProperty().bind(this.getStammdaten().mitarbeiterProperty()); + cmbUserChoose.getSelectionModel().select(0); // TODO: Bessere Loesung finden. + + //Disable the right side if no case is selected. fallOverview.disableProperty().bind(patientTablesController.selectedPatientProperty().isNull()); + //Load the cases async if patient changes + patientTablesController.selectedPatientProperty().addListener(onPatientChanged); - patientTablesController.selectedPatientProperty().addListener((observableValue,oldValue,newValue)-> { - System.out.println("Neuer Patient gewaehlt"); - try { - List faelle = DBHandler.getFaelleByPatID(newValue.getPatID()); - System.out.println(faelle); - System.out.println("Liste der Faelle hat "+ faelle.size()+ " Eintrage "); - lvFall.setItems(FXCollections.observableArrayList(faelle)); - }catch (Exception e){ - e.printStackTrace(); - } - }); + lvFall.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + + fallController.fallPropertyProperty().bind(lvFall.getSelectionModel().selectedItemProperty()); + + + lvFall.getSelectionModel().selectedItemProperty().addListener(onCaseChanged); } + + private Task loadCaseData = null; + + + private ChangeListener onCaseChanged = (observable, oldValue, newValue) -> { + + if(loadCaseData!=null && loadCaseData.isRunning()){ + loadCaseData.cancel(); + } + + tabPaneFall.setDisable(false); + tabFallDiagnose.setDisable(true); + tabFallStationsHistorie.setDisable(true); + tabFallUntersuchungen.setDisable(true); + + if(newValue==null) { + tabPaneFall.setDisable(true); + System.out.println("TODO: Clear tables cuz fall = null!"); + //fallController.c + return; + } + + if(newValue==null){ // If no patient is selected + //lvFallPlaceholder.setText("Kein Patient ausgew\u00e4hlt!"); + return; + } + + + + + loadCaseData = new Task() { + List untersuchungList; + List diagnoseList; + List stationsHistorieList; + @Override + protected Void call() throws Exception { + untersuchungList = DBHandler.getUntersuchungByFall(newValue); + diagnoseList = DBHandler.getDiagnosenByFall(newValue); + //stationsHistorieList = + return null; + } + + @Override + protected void succeeded() { + super.succeeded(); + if(isCancelled()){ + System.out.println("Task wurde gecancelt"); + return; + } + untersuchungenController.setUntersuchungen(FXCollections.observableArrayList(untersuchungList)); + diagnoseController.setDiagnosen(FXCollections.observableArrayList(diagnoseList)); + + tabPaneFall.setDisable(false); + tabFallDiagnose.setDisable(false); + tabFallStationsHistorie.setDisable(false); + tabFallUntersuchungen.setDisable(false); + + decreaseParallelTaskCount(); + } + + @Override + protected void cancelled() { + super.cancelled(); + decreaseParallelTaskCount(); + } + + @Override + protected void failed() { + super.failed(); + //lvFallPlaceholder.setText("Laden fehlgeschlagen!"); + getException().printStackTrace(); + decreaseParallelTaskCount(); + } + }; + Thread thread = new Thread(loadCaseData); + thread.setDaemon(true); + thread.start(); + increaseParallelTaskCount(); + }; + + @FXML private void clickedCreateFall(){ tabFallDiagnose.setDisable(true); tabFallUntersuchungen.setDisable(true); tabFallStationsHistorie.setDisable(true); tabPaneFall.getSelectionModel().select(tabFallOverview); + patientTablesController.getPatientOverviewTabPane().setDisable(true); + fallController.createNewFall(); } + public void fallCreationComplete(){ + tabFallDiagnose.setDisable(false); + tabFallUntersuchungen.setDisable(false); + tabFallStationsHistorie.setDisable(false); + patientTablesController.getPatientOverviewTabPane().setDisable(false); + } + + public Mitarbeiter getCurrentMitarbeiter(){ + return cmbUserChoose.getValue(); + } + + public ReadOnlyObjectProperty currentMitarbeiterProperty(){ + return cmbUserChoose.valueProperty(); + } + } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientEditorController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientEditorController.java index 40e5a8b..4d85e46 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientEditorController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientEditorController.java @@ -3,14 +3,19 @@ package de.uniluebeck.mi.projmi6.controller; /** * Created by 631806 on 12.11.15. */ + +import de.uniluebeck.mi.projmi6.db.DBHandler; import de.uniluebeck.mi.projmi6.model.Kasse; import de.uniluebeck.mi.projmi6.model.Patient; import javafx.collections.FXCollections; +import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.*; -import javafx.event.ActionEvent; import javafx.stage.Stage; +import java.sql.SQLException; +import java.time.LocalDate; + public class PatientEditorController { /** @@ -40,6 +45,9 @@ public class PatientEditorController { private TextField patNachname; @FXML + private TextField patTelefonnummer; + + @FXML private TextField patStrasse; @FXML private TextField patHausnummer; @@ -70,36 +78,33 @@ public class PatientEditorController { private Button btnPatSave; + public PatientEditorController(MainController mainController) { + this.mainController = mainController; + } + @FXML - public void initialize(){ + public void initialize() { patGeschlecht.setItems(FXCollections.observableArrayList(Patient.Geschlecht.values())); patFamilienstand.setItems(FXCollections.observableArrayList(Patient.Familienstand.values())); - patVersicherung.setItems(mainController.getKassen()); + patVersicherung.setItems(mainController.getStammdaten().getKassen()); } - public PatientEditorController(MainController mainController){ - this.mainController = mainController; - } - - - - - - public void setPatient(Patient patient){ + public void setPatient(Patient patient) { this.patient = patient; - if(patient==null){ + if (patient == null) { clearFields(); - }else { + } else { copyPatientDataIntoFields(); } } - private void copyPatientDataIntoFields(){ + private void copyPatientDataIntoFields() { patId.setText(Integer.toString(patient.getPatID())); patGeburtsname.setText(patient.getGeburtsname()); patNachname.setText(patient.getNachname()); patVorname.setText(patient.getVorname()); + patTelefonnummer.setText(patient.getTelefon()); patStrasse.setText(patient.getStrasse()); patHausnummer.setText(patient.getHausnummer()); patPlz.setText(patient.getPlz()); @@ -108,7 +113,12 @@ public class PatientEditorController { patFamilienstand.setValue(patient.getFamilienstand()); patGeschlecht.setValue(patient.getGeschlecht()); patVersicherungsnummer.setText(patient.getVersichertennummer()); -// patVersicherung.setValue(patient.getVersicherung()); TODO + for (Kasse kasse : patVersicherung.getItems()) { + if (kasse.getKassenID() == patient.getKassenID()) { + patVersicherung.getSelectionModel().select(kasse); + break; + } + } patCave.setText(patient.getCave()); patCreator.setText(Integer.toString(patient.getErsteller())); @@ -117,7 +127,7 @@ public class PatientEditorController { patChangeTime.setText(patient.getBearbeitetDatumZeit().toString()); } - private void showMessage(String title, String message){ + private void showMessage(String title, String message) { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Ung\u00fcltige Daten!"); alert.setHeaderText(title); @@ -126,11 +136,12 @@ public class PatientEditorController { alert.showAndWait(); } - private void copyFieldDataIntoPatient(Patient patient){ + private void copyFieldDataIntoPatient(Patient patient) { patient.setGeburtsname(patGeburtsname.getText()); patient.setNachname(patNachname.getText()); patient.setVorname(patVorname.getText()); + patient.setTelefon(patTelefonnummer.getText()); patient.setStrasse(patStrasse.getText()); patient.setHausnummer(patHausnummer.getText()); patient.setPlz(patPlz.getText()); @@ -139,13 +150,14 @@ public class PatientEditorController { patient.setFamilienstand(patFamilienstand.getValue()); patient.setGeschlecht(patient.getGeschlecht()); patient.setVersichertennummer(patVersicherungsnummer.getText()); - //patient.setVersicherung TODO + if (patVersicherung.getSelectionModel().getSelectedItem() != null) + patient.setKassenID(patVersicherung.getSelectionModel().getSelectedItem().getKassenID()); patient.setCave(patCave.getText()); } - private boolean validateData(){ - if(!patPlz.getText().matches("[0-9]{5}")){ + private boolean validateData() { + if (!patPlz.getText().matches("[0-9]{5}") && !(patPlz.getText().length() == 0)) { showMessage("Die eingegebene PLZ ist ung\u00fcltig!", "Postleitzahlen m\u00fcssen aus exakt 5 Ziffern bestehen!"); return false; @@ -155,8 +167,8 @@ public class PatientEditorController { } - - private void clearFields(){ + // TODO: Remove default values. + private void clearFields() { patId.setText(""); patGeburtsname.setText(""); patNachname.setText(""); @@ -165,9 +177,10 @@ public class PatientEditorController { patHausnummer.setText(""); patPlz.setText(""); patOrt.setText(""); - patGeburtsdatum.setValue(null); - patFamilienstand.setValue(null); - patGeschlecht.setValue(null); + patTelefonnummer.setText(""); + patGeburtsdatum.setValue(LocalDate.of(1900, 1, 1)); + patFamilienstand.setValue(Patient.Familienstand.LEDIG); + patGeschlecht.setValue(Patient.Geschlecht.FEMALE); patVersicherungsnummer.setText(""); patVersicherung.setValue(null); patCave.setText(""); @@ -180,24 +193,34 @@ public class PatientEditorController { @FXML void clickedSave(ActionEvent event) { - if(!validateData()){ + if (!validateData()) { return; } - if(patient==null){ + if (patient == null) { patient = new Patient(); copyFieldDataIntoPatient(patient); - //Create new db entry TODO - }else{ + try { + DBHandler.setPatient(patient, mainController.getCurrentMitarbeiter().getMitarbID(), false); + mainController.getPatientTablesController().updatePatientsFromDb(); + ((Stage) patNachname.getScene().getWindow()).close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } else { copyFieldDataIntoPatient(patient); - //Update db entry... TODO + try { + DBHandler.setPatient(patient, mainController.getCurrentMitarbeiter().getMitarbID(), true); + ((Stage) patNachname.getScene().getWindow()).close(); + } catch (SQLException e) { + e.printStackTrace(); + } } - ((Stage)patNachname.getScene().getWindow()).close(); } @FXML void clickedAbort(ActionEvent event) { - ((Stage)patVorname.getScene().getWindow()).close(); //Close Window + ((Stage) patVorname.getScene().getWindow()).close(); //Close Window } } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java index 0cfbd58..d842fee 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/PatientTablesController.java @@ -3,6 +3,8 @@ package de.uniluebeck.mi.projmi6.controller; /** * Created by Johannes on 12.11.15. */ +import ca.uhn.hl7v2.model.v251.segment.LOC; +import com.sun.org.apache.bcel.internal.generic.LoadClass; import de.uniluebeck.mi.projmi6.db.DBHandler; import de.uniluebeck.mi.projmi6.model.Patient; import de.uniluebeck.mi.projmi6.model.Station; @@ -14,6 +16,7 @@ import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.concurrent.Task; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; @@ -28,6 +31,8 @@ import java.io.IOException; import java.rmi.server.ExportException; import java.sql.SQLException; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; /** * Controller class. @@ -91,25 +96,32 @@ public class PatientTablesController{ private TableView tblStationOverview; @FXML - private TableColumn colStatPatId; + private TableColumn colStatPatId; @FXML private TableColumn colStatFullName; @FXML - private TableColumn colStatGebDatum; + private TableColumn colStatGebDatum; @FXML - private TableColumn colStatAlter; + private TableColumn colStatAlter; @FXML - private TableColumn colStatAufnahmedatum; + private TableColumn colStatAufnahmedatum; @FXML - private TableColumn colStatEntlassungsdatum; + private TableColumn colStatEntlassungsdatum; @FXML - private Tab stationOverviewTab, patientOverviewTab; + private Tab stationOverviewTab; + + public TabPane getPatientOverviewTabPane() { + return patientOverviewTabPane; + } + + @FXML + private Tab patientOverviewTab; @FXML private TabPane patientOverviewTabPane; @@ -120,6 +132,9 @@ public class PatientTablesController{ } + + + @FXML public void initialize() { btnPatEdit.disableProperty().bind(tblPatientOverview.getSelectionModel().selectedItemProperty().isNull()); @@ -136,14 +151,7 @@ public class PatientTablesController{ lblTablePatientEmpty.setText("Liste ist leer."); lblTableStationEmpty.setText("Daten werden geladen..."); - cmbStationenFilter.itemsProperty().bind(mainController.stationenProperty()); - - ObservableList patientList = null; - try { - patientList = FXCollections.observableArrayList(DBHandler.getAllPatients()); - } catch (SQLException e) { - e.printStackTrace(); - } + cmbStationenFilter.itemsProperty().bind(mainController.getStammdaten().stationenProperty()); patientObjectBinding = Bindings.createObjectBinding(() ->{ @@ -154,10 +162,10 @@ public class PatientTablesController{ tblStationOverview.getSelectionModel().selectedItemProperty(), patientOverviewTabPane.getSelectionModel().selectedItemProperty()); - tblPatientOverview.setItems(patientList); - initColumnsPatient(); initColumnsStation(); + + updatePatientsFromDb(); } private void initColumnsPatient(){ @@ -177,12 +185,24 @@ public class PatientTablesController{ private void initColumnsStation(){ - colStatPatId.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patIdProperty().asString()); + colStatPatId.setCellValueFactory(new PropertyValueFactory("patId")); colStatFullName.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patNameProperty()); - colStatGebDatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patBirthdateProperty().asString()); - colStatAlter.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patAgeProperty().asString()); - colStatAufnahmedatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().stationAufnahmeProperty().asString()); - colStatEntlassungsdatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().stationEntlassungProperty().asString()); + colStatGebDatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().patBirthdateProperty()); + colStatAlter.setCellValueFactory(new PropertyValueFactory("patAge")); + colStatAufnahmedatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().stationAufnahmeProperty()); + colStatEntlassungsdatum.setCellValueFactory(cellDataFeatures -> cellDataFeatures.getValue().stationEntlassungProperty()); + + + StationsUebersichtsItem stationsUebersichtsItem = new StationsUebersichtsItem(); + stationsUebersichtsItem.setPatId(12212); + stationsUebersichtsItem.setFallId(1223); + stationsUebersichtsItem.setPatAge(80); + stationsUebersichtsItem.setPatBirthdate(LocalDate.of(1935, 9, 22)); + stationsUebersichtsItem.setPatName("Wurst, Hans"); + stationsUebersichtsItem.setStationAufnahme(LocalDate.of(1980, 8, 17)); + stationsUebersichtsItem.setStationEntlassung(LocalDate.of(1981, 2, 1)); + + tblStationOverview.setItems(FXCollections.observableArrayList(stationsUebersichtsItem)); } @FXML @@ -224,6 +244,66 @@ public class PatientTablesController{ } + public void updatePatientsFromDb(){ + if(this.loadPatientTask != null && this.loadPatientTask.isRunning()) { + System.out.println("Patienten werden bereits geladen."); + return; + } + + btnPatRefresh.setDisable(true); + + tblPatientOverview.setItems(null); + + mainController.increaseParallelTaskCount(); + + lblTablePatientEmpty.setText("Liste wird geladen..."); + + Task>loadPatientsTask = new Task>(){ + + @Override + protected List call() throws Exception { + return FXCollections.observableArrayList(DBHandler.getAllPatients()); + } + + @Override + protected void succeeded() { + super.succeeded(); + btnPatRefresh.setDisable(false); + lblTablePatientEmpty.setText("Liste ist leer."); + tblPatientOverview.setItems(FXCollections.observableArrayList(this.getValue())); + mainController.decreaseParallelTaskCount(); + } + + @Override + protected void failed() { + super.failed(); + btnPatRefresh.setDisable(false); + lblTablePatientEmpty.setText("Laden fehlgeschlagen!"); + mainController.decreaseParallelTaskCount(); + tblPatientOverview.setItems(null); + if(getException()!=null){ + getException().printStackTrace(); + } + } + }; + this.loadPatientTask = loadPatientsTask; + + Thread thread = new Thread(loadPatientsTask); + thread.setDaemon(true); + thread.start(); + } + + + private Task loadPatientTask = null; + + @FXML + private Button btnPatRefresh; + + @FXML + private void clickedRefreshPatient(){ + updatePatientsFromDb(); + } + private ObjectBinding patientObjectBinding = null; public ObjectBinding selectedPatientProperty(){ diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java index b3cd9b0..86c3c10 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/StationsHistorieController.java @@ -1,5 +1,8 @@ package de.uniluebeck.mi.projmi6.controller; +import de.uniluebeck.mi.projmi6.model.Fall; +import de.uniluebeck.mi.projmi6.model.StationsHistorie; +import de.uniluebeck.mi.projmi6.model.Untersuchung; import de.uniluebeck.mi.projmi6.view.DateTimePicker; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -11,6 +14,12 @@ import javafx.scene.control.TableView; * Created by 631806 on 12.11.15. */ public class StationsHistorieController { + + /** + * The station history that is shown in the edit window, or null if a new station history should be created. + */ + private StationsHistorie stationsHistorie = null; + private MainController mainController; @FXML @@ -47,5 +56,57 @@ public class StationsHistorieController { } + public void setStationsHistorie(StationsHistorie stationsHistorie){ + this.stationsHistorie = stationsHistorie; + if(stationsHistorie==null){ + clearFields(); + }else { + copyStationsHistorieDataIntoFields(); + } + + } + + private void copyStationsHistorieDataIntoFields(){ + // colStatHistAbteilung.setText(stationsHistorie.get()); + // colStatHistStation.setText(stationsHistorie.getStation()); + // colStatHistAufnahmeDatum.setDateTime(stationsHistorie.getAufnahmeDatum()); + // colStatHistEntlassungsDatum.setDateTime(stationsHistorie.getEntlassungsDatum()); + // dtTmAufnahme=setDateTime(stationsHistorie.getAufnahmeDatum()); + // dtTmEntlassung=setDateTime(stationsHistorie.getEntlassungsDatum()); + + statHistCreator.setText(Integer.toString(stationsHistorie.getErsteller())); + statHistCreatTime.setText(stationsHistorie.getErstellDatumZeit().toString()); + statHistEditor.setText(Integer.toString(stationsHistorie.getBearbeiter())); + statHistEditTime.setText(stationsHistorie.getBearbeitetDatumZeit().toString()); + } + + private void copyFieldDataIntoStationsHistorie(StationsHistorie stationsHistorie){ + if(stationsHistorie==null){ + clearFields(); + return; + } + // stationsHistorie.set(colStatHistAbteilung.getText()); + // stationsHistorie.setStation(colStatHistStation.getText()); + // stationsHistorie.setAufnahmeDatum(colStatHistAufnahmeDatum.getDateTime()); + // stationsHistorie.getEntlassungsDatum(colStatHistEntlassungsDatum.getDateTime()); + stationsHistorie.setAufnahmeDatum(dtTmAufnahme.getDateTime()); + // stationsHistorie.getEntlassungsDatum(dtTmEntlassung.getDateTime()); + + } + + private void clearFields(){ + + //statHistCreateTime.setText(""); + //statHistCreator.setText(""); + //statHistEditTime.setText(""); + // statHistEditor.setText(""); + + colStatHistAbteilung.setText(""); + colStatHistStation.setText(""); + // colStatHistAufnahmeDatum.setDateTime(null); + // colStatHistEntlassungsDatum.setDateTime(null); + dtTmAufnahme.setDateTime(null); + dtTmEntlassung.setDateTime(null); + } } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java index b71daaa..b5f4670 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/UntersuchungenController.java @@ -5,20 +5,23 @@ package de.uniluebeck.mi.projmi6.controller; */ import de.uniluebeck.mi.projmi6.Main; -import de.uniluebeck.mi.projmi6.model.Mitarbeiter; -import de.uniluebeck.mi.projmi6.model.OpsCode; -import de.uniluebeck.mi.projmi6.model.Patient; +import de.uniluebeck.mi.projmi6.db.DBHandler; +import de.uniluebeck.mi.projmi6.model.*; import de.uniluebeck.mi.projmi6.view.DateTimePicker; +import javafx.beans.property.SimpleObjectProperty; +import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.*; +import java.sql.SQLException; + public class UntersuchungenController { /** * The examination that is shown in the edit window, or null if a new examination should be created. */ - // private Untersuchung untersuchung = null; + private Untersuchung untersuchung = null; private MainController mainController; @@ -49,7 +52,7 @@ public class UntersuchungenController { private Label untsCreateTime; @FXML - private ListView untsList; + private ListView untsList; @FXML private ComboBox untsOpsCode; @@ -57,18 +60,36 @@ public class UntersuchungenController { @FXML private ComboBox untsArzt; + public ObservableList getUntersuchungen() { + return untersuchungen.get(); + } + + public SimpleObjectProperty> untersuchungenProperty() { + return untersuchungen; + } + + public void setUntersuchungen(ObservableList untersuchungen) { + this.untersuchungen.set(untersuchungen); + } + + private SimpleObjectProperty> untersuchungen = new SimpleObjectProperty<>(); + public UntersuchungenController (MainController mainController){ this.mainController = mainController; } @FXML public void initialize(){ - untsOpsCode.itemsProperty().bind(mainController.opsCodesProperty()); + untsOpsCode.itemsProperty().bind(mainController.getStammdaten().opsCodesProperty()); + untsList.itemsProperty().bind(untersuchungen); + untsArzt.setItems(mainController.getStammdaten().getMitarbeiter()); } @FXML void clickedUntsCreate(ActionEvent event) { - + clearFields(); + untsArzt.getSelectionModel().select(mainController.getCurrentMitarbeiter()); + untersuchung = null; } @FXML @@ -78,9 +99,19 @@ public class UntersuchungenController { @FXML void clickedUntsSave(ActionEvent event) { - + // TODO: Jopo: ??? + if (untersuchung == null) { + untersuchung = new Untersuchung(); + untersuchung.setFall(mainController.getFallController().getFall()); + copyFieldDataIntoUntersuchung(untersuchung); + try { + DBHandler.setUntersuchung(untersuchung, mainController.getCurrentMitarbeiter().getMitarbID(), false); + } catch (SQLException e) { + e.printStackTrace(); + } + } } -/* + public void setUntersuchung(Untersuchung untersuchung){ this.untersuchung = untersuchung; if(untersuchung==null){ @@ -89,18 +120,47 @@ public class UntersuchungenController { copyUntersuchungDataIntoFields(); } - }*/ -/* + } + private void copyUntersuchungDataIntoFields(){ - untsList.setText(Integer.toString(patient.getPatID())); - untsOpsCode.setText(patient.getGeburtsname()); - untsArzt.setText(patient.getNachname()); - - untsCreator.setText(Integer.toString(patient.getErsteller())); - untsCreateTime.setText(patient.getErstellDatumZeit().toString()); - untsChanger.setText(Integer.toString(patient.getBearbeiter())); - untsChangeTime.setText(patient.getBearbeitetDatumZeit().toString()); - }*/ + // untsList.setText(Integer.toString(untersuchung.getUntersID())); + untsOpsCode.setValue(untersuchung.getOpscode()); + untsArzt.setValue(untersuchung.getDurchfuehrenderArzt()); + dtTmUntersuchungszeitpunkt.setDateTime(untersuchung.getUntersuchungsdatum()); + + untsCreator.setText(Integer.toString(untersuchung.getErsteller())); + untsCreateTime.setText(untersuchung.getErstellDatumZeit().toString()); + untsChanger.setText(Integer.toString(untersuchung.getBearbeiter())); + untsChangeTime.setText(untersuchung.getBearbeitetDatumZeit().toString()); + } + + private void copyFieldDataIntoUntersuchung(Untersuchung untersuchung){ + + untersuchung.setOpscode(untsOpsCode.getValue()); + untersuchung.setDurchfuehrenderArzt(untsArzt.getValue()); + // untersuchung.set?(untsList.getValue()); + untersuchung.setUntersuchungsdatum(dtTmUntersuchungszeitpunkt.getDateTime()); + + // untersCreateTime.setText(untersuchung.getErstellDatumZeit().toString()); + // untersCreator.setText(Integer.toString(untersuchung.getErsteller())); + // untersEditTime.setText(untersuchung.getBearbeitetDatumZeit().toString()); + // untersEditor.setText(Integer.toString(untersuchung.getBearbeiter())); + } + + private void clearFields(){ + + //untersCreateTime.setText(""); + //untersCreator.setText(""); + //untersEditTime.setText(""); + // untersEditor.setText(""); + + untsOpsCode.setValue(null); + untsArzt.setValue(null); + dtTmUntersuchungszeitpunkt.setDateTime(null); + + } + + } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/controller/package-info.java b/src/main/java/de/uniluebeck/mi/projmi6/controller/package-info.java new file mode 100644 index 0000000..849297c --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/controller/package-info.java @@ -0,0 +1,4 @@ +/** + * Controller Klassen + */ +package de.uniluebeck.mi.projmi6.controller; \ No newline at end of file diff --git a/src/main/java/de/uniluebeck/mi/projmi6/db/DBHandler.java b/src/main/java/de/uniluebeck/mi/projmi6/db/DBHandler.java index 55862d6..b6c77a5 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/db/DBHandler.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/db/DBHandler.java @@ -2,32 +2,120 @@ package de.uniluebeck.mi.projmi6.db; import de.uniluebeck.mi.projmi6.model.*; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; import java.util.ArrayList; import java.util.List; /** - * Created by nils on 15.11.2015. + * Handler fuer alle DB Interaktionen. */ public class DBHandler { private static final String SELECT_ALL_PATIENTS = "SELECT * FROM `patient`"; private static final String SELECT_PATIENT_BY_ID = "SELECT * FROM `patient` WHERE `id` = ?"; - private static final String UPDATE_PATIENT = "UPDATE `patient` SET `CAVE`=?, `Familienstand`=?, " + - "`Geburtsdatum`=?, `Geburtsname`=?, `Geschlecht`=?, `KassenID`=?, `LetzterBearbeiter`=?, `Nachname`=?, " + - "`Ort`=?, `PLZ`=?, `Strasse`=?, `Telefon`=?, `Versichertennummer`=?, `Vorname`=? WHERE `ID`=?"; + private static final String UPDATE_PATIENT = "UPDATE `patient`" + + "SET `CAVE`=?," + + "`Vorname`=?," + + "`Geburtsname`=?," + + "`Nachname`=?," + + "`Geburtsdatum`=?," + + "`Geschlecht`=?," + + "`Familienstand`=?," + + "`Strasse`=?," + + "`Hausnummer`=?," + + "`PLZ`=?," + + "`Ort`=?," + + "`Telefon`=?," + + "`KassenID`=?," + + "`Versichertennummer`=?," + + "`LetzterBearbeiter`=? " + + "WHERE `ID`=?"; + private static final String INSERT_PATIENT = "INSERT INTO `patient`" + + "(`CAVE`," + + "`Vorname`," + + "`Geburtsname`," + + "`Nachname`," + + "`Geburtsdatum`," + + "`Geschlecht`," + + "`Familienstand`," + + "`Strasse`," + + "`Hausnummer`," + + "`PLZ`," + + "`Ort`," + + "`Telefon`," + + "`KassenID`," + + "`Versichertennummer`," + + "`LetzterBearbeiter`," + + "`Ersteller`)" + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; private static final String SELECT_ALL_STATIONEN = "SELECT * FROM `stammstation`"; private static final String SELECT_FAELLE_BY_PATID = "SELECT * FROM `fall` WHERE `patientid` = ?"; + private static final String INSERT_FALL = "INSERT INTO `fall`" + + "(`Aufnahmedatum`," + + "`Entlassungsdatum`," + + "`Vorstelldatum`," + + "`EinweisenderArzt`," + + "`Fallart`," + + "`Selbsteinweisung`," + + "`Hauptdiagnose`," + + "`Versichertennummer`," + + "`KassenID`," + + "`storniert`," + + "`LetzterBearbeiter`," + + "`PatientID`," + + "`Ersteller`)" + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + private static final String UPDATE_FALL = "UPDATE `fall`" + + "SET `Aufnahmedatum`=?," + + "`Entlassungsdatum`=?," + + "`Vorstelldatum`=?," + + "`EinweisenderArzt`=?," + + "Fallart=?," + + "`Selbsteinweisung`=?," + + "Hauptdiagnose=?," + + "`Versichertennummer`=?," + + "KassenID=?," + + "`storniert`=?," + + "LetzterBearbeiter=? " + + "WHERE `FallID`=?"; private static final String SELECT_DIAGNOSE_BY_ID = "SELECT * FROM `diagnose` WHERE `diagid` = ?"; private static final String SELECT_ALL_ICD10CODES = "SELECT * FROM `stammicd10`"; private static final String SELECT_ALL_OPSCODES = "SELECT * FROM `stammops`"; - private static final String SELECT_ICD10CODE_BY_ID = "SELECT * FROM `stammicd10` WHERE `icd10code` = '?' AND `version` = ?"; - private static final String SELECT_OPSCODE_BY_ID = "SELECT * FROM `stammops` WHERE `opscode` = '?' AND `version` = ?"; + private static final String SELECT_ICD10CODE_BY_ID = "SELECT * FROM `stammicd10` WHERE `icd10code` = ? AND `version` = ?"; + private static final String SELECT_OPSCODE_BY_ID = "SELECT * FROM `stammops` WHERE `opscode` = ? AND `version` = ?"; private static final String SELECT_ALL_MITARBEITER = "SELECT * FROM `mitarbeiter`"; - + private static final String SELECT_UNTERS_BY_FALLID = "SELECT * FROM `untersuchung` WHERE `fallid` = ?"; + private static final String INSERT_UNTERSUCHUNG = "INSERT INTO `untersuchung`" + + "(`DurchfuehrenderArzt`," + + "`FallID`," + + "`OPSCode`," + + "`OPSVersion`," + + "`storniert`," + + "`Untersuchungsdatum`," + + "`LetzterBearbeiter`," + + "`Ersteller`)" + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; + private static final String UPDATE_UNTERSUCHUNG = "UPDATE `untersuchung`" + + "SET `DurchfuehrenderArzt`=?," + + "`FallID`=?," + + "`OPSCode`=?," + + "`OPSVersion`=?," + + "`storniert`=?," + + "`Untersuchundatum`=?" + + "`LetzterBearbeiter` " + + "WHERE `UnterID`=?"; + private static final String SELECT_MITARBEITER_BY_ID = "SELECT * FROM `mitarbeiter` WHERE `mitarbid` = ?"; + private static final String SELECT_DIAGNOSE_BY_FALLID = "SELECT * FROM `diagnose` WHERE `fallid` = ?"; + private static final String SELECT_ALL_KASSEN = "SELECT * FROM `kasse`"; + private static final String SELECT_KASSE_BY_KASSENID = "SELECT * FROM `kasse` WHERE `kasse`.`KassenID` = ?"; + private static final String SELECT_STATHIST_BY_STATION = "SELECT * FROM `stationshistorie` WHERE `stationshistorie`.`Station` = ?"; + + /** + * Gibt alle {@link Patient} aus der DB zurueck. + * + * @return Liste aller {@link Patient}. + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ public static List getAllPatients() throws SQLException { Statement statement = MySqlConnFactory.getConnection().createStatement(); ResultSet rs = statement.executeQuery(SELECT_ALL_PATIENTS); @@ -40,40 +128,100 @@ public class DBHandler { return patients; } - public static Patient getPatient(int id) throws SQLException { - PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_PATIENT_BY_ID); - ResultSet rs; - statement.setInt(1, id); - rs = statement.executeQuery(); - - return getPatient(rs); - } - + /** + * Extrahiert ein Objekt {@link Patient} aus einem gegebenen {@link ResultSet}. + * + * @param rs ResultSet from Database Query. + * @return {@link Patient} + * @throws SQLException + */ private static Patient getPatient(ResultSet rs) throws SQLException { Patient patient = new Patient(); patient.setPatID(rs.getInt("id")); patient.setGeburtsname(rs.getString("geburtsname")); patient.setVorname(rs.getString("vorname")); patient.setNachname(rs.getString("nachname")); - if (rs.getDate("geburtsdatum") != null) + if (rs.getDate("geburtsdatum") != null) { patient.setGeburtsdatum(rs.getDate("geburtsdatum").toLocalDate()); + } + + patient.setCave(rs.getString("cave")); + patient.setStrasse(rs.getString("strasse")); patient.setHausnummer(rs.getString("hausnummer")); patient.setPlz(rs.getString("plz")); + patient.setOrt(rs.getString("ort")); patient.setTelefon(rs.getString("telefon")); - // patient.setFamilienstand(rs.getString("familienstand")); TODO - // patient.setGeschlecht(Patient.Geschlecht.valueOf(rs.getString("geschlecht"))); TODO + if (rs.getString("familienstand") != null) { + patient.setFamilienstand(Patient.Familienstand.parseChar(rs.getString("familienstand").charAt(0))); + } + if (rs.getString("geschlecht") != null) { + patient.setGeschlecht(Patient.Geschlecht.parseChar(rs.getString("geschlecht").charAt(0))); + } patient.setVersichertennummer(rs.getString("versichertennummer")); patient.setKassenID(rs.getInt("kassenid")); setVersionInformation(patient, rs); return patient; } - public static void updatePatient(Patient patient) throws SQLException { - PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_PATIENT); - statement.setString(1, patient.getCave()); - statement.setString(2, patient.getFamilienstand().toString()); - // TODO + // TODO: Never used. + public static Patient getPatient(int id) throws SQLException { + PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_PATIENT_BY_ID); + ResultSet rs; + statement.setInt(1, id); + rs = statement.executeQuery(); + + return getPatient(rs); + } + + /** + * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus. + * + * @param patient zu verarbeitender Datensatz. + * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters. + * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}. + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ + public static void setPatient(Patient patient, int mitarbid, boolean isUpdate) throws SQLException { + PreparedStatement statement; + if (isUpdate) { + statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_PATIENT); + } else { + statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_PATIENT); + } + + statement.setString(1, patient.getCave()); // CAVE + statement.setString(2, patient.getVorname()); // Vorname + statement.setString(3, patient.getGeburtsname()); // Geburtsname + statement.setString(4, patient.getNachname()); // Nachname + + statement.setDate(5, Date.valueOf(patient.getGeburtsdatum())); // Geburtsdatum + if (patient.getGeschlecht() != null) { + statement.setString(6, String.valueOf(patient.getGeschlecht().id())); // Geschlecht + } else { + statement.setString(6, String.valueOf(Patient.Geschlecht.OTHER.id())); + } + if (patient.getFamilienstand() != null) { + statement.setString(7, String.valueOf(patient.getFamilienstand().id()));// Familienstand + } else { + statement.setString(7, String.valueOf(Patient.Familienstand.LEDIG.id())); + } + statement.setString(8, patient.getStrasse()); // Strasse + statement.setString(9, patient.getHausnummer()); // Hausnummer + statement.setString(10, patient.getPlz()); // PLZ + statement.setString(11, patient.getOrt()); // Ort + statement.setString(12, patient.getTelefon()); // Telefon + statement.setInt(13, patient.getKassenID()); // KassenID + statement.setString(14, patient.getVersichertennummer()); // Versichertennummer + statement.setInt(15, mitarbid); // LetzterBearbeiter + if (!isUpdate) { + statement.setInt(16, mitarbid); // Ersteller + } else { + statement.setInt(16, patient.getPatID()); // PatID (WHERE) + } + + + statement.execute(); } public static List getAllStationen() throws SQLException { @@ -88,6 +236,13 @@ public class DBHandler { return stationen; } + /** + * Extrahiert ein Objekt {@link Station} aus einem gegebenen {@link ResultSet}. + * + * @param rs ResultSet from Database Query. + * @return {@link Station} + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ private static Station getStation(ResultSet rs) throws SQLException { Station station = new Station(); station.setStation(rs.getString("station")); @@ -98,6 +253,37 @@ public class DBHandler { return station; } + public static List getStationsHistorieByStation(String station) throws SQLException { + PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_STATHIST_BY_STATION); + statement.setString(1, station); + ResultSet rs = statement.executeQuery(); + + List historie = new ArrayList<>(); + while (rs.next()) { + historie.add(getStationsHistorie(rs)); + } + + return historie; + } + + private static StationsHistorie getStationsHistorie(ResultSet rs) throws SQLException { + StationsHistorie hist = new StationsHistorie(); + + hist.setStatHistID(rs.getInt("stathistid")); + if (rs.getTimestamp("aufnahmedatum") != null) { + hist.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime()); + } + if (rs.getTimestamp("entlassungsdatum") != null) { + hist.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime()); + } + + // TODO: Muss das jeweils das Objekt sein? + // hist.setFall(null); + // hist.setStation(null); + + return hist; + } + public static List getFaelleByPatID(int id) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_FAELLE_BY_PATID); statement.setInt(1, id); @@ -111,22 +297,115 @@ public class DBHandler { return faelle; } + /** + * Extrahiert ein Objekt {@link Fall} aus einem gegebenen {@link ResultSet}. + * + * @param rs ResultSet from Database Query. + * @return {@link Fall} + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ private static Fall getFall(ResultSet rs) throws SQLException { Fall fall = new Fall(); fall.setFallID(rs.getInt("fallid")); - if (rs.getTimestamp("aufnahmedatum") != null) + if (rs.getTimestamp("aufnahmedatum") != null) { fall.setAufnahmeDatum(rs.getTimestamp("aufnahmedatum").toLocalDateTime()); - if (rs.getTimestamp("entlassungsdatum") != null) + } + if (rs.getTimestamp("entlassungsdatum") != null) { fall.setEntlassungsDatum(rs.getTimestamp("entlassungsdatum").toLocalDateTime()); - if (rs.getInt("hauptdiagnose") != 0) + } + if (rs.getInt("hauptdiagnose") != 0) { fall.setHauptDiagnose(getDiagnose(rs.getInt("hauptdiagnose"), fall)); + } + if (rs.getString("versichertennummer") != null) { + fall.setVersichertenNummer(rs.getString("versichertennummer")); + } + if (rs.getInt("kassenid") != 0) { + fall.setKasse(getKasse(rs.getInt("kassenid"))); + } + fall.setFallArt(FallArt.parseString(rs.getString("fallart"))); return fall; } - private static Diagnose getDiagnose(int hauptdiagnose, Fall fall) throws SQLException { - Diagnose diagnose = getDiagnose(hauptdiagnose); + /** + * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus. + * + * @param fall zu verarbeitender Datensatz. + * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters. + * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}. + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ + public static void setFall(Fall fall, int mitarbid, boolean isUpdate) throws SQLException { + PreparedStatement statement; + if (isUpdate) { + statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_FALL); + } else { + statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_FALL); + } + + if (fall.getAufnahmeDatum() != null) { + statement.setTimestamp(1, Timestamp.valueOf(fall.getAufnahmeDatum())); // Aufnahmedatum + } else { + statement.setTimestamp(1, null); + } + if (fall.getEntlassungsDatum() != null) { + statement.setTimestamp(2, Timestamp.valueOf(fall.getEntlassungsDatum())); // Entlassungsdatum + } else { + statement.setTimestamp(2, null); + } + if (fall.getVorstellDatum() != null) { + statement.setTimestamp(3, Timestamp.valueOf(fall.getVorstellDatum())); // Vorstelldatum + } else { + statement.setTimestamp(3, null); + } + if (fall.getEinweisenderArzt() != null) { + statement.setInt(4, fall.getEinweisenderArzt().getMitarbID()); // EinweisenderArzt + } else { + statement.setTimestamp(4, null); + } + if (fall.getFallArt() != null) { + statement.setString(5, fall.getFallArt().id()); // Fallart + } else { + statement.setString(5, null); + } + statement.setBoolean(6, fall.getSelbsteinweisung()); // Selbsteinweisung + if (fall.getHauptDiagnose() != null) { + statement.setInt(7, fall.getHauptDiagnose().getDiagID()); // Hauptdiagnose + } else { + statement.setTimestamp(7, null); + } + statement.setString(8, fall.getVersichertenNummer()); // Versichertennummer + if (fall.getKasse() != null) { + statement.setInt(9, fall.getKasse().getKassenID()); // KassenID + } else { + statement.setTimestamp(9, null); + } + statement.setBoolean(10, fall.getStorniert()); // storniert + statement.setInt(11, mitarbid); // Letzter Bearbeiter + if (!isUpdate) { + statement.setInt(12, fall.getPatient().getPatID()); // PatientID + statement.setInt(13, mitarbid); // Ersteller + } + if (isUpdate) { + statement.setInt(12, fall.getFallID()); + } + + statement.execute(); + } + + /** + * Fuehrt {@code INSERT} eines neuen Datensatz durch. + * @param fall zu verarbeitender Datensatz. + * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters. + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ + public static void setFall(Fall fall, int mitarbid) throws SQLException { + setFall(fall, mitarbid, false); + } + + private static Diagnose getDiagnose(int diagid, Fall fall) throws SQLException { + Diagnose diagnose = getDiagnose(diagid); diagnose.setFall(fall); return diagnose; @@ -134,11 +413,20 @@ public class DBHandler { private static Diagnose getDiagnose(int id) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_ID); + statement.setInt(1, id); ResultSet rs = statement.executeQuery(); + rs.next(); // TODO return getDiagnose(rs); } + /** + * Extrahiert ein Objekt {@link Diagnose} aus einem gegebenen {@link ResultSet}. + * + * @param rs ResultSet from Database Query. + * @return {@link Diagnose} + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ private static Diagnose getDiagnose(ResultSet rs) throws SQLException { Diagnose diagnose = new Diagnose(); @@ -152,11 +440,13 @@ public class DBHandler { private static void setVersionInformation(Version version, ResultSet rs) throws SQLException { version.setErsteller(rs.getInt("ersteller")); - if (rs.getTimestamp("erstelldatum") != null) + if (rs.getTimestamp("erstelldatum") != null) { version.setErstellDatumZeit(rs.getTimestamp("erstelldatum").toLocalDateTime()); + } version.setBearbeiter(rs.getInt("letzterbearbeiter")); - if (rs.getTimestamp("letztesbearbeitungsdatum") != null) + if (rs.getTimestamp("letztesbearbeitungsdatum") != null) { version.setBearbeitetDatumZeit(rs.getTimestamp("letztesbearbeitungsdatum").toLocalDateTime()); + } } public static List getAllIcd10Codes() throws SQLException { @@ -178,9 +468,17 @@ public class DBHandler { statement.setInt(2, version); rs = statement.executeQuery(); + rs.next(); // TODO return getIcd10Code(rs); } + /** + * Extrahiert ein Objekt {@link Icd10Code} aus einem gegebenen {@link ResultSet}. + * + * @param rs ResultSet from Database Query. + * @return {@link Icd10Code} + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ private static Icd10Code getIcd10Code(ResultSet rs) throws SQLException { String code = rs.getString("icd10code"); String text = rs.getString("text"); @@ -201,16 +499,24 @@ public class DBHandler { return opscodes; } - public static OpsCode getOpsCode(String code, int version) throws SQLException { + private static OpsCode getOpsCode(String code, int version) throws SQLException { PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_OPSCODE_BY_ID); ResultSet rs; statement.setString(1, code); statement.setInt(2, version); rs = statement.executeQuery(); + rs.next(); // TODO return getOpsCode(rs); } + /** + * Extrahiert ein Objekt {@link OpsCode} aus einem gegebenen {@link ResultSet}. + * + * @param rs ResultSet from Database Query. + * @return {@link OpsCode} + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ private static OpsCode getOpsCode(ResultSet rs) throws SQLException { String code = rs.getString("opscode"); String text = rs.getString("text"); @@ -231,6 +537,23 @@ public class DBHandler { return mitarbeiters; } + private static Mitarbeiter getMitarbeiter(int id) throws SQLException { + PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_MITARBEITER_BY_ID); + ResultSet rs; + statement.setInt(1, id); + rs = statement.executeQuery(); + + rs.next(); // TODO + return getMitarbeiter(rs); + } + + /** + * Extrahiert ein Objekt {@link Mitarbeiter} aus einem gegebenen {@link ResultSet}. + * + * @param rs ResultSet from Database Query. + * @return {@link Mitarbeiter} + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ private static Mitarbeiter getMitarbeiter(ResultSet rs) throws SQLException { Mitarbeiter mitarbeiter = new Mitarbeiter(rs.getInt("mitarbid")); mitarbeiter.setTitel(rs.getString("titel")); @@ -239,4 +562,117 @@ public class DBHandler { mitarbeiter.setEinweisenderArzt(rs.getString("einweisenderarzt")); return mitarbeiter; } + + /** + * Gibt gibt alle {@link Untersuchung} zu einem {@link Fall} aus. + * + * @param fall Parent {@link Fall} + * @return Liste aller {@link Untersuchung} zu einem {@link Fall}. + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ + public static List getUntersuchungByFall(Fall fall) throws SQLException { + PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_UNTERS_BY_FALLID); + statement.setInt(1, fall.getFallID()); + ResultSet rs = statement.executeQuery(); + + List untersuchungen = new ArrayList<>(); + while (rs.next()) { + untersuchungen.add(getUntersuchung(rs, fall)); + } + + return untersuchungen; + } + + private static Untersuchung getUntersuchung(ResultSet rs, Fall fall) throws SQLException { + Untersuchung untersuchung = new Untersuchung(); + untersuchung.setUntersID(rs.getInt("untersid")); + untersuchung.setFall(fall); + untersuchung.setDurchfuehrenderArzt(getMitarbeiter(rs.getInt("durchfuehrenderarzt"))); + untersuchung.setUntersuchungsdatum(rs.getTimestamp("untersuchungsdatum").toLocalDateTime()); + untersuchung.setOpscode(getOpsCode(rs.getString("opscode"), rs.getInt("opsversion"))); + setVersionInformation(untersuchung, rs); + return untersuchung; + } + + + /** + * Fuehrt {@code INSERT} bei einem neuen Datensatz und {@code UPDATE} bei einem existierenden Datensatz aus. + * + * @param untersuchung zu verarbeitender Datensatz. + * @param mitarbid {@link Mitarbeiter#mitarbID} des aktuellen Benutzers/Mitarbeiters. + * @param isUpdate {@code true} wenn der Datensatz bereits existiert, sonst {@code false}. + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ + public static void setUntersuchung(Untersuchung untersuchung, int mitarbid, boolean isUpdate) throws SQLException { + PreparedStatement statement; + if (isUpdate) { + statement = MySqlConnFactory.getConnection().prepareStatement(UPDATE_UNTERSUCHUNG); + } else { + statement = MySqlConnFactory.getConnection().prepareStatement(INSERT_UNTERSUCHUNG); + } + + statement.setInt(1, untersuchung.getDurchfuehrenderArzt().getMitarbID()); // DurchfuehrenderArzt + statement.setInt(2, untersuchung.getFall().getFallID()); // FallID + statement.setString(3, untersuchung.getOpscode().getOpsCode()); // OPSCode + statement.setInt(4, untersuchung.getOpscode().getVersion()); // OPSVersion + statement.setBoolean(5, untersuchung.getStorniert()); // storniert + statement.setTimestamp(6, Timestamp.valueOf(untersuchung.getUntersuchungsdatum())); // Untersuchungsdatum + statement.setInt(7, mitarbid); // Letzter Bearbeiter + if (!isUpdate) { + statement.setInt(8, mitarbid); // Ersteller + } + + statement.execute(); + } + + public static List getDiagnosenByFall(Fall fall) throws SQLException { + PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_DIAGNOSE_BY_FALLID); + statement.setInt(1, fall.getFallID()); + ResultSet rs = statement.executeQuery(); + + List diagnosen = new ArrayList<>(); + while (rs.next()) { + diagnosen.add(getDiagnose(rs.getInt("diagid"), fall)); + } + + return diagnosen; + } + + public static List getAllKassen() throws SQLException { + Statement statement = MySqlConnFactory.getConnection().createStatement(); + ResultSet rs = statement.executeQuery(SELECT_ALL_KASSEN); + + List kassen = new ArrayList<>(); + while (rs.next()) { + kassen.add(getKasse(rs)); + } + + return kassen; + } + + private static Kasse getKasse(int kassenid) throws SQLException { + PreparedStatement statement = MySqlConnFactory.getConnection().prepareStatement(SELECT_KASSE_BY_KASSENID); + statement.setInt(1, kassenid); + ResultSet rs = statement.executeQuery(); + + rs.next(); // TODO + return getKasse(rs); + } + + /** + * Extrahiert ein Objekt {@link Kasse} aus einem gegebenen {@link ResultSet}. + * + * @param rs ResultSet from Database Query. + * @return {@link Kasse} + * @throws SQLException wenn Fehler bei der SQL Verarbeitung auftreten. + */ + private static Kasse getKasse(ResultSet rs) throws SQLException { + Kasse kasse = new Kasse(); + kasse.setKassenID(rs.getInt("kassenid")); + kasse.setName(rs.getString("name")); + kasse.setAdresse(rs.getString("adresse")); + kasse.setPrivat(rs.getBoolean("privat")); + setVersionInformation(kasse, rs); + return kasse; + } } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java b/src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java index 7a6726d..edceed9 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/db/MySqlConnFactory.java @@ -5,14 +5,14 @@ import java.sql.DriverManager; import java.sql.SQLException; /** - * Created by nils on 15.11.2015. + * MySQL Connection Factory. */ public class MySqlConnFactory { - private static MySqlConnFactory instance = new MySqlConnFactory(); - public static final String URL = "jdbc:mysql://127.0.0.1:3306/pmiw15g06_v01"; + public static final String URL = "jdbc:mysql://141.83.20.84:3306/pmiw15g06_v01"; public static final String USER = "pmiw15g06"; public static final String PASS = "AX3yQSYJSH43PrSz"; public static final String DRIVER = "com.mysql.jdbc.Driver"; + private static MySqlConnFactory instance = new MySqlConnFactory(); private MySqlConnFactory() { try { @@ -22,6 +22,10 @@ public class MySqlConnFactory { } } + protected static Connection getConnection() { + return instance.createConnection(); + } + private Connection createConnection() { Connection conn = null; try { @@ -31,8 +35,4 @@ public class MySqlConnFactory { } return conn; } - - public static Connection getConnection() { - return instance.createConnection(); - } } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/db/package-info.java b/src/main/java/de/uniluebeck/mi/projmi6/db/package-info.java new file mode 100644 index 0000000..9087c08 --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/db/package-info.java @@ -0,0 +1,4 @@ +/** + * Klassen fuer DB Zugriff. + */ +package de.uniluebeck.mi.projmi6.db; \ No newline at end of file diff --git a/src/main/java/de/uniluebeck/mi/projmi6/model/Diagnose.java b/src/main/java/de/uniluebeck/mi/projmi6/model/Diagnose.java index c554036..23ae380 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/model/Diagnose.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/model/Diagnose.java @@ -8,11 +8,19 @@ import javafx.beans.property.SimpleStringProperty; public class Diagnose extends Version { private Fall fall; //ICDCODE + private int diagID; private Icd10Code icd10code; private Mitarbeiter arzt; private SimpleStringProperty freiText = new SimpleStringProperty(this, "freiText"); private DiagArt diagArt; + public int getDiagID() { + return diagID; + } + + public void setDiagID(int diagID) { + this.diagID = diagID; + } public Fall getFall() { return fall; @@ -34,6 +42,11 @@ public class Diagnose extends Version { return freiText.get(); } + @Override + public String toString() { + return icd10code+""; + } + public SimpleStringProperty freiTextProperty() { return freiText; } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/model/Fall.java b/src/main/java/de/uniluebeck/mi/projmi6/model/Fall.java index 4de2239..cb8fcd8 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/model/Fall.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/model/Fall.java @@ -94,13 +94,17 @@ public class Fall extends Version { this.einweisenderArzt = einweisenderArzt; } - public Enum getFallArt() { + public FallArt getFallArt() { return fallArt; } @Override public String toString() { - return Integer.toString(getFallID()); + if(getAufnahmeDatum()!=null){ + return getAufnahmeDatum().toLocalDate().toString(); + }else{ + return Integer.toString(getFallID()); + } } public void setFallArt(FallArt fallArt) { diff --git a/src/main/java/de/uniluebeck/mi/projmi6/model/FallArt.java b/src/main/java/de/uniluebeck/mi/projmi6/model/FallArt.java index 0a6cffa..72ea2c5 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/model/FallArt.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/model/FallArt.java @@ -27,6 +27,10 @@ public enum FallArt { } } + public String id() { + return id; + } + @Override public String toString() { return fallArt; diff --git a/src/main/java/de/uniluebeck/mi/projmi6/model/Kasse.java b/src/main/java/de/uniluebeck/mi/projmi6/model/Kasse.java index df2a8b1..8846f56 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/model/Kasse.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/model/Kasse.java @@ -6,7 +6,7 @@ import javafx.beans.property.SimpleStringProperty; /** * Created by 627933 on 12.11.15. */ -public class Kasse { +public class Kasse extends Version { private SimpleStringProperty adresse = new SimpleStringProperty(this, "adresse"); private SimpleIntegerProperty kassenID = new SimpleIntegerProperty(this, "kassenID"); private SimpleStringProperty name = new SimpleStringProperty(this, "name"); diff --git a/src/main/java/de/uniluebeck/mi/projmi6/model/Patient.java b/src/main/java/de/uniluebeck/mi/projmi6/model/Patient.java index 8dee655..b81b938 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/model/Patient.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/model/Patient.java @@ -238,6 +238,10 @@ public class Patient extends Version { public String toString() { return geschlecht; } + + public char id() { + return id; + } } public enum Familienstand { @@ -270,6 +274,10 @@ public class Patient extends Version { } } + public char id() { + return id; + } + @Override public String toString() { return familienstand; diff --git a/src/main/java/de/uniluebeck/mi/projmi6/model/Stammdaten.java b/src/main/java/de/uniluebeck/mi/projmi6/model/Stammdaten.java new file mode 100644 index 0000000..2f9c08b --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/model/Stammdaten.java @@ -0,0 +1,76 @@ +package de.uniluebeck.mi.projmi6.model; + +import javafx.beans.property.SimpleObjectProperty; +import javafx.collections.ObservableList; + +/** + * Created by Johannes on 15/11/2015. + */ +public class Stammdaten { + private SimpleObjectProperty> opsCodes = new SimpleObjectProperty<>(); + private SimpleObjectProperty> icd10Codes = new SimpleObjectProperty<>(); + private SimpleObjectProperty> mitarbeiter = new SimpleObjectProperty<>(); + private SimpleObjectProperty> kassen = new SimpleObjectProperty<>(); + private SimpleObjectProperty> stationen = new SimpleObjectProperty<>(); + + public ObservableList getOpsCodes() { + return opsCodes.get(); + } + + public SimpleObjectProperty> opsCodesProperty() { + return opsCodes; + } + + public void setOpsCodes(ObservableList opsCodes){ + this.opsCodesProperty().set(opsCodes); + } + + public ObservableList getIcd10Codes() { + return icd10Codes.get(); + } + + public SimpleObjectProperty> icd10CodesProperty() { + return icd10Codes; + } + + public void setIcd10Codes(ObservableList icd10Codes) { + this.icd10Codes.set(icd10Codes); + } + + public ObservableList getStationen() { + return stationen.get(); + } + + public SimpleObjectProperty> stationenProperty() { + return stationen; + } + + public void setStationen(ObservableList stationen) { + this.stationen.set(stationen); + } + + public ObservableList getMitarbeiter() { + return mitarbeiter.get(); + } + + public SimpleObjectProperty> mitarbeiterProperty() { + return mitarbeiter; + } + + public void setMitarbeiter(ObservableList mitarbeiter) { + this.mitarbeiter.set(mitarbeiter); + } + + public ObservableList getKassen() { + return kassen.get(); + } + + public SimpleObjectProperty> kassenProperty() { + return kassen; + } + + public void setKassen(ObservableList kassen) { + this.kassen.set(kassen); + } + +} diff --git a/src/main/java/de/uniluebeck/mi/projmi6/model/Untersuchung.java b/src/main/java/de/uniluebeck/mi/projmi6/model/Untersuchung.java index e68f45f..3238150 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/model/Untersuchung.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/model/Untersuchung.java @@ -62,6 +62,11 @@ public class Untersuchung extends Version { return untersuchungsdatum; } + @Override + public String toString() { + return getUntersuchungsdatum()+": "+getOpscode().getText(); + } + public void setUntersuchungsdatum(LocalDateTime untersuchungsdatum) { this.untersuchungsdatum.set(untersuchungsdatum); } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/model/package-info.java b/src/main/java/de/uniluebeck/mi/projmi6/model/package-info.java new file mode 100644 index 0000000..ec8a0c6 --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/model/package-info.java @@ -0,0 +1,4 @@ +/** + * Model Klassen. + */ +package de.uniluebeck.mi.projmi6.model; \ No newline at end of file diff --git a/src/main/java/de/uniluebeck/mi/projmi6/package-info.java b/src/main/java/de/uniluebeck/mi/projmi6/package-info.java new file mode 100644 index 0000000..479b856 --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/package-info.java @@ -0,0 +1,4 @@ +/** + * Projekt MI - Gruppe 6 - KIS + */ +package de.uniluebeck.mi.projmi6; \ No newline at end of file diff --git a/src/main/java/de/uniluebeck/mi/projmi6/view/DateTimePicker.java b/src/main/java/de/uniluebeck/mi/projmi6/view/DateTimePicker.java index d8d7988..56197bd 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/view/DateTimePicker.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/view/DateTimePicker.java @@ -94,9 +94,12 @@ public class DateTimePicker extends HBox { btnNow.setOnAction(event -> setToCurrentDateTime()); //Make it large enough to read the text btnNow.setMinWidth(50); + btnNow.getStyleClass().add("now-button"); //Add the subcomponents to the view. this.getChildren().addAll(datePicker,timePicker,btnNow); + + this.setSpacing(5); } @@ -108,9 +111,15 @@ public class DateTimePicker extends HBox { * @param localDateTime The date to be set in the view. */ public void setDateTime(LocalDateTime localDateTime){ - hourText.setText(Integer.toString(localDateTime.getHour())); - minuteText.setText(Integer.toString(localDateTime.getMinute())); - datePicker.setValue(LocalDate.from(localDateTime)); + if(localDateTime==null){ + hourText.setText(""); + minuteText.setText(""); + datePicker.setValue(null); + }else{ + hourText.setText(Integer.toString(localDateTime.getHour())); + minuteText.setText(Integer.toString(localDateTime.getMinute())); + datePicker.setValue(LocalDate.from(localDateTime)); + } } /** diff --git a/src/main/java/de/uniluebeck/mi/projmi6/view/package-info.java b/src/main/java/de/uniluebeck/mi/projmi6/view/package-info.java new file mode 100644 index 0000000..7c7efbd --- /dev/null +++ b/src/main/java/de/uniluebeck/mi/projmi6/view/package-info.java @@ -0,0 +1,4 @@ +/** + * View Klassen. + */ +package de.uniluebeck.mi.projmi6.view; \ No newline at end of file diff --git a/src/main/resources/diagnose.fxml b/src/main/resources/diagnose.fxml index 136e49a..75aba84 100644 --- a/src/main/resources/diagnose.fxml +++ b/src/main/resources/diagnose.fxml @@ -17,7 +17,7 @@