Skip to content

Commit 16e8bb6

Browse files
authored
Merge pull request #123 from TheAxelander/121_122_fix_import
Merge changes for version 1.6.2
2 parents 183d863 + 177e4b5 commit 16e8bb6

File tree

8 files changed

+52
-19
lines changed

8 files changed

+52
-19
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
### 1.6.2 (2023-01-11)
2+
3+
* [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)
4+
15
### 1.6.1 (2022-12-31)
26

37
* [Changed] Slight visual changes for Mapping Rule modification

OpenBudgeteer.Blazor/Pages/Import.razor

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
<label class="form-label">Import Profile:</label>
6464
<ObjectSelect
6565
GetSelectedItemIdHandler="@(e => e.ImportProfileId.ToString())"
66-
SetSelectedItemHandler="@(e => _dataContext.AvailableImportProfiles.First(i => i.ImportProfileId == Convert.ToInt32(e)))"
66+
SetSelectedItemHandler="@(e => _dataContext.AvailableImportProfiles.FirstOrDefault(i => i.ImportProfileId == Convert.ToInt32(e), dummyImportProfile))"
6767
@bind-SelectedItem="@_dataContext.SelectedImportProfile"
6868
AvailableItems="@_dataContext.AvailableImportProfiles"
6969
OnSelectedItemChanged="@ImportProfile_SelectionChanged"
@@ -81,7 +81,7 @@
8181
<label class="form-label">Target Account:</label>
8282
<ObjectSelect
8383
GetSelectedItemIdHandler="@(e => e.AccountId.ToString())"
84-
SetSelectedItemHandler="@(e => _dataContext.AvailableAccounts.First(i => i.AccountId == Convert.ToInt32(e)))"
84+
SetSelectedItemHandler="@(e => _dataContext.AvailableAccounts.FirstOrDefault(i => i.AccountId == Convert.ToInt32(e), dummyAccount))"
8585
@bind-SelectedItem="@_dataContext.SelectedAccount"
8686
AvailableItems="@_dataContext.AvailableAccounts"
8787
OnSelectedItemChanged="@TargetAccount_SelectionChanged"
@@ -516,8 +516,8 @@
516516
HandleResult(_dataContext.LoadData());
517517
_dataContext.AvailableImportProfiles.Insert(0, dummyImportProfile);
518518
_dataContext.AvailableAccounts.Insert(0, dummyAccount);
519-
_dataContext.IdentifiedColumns.Insert(0, dummyColumn);
520519
_dataContext.SelectedImportProfile = dummyImportProfile;
520+
_dataContext.IdentifiedColumns.Insert(0, dummyColumn);
521521
_dataContext.SelectedAccount = dummyAccount;
522522
}
523523

@@ -527,6 +527,7 @@
527527
_step3Enabled = false;
528528
_step4Enabled = false;
529529
_dataContext.SelectedImportProfile = dummyImportProfile;
530+
_dataContext.IdentifiedColumns.Insert(0, dummyColumn);
530531
_dataContext.SelectedAccount = dummyAccount;
531532

532533
var file = (await FileReaderService.CreateReference(_inputElement).EnumerateFilesAsync()).FirstOrDefault();
@@ -537,11 +538,6 @@
537538

538539
async Task LoadProfile()
539540
{
540-
//// Workaround for setting the SelectedImportProfile as the first item is always selected but doesn't trigger OnChange
541-
//if (_dataContext.SelectedImportProfile == null && _dataContext.AvailableImportProfiles.Count > 0)
542-
//{
543-
// _dataContext.SelectedImportProfile = _dataContext.AvailableImportProfiles.First();
544-
//}
545541
var result = await _dataContext.LoadProfileAsync();
546542
if (result.IsSuccessful)
547543
{

OpenBudgeteer.Blazor/Shared/NavMenu.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
<div class="col-md-auto">
6262
<div class="navbar-text">
6363
<span>
64-
Version: 1.6.1 (<a href="https://github.com/TheAxelander/OpenBudgeteer/blob/master/CHANGELOG.md" target="_blank">Change Log</a>)
64+
Version: 1.6.2 (<a href="https://github.com/TheAxelander/OpenBudgeteer/blob/master/CHANGELOG.md" target="_blank">Change Log</a>)
6565
</span>
6666
</div>
6767
</div>

OpenBudgeteer.Blazor/Shared/Selector/BucketSelect.razor

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
SelectedItemId = value.BucketId;
5656
return;
5757
}
58-
var oldValue = _selectedItem;
5958
_selectedItem = value;
6059
SelectedItemChanged.InvokeAsync(value);
6160
OnSelectedItemChanged.InvokeAsync(new ChangeEventArgs() { Value = value });

OpenBudgeteer.Blazor/Shared/Selector/IntegerSelect.razor

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
// Check if there is no real change
3030
if (_selectedItem == value) return;
3131

32-
var oldValue = _selectedItem;
3332
_selectedItem = value;
3433
SelectedItemChanged.InvokeAsync(value);
3534
OnSelectedItemChanged.InvokeAsync(new ChangeEventArgs() { Value = value });

OpenBudgeteer.Blazor/Shared/Selector/ObjectSelect.razor

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
SelectedItemId = GetSelectedItemIdHandler(value);
6060
return;
6161
}
62-
var oldValue = _selectedItem;
6362
_selectedItem = value;
6463
SelectedItemChanged.InvokeAsync(value);
6564
OnSelectedItemChanged.InvokeAsync(new ChangeEventArgs() { Value = value });

