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); }
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); }