first trial
This commit is contained in:
		| @@ -29,10 +29,20 @@ public class CamtWriter { | |||||||
| 		} else if (bean.getKontostandFinal() == null) { | 		} else if (bean.getKontostandFinal() == null) { | ||||||
| 			throw new Exception("no kontostandFinal"); | 			throw new Exception("no kontostandFinal"); | ||||||
| 		} | 		} | ||||||
|  | 		String receiver = "Evangelische-Freikirchliche Gemeinde Dresden Süd-Ost"; | ||||||
|  | 		StringBuilder buf = new StringBuilder("KtoNr"); | ||||||
|  | 		buf.append(bean.getIban().substring(bean.getIban().length() - 10)); | ||||||
|  | 		buf.append("_"); | ||||||
|  | 		buf.append(bean.getKontostandDatum().replace(".", "-")); | ||||||
|  | 		buf.append("_0000"); // no creation time in csv | ||||||
|  | 		String MsgIdText = buf.toString(); | ||||||
|  | 		buf = new StringBuilder(); | ||||||
|  | 		buf.append(bean.getKontostandDatum().replace(".", "-")); | ||||||
|  | 		buf.append("T00:00:00.000+02:00"); // no creation time in csv | ||||||
|  | 		String kontostandzeitpunkt = buf.toString(); | ||||||
| 		 | 		 | ||||||
| 		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | 		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); | ||||||
| 		DocumentBuilder builder = factory.newDocumentBuilder(); | 		DocumentBuilder builder = factory.newDocumentBuilder(); | ||||||
|  |  | ||||||
| 		Document xml = builder.newDocument(); | 		Document xml = builder.newDocument(); | ||||||
| 		xml.setXmlStandalone(true); | 		xml.setXmlStandalone(true); | ||||||
|  |  | ||||||
| @@ -40,151 +50,58 @@ public class CamtWriter { | |||||||
| 		document.setAttribute("xmlns", "urn:iso:std:iso:20022:tech:xsd:camt.052.001.06"); | 		document.setAttribute("xmlns", "urn:iso:std:iso:20022:tech:xsd:camt.052.001.06"); | ||||||
| 		xml.appendChild(document); | 		xml.appendChild(document); | ||||||
|  |  | ||||||
| 		Element BkToCstmrAcctRpt = xml.createElement("BkToCstmrAcctRpt"); | 		Element BkToCstmrAcctRpt = new XmlTag(xml, "BkToCstmrAcctRpt", document).get(); | ||||||
| 		document.appendChild(BkToCstmrAcctRpt); | 		Element GrpHdr = new XmlTag(xml, "GrpHdr", BkToCstmrAcctRpt).get(); | ||||||
|  | 		new XmlTag(xml, "MsgId", GrpHdr).withText(MsgIdText); | ||||||
| 		Element GrpHdr = xml.createElement("GrpHdr"); | 		Element CreDtTm = new XmlTag(xml, "CreDtTm", GrpHdr).withText(kontostandzeitpunkt).get(); | ||||||
| 		BkToCstmrAcctRpt.appendChild(GrpHdr); | 		new XmlTag(xml, "Nm", new XmlTag(xml, "MsgRcpt", GrpHdr).get()).withText(receiver); | ||||||
|  | 		Element Rpt = new XmlTag(xml, "Rpt", BkToCstmrAcctRpt).get(); | ||||||
| 		Element MsgId = xml.createElement("MsgId"); | 		new XmlTag(xml, "Id", Rpt).withText(MsgIdText); | ||||||
| 		StringBuilder buf = new StringBuilder("KtoNr"); |  | ||||||
| 		buf.append(bean.getIban().substring(bean.getIban().length() - 10)); |  | ||||||
| 		buf.append("_"); |  | ||||||
| 		buf.append(bean.getKontostandDatum().replace(".", "-")); |  | ||||||
| 		buf.append("_0000"); // no creation time in csv |  | ||||||
| 		MsgId.setTextContent(buf.toString()); |  | ||||||
| 		GrpHdr.appendChild(MsgId); |  | ||||||
|  |  | ||||||
| 		Element CreDtTm = xml.createElement("CreDtTm"); |  | ||||||
| 		buf = new StringBuilder(); |  | ||||||
| 		buf.append(bean.getKontostandDatum().replace(".", "-")); |  | ||||||
| 		buf.append("T00:00:00.000+02:00"); // no creation time in csv |  | ||||||
| 		CreDtTm.setTextContent(buf.toString()); |  | ||||||
| 		GrpHdr.appendChild(CreDtTm); |  | ||||||
|  |  | ||||||
| 		Element MsgRcpt = xml.createElement("MsgRcpt"); |  | ||||||
| 		GrpHdr.appendChild(MsgRcpt); |  | ||||||
|  |  | ||||||
| 		Element Nm = xml.createElement("Nm"); |  | ||||||
| 		Nm.setTextContent("Evangelische-Freikirchliche Gemeinde Dresden Süd-Ost"); |  | ||||||
| 		MsgRcpt.appendChild(Nm); |  | ||||||
|  |  | ||||||
| 		Element Rpt = xml.createElement("Rpt"); |  | ||||||
| 		BkToCstmrAcctRpt.appendChild(Rpt); |  | ||||||
| 		 |  | ||||||
| 		Element Id = xml.createElement("Id"); |  | ||||||
| 		Id.setTextContent(MsgId.getTextContent()); |  | ||||||
| 		Rpt.appendChild(Id); |  | ||||||
|  |  | ||||||
| 		Rpt.appendChild(CreDtTm.cloneNode(true)); | 		Rpt.appendChild(CreDtTm.cloneNode(true)); | ||||||
|  | 		new XmlTag(xml, "IBAN", new XmlTag(xml, "Id", new XmlTag(xml, "Acct", Rpt).get()).get()).withText(bean.getIban()); | ||||||
| 		Element Acct = xml.createElement("Acct"); | 		Element Bal = new XmlTag(xml, "Bal", Rpt).get(); | ||||||
| 		Rpt.appendChild(Acct); | 		new XmlTag(xml, "Cd", new XmlTag(xml, "CdOrPrtry", new XmlTag(xml, "Tp", Bal).get()).get()).withText("CLAV"); | ||||||
| 		 | 		new XmlTag(xml, "Amt", Bal).withAttr("Ccy", bean.getWaehrung()) | ||||||
| 		Element AcctId = xml.createElement("Id"); | 				.withText(bean.getKontostandFinal().replace(".", "").replace(",", ".")); // not sure if correct... | ||||||
| 		Acct.appendChild(AcctId); |     new XmlTag(xml, "CdtDbtInd", Bal).withText("CRDT"); | ||||||
| 		 | 		new XmlTag(xml, "DtTm", new XmlTag(xml, "Dt", Bal).get()).withText(CreDtTm.getTextContent()); | ||||||
| 		Element IBAN = xml.createElement("IBAN"); |  | ||||||
| 		IBAN.setTextContent(bean.getIban()); |  | ||||||
| 		AcctId.appendChild(IBAN); |  | ||||||
|  |  | ||||||
| 		Element Bal = xml.createElement("Bal"); |  | ||||||
| 		Rpt.appendChild(Bal); |  | ||||||
| 		 |  | ||||||
| 		Element Tp = xml.createElement("Tp"); |  | ||||||
| 		Bal.appendChild(Tp); |  | ||||||
| 		 |  | ||||||
| 		Element CdOrPrtry = xml.createElement("CdOrPrtry"); |  | ||||||
| 		Tp.appendChild(CdOrPrtry); |  | ||||||
| 		 |  | ||||||
| 		Element Cd = xml.createElement("Cd"); |  | ||||||
| 		Cd.setTextContent("CLAV"); |  | ||||||
| 		CdOrPrtry.appendChild(Cd); |  | ||||||
| 		 |  | ||||||
| 		Element Amt = xml.createElement("Amt"); |  | ||||||
| 		Amt.setAttribute("Ccy", bean.getWaehrung()); |  | ||||||
| 		Amt.setTextContent(bean.getKontostandFinal().replace(".", "").replace(",", ".")); // not sure if correct... |  | ||||||
| 		Bal.appendChild(Amt); |  | ||||||
| 		 |  | ||||||
| 		Element CdtDbtInd = xml.createElement("CdtDbtInd"); |  | ||||||
| 		CdtDbtInd.setTextContent("CRDT"); |  | ||||||
| 		Bal.appendChild(CdtDbtInd); |  | ||||||
| 		 |  | ||||||
| 		Element Dt = xml.createElement("Dt"); |  | ||||||
| 		Bal.appendChild(Dt); |  | ||||||
| 		 |  | ||||||
| 		Element DtTm = xml.createElement("DtTm"); |  | ||||||
| 		DtTm.setTextContent(CreDtTm.getTextContent()); |  | ||||||
| 		Dt.appendChild(DtTm); |  | ||||||
| 		 | 		 | ||||||
| 		for (CsvLine trans : bean.getList()) { | 		for (CsvLine trans : bean.getList()) { | ||||||
| 			Element Ntry = xml.createElement("Ntry"); | 			Element Ntry = new XmlTag(xml, "Ntry", Rpt).get(); | ||||||
| 			Rpt.appendChild(Ntry); | 			new XmlTag(xml, "Amt", Ntry).withAttr("Ccy", trans.Waehrung()) | ||||||
| 			 | 					.withText(trans.Betrag().replace(".", "").replace(",", ".")); | ||||||
| 			Element NtryAmt = xml.createElement("Amt"); | 			new XmlTag(xml, "CdtDbtInd", Ntry).withText("CRDT"); // not sure if this is right | ||||||
| 			NtryAmt.setAttribute("Ccy", trans.Waehrung()); | 			new XmlTag(xml, "Sts", Ntry).withText("BOOK"); // not sure if this is right | ||||||
| 			NtryAmt.setTextContent(trans.Betrag().replace(".", "").replace(",", ".")); | 			new XmlTag(xml, "Dt", new XmlTag(xml, "BookgDt", Ntry).get()).withText(XmlTag.yyyyMMdd(trans.Buchungstag())); | ||||||
| 			Ntry.appendChild(NtryAmt); | 			new XmlTag(xml, "Dt", new XmlTag(xml, "ValDt", Ntry).get()).withText(XmlTag.yyyyMMdd(trans.Wert())); | ||||||
| 			 | 			Element BkTxCd = new XmlTag(xml, "BkTxCd", Ntry).get(); | ||||||
|  | 			Element Domn = new XmlTag(xml, "Domn", BkTxCd).get(); | ||||||
|  | 			new XmlTag(xml, "Cd", Domn).withText("PMNT"); // not sure if this is right | ||||||
|  | 			Element Fmly = new XmlTag(xml, "Fmly", Domn).get(); | ||||||
|  | 			new XmlTag(xml, "Cd", Fmly).withText("RCDT"); // not sure if this is right | ||||||
|  | 			new XmlTag(xml, "SubFmlyCd", Fmly).withText("ESCT"); // not sure if this is right | ||||||
|  | 			Element Prtry = new XmlTag(xml, "Prtry", BkTxCd).get(); | ||||||
|  | 			new XmlTag(xml, "Cd", Prtry).withText("NTRF+166"); // not sure if this is right | ||||||
|  | 			new XmlTag(xml, "Issr", Prtry).withText("DK"); // not sure if this is right | ||||||
|  | 			Element TxDtls = new XmlTag(xml, "TxDtls", new XmlTag(xml, "NtryDtls", Ntry).get()).get(); | ||||||
|  | 			new XmlTag(xml, "Amt", TxDtls).withAttr("Ccy", trans.Waehrung()).withText(trans.Betrag()); | ||||||
|  | 			new XmlTag(xml, "CdtDbtInd", TxDtls).withText("CRDT"); // not sure if this is right | ||||||
|  | 			Element BkTxCd_Ntry = new XmlTag(xml, "BkTxCd", TxDtls).get(); | ||||||
|  | 			Element Domn_Ntry = new XmlTag(xml, "Domn", BkTxCd_Ntry).get(); | ||||||
|  | 			new XmlTag(xml, "Cd", Domn_Ntry).withText("PMNT"); // not sure if this is right | ||||||
|  | 			Element Fmly_Ntry = new XmlTag(xml, "Fmly", Domn_Ntry).get(); | ||||||
|  | 			new XmlTag(xml, "Cd", Fmly_Ntry).withText("RCDT"); // not sure if this is right | ||||||
|  | 			new XmlTag(xml, "SubFmlyCd", Fmly_Ntry).withText("ESCT"); // not sure if this is right | ||||||
|  | 			Element Prtry_Ntry = new XmlTag(xml, "Prtry", BkTxCd_Ntry).get(); | ||||||
|  | 			new XmlTag(xml, "Cd", Prtry_Ntry).withText("NTRF+166"); // not sure if this is right | ||||||
|  | 			new XmlTag(xml, "Issr", Prtry_Ntry).withText("DK"); // not sure if this is right | ||||||
|  | 			Element RltdPties = new XmlTag(xml, "RltdPties", TxDtls).get(); | ||||||
|  | 			new XmlTag(xml, "Nm", new XmlTag(xml, "Dbtr", RltdPties).get()).withText(trans.Beguenstigter_Auftraggeber()); | ||||||
|  | 			new XmlTag(xml, "Nm", new XmlTag(xml, "Cdtr", RltdPties).get()).withText(receiver); | ||||||
|  | 			Element RmtInf = new XmlTag(xml, "RmtInf", TxDtls).get(); | ||||||
|  | 			new XmlTag(xml, "Ustrd", RmtInf).withText(String.format("Referenz %s", trans.Kundenreferenz())); | ||||||
|  | 			new XmlTag(xml, "Ustrd", RmtInf).withText(trans.Verwendungszweck()); | ||||||
| 		} | 		} | ||||||
| 		 |  | ||||||
| 		// TODO: add the rest, the Ntry elements, as children of Rpt |  | ||||||
| //		<Ntry> |  | ||||||
| //		<Amt Ccy="EUR">128.00</Amt> |  | ||||||
| //		<CdtDbtInd>CRDT</CdtDbtInd> |  | ||||||
| //		<Sts>BOOK</Sts> |  | ||||||
| //		<BookgDt> |  | ||||||
| //			<Dt>2023-03-31</Dt> |  | ||||||
| //		</BookgDt> |  | ||||||
| //		<ValDt> |  | ||||||
| //			<Dt>2023-03-31</Dt> |  | ||||||
| //		</ValDt> |  | ||||||
| //		<BkTxCd> |  | ||||||
| //			<Domn> |  | ||||||
| //				<Cd>PMNT</Cd> |  | ||||||
| //				<Fmly> |  | ||||||
| //					<Cd>RCDT</Cd> |  | ||||||
| //					<SubFmlyCd>ESCT</SubFmlyCd> |  | ||||||
| //				</Fmly> |  | ||||||
| //			</Domn> |  | ||||||
| //			<Prtry> |  | ||||||
| //				<Cd>NTRF+166</Cd> |  | ||||||
| //				<Issr>DK</Issr> |  | ||||||
| //			</Prtry> |  | ||||||
| //		</BkTxCd> |  | ||||||
| //		<NtryDtls> |  | ||||||
| //			<TxDtls> |  | ||||||
| //				<Amt Ccy="EUR">128.00</Amt> |  | ||||||
| //				<CdtDbtInd>CRDT</CdtDbtInd> |  | ||||||
| //				<BkTxCd> |  | ||||||
| //					<Domn> |  | ||||||
| //						<Cd>PMNT</Cd> |  | ||||||
| //						<Fmly> |  | ||||||
| //							<Cd>RCDT</Cd> |  | ||||||
| //							<SubFmlyCd>ESCT</SubFmlyCd> |  | ||||||
| //						</Fmly> |  | ||||||
| //					</Domn> |  | ||||||
| //					<Prtry> |  | ||||||
| //						<Cd>NTRF+166</Cd> |  | ||||||
| //						<Issr>DK</Issr> |  | ||||||
| //					</Prtry> |  | ||||||
| //				</BkTxCd> |  | ||||||
| //				<RltdPties> |  | ||||||
| //					<Dbtr> |  | ||||||
| //						<Nm>Mickey Mouse</Nm> |  | ||||||
| //					</Dbtr> |  | ||||||
| //					<Cdtr> |  | ||||||
| //						<Nm>Evangelische-Freikirchliche Gemeinde Dresden Süd-Ost</Nm> |  | ||||||
| //					</Cdtr> |  | ||||||
| //				</RltdPties> |  | ||||||
| //				<RmtInf> |  | ||||||
| //					<Ustrd>Referenz NOTPROVIDED</Ustrd> |  | ||||||
| //					<Ustrd>Gemeindefreizeit</Ustrd> |  | ||||||
| //				</RmtInf> |  | ||||||
| //			</TxDtls> |  | ||||||
| //		</NtryDtls> |  | ||||||
| //	</Ntry> |  | ||||||
|  |  | ||||||
| 		return xml; | 		return xml; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										43
									
								
								src/main/java/de/jottyfan/csv2camt/xml/XmlTag.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/main/java/de/jottyfan/csv2camt/xml/XmlTag.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | package de.jottyfan.csv2camt.xml; | ||||||
|  |  | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.time.format.DateTimeFormatter; | ||||||
|  |  | ||||||
|  | import org.w3c.dom.Document; | ||||||
|  | import org.w3c.dom.Element; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  *  | ||||||
|  |  * @author jotty | ||||||
|  |  *  | ||||||
|  |  */ | ||||||
|  | public class XmlTag { | ||||||
|  | 	private Element element;  | ||||||
|  |  | ||||||
|  | 	public XmlTag(Document xml, String tagName) { | ||||||
|  | 		this.element = xml.createElement(tagName); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	public XmlTag(Document xml, String tagName, Element parent) { | ||||||
|  | 		this.element = xml.createElement(tagName); | ||||||
|  | 		parent.appendChild(element); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	public XmlTag withAttr(String name, String value) { | ||||||
|  | 		this.element.setAttribute(name, value); | ||||||
|  | 		return this; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public XmlTag withText(String text) { | ||||||
|  | 		this.element.setTextContent(text); | ||||||
|  | 		return this; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	public final Element get() { | ||||||
|  | 		return this.element; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	public static final String yyyyMMdd(String date) { | ||||||
|  |     return LocalDate.parse(date, DateTimeFormatter.ofPattern("d.M.yyyy")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); | ||||||
|  | 	}	 | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user