From e9c25818d2966e175ef29f2d6663fd5292318bd8 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Mon, 20 Mar 2023 22:16:08 +0100 Subject: [PATCH] =?UTF-8?q?Issue=20#11:=20Methode=20zum=20Auffinden=20refe?= =?UTF-8?q?renzierter=20MTBs=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/DNPM/config/PluginConfiguration.java | 7 +++ .../services/DefaultTherapieplanService.java | 35 +++++++++++ .../MultipleMtbTherapieplanService.java | 63 +++++++++++++++++++ .../java/DNPM/services/SettingsService.java | 2 +- .../DNPM/services/TherapieplanService.java | 18 ++++++ .../services/TherapieplanServiceFactory.java | 2 +- 6 files changed, 125 insertions(+), 2 deletions(-) diff --git a/src/main/java/DNPM/config/PluginConfiguration.java b/src/main/java/DNPM/config/PluginConfiguration.java index 825c57c..3f27034 100644 --- a/src/main/java/DNPM/config/PluginConfiguration.java +++ b/src/main/java/DNPM/config/PluginConfiguration.java @@ -2,6 +2,8 @@ package DNPM.config; import DNPM.database.SettingsRepository; import DNPM.services.*; +import DNPM.services.mtb.DefaultMtbService; +import DNPM.services.mtb.MtbService; import de.itc.onkostar.api.IOnkostarApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -35,6 +37,11 @@ public class PluginConfiguration { return new SettingsService(settingsRepository); } + @Bean + public MtbService mtbService(final SettingsService settingsService) { + return new DefaultMtbService(settingsService); + } + @Bean public TherapieplanServiceFactory therapieplanServiceFactory( final IOnkostarApi onkostarApi, diff --git a/src/main/java/DNPM/services/DefaultTherapieplanService.java b/src/main/java/DNPM/services/DefaultTherapieplanService.java index f705ce8..eee2041 100644 --- a/src/main/java/DNPM/services/DefaultTherapieplanService.java +++ b/src/main/java/DNPM/services/DefaultTherapieplanService.java @@ -6,6 +6,7 @@ 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; @@ -36,6 +37,40 @@ public class DefaultTherapieplanService implements TherapieplanService { 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; diff --git a/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java b/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java index d4eb297..faded4b 100644 --- a/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java +++ b/src/main/java/DNPM/services/MultipleMtbTherapieplanService.java @@ -1,12 +1,75 @@ package DNPM.services; +import de.itc.onkostar.api.IOnkostarApi; import de.itc.onkostar.api.Procedure; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static DNPM.services.FormService.hasValue; +import static DNPM.services.FormService.isYes; + public class MultipleMtbTherapieplanService implements TherapieplanService { + private final IOnkostarApi onkostarApi; + + private final FormService formService; + + public MultipleMtbTherapieplanService(final IOnkostarApi onkostarApi, final FormService formService) { + this.onkostarApi = onkostarApi; + this.formService = formService; + } + @Override public void updateRequiredMtbEntries(Procedure procedure) { // No action required } + @Override + public List findReferencedMtbs(Procedure procedure) { + var procedureIds = new ArrayList(); + + var mtbReference = procedure.getValue("referstemtb").getInt(); + procedureIds.add(mtbReference); + + if (isYes(procedure, "humangenberatung") && hasValue(procedure, "reftkhumangenber")) { + procedureIds.add(procedure.getValue("reftkhumangenber").getInt()); + } + + if (isYes(procedure, "reevaluation") && hasValue(procedure, "reftkreevaluation")) { + procedureIds.add(procedure.getValue("reftkreevaluation").getInt()); + } + + formService.getSubFormProcedureIds(procedure.getId()).stream() + .map(onkostarApi::getProcedure) + .filter(Objects::nonNull) + .forEach(subform -> { + if (subform.getFormName().equals("DNPM UF Einzelempfehlung")) { + procedureIds.add(subform.getValue("mtb").getInt()); + } + + if (subform.getFormName().equals("DNPM UF Rebiopsie")) { + procedureIds.add(subform.getValue("reftumorkonferenz").getInt()); + } + }); + + return procedureIds.stream() + .distinct() + .map(onkostarApi::getProcedure) + .filter(Objects::nonNull) + .sorted(Comparator.comparing(Procedure::getStartDate)) + .collect(Collectors.toList()); + } + + @Override + public List findReferencedMtbs(int procedureId) { + var procedure = this.onkostarApi.getProcedure(procedureId); + if (null == procedure) { + return List.of(); + } + return findReferencedMtbs(procedure); + } } diff --git a/src/main/java/DNPM/services/SettingsService.java b/src/main/java/DNPM/services/SettingsService.java index b07a2f3..7459d4e 100644 --- a/src/main/java/DNPM/services/SettingsService.java +++ b/src/main/java/DNPM/services/SettingsService.java @@ -41,7 +41,7 @@ public class SettingsService { * @return Übergibt true, wenn mehrere_mtb_in_mtbepisode auf "Ja" gesetzt ist. */ public boolean multipleMtbsInMtbEpisode() { - var setting = getSetting("SID"); + var setting = getSetting("mehrere_mtb_in_mtbepisode"); return setting.isPresent() && setting.get().equals("true"); } } diff --git a/src/main/java/DNPM/services/TherapieplanService.java b/src/main/java/DNPM/services/TherapieplanService.java index e47d75e..7a725fc 100644 --- a/src/main/java/DNPM/services/TherapieplanService.java +++ b/src/main/java/DNPM/services/TherapieplanService.java @@ -2,6 +2,8 @@ package DNPM.services; import de.itc.onkostar.api.Procedure; +import java.util.List; + public interface TherapieplanService { /** @@ -12,4 +14,20 @@ public interface TherapieplanService { */ void updateRequiredMtbEntries(Procedure procedure); + /** + * Finde verlinkte MTBs in Hauptformular und Unterformularen + * + * @param procedure Die Prozedur mit Hauptformular + * @return Liste mit verlinkten MTBs + */ + List findReferencedMtbs(Procedure procedure); + + /** + * Finde verlinkte MTBs in Hauptformular und Unterformularen + * + * @param procedureId ID der Prozedur mit Hauptformular + * @return Liste mit verlinkten MTBs + */ + List findReferencedMtbs(int procedureId); + } diff --git a/src/main/java/DNPM/services/TherapieplanServiceFactory.java b/src/main/java/DNPM/services/TherapieplanServiceFactory.java index 0b64410..3e05fb4 100644 --- a/src/main/java/DNPM/services/TherapieplanServiceFactory.java +++ b/src/main/java/DNPM/services/TherapieplanServiceFactory.java @@ -22,7 +22,7 @@ public class TherapieplanServiceFactory { public TherapieplanService currentUsableInstance() { if (settingsService.multipleMtbsInMtbEpisode()) { - return new MultipleMtbTherapieplanService(); + return new MultipleMtbTherapieplanService(onkostarApi, formService); } return new DefaultTherapieplanService(onkostarApi, formService);