diff options
| author | Paul-Christian Volkmer | 2023-03-20 22:16:08 +0100 |
|---|---|---|
| committer | Paul-Christian Volkmer | 2023-03-20 22:29:32 +0100 |
| commit | e9c25818d2966e175ef29f2d6663fd5292318bd8 (patch) | |
| tree | 087576816bc9748de945dcda4f500332f664f24c /src/main/java/DNPM | |
| parent | 887221d5aec7fbe32a86b705b33aa4b5d2fa7062 (diff) | |
Issue #11: Methode zum Auffinden referenzierter MTBs hinzugefügt
Diffstat (limited to 'src/main/java/DNPM')
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; @@ -36,6 +38,11 @@ public class PluginConfiguration { } @Bean + public MtbService mtbService(final SettingsService settingsService) { + return new DefaultMtbService(settingsService); + } + + @Bean public TherapieplanServiceFactory therapieplanServiceFactory( final IOnkostarApi onkostarApi, final SettingsService settingsService, 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<Procedure> 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<Procedure> 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<Procedure> findReferencedMtbs(Procedure procedure) { + var procedureIds = new ArrayList<Integer>(); + + 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<Procedure> 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 <code>true</code>, wenn <code>mehrere_mtb_in_mtbepisode</code> 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<Procedure> findReferencedMtbs(Procedure procedure); + + /** + * Finde verlinkte MTBs in Hauptformular und Unterformularen + * + * @param procedureId ID der Prozedur mit Hauptformular + * @return Liste mit verlinkten MTBs + */ + List<Procedure> 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); |
