Im Rahmen der Veranstaltung "CS3330 - Projektpraktikum MedizinischeInformatik" an der Universität zu Lübeck entstandenes Krankenhausinformationssystem (KIS).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

357 lines
10 KiB

  1. package de.uniluebeck.mi.projmi6.controller;
  2. /**
  3. * Created by 631806 on 12.11.15.
  4. */
  5. import de.uniluebeck.mi.projmi6.db.DBHandler;
  6. import de.uniluebeck.mi.projmi6.model.*;
  7. import de.uniluebeck.mi.projmi6.view.DateTimePicker;
  8. import javafx.beans.property.ObjectProperty;
  9. import javafx.beans.property.ReadOnlyObjectProperty;
  10. import javafx.beans.property.SimpleObjectProperty;
  11. import javafx.collections.FXCollections;
  12. import javafx.collections.ObservableList;
  13. import javafx.event.ActionEvent;
  14. import javafx.fxml.FXML;
  15. import javafx.scene.control.Button;
  16. import javafx.scene.control.CheckBox;
  17. import javafx.scene.control.ComboBox;
  18. import javafx.scene.control.Label;
  19. import javafx.scene.control.TextField;
  20. import javafx.scene.layout.GridPane;
  21. import java.sql.SQLException;
  22. public class FallController {
  23. private MainController mainController;
  24. public FallController (MainController mainController){
  25. this.mainController = mainController;
  26. }
  27. @FXML
  28. private DateTimePicker dtTmAufnahme, dtTmEntlassung;
  29. @FXML
  30. private Label fallPatID;
  31. @FXML
  32. private ComboBox<FallArt> fallFallart;
  33. @FXML
  34. private ComboBox<Kasse> fallKasse;
  35. @FXML
  36. private TextField fallVersichertennummer;
  37. @FXML
  38. private TextField fallEinweisenderArzt;
  39. @FXML
  40. private CheckBox fallSelbsteinweisung;
  41. @FXML
  42. private ComboBox<Diagnose> fallHauptdiagnose;
  43. @FXML
  44. private Label fallCreator;
  45. @FXML
  46. private Label fallEditor;
  47. @FXML
  48. private Label fallCreateTime;
  49. @FXML
  50. private Label fallEditTime;
  51. @FXML
  52. private Button btnFallSave;
  53. @FXML
  54. private Button btnFallAbort;
  55. @FXML
  56. private Button btnFallCancel;
  57. @FXML
  58. private Button btnFallEnableEdit;
  59. @FXML
  60. private GridPane fallFields;
  61. private SimpleObjectProperty<Fall> fallProperty = new SimpleObjectProperty<>();
  62. public Fall getFall() {
  63. return fallProperty.get();
  64. }
  65. public SimpleObjectProperty<Fall> fallPropertyProperty() {
  66. return fallProperty;
  67. }
  68. public void setFall(Fall fall) {
  69. this.fallProperty.set(fall);
  70. }
  71. public enum State {
  72. CREATE, EDIT, VIEW
  73. }
  74. public State getState() {
  75. return state.get();
  76. }
  77. public ReadOnlyObjectProperty<State> stateProperty() {
  78. return state;
  79. }
  80. SimpleObjectProperty<State> state = new SimpleObjectProperty<>(State.VIEW);
  81. public ObjectProperty<ObservableList<Diagnose>> diagnosenProperty(){
  82. return fallHauptdiagnose.itemsProperty();
  83. }
  84. public void setDiagnosen(ObservableList<Diagnose> list){
  85. fallHauptdiagnose.setItems(list);
  86. }
  87. public ObservableList<Diagnose> getDiagnosen(){
  88. return fallHauptdiagnose.getItems();
  89. }
  90. @FXML
  91. public void initialize(){
  92. fallEinweisenderArzt.disableProperty().bind(fallSelbsteinweisung.selectedProperty());
  93. fallFallart.setItems(FXCollections.observableArrayList(FallArt.values()));
  94. fallKasse.setItems(mainController.getStammdaten().getKassen());
  95. initButtons();
  96. fallFields.disableProperty().bind(state.isEqualTo(State.VIEW));
  97. fallProperty.addListener(((observable, oldValue, newValue) -> {
  98. if(state.get() == State.VIEW){
  99. copyFallDataIntoField(fallProperty.get());
  100. }
  101. }));
  102. state.addListener((observable, oldValue, newValue) -> {
  103. if(newValue==State.EDIT || newValue == State.CREATE){
  104. mainController.lockForEdit(MainController.TabName.OVERVIEW);
  105. }else{
  106. mainController.unlockFromEdit();
  107. }
  108. });
  109. }
  110. /**
  111. * Hide the buttons depending on controller state.
  112. */
  113. private void initButtons(){
  114. btnFallEnableEdit.managedProperty().bind(
  115. state.isEqualTo(State.VIEW).and(fallProperty.isNotNull())
  116. );
  117. btnFallEnableEdit.visibleProperty().bind(btnFallEnableEdit.managedProperty());
  118. btnFallAbort.managedProperty().bind(
  119. state.isNotEqualTo(State.VIEW)
  120. );
  121. btnFallAbort.visibleProperty().bind(btnFallAbort.managedProperty());
  122. btnFallSave.managedProperty().bind(
  123. state.isNotEqualTo(State.VIEW)
  124. );
  125. btnFallSave.visibleProperty().bind(btnFallSave.managedProperty());
  126. btnFallCancel.managedProperty().bind(
  127. state.isEqualTo(State.VIEW).and(fallProperty.isNotNull())
  128. );
  129. btnFallCancel.visibleProperty().bind(btnFallCancel.managedProperty());
  130. btnFallSendHl7.managedProperty().bind(
  131. state.isEqualTo(State.VIEW).and(fallProperty.isNotNull())
  132. );
  133. btnFallSendHl7.visibleProperty().bind(btnFallSendHl7.managedProperty());
  134. }
  135. @FXML
  136. Button btnFallSendHl7;
  137. @FXML
  138. private void clickedSendHl7(){
  139. /* Natascha */
  140. //TODO send funny message
  141. Fall fall = fallProperty.get();
  142. Patient patient = mainController.getPatientTablesController().getSelectedPatient();
  143. }
  144. public void editFall(){
  145. this.state.set(State.EDIT);
  146. }
  147. @FXML
  148. void clickedFallEnableEdit(ActionEvent event) {
  149. editFall();
  150. }
  151. @FXML
  152. void clickedFallCancel(ActionEvent event) {
  153. if(fallProperty.get()!=null){
  154. fallProperty.get().setStorniert(true);
  155. try {
  156. DBHandler.setFall(fallProperty.get(), mainController.getCurrentMitarbeiter().getMitarbID(), true);
  157. }catch (Exception e){
  158. e.printStackTrace();
  159. }
  160. mainController.refreshCasesFromDb(mainController.getPatientTablesController().getSelectedPatient());
  161. }
  162. }
  163. @FXML
  164. void clickedFallAbort(ActionEvent event) {
  165. this.state.set(State.VIEW);
  166. copyFallDataIntoField(fallProperty.get());
  167. }
  168. @FXML
  169. void clickedFallSave(ActionEvent event) {
  170. if (this.state.get() == State.CREATE) {
  171. Fall fall = new Fall();
  172. copyFieldDataIntoFall(fall);
  173. try {
  174. DBHandler.setFall(fall, mainController.getCurrentMitarbeiter().getMitarbID());
  175. } catch (SQLException e) {
  176. e.printStackTrace();
  177. }
  178. } else {
  179. copyFieldDataIntoFall(fallProperty.get());
  180. try {
  181. DBHandler.setFall(fallProperty.get(), mainController.getCurrentMitarbeiter().getMitarbID(), true);
  182. } catch (SQLException e) {
  183. e.printStackTrace();
  184. }
  185. }
  186. this.state.set(State.VIEW);
  187. mainController.refreshCasesFromDb(mainController.getPatientTablesController().getSelectedPatient());
  188. }
  189. public void createNewFall() {
  190. clearFields();
  191. this.state.set(State.CREATE);
  192. Patient patient = mainController.getPatientTablesController().getSelectedPatient();
  193. // Kasse by Default auf die im Patienten hinterlegten Kasse setzen.
  194. for (Kasse kasse : fallKasse.getItems()) {
  195. if (kasse.getKassenID() == patient.getKassenID()) {
  196. fallKasse.getSelectionModel().select(kasse);
  197. break;
  198. }
  199. }
  200. fallVersichertennummer.setText(patient.getVersichertennummer());
  201. }
  202. private void clearFields(){
  203. if(state.get() == State.CREATE) {
  204. dtTmAufnahme.setToCurrentDateTime();
  205. dtTmEntlassung.setToCurrentDateTime();
  206. }else{
  207. dtTmAufnahme.setDateTime(null);
  208. dtTmEntlassung.setDateTime(null);
  209. }
  210. fallPatID.setText(""); //TODO
  211. fallCreateTime.setText("");
  212. fallCreator.setText("");
  213. fallEditTime.setText("");
  214. fallEditor.setText("");
  215. fallEinweisenderArzt.setText("");
  216. fallSelbsteinweisung.setSelected(false);
  217. fallVersichertennummer.setText("");
  218. fallKasse.setValue(null);
  219. fallHauptdiagnose.setValue(null);
  220. fallHauptdiagnose.setItems(null);
  221. fallFallart.setValue(null);
  222. }
  223. private void copyFieldDataIntoFall(Fall fall){
  224. fall.setPatient(mainController.getPatientTablesController().getSelectedPatient());
  225. fall.setAufnahmeDatum(dtTmAufnahme.getDateTime());
  226. fall.setEntlassungsDatum(dtTmEntlassung.getDateTime());
  227. if(fallSelbsteinweisung.isSelected()) {
  228. fall.setSelbsteinweisung(true);
  229. fall.setEinweisenderArzt(null);
  230. }else{
  231. fall.setEinweisenderArzt(fallEinweisenderArzt.getText());
  232. fall.setSelbsteinweisung(false);
  233. }
  234. fall.setVersichertenNummer(fallVersichertennummer.getText());
  235. fall.setKasse(fallKasse.getValue());
  236. fall.setFallArt(fallFallart.getValue());
  237. fall.setHauptdiagnoseId(fallHauptdiagnose.getValue().getDiagID());
  238. //fall.setVorstellDatum(); //TODO
  239. }
  240. private void copyFallDataIntoField(Fall fall){
  241. if(fall==null){
  242. System.out.println("copyFallDataIntoFiled - Fall ist null");
  243. clearFields();
  244. return;
  245. }
  246. dtTmAufnahme.setDateTime(fall.getAufnahmeDatum());
  247. dtTmEntlassung.setDateTime(fall.getEntlassungsDatum());
  248. fallPatID.setText(fallProperty.get().getPatient() + ""); //(fall.getPatient().getVorname()+" "+fall.getPatient().getNachname()); //TODO
  249. fallCreateTime.setText(fall.getErstellDatumZeit() !=null ? fall.getErstellDatumZeit().toString():"");
  250. fallCreator.setText(Integer.toString(fall.getErsteller()));
  251. fallEditTime.setText(fall.getBearbeitetDatumZeit()!=null? fall.getBearbeitetDatumZeit().toString():"");
  252. fallEditor.setText(Integer.toString(fall.getBearbeiter()));
  253. fallEinweisenderArzt.setText(fall.getEinweisenderArzt());
  254. fallSelbsteinweisung.setSelected(fall.getSelbsteinweisung());
  255. fallVersichertennummer.setText(fall.getVersichertenNummer());
  256. fallKasse.setValue(fall.getKasse());
  257. for (Diagnose diagnose : fallHauptdiagnose.getItems()){
  258. if(diagnose.getDiagID() == fall.getHauptdiagnoseId()){
  259. fallHauptdiagnose.setValue(diagnose);
  260. return;
  261. }
  262. }
  263. //fallHauptdiagnose.setValue(fall.getHauptDiagnose()); TODO
  264. // fallHauptdiagnose.setItems(fall.getD); TODO
  265. fallFallart.setValue(fall.getFallArt());
  266. }
  267. }