From 06b5381e885cf5cf4cb008e22e7cb2dff88f40b5 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 8 May 2023 11:56:35 +0200 Subject: Verschiebe Implementierungen für Therapiepläne in eigenes Paket --- .../therapieplan/DefaultTherapieplanService.java | 202 +++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java (limited to 'src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java') diff --git a/src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java b/src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java new file mode 100644 index 0000000..8fe3780 --- /dev/null +++ b/src/main/java/DNPM/services/therapieplan/DefaultTherapieplanService.java @@ -0,0 +1,202 @@ +/* + * MIT License + * + * 2023 Comprehensive Cancer Center Mainfranken + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package DNPM.services.therapieplan; + +import DNPM.services.FormService; +import de.itc.onkostar.api.IOnkostarApi; +import de.itc.onkostar.api.Item; +import de.itc.onkostar.api.Procedure; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Objects; + +import static DNPM.services.FormService.hasValue; +import static DNPM.services.FormService.isYes; + +public class DefaultTherapieplanService implements TherapieplanService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final IOnkostarApi onkostarApi; + + private final FormService formService; + + public DefaultTherapieplanService(final IOnkostarApi onkostarApi, final FormService formService) { + this.onkostarApi = onkostarApi; + this.formService = formService; + } + + /** + * Verlinke MTB und Übernahme Datum aus Hauptformular in weiteren Bereichen + * "Humangenetische Beratung" und "Reevaluation" und Unterformularen, wenn erforderlich. + * + * @param procedure Die Prozedur mit Hauptformular + */ + @Override + public void updateRequiredMtbEntries(Procedure procedure) { + this.updateMtbInSections(procedure); + this.updateMtbInSubforms(procedure); + } + + /** + * Finde verlinkte MTBs in Hauptformular und Unterformularen + * + * @param procedure Die Prozedur mit Hauptformular + * @return Liste mit verlinkten MTBs + */ + @Override + public List findReferencedMtbs(Procedure procedure) { + if (!hasValue(procedure, "referstemtb")) { + return List.of(); + } + + var mtbProcedure = this.onkostarApi.getProcedure(procedure.getValue("referstemtb").getInt()); + if (null == mtbProcedure) { + return List.of(); + } + return List.of(mtbProcedure); + } + + /** + * Finde verlinkte MTBs in Hauptformular und Unterformularen + * + * @param procedureId ID der Prozedur mit Hauptformular + * @return Liste mit verlinkten MTBs + */ + @Override + public List findReferencedMtbs(int procedureId) { + var procedure = this.onkostarApi.getProcedure(procedureId); + if (null == procedure) { + return List.of(); + } + return findReferencedMtbs(procedure); + } + + private void updateMtbInSections(Procedure procedure) { + if (!isYes(procedure, "humangenberatung") && !isYes(procedure, "reevaluation")) { + return; + } + + var mtbReference = procedure.getValue("referstemtb").getInt(); + var mtbDate = procedure.getValue("datum").getDate(); + var noUpdateRequired = true; + + if ( + isYes(procedure, "humangenberatung") && ( + !hasValue(procedure, "reftkhumangenber") + || mtbReference != procedure.getValue("reftkhumangenber").getInt() + ) + ) { + procedure.setValue("reftkhumangenber", new Item("ref_tk_humangenber", mtbReference)); + noUpdateRequired = false; + } + + if ( + isYes(procedure, "humangenberatung") && ( + !hasValue(procedure, "datumtkhumangenber") + || !mtbDate.equals(procedure.getValue("datumtkhumangenber").getDate()) + ) + ) { + procedure.setValue("datumtkhumangenber", new Item("datum_tk_humangenber", mtbDate)); + noUpdateRequired = false; + } + + if ( + isYes(procedure, "reevaluation") && ( + !hasValue(procedure, "reftkreevaluation") + || mtbReference != procedure.getValue("reftkreevaluation").getInt() + ) + ) { + procedure.setValue("reftkreevaluation", new Item("ref_tk_reevaluation", mtbReference)); + noUpdateRequired = false; + } + + if ( + isYes(procedure, "reevaluation") && ( + !hasValue(procedure, "datumtkreevaluation") + || !mtbDate.equals(procedure.getValue("datumtkreevaluation").getDate()) + ) + ) { + procedure.setValue("datumtkreevaluation", new Item("datum_tk_reevaluation", mtbDate)); + noUpdateRequired = false; + } + + if (noUpdateRequired) { + return; + } + + try { + onkostarApi.saveProcedure(procedure, false); + } catch (Exception e) { + logger.error("Formular 'DNPM Therapieplan' konnte nicht aktualisiert werden", e); + } + } + + private void updateMtbInSubforms(Procedure procedure) { + if ( + !hasValue(procedure, "referstemtb") || !hasValue(procedure, "datum") + ) { + return; + } + + var mtbReference = procedure.getValue("referstemtb").getInt(); + var mtbDate = procedure.getValue("datum").getDate(); + + formService.getSubFormProcedureIds(procedure.getId()).stream() + .map(onkostarApi::getProcedure) + .filter(Objects::nonNull) + .forEach(subform -> { + if (subform.getFormName().equals("DNPM UF Einzelempfehlung")) { + if (mtbReference != subform.getValue("mtb").getInt() && !mtbDate.equals(subform.getValue("ufeedatum").getDate())) { + subform.setValue("mtb", new Item("ref_tumorkonferenz", mtbReference)); + subform.setValue("ufeedatum", new Item("datum", mtbDate)); + + try { + onkostarApi.saveProcedure(subform, false); + } catch (Exception e) { + logger.error("Formular 'DNPM UF Einzelempfehlung' konnte nicht aktualisiert werden", e); + } + } + } + + if (subform.getFormName().equals("DNPM UF Rebiopsie")) { + if (mtbReference != subform.getValue("reftumorkonferenz").getInt() && !mtbDate.equals(subform.getValue("ufrbdatum").getDate())) { + subform.setValue("reftumorkonferenz", new Item("ref_tumorkonferenz", mtbReference)); + subform.setValue("ufrbdatum", new Item("datum", mtbDate)); + + try { + onkostarApi.saveProcedure(subform, false); + } catch (Exception e) { + logger.error("Formular 'DNPM UF Rebiopsie' konnte nicht aktualisiert werden", e); + } + } + } + }); + } + + +} -- cgit v1.2.3