diff --git a/CHANGELOG.md b/CHANGELOG.md index 4237388..7a081e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### 1.6.2 (2023-01-11) + +* [Fixed] Due to implemented fix for [#114](https://github.com/TheAxelander/OpenBudgeteer/issues/114) Column mapping on Import Page was not working properly [#121](https://github.com/TheAxelander/OpenBudgeteer/issues/121) [#122](https://github.com/TheAxelander/OpenBudgeteer/issues/122) + ### 1.6.1 (2022-12-31) * [Changed] Slight visual changes for Mapping Rule modification diff --git a/OpenBudgeteer.Blazor/Pages/Import.razor b/OpenBudgeteer.Blazor/Pages/Import.razor index 8fcabae..86c0a6c 100644 --- a/OpenBudgeteer.Blazor/Pages/Import.razor +++ b/OpenBudgeteer.Blazor/Pages/Import.razor @@ -63,7 +63,7 @@ Target Account: 0) - //{ - // _dataContext.SelectedImportProfile = _dataContext.AvailableImportProfiles.First(); - //} var result = await _dataContext.LoadProfileAsync(); if (result.IsSuccessful) { diff --git a/OpenBudgeteer.Blazor/Shared/NavMenu.razor b/OpenBudgeteer.Blazor/Shared/NavMenu.razor index 156533d..e235017 100644 --- a/OpenBudgeteer.Blazor/Shared/NavMenu.razor +++ b/OpenBudgeteer.Blazor/Shared/NavMenu.razor @@ -61,7 +61,7 @@
diff --git a/OpenBudgeteer.Blazor/Shared/Selector/BucketSelect.razor b/OpenBudgeteer.Blazor/Shared/Selector/BucketSelect.razor index 53dd99c..a56e684 100644 --- a/OpenBudgeteer.Blazor/Shared/Selector/BucketSelect.razor +++ b/OpenBudgeteer.Blazor/Shared/Selector/BucketSelect.razor @@ -55,7 +55,6 @@ SelectedItemId = value.BucketId; return; } - var oldValue = _selectedItem; _selectedItem = value; SelectedItemChanged.InvokeAsync(value); OnSelectedItemChanged.InvokeAsync(new ChangeEventArgs() { Value = value }); diff --git a/OpenBudgeteer.Blazor/Shared/Selector/IntegerSelect.razor b/OpenBudgeteer.Blazor/Shared/Selector/IntegerSelect.razor index f78aa0a..0072453 100644 --- a/OpenBudgeteer.Blazor/Shared/Selector/IntegerSelect.razor +++ b/OpenBudgeteer.Blazor/Shared/Selector/IntegerSelect.razor @@ -29,7 +29,6 @@ // Check if there is no real change if (_selectedItem == value) return; - var oldValue = _selectedItem; _selectedItem = value; SelectedItemChanged.InvokeAsync(value); OnSelectedItemChanged.InvokeAsync(new ChangeEventArgs() { Value = value }); diff --git a/OpenBudgeteer.Blazor/Shared/Selector/ObjectSelect.razor b/OpenBudgeteer.Blazor/Shared/Selector/ObjectSelect.razor index a911283..58e5e6b 100644 --- a/OpenBudgeteer.Blazor/Shared/Selector/ObjectSelect.razor +++ b/OpenBudgeteer.Blazor/Shared/Selector/ObjectSelect.razor @@ -59,7 +59,6 @@ SelectedItemId = GetSelectedItemIdHandler(value); return; } - var oldValue = _selectedItem; _selectedItem = value; SelectedItemChanged.InvokeAsync(value); OnSelectedItemChanged.InvokeAsync(new ChangeEventArgs() { Value = value }); diff --git a/OpenBudgeteer.Blazor/Shared/Selector/StringSelect.razor b/OpenBudgeteer.Blazor/Shared/Selector/StringSelect.razor index eb0f1da..36f12a9 100644 --- a/OpenBudgeteer.Blazor/Shared/Selector/StringSelect.razor +++ b/OpenBudgeteer.Blazor/Shared/Selector/StringSelect.razor @@ -29,7 +29,6 @@ // Check if there is no real change if (_selectedItem == value) return; - var oldValue = _selectedItem; _selectedItem = value; SelectedItemChanged.InvokeAsync(value); OnSelectedItemChanged.InvokeAsync(new ChangeEventArgs() { Value = value }); diff --git a/OpenBudgeteer.Core/ViewModels/ImportDataViewModel.cs b/OpenBudgeteer.Core/ViewModels/ImportDataViewModel.cs index 8204aa8..8338da6 100644 --- a/OpenBudgeteer.Core/ViewModels/ImportDataViewModel.cs +++ b/OpenBudgeteer.Core/ViewModels/ImportDataViewModel.cs @@ -174,7 +174,13 @@ public Account SelectedAccount public ImportProfile SelectedImportProfile { get => _selectedImportProfile; - set => Set(ref _selectedImportProfile, value); + set + { + // Load Headers already to prevent hiccups with other SelectedItem properties from Column Mappings + // as they depend on SelectedImportProfile + if (value != null) LoadHeaders(value); + Set(ref _selectedImportProfile, value); + } } private int _totalRecords; @@ -398,8 +404,8 @@ public async Task LoadProfileAsync() SelectedAccount = AvailableAccounts.First(i => i.AccountId == SelectedImportProfile.AccountId); } - var result = LoadHeaders(); - if (!result.IsSuccessful) throw new Exception(result.Message); + // var result = LoadHeaders(); + // if (!result.IsSuccessful) throw new Exception(result.Message); //await ValidateDataAsync(); _isProfileValid = true; @@ -416,19 +422,50 @@ public async Task LoadProfileAsync() /// /// Reads column headers from the loaded file /// + /// + /// Uses settings from current + /// /// Object which contains information and results of this method public ViewModelOperationResult LoadHeaders() + { + var result = LoadHeaders(SelectedImportProfile); + + // If possible and necessary make initial selections after loading headers + if (IdentifiedColumns.Count == 0) return result; + var firstSelection = IdentifiedColumns.First(); + if (string.IsNullOrEmpty(SelectedImportProfile.TransactionDateColumnName)) + SelectedImportProfile.TransactionDateColumnName = firstSelection; + if (string.IsNullOrEmpty(SelectedImportProfile.PayeeColumnName)) + SelectedImportProfile.PayeeColumnName = firstSelection; + if (string.IsNullOrEmpty(SelectedImportProfile.MemoColumnName)) + SelectedImportProfile.MemoColumnName = firstSelection; + if (string.IsNullOrEmpty(SelectedImportProfile.AmountColumnName)) + SelectedImportProfile.AmountColumnName = firstSelection; + if (string.IsNullOrEmpty(SelectedImportProfile.CreditColumnName)) + SelectedImportProfile.CreditColumnName = firstSelection; + if (string.IsNullOrEmpty(SelectedImportProfile.CreditColumnIdentifierColumnName)) + SelectedImportProfile.CreditColumnIdentifierColumnName = firstSelection; + + return result; + } + + /// + /// Reads column headers from the loaded file + /// + /// containing the settings how to parse the headers + /// Object which contains information and results of this method + public ViewModelOperationResult LoadHeaders(ImportProfile importProfile) { try { // Set ComboBox selection for Column Mapping IdentifiedColumns.Clear(); - var headerLine = _fileLines[SelectedImportProfile.HeaderRow - 1]; - var columns = headerLine.Split(SelectedImportProfile.Delimiter); + var headerLine = _fileLines[importProfile.HeaderRow - 1]; + var columns = headerLine.Split(importProfile.Delimiter); foreach (var column in columns) { if (column != string.Empty) - IdentifiedColumns.Add(column.Trim(SelectedImportProfile.TextQualifier)); // Exclude TextQualifier + IdentifiedColumns.Add(column.Trim(importProfile.TextQualifier)); // Exclude TextQualifier } return new ViewModelOperationResult(true);