/// <summary> /// Initializes a new instance of the <see cref="Transaction"/> class. /// </summary> /// <param name="account">The account of the other party.</param> /// <param name="transactionDate">The date where the transaction is executed.</param> /// <param name="valutaDate">The date where the valuta is changed.</param> /// <param name="amount">The amount that has been transfered.</param> /// <param name="message">A message that is included in the transaction.</param> /// <param name="structuredMessage">A structured message.</param> /// <param name="sepaDirectDebit">The sepa direct debit information.</param> public Transaction(AccountOtherParty account, DateTime transactionDate, DateTime valutaDate, decimal amount, string message, string structuredMessage, SepaDirectDebit sepaDirectDebit) { Account = account; TransactionDate = transactionDate; ValutaDate = valutaDate; Amount = amount; Message = message; StructuredMessage = structuredMessage; SepaDirectDebit = sepaDirectDebit; }
/// <summary> /// Parse the relevant lines into a <see cref="Transaction"/>. /// </summary> /// <param name="lines">The lines to parse.</param> /// <returns>A single <see cref="Transaction"/>.</returns> public Transaction Parse(IEnumerable <ILine> lines) { var transactionPart1Line = Helpers.GetFirstLineOfType <TransactionPart1Line>(lines); var transactionDate = new DateTime(1, 1, 1); var valutaDate = new DateTime(1, 1, 1); var amount = 0.0m; SepaDirectDebit sepaDirectDebit = null; if (transactionPart1Line != null) { valutaDate = transactionPart1Line.ValutaDate.Value; transactionDate = transactionPart1Line.TransactionDate.Value; amount = transactionPart1Line.Amount.Value; if (transactionPart1Line.MessageOrStructuredMessage.StructuredMessage != null) { sepaDirectDebit = transactionPart1Line.MessageOrStructuredMessage.StructuredMessage.SepaDirectDebit; } } var informationPart1Line = Helpers.GetFirstLineOfType <InformationPart1Line>(lines); var structuredMessage = ""; if (!string.IsNullOrEmpty(transactionPart1Line?.MessageOrStructuredMessage.StructuredMessage?.Value)) { structuredMessage = transactionPart1Line.MessageOrStructuredMessage.StructuredMessage.Value; } else if (!string.IsNullOrEmpty(informationPart1Line?.MessageOrStructuredMessage.StructuredMessage?.Value)) { structuredMessage = informationPart1Line.MessageOrStructuredMessage.StructuredMessage.Value; } var linesWithAccountInfo = Helpers.FilterLinesOfTypes( lines, new[] { LineType.TransactionPart2, LineType.TransactionPart3 }); var accountOtherPartyParser = new AccountOtherPartyParser(); var account = accountOtherPartyParser.Parse(linesWithAccountInfo); var message = ConstructMessage(lines); return(new Transaction( account, transactionDate, valutaDate, amount, message, structuredMessage, sepaDirectDebit)); }
public StructuredMessage(string value, TransactionCode transactionCode) { Helpers.ValidateStringMultipleLengths(value, new[] { 53, 73 }, "StructuredMessage"); StructuredMessageType = value.Substring(0, 3); StructuredMessageFull = value.Substring(3); if (StructuredMessageType == "101" || StructuredMessageType == "102") { Value = StructuredMessageFull.Substring(0, 12); } else if (StructuredMessageType == "105" && StructuredMessageFull.Length >= 57) { Value = StructuredMessageFull.Substring(45, 12); // is start position 42 or 45? } else if (StructuredMessageType == "127" && transactionCode.Family.Value == "05") { SepaDirectDebit = new SepaDirectDebit(StructuredMessageFull); } }