OpenBudgeteer.Blazor/Shared/Selector/StringSelect.razor

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
// Check if there is no real change
3030
if (_selectedItem == value) return;
3131

32-
var oldValue = _selectedItem;
3332
_selectedItem = value;
3433
SelectedItemChanged.InvokeAsync(value);
3534
OnSelectedItemChanged.InvokeAsync(new ChangeEventArgs() { Value = value });

OpenBudgeteer.Core/ViewModels/ImportDataViewModel.cs

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,13 @@ public Account SelectedAccount
174174
public ImportProfile SelectedImportProfile
175175
{
176176
get => _selectedImportProfile;
177-
set => Set(ref _selectedImportProfile, value);
177+
set
178+
{
179+
// Load Headers already to prevent hiccups with other SelectedItem properties from Column Mappings
180+
// as they depend on SelectedImportProfile
181+
if (value != null) LoadHeaders(value);
182+
Set(ref _selectedImportProfile, value);
183+
}
178184
}
179185

180186
private int _totalRecords;
@@ -398,8 +404,8 @@ public async Task<ViewModelOperationResult> LoadProfileAsync()
398404
SelectedAccount = AvailableAccounts.First(i => i.AccountId == SelectedImportProfile.AccountId);
399405
}
400406

401-
var result = LoadHeaders();
402-
if (!result.IsSuccessful) throw new Exception(result.Message);
407+
// var result = LoadHeaders();
408+
// if (!result.IsSuccessful) throw new Exception(result.Message);
403409

404410
//await ValidateDataAsync();
405411
_isProfileValid = true;
@@ -416,19 +422,50 @@ public async Task<ViewModelOperationResult> LoadProfileAsync()
416422
/// <summary>
417423
/// Reads column headers from the loaded file
418424
/// </summary>
425+
/// <remarks>
426+
/// Uses settings from current <see cref="SelectedImportProfile"/>
427+
/// </remarks>
419428
/// <returns>Object which contains information and results of this method</returns>
420429
public ViewModelOperationResult LoadHeaders()
430+
{
431+
var result = LoadHeaders(SelectedImportProfile);
432+
433+
// If possible and necessary make initial selections after loading headers
434+
if (IdentifiedColumns.Count == 0) return result;
435+
var firstSelection = IdentifiedColumns.First();
436+
if (string.IsNullOrEmpty(SelectedImportProfile.TransactionDateColumnName))
437+
SelectedImportProfile.TransactionDateColumnName = firstSelection;
438+
if (string.IsNullOrEmpty(SelectedImportProfile.PayeeColumnName))
439+
SelectedImportProfile.PayeeColumnName = firstSelection;
440+
if (string.IsNullOrEmpty(SelectedImportProfile.MemoColumnName))
441+
SelectedImportProfile.MemoColumnName = firstSelection;
442+
if (string.IsNullOrEmpty(SelectedImportProfile.AmountColumnName))
443+
SelectedImportProfile.AmountColumnName = firstSelection;
444+
if (string.IsNullOrEmpty(SelectedImportProfile.CreditColumnName))
445+
SelectedImportProfile.CreditColumnName = firstSelection;
446+
if (string.IsNullOrEmpty(SelectedImportProfile.CreditColumnIdentifierColumnName))
447+
SelectedImportProfile.CreditColumnIdentifierColumnName = firstSelection;
448+
449+
return result;
450+
}
451+
452+
/// <summary>
453+
/// Reads column headers from the loaded file
454+
/// </summary>
455+
/// <param name="importProfile"><see cref="ImportProfile"/> containing the settings how to parse the headers</param>
456+
/// <returns>Object which contains information and results of this method</returns>
457+
public ViewModelOperationResult LoadHeaders(ImportProfile importProfile)
421458
{
422459
try
423460
{
424461
// Set ComboBox selection for Column Mapping
425462
IdentifiedColumns.Clear();
426-
var headerLine = _fileLines[SelectedImportProfile.HeaderRow - 1];
427-
var columns = headerLine.Split(SelectedImportProfile.Delimiter);
463+
var headerLine = _fileLines[importProfile.HeaderRow - 1];
464+
var columns = headerLine.Split(importProfile.Delimiter);
428465
foreach (var column in columns)
429466
{
430467
if (column != string.Empty)
431-
IdentifiedColumns.Add(column.Trim(SelectedImportProfile.TextQualifier)); // Exclude TextQualifier
468+
IdentifiedColumns.Add(column.Trim(importProfile.TextQualifier)); // Exclude TextQualifier
432469
}
433470

434471
return new ViewModelOperationResult(true);

0 commit comments

Comments
 (0)