diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index c3990d22032d06d87b2cd3edd0ec09c44b156ea2..dbef8b662fa617182e6b31cdc7f86a591ca4d195 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -81,6 +81,13 @@ <optional>true</optional> </dependency> + + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + </dependency> + + <!--dev tools--> <dependency> <groupId>org.mapstruct</groupId> diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java index e66c3a241d7abd436d0002ab65fe4879c998dd75..e4d7d675f1a11f287f7610aae8682357336bd907 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java @@ -1,6 +1,7 @@ package de.ozgcloud.bescheid; import java.io.File; +import java.util.Optional; import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangId; @@ -25,5 +26,8 @@ public class Bescheid { private String contentType; private long size; + @Builder.Default + private Optional<String> nachrichtText = Optional.empty(); + private Vorgang.ServiceKonto serviceKonto; } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java index a302c3ef033e4e6df9f5acaf9e9cc90e2237d9ec..64502b3b372b7e4e0ca826190419fd343ede23b5 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java @@ -1,7 +1,15 @@ package de.ozgcloud.bescheid.smartdocuments; import java.io.File; +import java.io.IOException; import java.util.Collection; +import java.util.Optional; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -12,6 +20,8 @@ import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.BodyExtractors; import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.WebClient; +import org.w3c.dom.Text; +import org.xml.sax.SAXException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -21,6 +31,8 @@ import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidRemoteService; import de.ozgcloud.bescheid.BescheidRequest; import de.ozgcloud.bescheid.common.callcontext.UserProfile; +import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsBescheidRemoteService.SmartDocumentsResponse.SmartDocumentDocument; +import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsBescheidRemoteService.SmartDocumentsResponse.SmartDocumentFile; import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData; import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData.BescheidData; import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData.UserData; @@ -40,6 +52,9 @@ import reactor.core.publisher.Mono; @ConditionalOnProperty("ozgcloud.bescheid.smart-documents.url") class SmartDocumentsBescheidRemoteService implements BescheidRemoteService { + @SuppressWarnings("deprecation") // SD requires forced UTF-8 encoding + private static final MediaType JSON_MEDIA_TYPE_FOR_SD = MediaType.APPLICATION_JSON_UTF8; + @Autowired @Qualifier("smartDocuments") private WebClient smartDocumentsWebClient; @@ -53,7 +68,7 @@ class SmartDocumentsBescheidRemoteService implements BescheidRemoteService { LOG.debug(() -> buildLogRequest(sdRequest)); return smartDocumentsWebClient.post().accept(MediaType.APPLICATION_JSON) - .contentType(MediaType.APPLICATION_JSON_UTF8) + .contentType(JSON_MEDIA_TYPE_FOR_SD) .bodyValue(sdRequest) .retrieve() .onStatus(HttpStatusCode::is4xxClientError, this::handleClientError) @@ -85,16 +100,50 @@ class SmartDocumentsBescheidRemoteService implements BescheidRemoteService { .bescheidFileName(smartDocumentsFile.getFilename()) .size(smartDocumentsFile.getDocument().getData().length()) .contentType(MediaType.APPLICATION_PDF_VALUE) + .nachrichtText(getNachrichtText(smartDocumentsResponse)) .genehmigt(request.isGenehmigt()) .createdBy(request.getCreateFor().getId()) .vorgangId(request.getVorgangId()) .build(); } - private SmartDocumentsResponse.SmartDocumentFile getSmartDocumentsFile(SmartDocumentsResponse response) { + private SmartDocumentFile getSmartDocumentsFile(SmartDocumentsResponse response) { + return getSmartDocumentsFile(response, "PDF") + .orElseThrow(() -> new IllegalStateException("No PDF File in SmartDocuments Response found.")); + } + + Optional<String> getNachrichtText(SmartDocumentsResponse response) { + return getXMLFile(response).flatMap(this::extractTextFormXmlFile); + } + + Optional<String> extractTextFormXmlFile(File xmlFile) { + var xPath = XPathFactory.newInstance().newXPath(); + try { + var document = DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder().parse(xmlFile); + var expr = xPath.compile("/root/SmartDocument/Fields/NachrichtenText/text()"); + var text = (Text) expr.evaluate(document, XPathConstants.NODE); + + return Optional.of(text.getTextContent()); + } catch (XPathExpressionException | SAXException | IOException | ParserConfigurationException e) { + LOG.error("XML-Parsing error on extracting Nachricht-Text: {}", e.getMessage(), e); + } catch (ClassCastException e) { + LOG.error("Error on extraction Nachricht-Text. XPath return unexpected Type.", e); + } catch (RuntimeException e) { + LOG.error("Unexpected Error on extracting NachrichtText: {}", e.getMessage(), e); + } + return Optional.empty(); + } + + Optional<File> getXMLFile(SmartDocumentsResponse response) { + return getSmartDocumentsFile(response, "XML") + .map(SmartDocumentFile::getDocument) + .map(SmartDocumentDocument::getData); + } + + Optional<SmartDocumentFile> getSmartDocumentsFile(SmartDocumentsResponse response, String fileType) { return response.getFile().stream() - .filter(file -> file.getOutputFormat().equals("PDF")) - .findAny().orElseThrow(() -> new IllegalStateException("No PDF File in SmartDocuments Response found.")); + .filter(file -> file.getOutputFormat().equals(fileType)) + .findFirst(); } SmartDocumentsRequest createRequest(BescheidRequest request, Vorgang vorgang) { diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java index 964102489b23ab66aedcad3409cf1e00075fa643..064919d1f62f9e08e60e286adffdbd79645b937f 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java @@ -1,20 +1,29 @@ package de.ozgcloud.bescheid.smartdocuments; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.io.File; +import java.util.Optional; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Spy; import de.ozgcloud.bescheid.BescheidRequestTestFactory; import de.ozgcloud.bescheid.BescheidTestFactory; import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory; import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData.UserData; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; +import de.ozgcloud.common.binaryfile.TempFileUtils; +import de.ozgcloud.common.test.TestUtils; class SmartDocumentsBescheidRemoteServiceTest { + @Spy @InjectMocks private SmartDocumentsBescheidRemoteService service; @@ -43,4 +52,37 @@ class SmartDocumentsBescheidRemoteServiceTest { .extracting(UserData::getEmail).isEqualTo(UserProfileTestFactory.EMAIL); } } + + @Nested + class TestGetNachrichtText { + private File xmlFile = TempFileUtils.writeTmpFile(TestUtils.loadFile("SD_answer.xml")); + + @Test + void shouldCallExtractText() { + doReturn(Optional.of(xmlFile)).when(service).getXMLFile(any()); + + service.getNachrichtText(SmartDocumentsResponseTestFactory.create()); + + verify(service).extractTextFormXmlFile(notNull()); + } + + @Nested + class ExtractingText { + + @Test + void shouldReturnText() { + var text = service.extractTextFormXmlFile(xmlFile); + + assertThat(text).isPresent().get().isNotNull(); + } + + @Test + void shouldHandleError() { + var text = service.extractTextFormXmlFile(null); + + assertThat(text).isEmpty(); + } + + } + } } diff --git a/bescheid-manager/src/test/resources/SD_answer.xml b/bescheid-manager/src/test/resources/SD_answer.xml new file mode 100644 index 0000000000000000000000000000000000000000..df9d905e472c9b0a077421064ad61a990389ede5 --- /dev/null +++ b/bescheid-manager/src/test/resources/SD_answer.xml @@ -0,0 +1,399 @@ +<?xml version="1.0" encoding="UTF-8"?> +<root> + <SmartDocument Version="2.0"> + <Selection> + <TypistID>E53F295BC2794A6697155664D0F30880</TypistID> + <UserGroupID>88FC6F29D71C4BB096B71BC9B3C860F8</UserGroupID> + <AuthorID>E53F295BC2794A6697155664D0F30880</AuthorID> + <TemplateGroupID>94A1C1208DF0479CB58E3CFB0A6057BC</TemplateGroupID> + <Template>KFAS_LIVE_KI_10_Haltverbot_befristet</Template> + <TemplateID Timestamp="1704722931920">7ACEA5AE7C3642978ACCC48182EBCD6E</TemplateID> + <Blocks> + <Block VersionID="15DCCB4DFE1A414796EBA44352C7AAFF">CC2A9C0E14164B9A967CEE8DCD41B3B5</Block> + <Placeholders> + <Placeholder ID="125E766AF0424D4992F8F04C806F75EB">CC2A9C0E14164B9A967CEE8DCD41B3B5</Placeholder> + </Placeholders> + </Blocks> + </Selection> + <Variables/> + <QuestionAnswers> + <Question ID="07BE1279C0504852AEFBB264D165E139" + Description="Tagesdatum" + OriginalValue="2024-01-08"><![CDATA[08.01.2024]]></Question> + <Question ID="23BB945F7BA44321B09A0A984D541DD1" + Description="Tage Halteverbot" + ContentId="23BB945F7BA44321B09A0A984D541DD1" + IsFormatted="true" + ContentType="XML"> + <Records> + <Record> + <Field Name="71F5F35C4FD94982A1F8321A73E9B593"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="58F6E456AE1F4E13907D78E158BF4847" Description="Freitag"> + <Answer ID="313DC774D89E45D8864FC33983C95923" + Description="Nein" + IsFormatted="true" + ContentId="313DC774D89E45D8864FC33983C95923"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="B66C9D21D31A4293852EEDCAB57C593B"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="EF33891FF01A42B0BEFB1E78E3FC023D" Description="Samstag"> + <Answer ID="24CD7BEAB973475A998C7EAB9C4D1AE3" + Description="Nein" + IsFormatted="true" + ContentId="24CD7BEAB973475A998C7EAB9C4D1AE3"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="67082AAB675E457180A7014531C46CB3"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="60C6CD1F29084A26BEC493A862583AAB" Description="Montag"> + <Answer ID="13A1D81A4DB74AAEB2A6E684C575B768" + Description="Nein" + IsFormatted="true" + ContentId="13A1D81A4DB74AAEB2A6E684C575B768"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="3FD23F8F98EF459A95B50448DEDFF20E"> + <Value><![CDATA[ja]]></Value> + <QuestionAnswers> + <Question ID="C8BC6BFFE8BE4E6BBDC4CBCD34377DB2" Description="Mittwoch"> + <Answer ID="97B676CAC9B74D00B574F319B2D20BB5" + Description="Ja" + IsFormatted="true" + ContentId="97B676CAC9B74D00B574F319B2D20BB5"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="09658B4DA4BB4295822A42C0AA8FC2EC"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="39BF39565D4043078ABEEC9601A091E7" Description="Donnerstag"> + <Answer ID="8D4A19B4D3AF448FB720E9160E7A40D2" + Description="Nein" + IsFormatted="true" + ContentId="8D4A19B4D3AF448FB720E9160E7A40D2"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="975867EBE97547ACA6B8D85F1D8D39C8"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="03906ABB93494C6EB087D87C4C70217C" Description="Dienstag"> + <Answer ID="B9ACD0E74C6B41BEA700C9EB8FCFFC25" + Description="Nein" + IsFormatted="true" + ContentId="B9ACD0E74C6B41BEA700C9EB8FCFFC25"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="AF89873144744EDC9A1B78776F3D25F5"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="06349259221C4DEFBB4FE9FD33D76403" Description="Sonntag"> + <Answer ID="853ED74B536C4BD8AF95193450F18201" + Description="Nein" + IsFormatted="true" + ContentId="853ED74B536C4BD8AF95193450F18201"/> + </Question> + </QuestionAnswers> + </Field> + </Record> + </Records> + </Question> + <Question ID="28CB094DAD1A4604B08CE7C5D2177C03" Description="Beschilderung"> + <Answer ID="D2CA0BC90987429DA8CCF855C496DBAB" + Description="Ja" + IsFormatted="true" + ContentId="D2CA0BC90987429DA8CCF855C496DBAB"/> + </Question> + <Question ID="736372FDB0A2407CBBFB15DE71FD1450" + Description="Geschlecht Antragssteller"> + <Answer ID="4E80D616EB364F2EA9C567C1D7F8AED8" + Description="männlich" + IsFormatted="true" + ContentId="4E80D616EB364F2EA9C567C1D7F8AED8"/> + </Question> + <Question ID="97E309BDBDB548F48D162D289056B313" Description="Uhrzeit Halteverbot"> + <Answer ID="E45BE1342D5F43D59E21986C377DA1B0" + Description="ganztägig" + IsFormatted="true" + ContentId="E45BE1342D5F43D59E21986C377DA1B0"/> + </Question> + <Question ID="992F241A1DF4497A8B4568E69B9C567C" + Description="Vor Ort geltende Parkregelung"> + <Answer ID="7437DBBAAA6F468DBFAC138607C123FA" + Description="Parken am Seitenstreifen" + IsFormatted="true" + ContentId="7437DBBAAA6F468DBFAC138607C123FA"/> + </Question> + <Question ID="9BD81FB0E5FF4235A094BE3D21544615" + Description="Name Ansprechperson / Firma" + AlternativeParentID="736372FDB0A2407CBBFB15DE71FD1450"> + <Answer ID="CCD833A8C8C34E5D9564676CAFCF4DD8" + Description="männlich" + IsFormatted="true" + ContentId="CCD833A8C8C34E5D9564676CAFCF4DD8"/> + </Question> + <Question ID="9CE081D9122E43B1B778863AE32AB29F" Description="Protokoll"> + <Answer ID="C2E7328389584B33A0D4DB82D8FA2671" + Description="Ja" + IsFormatted="true" + ContentId="C2E7328389584B33A0D4DB82D8FA2671"/> + </Question> + <Question ID="B651AC699A4F4B768DC34DE87BBD578C" + Description="Gründe für Halteverbot" + ContentId="B651AC699A4F4B768DC34DE87BBD578C" + IsFormatted="true" + ContentType="XML"> + <Records> + <Record> + <Field Name="DE3D244EB8754929955FF571D374C635"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="35AECC80B19C426CAB60195F0839E968" Description="Container"> + <Answer ID="9034F5BDB3CE48429C95D7E8C5144E35" + Description="Nein" + IsFormatted="true" + ContentId="9034F5BDB3CE48429C95D7E8C5144E35"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="4EE22B7DF177414796C4458EDA2BDAAD"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="A167DD3CA6B14A459F350FFD725FD121" Description="Baufahrzeug"> + <Answer ID="D4D84D211E5640F4921BB280026B786C" + Description="Nein" + IsFormatted="true" + ContentId="D4D84D211E5640F4921BB280026B786C"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="D406E7038AD64786AC0E54C8033BAAB0"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="CB595FC6EC054D408FFCA67ACA1E33D6" Description="Materiallagerung"> + <Answer ID="A74A7B407B5B4681BF254948837912AC" + Description="Nein" + IsFormatted="true" + ContentId="A74A7B407B5B4681BF254948837912AC"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="2BBBB7D558014C4297747D4E841CBB93"> + <Value><![CDATA[ja]]></Value> + <QuestionAnswers> + <Question ID="38B11C2200034615B41F7DB88136B2C6" Description="Umzug"> + <Answer ID="D7B3F786760D48DBAEE9DC3A8F555EA8" + Description="Ja" + IsFormatted="true" + ContentId="D7B3F786760D48DBAEE9DC3A8F555EA8"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="6B173C517C4F48C7A8E212E6CF2ACF23"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="C67E6013B0554AEC9EDF897DD29794C3" Description="Hubsteiger / Kran"> + <Answer ID="FF2D2B532E3343228C59C072DCE783C1" + Description="Nein" + IsFormatted="true" + ContentId="FF2D2B532E3343228C59C072DCE783C1"/> + </Question> + </QuestionAnswers> + </Field> + <Field Name="AB9698E6B2EA4DAAB0A0F51E2B127F32"> + <Value><![CDATA[nein]]></Value> + <QuestionAnswers> + <Question ID="8356F526632542AEA6D30E41B4FF4872" Description="sonstiges"> + <Answer ID="A2776865599D44C28213EACCC0861BE5" + Description="Nein" + IsFormatted="true" + ContentId="A2776865599D44C28213EACCC0861BE5"/> + </Question> + </QuestionAnswers> + </Field> + </Record> + </Records> + </Question> + <Question ID="C7C9CCBF9633499EAB08D1BBB84BFD98" Description="Richtigkeit"> + <Answer ID="386B6CDC94D2498F9576ED949322491C" + Description="Ja" + IsFormatted="true" + ContentId="386B6CDC94D2498F9576ED949322491C"/> + </Question> + <Question ID="C7D1A20B17CD4C96BF55A2738B8A4631" Description="Kenntnisnahme"> + <Answer ID="27B4C15818DD4F3087EF6D4822EE1215" + Description="Ja" + IsFormatted="true" + ContentId="27B4C15818DD4F3087EF6D4822EE1215"/> + </Question> + </QuestionAnswers> + <Fields> + <Field ID="3C5C7920FB444A9DB2F5239339599BD7"/> + <Field ID="41237CC02584421A8D65990E7F78F833"><![CDATA[24]]></Field> + <Field ID="423CB6F4AEB54A44BC67F97626ADC06C"><![CDATA[christoph.steuber@kiel.de]]></Field> + <Field ID="442D48B946C64853B78DB99D9341AAC8"/> + <Field ID="4D4178B6F808409391990233D33BF54C"><![CDATA[21727]]></Field> + <Field ID="5AE5217E97F845B48D4274894BC2F043"/> + <Field ID="635CEB0B41DE44EFB2207122CCB8EE1D"><![CDATA[0431789456]]></Field> + <Field ID="6B06CD242FC64865BFC5B770BB03EAA4"><![CDATA[ESTORF]]></Field> + <Field ID="769E3AC926154741AABE870EB802E2AD"/> + <Field ID="7AF097E4E741455685CD543ABB7CE337"><![CDATA[OSTERBERG]]></Field> + <Field ID="8CA72E11F95F4352AE6FB8001BE79508"><![CDATA[06.12.2023]]></Field> + <Field ID="8D38662ADBF2408B8C8DDB5294A5A5A9"><![CDATA[Fleet]]></Field> + <Field ID="CA36A227CFEC4B89A40CA8B0CF4460C0"><![CDATA[9]]></Field> + <Field ID="CC330D642D7D465FA611D029F6A06344"/> + <Field ID="D316B8AE41A3496495C058CCB3766F3A"><![CDATA[CHRISTOPH ALÄXANDER]]></Field> + <Field ID="DB270EC247D5476A9D8BFA008E872D7D"><![CDATA[Kiel]]></Field> + <Field ID="DE7F7E00C8C246AEA9FFDF7F89E2FB03"><![CDATA[06.12.2023]]></Field> + <Field ID="F1826BE2F3D04E508F6401E8AA1D08C1"><![CDATA[10]]></Field> + <Field ID="FEC37A441C9D46189533DBD9CFD0E0E8"><![CDATA[STEUBER]]></Field> + <Field ID="FECCC52ABB614390BAE2577AD8C44262"><![CDATA[24103]]></Field> + <Field ID="root/CustomerData/Dateiname"><![CDATA[Fleet_9-Verk-AO_01-08_06.12.2023-06.12.2023]]></Field> + <NachrichtenText>Sehr geehrte/r Antragstellende, + +anliegend erhalten Sie die verkehrsrechtliche Anordnung für die Aufstellung der von Ihnen beantragten Beschilderung. Die Prüfung der Straßenverkehrsbehörde bezieht sich nur auf die Vollständigkeit des Antrages und die Plausibilität der Angaben. Die richtige Auswahl der aufzustellenden Verkehrszeichen oder Überschneidung mit anderen Anträgen wurde dabei nicht geprüft. + +BITTE DRINGEND BEACHTEN +Der Antrag einer mobilen Haltverbotszone ist MINDESTENS 1 Woche vor Aufstellung der Beschilderung zu stellen. Des Weiteren gilt die Beschilderung erst als angeordnet, wenn die Antragstellenden das von der Straßenverkehrsbehörde unterschriebene Anmeldeformular zurückerhalten haben (Fax, E-Mail, Post). Vorab sind keine Schilder aufzustellen!!! +</NachrichtenText> + </Fields> + <DocumentProperties> + <Guid>7ACEA5AE7C3642978ACCC48182EBCD6E</Guid> + <BuiltIn> + <creator>Pascal Sauermann</creator> + </BuiltIn> + <Extended/> + <Custom> + <Author name="Author" + type="lpwstr" + property="true" + variable="false" + xml="false">psa</Author> + <Typist name="Typist" + type="lpwstr" + property="true" + variable="false" + xml="false">psa</Typist> + <TemplateId name="TemplateId" + type="lpwstr" + property="true" + variable="false" + xml="false">7ACEA5AE7C3642978ACCC48182EBCD6E</TemplateId> + <Template name="Template" + type="lpwstr" + property="true" + variable="false" + xml="false">KFAS_LIVE_KI_10_Haltverbot_befristet</Template> + </Custom> + </DocumentProperties> + </SmartDocument> + <CustomerData> + <bescheid> + <bescheidVom/> + <genehmigt>true</genehmigt> + </bescheid> + <userData> + <firstName>Tobias</firstName> + <lastName>Bruns</lastName> + <email>tobias.bruns@external.mgm-tp.com</email> + </userData> + <vorgang> + <vorgangName>KFAS_LIVE_KI_10_Haltverbot_befristet</vorgangName> + <serviceKonto> + <type>OSI</type> + <postfachAddresses> + <item> + <identifier> + <postfachId>76f1ae54-1cf1-4ae1-c0b4-08d950d6cfc0</postfachId> + </identifier> + <type>1</type> + <version>1.0</version> + </item> + </postfachAddresses> + </serviceKonto> + <eingang> + <zustaendigeStelle> + <organisationseinheitenId>268084622</organisationseinheitenId> + <email/> + </zustaendigeStelle> + <antragsteller> + <vorname>CHRISTOPH ALÄXANDER</vorname> + <nachname>STEUBER</nachname> + </antragsteller> + <formData> + <Stammdaten__Antragstellende_Person_> + <Adresse_Kiel_vorbefüllt_mit_Kontaktdaten> + <AS_E-Mail>christoph.steuber@kiel.de</AS_E-Mail> + <Postleitzahl>21727</Postleitzahl> + <AS_Telefon>0431789456</AS_Telefon> + <Wohnort>ESTORF</Wohnort> + <Straße>OSTERBERG</Straße> + <Hausnummer>24</Hausnummer> + </Adresse_Kiel_vorbefüllt_mit_Kontaktdaten> + <Angabe_zur_Person__Firma>männlich</Angabe_zur_Person__Firma> + <Verantwortliche_Person_für_die_Aufstellung_der_Beschilderung/> + <AS_Name1> + <AS_Name1> + <AS_Vorname>CHRISTOPH ALÄXANDER</AS_Vorname> + <AS_Name>STEUBER</AS_Name> + </AS_Name1> + </AS_Name1> + </Stammdaten__Antragstellende_Person_> + <Antrag_abschließen> + <Ich_bestätige__dass_die_Beschilderung_entsprechend_den_wichtigen_Hinweisen_durchgeführt_wird>ja</Ich_bestätige__dass_die_Beschilderung_entsprechend_den_wichtigen_Hinweisen_durchgeführt_wird> + <Hiermit_bestätige_ich_die_Kenntnisnahme_des_Vorgehens_bei_parkenden_KFZ>ja</Hiermit_bestätige_ich_die_Kenntnisnahme_des_Vorgehens_bei_parkenden_KFZ> + <Ich_bestätige_hiermit__dass_ein_Protokoll_entsprechend_den_wichtigen_Hinweisen_erstellt_wird>ja</Ich_bestätige_hiermit__dass_ein_Protokoll_entsprechend_den_wichtigen_Hinweisen_erstellt_wird> + <Hiermit_bestätige_ich_die_Richtigkeit_der_gemachten_Angaben>ja</Hiermit_bestätige_ich_die_Richtigkeit_der_gemachten_Angaben> + </Antrag_abschließen> + <Angaben_zur_Parkregelung_und_zur_Beschilderung> + <Länge_der_Fläche_in_Metern>10</Länge_der_Fläche_in_Metern> + <Ort_des_Haltverbotes> + <Postleitzahl>24103</Postleitzahl> + <Wohnort>Kiel</Wohnort> + <Straße>Fleet</Straße> + <Hausnummer>9</Hausnummer> + </Ort_des_Haltverbotes> + <Beginn_des_Haltverbotes>06.12.2023</Beginn_des_Haltverbotes> + <Gründe> + <Container>nein</Container> + <Baufahrzeug>nein</Baufahrzeug> + <Materiallagerung>nein</Materiallagerung> + <Umzug>ja</Umzug> + <Hubsteiger__Kran>nein</Hubsteiger__Kran> + <Sonstiges>nein</Sonstiges> + </Gründe> + <Uhrzeit> + <ganztägig>ja</ganztägig> + </Uhrzeit> + <Vor_Ort_geltende_Parkregelung>Parken am Seitenstreifen</Vor_Ort_geltende_Parkregelung> + <Objektgruppe_Hinweis_kein_Abschleppen_möglich/> + <Tage_Haltverbot> + <Freitag>nein</Freitag> + <Samstag>nein</Samstag> + <Montag>nein</Montag> + <Mittwoch>ja</Mittwoch> + <Donnerstag>nein</Donnerstag> + <Dienstag>nein</Dienstag> + <Sonntag>nein</Sonntag> + </Tage_Haltverbot> + <Ende_des_Haltverbotes>06.12.2023</Ende_des_Haltverbotes> + </Angaben_zur_Parkregelung_und_zur_Beschilderung> + <Informationen_und_Hinweise_zu_erforderlichen_Unterlagen/> + </formData> + </eingang> + <vorgangNummer>KFAS_LIVE_KI_10_Haltverbot_befristet-GZpJckhu</vorgangNummer> + <aktenzeichen/> + </vorgang> + <Dateiname>Fleet_9-Verk-AO_01-08_06.12.2023-06.12.2023</Dateiname> + <Dateiname>Fleet_9-Verk-AO_01-08_06.12.2023-06.12.2023</Dateiname> + </CustomerData> +</root> \ No newline at end of file diff --git a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java index a7e145a81a209d2ef48acfdcc54db99b6f46d287..088188ce521454089f52e5b58d4e020c94163ae8 100644 --- a/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java +++ b/nachrichten-manager/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdPostfachNachrichtMapper.java @@ -48,7 +48,7 @@ abstract class BayernIdPostfachNachrichtMapper { @Mapping(target = "nachrichtenKopf.absender.gemeindeschluessel.schluessel", source = "bayernIdProperties.absender.gemeindeSchluessel") @Mapping(target = "nachrichtenKopf.empfaenger.postkorbId", source = "nachricht.postfachAddress") @Mapping(target = "nachrichtenInhalt.betreff", source = "nachricht.subject") - @Mapping(target = "nachrichtenInhalt.storkQaaLevel", constant = "LEVEL_1") + @Mapping(target = "nachrichtenInhalt.storkQaaLevel", constant = "LEVEL_1") // FIXME aus Vorgang übernehmen @Mapping(target = "nachrichtenInhalt.zuVorgang.vorgangsId", source = "nachricht.vorgangId") @Mapping(target = "nachrichtenInhalt.freiText.encoding.schluessel", constant = TEXT_ENCODING_PLAIN_TEXT) @Mapping(target = "nachrichtenInhalt.freiText.encoding.tabelle", constant = TABELLE_NUMMER_TEXT_ENCODING)