Move xml conversion to IncludedNote

This commit is contained in:
Sebastian Sieber
2023-07-13 11:42:42 +02:00
parent 7fd3c18547
commit 96f26439d4
2 changed files with 38 additions and 26 deletions

View File

@@ -7,6 +7,13 @@ public class IncludedNote {
private final String content; private final String content;
private final SubjectCode subjectCode; private final SubjectCode subjectCode;
private static final String INCLUDE_START = "<ram:IncludedNote>";
private static final String INCLUDE_END = "</ram:IncludedNote>";
private static final String CONTENT_START = "<ram:Content>";
private static final String CONTENT_END = "</ram:Content>";
private static final String SUBJECT_CODE_START = "<ram:SubjectCode>";
private static final String SUBJECT_CODE_END = "</ram:SubjectCode>";
private IncludedNote(String content, SubjectCode subjectCode) { private IncludedNote(String content, SubjectCode subjectCode) {
this.content = content; this.content = content;
this.subjectCode = subjectCode; this.subjectCode = subjectCode;
@@ -37,6 +44,10 @@ public class IncludedNote {
return new IncludedNote(content, SubjectCode.AAK); return new IncludedNote(content, SubjectCode.AAK);
} }
public static IncludedNote unspecifiedNote(String content) {
return new IncludedNote(content, null);
}
public String getContent() { public String getContent() {
return content; return content;
} }
@@ -45,4 +56,13 @@ public class IncludedNote {
return subjectCode; return subjectCode;
} }
public String toCiiXml(){
String result = INCLUDE_START + CONTENT_START +
XMLTools.encodeXML(getContent() )+ CONTENT_END;
if (getSubjectCode() != null) {
result += SUBJECT_CODE_START + getSubjectCode() + SUBJECT_CODE_END;
}
return result + INCLUDE_END;
}
} }

View File

@@ -29,11 +29,15 @@ import java.io.UnsupportedEncodingException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Base64; import java.util.Base64;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.stream.Collectors;
import org.dom4j.Document; import org.dom4j.Document;
import org.dom4j.DocumentException; import org.dom4j.DocumentException;
@@ -41,6 +45,7 @@ import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat; import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; import org.dom4j.io.XMLWriter;
import org.mustangproject.FileAttachment; import org.mustangproject.FileAttachment;
import org.mustangproject.IncludedNote;
import org.mustangproject.SubjectCode; import org.mustangproject.SubjectCode;
import org.mustangproject.XMLTools; import org.mustangproject.XMLTools;
import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants; import org.mustangproject.ZUGFeRD.model.DocumentCodeTypeConstants;
@@ -742,37 +747,24 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
} }
} }
private static String buildNotes(IExportableTransaction trans) { private static String buildNotes(IExportableTransaction exportableTransaction) {
StringBuilder notes = new StringBuilder(); final List<IncludedNote> includedNotes = Optional.ofNullable(exportableTransaction.getNotesWithSubjectCode())
if (trans.getNotes() != null) { .orElse(new ArrayList<>());
for (final String currentNote : trans.getNotes()) { if (exportableTransaction.getNotes() != null) {
notes.append("<ram:IncludedNote><ram:Content>") for (final String currentNote : exportableTransaction.getNotes()) {
.append(XMLTools.encodeXML(currentNote)) includedNotes.add(IncludedNote.unspecifiedNote(currentNote));
.append("</ram:Content></ram:IncludedNote>");
} }
} }
if (trans.rebateAgreementExists()) { if (exportableTransaction.rebateAgreementExists()) {
notes.append("<ram:IncludedNote><ram:Content>") includedNotes.add(IncludedNote.discountBonusNote("Es bestehen Rabatt- und Bonusvereinbarungen."));
.append("Es bestehen Rabatt- und Bonusvereinbarungen.</ram:Content>")
.append("<ram:SubjectCode>")
.append(SubjectCode.AAK)
.append("</ram:SubjectCode></ram:IncludedNote>");
} }
if (trans.getOwnOrganisationFullPlaintextInfo() != null) { if (exportableTransaction.getOwnOrganisationFullPlaintextInfo() != null) {
notes.append("<ram:IncludedNote><ram:Content>") includedNotes.add(IncludedNote.regulatoryNote(exportableTransaction.getOwnOrganisationFullPlaintextInfo()));
.append(XMLTools.encodeXML(trans.getOwnOrganisationFullPlaintextInfo()))
.append("</ram:Content>")
.append("<ram:SubjectCode>")
.append(SubjectCode.REG)
.append("</ram:SubjectCode></ram:IncludedNote>");
} }
if (trans.getSubjectNote() != null) { if (exportableTransaction.getSubjectNote() != null) {
notes.append("<ram:IncludedNote><ram:Content>") includedNotes.add(IncludedNote.unspecifiedNote(exportableTransaction.getSubjectNote()));
.append(XMLTools.encodeXML(trans.getSubjectNote()))
.append("</ram:Content>")
.append("</ram:IncludedNote>");
} }
return notes.toString(); return includedNotes.stream().map(IncludedNote::toCiiXml).collect(Collectors.joining(""));
} }
@Override @Override