Skip to content

Commit

Permalink
Issue-178: Add Core OAS selection for stages (#184)
Browse files Browse the repository at this point in the history
  • Loading branch information
NomisNostab authored Sep 20, 2024
2 parents 243b4ac + 9928f33 commit 1554828
Show file tree
Hide file tree
Showing 3 changed files with 167 additions and 8 deletions.
5 changes: 4 additions & 1 deletion Model/OAS/OASPageViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ public class OASPageViewModel
[Display(Name = "Break by Patrol")]
public bool BreakByPatrol { get; set; } = false;
public string StagesErrorMessage { get; set; } = "";
public bool FormatLikeTerrain { get; set; } = false;
public bool FormatLikeTerrain { get; set; } = true;
public string GroupName { get; set; } = string.Empty;
public bool UseCore { get; set; } = false;
public bool[] CoreStages { get; set; } = new bool[9];
}

}
52 changes: 47 additions & 5 deletions Topo/Controller/OasController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
using Microsoft.JSInterop;
using Microsoft.VisualBasic;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Topo.Model.OAS;
using Topo.Model.ReportGeneration;
Expand Down Expand Up @@ -51,7 +53,6 @@ protected override async Task OnInitializedAsync()
{
await UnitChange(_storageService.UnitId);
}

}

internal async Task UnitChange(ChangeEventArgs e)
Expand Down Expand Up @@ -99,10 +100,6 @@ private async Task<byte[]> OASWorksheet(OutputType outputType = OutputType.PDF)
var templateList = await _oasService.GetOASTemplate(selectedStageTemplate.Replace("/latest.json", ""));
var selectedStage = model.Stages.Where(s => s.TemplateLink == selectedStageTemplate).FirstOrDefault() ?? new OASStageListModel();
var sortedTemplateAnswers = await _oasService.GenerateOASWorksheetAnswers(model.UnitId, selectedStage, model.HideCompletedMembers, templateList);
//sortedTemplateAnswers = sortedTemplateAnswers.Where(a => !a.MemberAnswer.HasValue || a.MemberAnswer > new DateTime(2024, 5, 1))
// .OrderBy(owa => owa.InputTitleSortIndex)
// .ThenBy(owa => owa.InputSortIndex)
// .ToList();
sortedAnswers.AddRange(sortedTemplateAnswers);
}

Expand All @@ -116,17 +113,62 @@ private async Task<byte[]> OASWorksheet(OutputType outputType = OutputType.PDF)
return report;
}

internal async Task GetCoreSelections(ChangeEventArgs arg)
{
model.SelectedStages = new string[0];
model.StagesErrorMessage = "";
if (model.UseCore)
{
List<OASStageListModel> coreStages = new List<OASStageListModel>();
for (int i = 0; i < 9; i++)
{
if (model.CoreStages[i])
{
coreStages = coreStages.Concat(GetCoreForStage(i + 1)).ToList();
}
}

foreach (var coreStage in coreStages)
{
model.SelectedStages = model.SelectedStages.Append(coreStage.TemplateLink).ToArray();
}

if (model.SelectedStages == null || model.SelectedStages.Length == 0)
{
model.StagesErrorMessage = "Please select at least one stage";
}
}
else
{
for (int i = 0; i < 9; i++)
{
model.CoreStages[i] = false;
}
model.StagesErrorMessage = "Please select at least one stage";
}

await JS.InvokeVoidAsync("BindSelect2");
await JS.InvokeVoidAsync("BindSelect2");
}

public async Task<bool> GetSelections(ElementReference elementReference)
{
model.SelectedStages = (await JS.InvokeAsync<List<string>>("getSelectedValues", _select2Reference)).ToArray<string>();
model.StagesErrorMessage = "";

if (model.SelectedStages == null || model.SelectedStages.Length == 0)
{
model.StagesErrorMessage = "Please select at least one stage";
return false;
}
return true;
}

private List<OASStageListModel> GetCoreForStage(int stageNumber)
{
var stages = model.Stages.Where(stage => stage.Stage == stageNumber && (stage.Stream == "Bushcraft" || stage.Stream == "Bushwalking" || stage.Stream == "Camping")).ToList();
return stages;
}
}

}
118 changes: 116 additions & 2 deletions Topo/Pages/OAS.razor
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

<div class="form-group mb-3 row">
<label for="stages" class="col-sm-2 col-form-label">Please select a Stage:</label>
<div class="col-sm-3 ">
<div class="col-sm-7 ">
<select @ref="_select2Reference" id="stages" class="form-select select2" multiple @bind="model.SelectedStages">
@foreach (var groupedStage in @model.Stages.GroupBy(s => s.Stream))
{
Expand All @@ -42,7 +42,121 @@
</select>
<label class="col-form-label validation-message">@model.StagesErrorMessage</label>
</div>
<div class="col-sm-7">
<div class="col-sm-3">
</div>
</div>

<div class="mt-3 mb-3 row">
<div class="col-sm-2">
<input class="form-check-input" type="checkbox" id="useCore"
checked="@model.UseCore"
@bind-value="model.UseCore"
@bind-value:event="oninput"
@onchange="GetCoreSelections" />
<label class="form-check-label" for="useCore">
Select Core OAS
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage1"
checked="@model.CoreStages[0]"
@bind-value="model.CoreStages[0]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage1">
Stage 1
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage2"
checked="@model.CoreStages[1]"
@bind-value="model.CoreStages[1]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage2">
Stage 2
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage3"
checked="@model.CoreStages[2]"
@bind-value="model.CoreStages[2]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage3">
Stage 3
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage4"
checked="@model.CoreStages[3]"
@bind-value="model.CoreStages[3]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage4">
Stage 4
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage5"
checked="@model.CoreStages[4]"
@bind-value="model.CoreStages[4]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage5">
Stage 5
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage6"
checked="@model.CoreStages[5]"
@bind-value="model.CoreStages[5]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage6">
Stage 6
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage7"
checked="@model.CoreStages[6]"
@bind-value="model.CoreStages[6]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage7">
Stage 7
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage8"
checked="@model.CoreStages[7]"
@bind-value="model.CoreStages[7]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage8">
Stage 8
</label>
</div>
<div class="col-sm-1">
<input class="form-check-input" type="checkbox" id="useCoreStage9"
checked="@model.CoreStages[8]"
@bind-value="model.CoreStages[8]"
@bind-value:event="oninput"
@onchange="GetCoreSelections"
disabled="@(!model.UseCore)" />
<label class="form-check-label" for="useCoreStage9">
Stage 9
</label>
</div>
<div class="col-sm-1">
</div>
</div>

Expand Down

0 comments on commit 1554828

Please sign in to comment.