예제 #1
0
        /// <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;
        }
예제 #2
0
        /// <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);
        }