Skip to content

Commit b635d1f

Browse files
committed
TD-5220 Implements store competency ordering option form
1 parent 28853e3 commit b635d1f

File tree

14 files changed

+176
-16
lines changed

14 files changed

+176
-16
lines changed

DigitalLearningSolutions.Data/Models/Frameworks/Import/CompetencyTableRow.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public enum RowStatus
99
CompetencyGroupAndCompetencyInserted,
1010
CompetencyInserted,
1111
CompetencyUpdated,
12+
CompetencyUpdatedAndReordered,
1213
CompetencyGroupInserted,
1314
CompetencyGroupUpdated,
1415
CompetencyGroupAndCompetencyUpdated,

DigitalLearningSolutions.Data/Models/Frameworks/Import/ImportCompetenciesResult.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ IReadOnlyCollection<CompetencyTableRow> competencyTableRows
2222
{
2323
ProcessedCount = competencyTableRows.Count;
2424
CompetencyAddedCount = competencyTableRows.Count(dr => dr.RowStatus == RowStatus.CompetencyInserted | dr.RowStatus == RowStatus.CompetencyGroupAndCompetencyInserted);
25-
CompetencyUpdatedCount = competencyTableRows.Count(dr => dr.RowStatus == RowStatus.CompetencyUpdated);
25+
CompetencyUpdatedCount = competencyTableRows.Count(dr => dr.RowStatus == RowStatus.CompetencyUpdated | dr.RowStatus == RowStatus.CompetencyUpdatedAndReordered);
26+
CompetencyReorderedCount = competencyTableRows.Count(dr => dr.RowStatus == RowStatus.CompetencyUpdatedAndReordered);
2627
GroupAddedCount = competencyTableRows.Count(dr => dr.RowStatus == RowStatus.CompetencyGroupInserted | dr.RowStatus == RowStatus.CompetencyGroupAndCompetencyInserted);
2728
SkippedCount = competencyTableRows.Count(dr => dr.RowStatus == RowStatus.Skipped);
2829
Errors = competencyTableRows.Where(dr => dr.Error.HasValue).Select(dr => (dr.RowNumber, dr.Error!.Value));
@@ -47,6 +48,7 @@ IReadOnlyCollection<CompetencyTableRow> competencyTableRows
4748
public int ProcessedCount { get; set; }
4849
public int CompetencyAddedCount { get; set; }
4950
public int CompetencyUpdatedCount { get; set; }
51+
public int CompetencyReorderedCount { get; set; }
5052
public int GroupAddedCount { get; set; }
5153
public int GroupUpdatedCount { get; set; }
5254
public int SkippedCount { get; set; }

DigitalLearningSolutions.Web/Controllers/FrameworksController/ImportCompetencies.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public IActionResult ImportCompleted()
8484
data.CompetenciesToProcessCount = resultsModel.ToProcessCount;
8585
data.CompetenciesToAddCount = resultsModel.CompetenciesToAddCount;
8686
data.CompetenciesToUpdateCount = resultsModel.ToUpdateOrSkipCount;
87+
data.CompetenciesToReorderCount = results.CompetencyReorderedCount;
8788
setBulkUploadData(data);
8889
return View("Developer/Import/ImportCompleted", resultsModel);
8990
}
@@ -93,6 +94,30 @@ public IActionResult ImportCompleted()
9394
return View("Developer/Import/ImportFailed");
9495
}
9596
}
97+
[Route("/Framework/{frameworkId}/{tabname}/Import/Ordering")]
98+
public IActionResult ApplyCompetencyOrdering()
99+
{
100+
var data = GetBulkUploadData();
101+
if (data.CompetenciesToReorderCount > 0)
102+
{
103+
var model = new ApplyCompetencyOrderingViewModel(data.FrameworkId, data.FrameworkName, data.FrameworkVocubulary, data.CompetenciesToReorderCount, data.ReorderCompetenciesOption);
104+
return View("Developer/Import/ApplyCompetencyOrdering", model);
105+
}
106+
return RedirectToAction("AddAssessmentQuestions", "Frameworks", new { frameworkId = data.FrameworkId, tabname = data.TabName });
107+
}
108+
[HttpPost]
109+
[Route("/Framework/{frameworkId}/{tabname}/Import/Ordering")]
110+
public IActionResult ApplyCompetencyOrdering(int reorderCompetenciesOption)
111+
{
112+
var data = GetBulkUploadData();
113+
114+
if (data.ReorderCompetenciesOption != reorderCompetenciesOption)
115+
{
116+
data.ReorderCompetenciesOption = reorderCompetenciesOption;
117+
setBulkUploadData(data);
118+
}
119+
return RedirectToAction("AddAssessmentQuestions", "Frameworks", new { frameworkId = data.FrameworkId, tabname = data.TabName });
120+
}
96121
[Route("/Framework/{frameworkId}/{tabname}/Import/AssessmentQuestions")]
97122
public IActionResult AddAssessmentQuestions()
98123
{
@@ -119,6 +144,7 @@ public IActionResult AddAssessmentQuestions()
119144
data.PublishStatusID,
120145
data.CompetenciesToAddCount,
121146
data.CompetenciesToUpdateCount,
147+
data.CompetenciesToReorderCount,
122148
defaultQuestions,
123149
questionSelectList
124150
);

