diff --git a/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java b/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java index d5f6c9ef528895e290290279889cb2fbb464c3e0..40bee43c61eaa12f49341314d7ae4a03fbbd89ba 100644 --- a/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java +++ b/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java @@ -33,6 +33,7 @@ import lombok.Getter; public class Antragsteller { private String anrede; + private String firmName; private String vorname; private String nachname; private String geburtsname; diff --git a/pom.xml b/pom.xml index 8f8b61c4ea856454bc2a1ce111be3fec068950ef..842a106415d04ecc600bdefb8a236e9b447aa6ca 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ </modules> <properties> - <vorgang-manager.version>2.6.0</vorgang-manager.version> + <vorgang-manager.version>2.7.0-SNAPSHOT</vorgang-manager.version> <jsoup.version>1.14.3</jsoup.version> <xmlschema.version>2.3.0</xmlschema.version> diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java index 4e5251da5812a678dd2234ab964de002cabd78e8..7a4ffd5005be1439e1db60aba09cde5a8de7d473 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java @@ -27,10 +27,12 @@ import static java.util.Objects.*; import java.util.Collections; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -57,6 +59,15 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { static final String PLZ = "sh_plz"; static final String ORT = "ort"; + static final String FIELD_FIRMA_NAME = "firm_name"; + static final String FIELD_FIRMA_STRASSE = "firma_strasse"; + static final String FIELD_FIRMA_HAUSNUMMER = "firma_hausnummer"; + static final String FIELD_FIRMA_PLZ = "firma_plz"; + static final String FIELD_FIRMA_STADT = "firma_stadt"; + static final String FIELD_ANSPRECHPARTNER_ANREDE = "firma_ansprechpartner_anrede"; + static final String FIELD_ANSPRECHPARTNER_VORNAME = "firma_ansprechpartner_vorname"; + static final String FIELD_ANSPRECHPARTNER_NACHNAME = "firma_ansprechpartner_nachname"; + @Autowired private AfmAntragstellerHeaderMapper antragstellerHeaderMapper; @@ -81,15 +92,21 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { return (String) formDataMap.get(POSTFACH_ID); } - @SuppressWarnings("unchecked") private Optional<Map<String, Object>> getAntragstellerMap(Map<String, Object> formDataMap) { return Optional.ofNullable(formDataMap.get(ANTRAGSTELLER)) .or(() -> Optional.ofNullable(formDataMap.get(ANTRAGSTELLER_UPPERCASE))) - .map(Map.class::cast).map(LinkedHashMap::new); + .map(Map.class::cast).map(LinkedHashMap<String, Object>::new); } private Antragsteller.AntragstellerBuilder addAntragstellerData(Antragsteller.AntragstellerBuilder builder, Map<String, Object> antragstellerMap) { + return isNull(antragstellerMap.get(FIELD_FIRMA_NAME)) + ? addPrivateAntragstellerData(builder, antragstellerMap) + : addFirmAntragstellerData(builder, antragstellerMap); + } + + private Antragsteller.AntragstellerBuilder addPrivateAntragstellerData(Antragsteller.AntragstellerBuilder builder, + Map<String, Object> antragstellerMap) { return builder // .anrede((String) antragstellerMap.get(ANREDE)) // .vorname((String) antragstellerMap.get(VORNAME)) // @@ -103,17 +120,37 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { .hausnummer((String) antragstellerMap.get(HAUSNUMMER)) // .plz((String) antragstellerMap.get(PLZ)) // .ort((String) antragstellerMap.get(ORT)) // - .data(getNotMappedData(antragstellerMap)); + .data(getNotMappedData(antragstellerMap, getPrivateFields())); + } + + Antragsteller.AntragstellerBuilder addFirmAntragstellerData(Antragsteller.AntragstellerBuilder builder, + Map<String, Object> antragstellerMap) { + return builder + .firmName(MapUtils.getString(antragstellerMap, FIELD_FIRMA_NAME)) + .strasse(MapUtils.getString(antragstellerMap, FIELD_FIRMA_STRASSE)) + .hausnummer(MapUtils.getString(antragstellerMap, FIELD_FIRMA_HAUSNUMMER)) + .plz(MapUtils.getString(antragstellerMap, FIELD_FIRMA_PLZ)) + .ort(MapUtils.getString(antragstellerMap, FIELD_FIRMA_STADT)) + .anrede(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_ANREDE)) + .vorname(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_VORNAME)) + .nachname(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_NACHNAME)) + .telefon(MapUtils.getString(antragstellerMap, TELEFON)) + .email(MapUtils.getString(antragstellerMap, EMAIL)) + .data(getNotMappedData(antragstellerMap, getFirmaFields())); + } + + private Map<String, Object> getNotMappedData(Map<String, Object> antragstellerMap, Set<String> mappedFields) { + return antragstellerMap.entrySet().stream().filter(entry -> !mappedFields.contains(entry.getKey())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (key1, key2) -> key1, LinkedHashMap::new)); } - private Map<String, Object> getNotMappedData(Map<String, Object> antragstellerMap) { - var map = new LinkedHashMap<>(antragstellerMap); - getFields().forEach(map::remove); - return map; + private Set<String> getPrivateFields() { + return Set.of(ANREDE, VORNAME, NACHNAME, GEBURTSNAME, GEBURTSDATUM, GEBURTSORT, EMAIL, TELEFON, STRASSE, HAUSNUMMER, PLZ, ORT); } - private List<String> getFields() { - return List.of(ANREDE, VORNAME, NACHNAME, GEBURTSNAME, GEBURTSDATUM, GEBURTSORT, EMAIL, TELEFON, STRASSE, HAUSNUMMER, PLZ, ORT); + private Set<String> getFirmaFields() { + return Set.of(FIELD_FIRMA_NAME, FIELD_FIRMA_STRASSE, FIELD_FIRMA_HAUSNUMMER, FIELD_FIRMA_PLZ, FIELD_FIRMA_STADT, + FIELD_ANSPRECHPARTNER_ANREDE, FIELD_ANSPRECHPARTNER_VORNAME, FIELD_ANSPRECHPARTNER_NACHNAME, TELEFON, EMAIL); } private Map<String, Object> removeMappedData(Map<String, Object> formDataMap) {