public void GetRecordsForCSVFile_HandlesMultipleAmountColumns()
        {
            var testCsv = new CSVFile();

            testCsv.Header = "Account Number,Post Date,Check,Description,Debit,Credit,Status,Balance";
            testCsv.Rows   = new List <string>()
            {
                "\"XXXX1234S2345\",1/1/2020,,\"ID: 1234567890 CO: SOMEBODY ACH Trace Number: 12345856433242\",100.00,,Posted,200.00",
                "\"XXXX1234S2345\",1/1/2020,,\"ID: 2345678901 CO: SOMEBODY ELSE ACH Trace Number: 12456789765345\",,200.00,Posted,400.00"
            };

            var testColumnOptions = new CSVFileColumnOptions()
            {
                DateColumn        = "Post Date",
                AmountColumns     = new Dictionary <string, bool>(),
                CategoryColumn    = "Description",
                DescriptionColumn = "Description",
            };

            testColumnOptions.AmountColumns.Add("Credit", false);
            testColumnOptions.AmountColumns.Add("Debit", true);

            var result = SUT.GetRecordsForCSVFile(testCsv, testColumnOptions, 13);

            Assert.Equal(2, result.Count);
            Assert.Contains(result, x => x.Amount == -100);
            Assert.Contains(result, x => x.Amount == 200);
        }
        public void GetRecordsForCSVFile_DoesNotThrow()
        {
            var testCsv = new CSVFile();

            testCsv.Header = "Transaction Date,Post Date,Description,Category,Type,Amount";
            testCsv.Rows   = new List <string>()
            {
                "01/01/2020,01/02/2020,WALMART GROCERY,Groceries,Sale,-12.34"
            };

            var testColumnOptions = new CSVFileColumnOptions()
            {
                DateColumn        = "Transaction Date",
                AmountColumns     = new Dictionary <string, bool>(),
                CategoryColumn    = "Category",
                DescriptionColumn = "Description",
            };

            testColumnOptions.AmountColumns.Add("Amount", false);

            var result = SUT.GetRecordsForCSVFile(testCsv, testColumnOptions, 13);
        }
Beispiel #3
0
        public void ImportCommand()
        {
            var columnOptions = new CSVFileColumnOptions()
            {
                DateColumn        = DateColumn,
                CategoryColumn    = CategoryColumn,
                DescriptionColumn = DescriptionColumn
            };

            if (!String.IsNullOrEmpty(AmountColumn))
            {
                columnOptions.AmountColumns.Add(AmountColumn, AmountColumnInverted);
            }
            if (!String.IsNullOrEmpty(SecondaryAmountColumn))
            {
                columnOptions.AmountColumns.Add(SecondaryAmountColumn, SecondaryAmountColumnInverted);
            }

            var newRecords     = _csvFileService.GetRecordsForCSVFile(_csvFile, columnOptions, 0);
            var duplicateCount = CurrentProjectService.ActiveProject.AddRecordsExceptDuplicates(newRecords);

            _ParentWindow.Close();
        }
        public List <AccountRecord> GetRecordsForCSVFile(CSVFile file, CSVFileColumnOptions columnOptions, int accountId)
        {
            var splitHeaders      = SplitCSVRow(file.Header);
            var dateColumn        = 0;
            var amountColumns     = new Dictionary <int, bool>();
            var categoryColumn    = 0;
            var descriptionColumn = 0;

            for (var i = 0; i < splitHeaders.Count; i++)
            {
                if (String.Equals(splitHeaders[i], columnOptions.DateColumn, StringComparison.OrdinalIgnoreCase))
                {
                    dateColumn = i;
                }
                if (String.Equals(splitHeaders[i], columnOptions.CategoryColumn, StringComparison.OrdinalIgnoreCase))
                {
                    categoryColumn = i;
                }
                if (String.Equals(splitHeaders[i], columnOptions.DescriptionColumn, StringComparison.OrdinalIgnoreCase))
                {
                    descriptionColumn = i;
                }

                if (columnOptions.AmountColumns.Any(x => String.Equals(splitHeaders[i], x.Key, StringComparison.OrdinalIgnoreCase)))
                {
                    var matchingAmountColumn = columnOptions.AmountColumns.First(x => String.Equals(splitHeaders[i], x.Key, StringComparison.OrdinalIgnoreCase));
                    amountColumns.Add(i, matchingAmountColumn.Value);
                }
            }

            var records = new List <AccountRecord>();

            foreach (var row in file.Rows)
            {
                var splitRow  = SplitCSVRow(row);
                var newRecord = new AccountRecord();
                newRecord.AccountID   = accountId;
                newRecord.Date        = DateTime.Parse(splitRow[dateColumn]);
                newRecord.Category    = splitRow[categoryColumn];
                newRecord.Description = splitRow[descriptionColumn];

                var finalValue = 0f;
                foreach (var amountColumn in amountColumns)
                {
                    var amountString = splitRow[amountColumn.Key];
                    if (String.IsNullOrEmpty(amountString))
                    {
                        continue;
                    }
                    var value = float.Parse(splitRow[amountColumn.Key]);
                    if (amountColumn.Value)
                    {
                        value = value * -1;
                    }
                    finalValue += value;
                }
                newRecord.Amount = finalValue;

                records.Add(newRecord);
            }

            return(records);
        }