/// <summary> /// Creates a new Customer Statement Message based on the given CustomerStatementMessage. /// </summary> public CustomerStatementMessage(CustomerStatementMessage customerStatementMessage) { if (customerStatementMessage == null) { throw new ArgumentNullException(nameof(customerStatementMessage)); } Account = customerStatementMessage.Account; ClosingAvailableBalance = customerStatementMessage.ClosingAvailableBalance; ClosingBalance = customerStatementMessage.ClosingBalance; Description = customerStatementMessage.Description; ForwardAvailableBalance = customerStatementMessage.ForwardAvailableBalance; OpeningBalance = customerStatementMessage.OpeningBalance; RelatedMessage = customerStatementMessage.RelatedMessage; SequenceNumber = customerStatementMessage.SequenceNumber; StatementNumber = customerStatementMessage.StatementNumber; TransactionReference = customerStatementMessage.TransactionReference; Transactions = customerStatementMessage.Transactions; }
/// <summary> /// /// </summary> /// <param name="format">IMt940Format implementation</param> /// <param name="data">A collection of string arrays formatted by CreateStringTransactions()</param> /// <param name="cultureInfo">The culture to use</param> /// <param name="mt940Params">Additional mt940 parameters</param> /// <see cref="CreateStringTransactions"></see> /// <returns></returns> /// TODO: This method is way to complex. It should be simplified. private static ICollection <CustomerStatementMessage> CreateObjectTransactions( IMt940Format format, ICollection <string[]> data, CultureInfo cultureInfo, Parameters mt940Params) { // Create a new list. var customerStatementList = new List <CustomerStatementMessage>(); // For each string collection of commands. foreach (string[] line in data) { int transactionPointer = 0; // Start of the transaction. // Skip the header (for some reason) transactionPointer += format.Header.LineCount; // SWIFT HEADER. var transaction = default(Transaction); // Set transaction to its default (null). var customerStatementMessage = new CustomerStatementMessage(); // ReSharper disable AccessToModifiedClosure void addAndNullTransactionIfPresent() { if (customerStatementMessage != null && transaction != null) { customerStatementMessage.Transactions.Add(transaction); } transaction = null; } // ReSharper restore AccessToModifiedClosure // Loop through the array. for (; transactionPointer < line.Length; transactionPointer++) { // Set transactionLine to the current line. string transactionLine = line[transactionPointer]; // Skip if null, CreateObjectTransactions kinda leaves a mess. if (transactionLine != null) { // Get the command number. var tag = transactionLine.Substring(transactionLine.IndexOf(':'), transactionLine.IndexOf(':', 1) + 1); // Get the command data. var transactionData = transactionLine.Substring(tag.Length); // Fill the object the right data. switch (tag) { case ":20:": customerStatementMessage = customerStatementMessage.SetTransactionReference(transactionData); break; case ":21:": customerStatementMessage = customerStatementMessage.SetRelatedMessage(transactionData); break; case ":25:": customerStatementMessage = customerStatementMessage.SetAccount(transactionData, mt940Params.ClearAccount); break; case ":28:": case ":28C:": customerStatementMessage.SetSequenceNumber(transactionData, cultureInfo); break; case ":60m:": case ":60F:": case ":60M:": customerStatementMessage = customerStatementMessage.SetOpeningBalance(new TransactionBalance(transactionData, cultureInfo)); break; case ":61:": addAndNullTransactionIfPresent(); transaction = new Transaction(transactionData, customerStatementMessage.OpeningBalance.Currency, cultureInfo); break; case ":86:": /* * If the previous line was a 61 (ie, we have a transaction), the 'Information to Account Owner' * applies to the transaction, otherwise it applies to the whole message. */ if (transaction == null) { customerStatementMessage = customerStatementMessage.SetDescription(transactionData); } else { transaction.Description = transactionData; } addAndNullTransactionIfPresent(); break; case ":62F:": addAndNullTransactionIfPresent(); customerStatementMessage = customerStatementMessage.SetClosingBalance(new TransactionBalance(transactionData, cultureInfo)); break; case ":62m:": case ":62M:": customerStatementMessage = customerStatementMessage.SetClosingBalance(new TransactionBalance(transactionData, cultureInfo)); break; case ":64:": addAndNullTransactionIfPresent(); customerStatementMessage = customerStatementMessage.SetClosingAvailableBalance(new TransactionBalance(transactionData, cultureInfo)); break; case ":65:": customerStatementMessage = customerStatementMessage.SetForwardAvailableBalance(new TransactionBalance(transactionData, cultureInfo)); break; } } } customerStatementList.Add(customerStatementMessage); } // geting :86: details if (mt940Params.Codes.Count > 0) { var constantCode = mt940Params.ConstantCode(); foreach (var item in customerStatementList) { foreach (var tr in item.Transactions) { Parse86Details(tr, mt940Params, constantCode); } } } return(customerStatementList); }