DigitalLearningSolutions.Web/Models/BulkCompetenciesData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public BulkCompetenciesData(DetailFramework framework, int adminUserId, string c
3535
public int CompetenciesToProcessCount { get; set; }
3636
public int CompetenciesToAddCount { get; set; }
3737
public int CompetenciesToUpdateCount { get; set; }
38+
public int CompetenciesToReorderCount { get; set; }
39+
public int ReorderCompetenciesOption { get; set; } = 1; //1 = ignore order, 2 = apply order
3840
public int LastRowProcessed { get; set; }
3941
public int SubtotalCompetenciesAdded { get; set; }
4042
public int SubtotalCompetenciesUpdated { get; set; }

DigitalLearningSolutions.Web/Services/ImportCompetenciesFromFileService.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,40 @@ public ImportCompetenciesResult PreProcessCompetenciesTable(IXLWorkbook workbook
3434
{
3535
var table = OpenCompetenciesTable(workbook, vocabulary);
3636
var competencyRows = table.Rows().Skip(1).Select(row => new CompetencyTableRow(table, row)).ToList();
37+
var newCompetencyIds = competencyRows.Select(row => row.ID ?? 0).ToList();
3738
var existingCompetencies = frameworkService.GetBulkCompetenciesForFramework(frameworkId);
3839
var existingIds = existingCompetencies.Select(bc => (int)bc.ID).ToList();
3940
foreach (var competencyRow in competencyRows)
4041
{
41-
PreProcessCompetencyRow(competencyRow, existingIds);
42+
PreProcessCompetencyRow(competencyRow, newCompetencyIds, existingIds);
4243
}
4344
return new ImportCompetenciesResult(competencyRows);
4445
}
45-
private void PreProcessCompetencyRow(CompetencyTableRow competencyRow, List<int> existingIds)
46+
private void PreProcessCompetencyRow(CompetencyTableRow competencyRow, List<int> newIds, List<int> existingIds)
4647
{
4748
if (competencyRow.ID == null)
4849
{
4950
competencyRow.RowStatus = RowStatus.CompetencyInserted;
5051
}
5152
else
5253
{
53-
if (!existingIds.Contains((int)(competencyRow?.ID)))
54+
var id = (int)(competencyRow?.ID);
55+
if (!existingIds.Contains(id))
5456
{
5557
competencyRow.RowStatus = RowStatus.InvalidId;
5658
}
5759
else
5860
{
59-
competencyRow.RowStatus = RowStatus.CompetencyUpdated;
61+
int originalIndex = existingIds.IndexOf(id);
62+
int newIndex = newIds.IndexOf(id);
63+
if(originalIndex == newIndex)
64+
{
65+
competencyRow.RowStatus = RowStatus.CompetencyUpdated;
66+
}
67+
else
68+
{
69+
competencyRow.RowStatus = RowStatus.CompetencyUpdatedAndReordered;
70+
}
6071
}
6172
}
6273
competencyRow.Validate();

DigitalLearningSolutions.Web/ViewModels/Frameworks/Import/AddAssessmentQuestionsViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class AddAssessmentQuestionsViewModel(
1212
int publishStatusId,
1313
int newCompetencies,
1414
int existingCompetencies,
15+
int competenciesToReorderCount,
1516
IEnumerable<AssessmentQuestion> defaultQuestions,
1617
SelectList questionSelectList
1718
) : AddAssessmentQuestionsFormData
@@ -23,6 +24,7 @@ SelectList questionSelectList
2324
public int PublishStatusID { get; set; } = publishStatusId;
2425
public int NewCompetencies { get; set; } = newCompetencies;
2526
public int ExistingCompetencies { get; set; } = existingCompetencies;
27+
public int CompetenciesToReorderCount { get; set; } = competenciesToReorderCount;
2628
public IEnumerable<AssessmentQuestion>? DefaultQuestions { get; set; } = defaultQuestions;
2729
public SelectList? QuestionSelectList { get; set; } = questionSelectList;
2830
}

DigitalLearningSolutions.Web/ViewModels/Frameworks/Import/AddQuestionsToWhichCompetenciesViewModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,6 @@ public AddQuestionsToWhichCompetenciesViewModel
3737
public int CompetenciesToProcessCount { get; set; }
3838
public int CompetenciesToAddCount { get; set; }
3939
public int CompetenciesToUpdateCount { get; set; }
40+
4041
}
4142
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using DigitalLearningSolutions.Web.Helpers;
2+
3+
namespace DigitalLearningSolutions.Web.ViewModels.Frameworks.Import
4+
{
5+
public class ApplyCompetencyOrderingViewModel
6+
{
7+
public ApplyCompetencyOrderingViewModel
8+
(
9+
int frameworkId,
10+
string frameworkName,
11+
string frameworkVocabulary,
12+
int competenciesToReorderCount,
13+
int reorderCompetenciesOption
14+
)
15+
{
16+
FrameworkID = frameworkId;
17+
FrameworkName = frameworkName;
18+
FrameworkVocabularySingular = FrameworkVocabularyHelper.VocabularySingular(frameworkVocabulary);
19+
FrameworkVocabularyPlural = FrameworkVocabularyHelper.VocabularyPlural(frameworkVocabulary);
20+
CompetenciesToReorderCount = competenciesToReorderCount;
21+
ReorderCompetenciesOption = reorderCompetenciesOption;
22+
}
23+
public int FrameworkID { get; set; }
24+
public string FrameworkName { get; set; }
25+
public string FrameworkVocabularySingular { get; set; }
26+
public string FrameworkVocabularyPlural { get; set; }
27+
public int ReorderCompetenciesOption { get; set; } = 1; //1 = ignore order, 2 = apply order
28+
public int CompetenciesToReorderCount { get; set; }
29+
}
30+
}

DigitalLearningSolutions.Web/ViewModels/Frameworks/Import/ImportCompetenciesPreProcessViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public ImportCompetenciesPreProcessViewModel(ImportCompetenciesResult bulkCompet
1717
FrameworkVocabularyPlural = FrameworkVocabularyHelper.VocabularyPlural(bulkCompetenciesData.FrameworkVocubulary);
1818
ToProcessCount = bulkCompetenciesResult.ProcessedCount;
1919
CompetenciesToAddCount = bulkCompetenciesResult.CompetencyAddedCount;
20+
CompetenciesToReorderCount = bulkCompetenciesResult.CompetencyReorderedCount;
2021
ToUpdateOrSkipCount = bulkCompetenciesResult.CompetencyUpdatedCount;
2122
Errors = bulkCompetenciesResult.Errors.Select(x => (x.RowNumber, MapReasonToErrorMessage(x.Reason, FrameworkVocabularyHelper.VocabularySingular(bulkCompetenciesData.FrameworkVocubulary))));
2223
FlagCount = bulkCompetenciesResult.FlagCount;
@@ -31,6 +32,7 @@ public ImportCompetenciesPreProcessViewModel(ImportCompetenciesResult bulkCompet
3132
public int ErrorCount => Errors.Count();
3233
public int ToProcessCount { get; set; }
3334
public int CompetenciesToAddCount { get; set; }
35+
public int CompetenciesToReorderCount { get; set; }
3436
public int ToUpdateOrSkipCount { get; set; }
3537
public string? ImportFile { get; set; }
3638
public bool IsNotBlank { get; set; }

DigitalLearningSolutions.Web/Views/Frameworks/Developer/Import/AddAssessmentQuestions.cshtml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,10 @@
9696
</div>
9797
</fieldset>
9898
</div>
99+
<a asp-controller="Frameworks" asp-action="@(Model.CompetenciesToReorderCount == 0 ? "ImportCompleted" : "ApplyCompetencyOrdering")" asp-all-route-data="@cancelLinkData" role="button" class="nhsuk-button nhsuk-button--secondary">Back</a>
99100
<button class="nhsuk-button" type="submit">Next</button>
100101
</form>
101-
<vc:back-link asp-controller="Frameworks" asp-action="Index" asp-all-route-data="@null" link-text="Cancel" />
102+
<vc:cancel-link asp-controller="Frameworks" asp-action="CancelImport" asp-all-route-data="@cancelLinkData" link-text="Cancel" />
102103
</div>
103104
</div>
104105
</div>

0 commit comments

Comments
 (0)