1
1
@using MaintenanceLog .Data .Entities
2
2
@using MaintenanceLog .Data .Services .Contracts
3
3
@using MaintenanceLog .Common .Extensions
4
+ @using System .Security .Claims
4
5
5
6
@inject IJSRuntime JsRuntime
6
7
@inject ITaskDefinitionService TaskDefinitionService
7
8
@inject ITaskInstanceService TaskInstanceService
9
+ @inject ITaskInstanceStepService TaskInstanceStepService
10
+ @inject AuthenticationStateProvider AuthenticationStateProvider
8
11
@inject NavigationManager NavigationManager
9
12
10
13
<!-- Task Instances Table -->
13
16
<table class =" table" >
14
17
<thead >
15
18
<tr >
16
- <th >Start </th >
19
+ <th ></th >
17
20
<th >Name </th >
21
+ <th >Steps </th >
18
22
<th >Asset </th >
19
23
<th >Area </th >
20
24
<th >Completed On </th >
29
33
<td >
30
34
@if (taskInstance .CompletedOn is null )
31
35
{
32
- <button class =" btn btn-danger" title =" Stop" @onclick =" () => StopTaskInstance(taskInstance)" >
33
- <svg xmlns =" http://www.w3.org/2000/svg" width =" 16" height =" 16" fill =" white" class =" bi bi-stop" viewBox =" 0 0 16 16" >
34
- <path d =" M3.5 5A1.5 1.5 0 0 1 5 3.5h6A1.5 1.5 0 0 1 12.5 5v6a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 11zM5 4.5a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 .5-.5V5a.5.5 0 0 0-.5-.5z" />
35
- </svg >
36
- </button >
36
+ <button class =" btn btn-danger" title =" Stop" @onclick =" () => StopTaskInstance(taskInstance)" >
37
+ <svg xmlns =" http://www.w3.org/2000/svg" width =" 16" height =" 16" fill =" white" class =" bi bi-stop" viewBox =" 0 0 16 16" >
38
+ <path d =" M3.5 5A1.5 1.5 0 0 1 5 3.5h6A1.5 1.5 0 0 1 12.5 5v6a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 11zM5 4.5a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 .5-.5V5a.5.5 0 0 0-.5-.5z" />
39
+ </svg >
40
+ </button >
37
41
}
38
42
</td >
39
43
<td >@taskInstance.TaskDefinition ! .Name </td >
44
+ <td >
45
+ @if (@taskInstance .TaskInstanceSteps ? .Count > 0 )
46
+ {
47
+ var completedSteps = taskInstance .TaskInstanceSteps .Where (s => s .CompletedOn .HasValue ).Count ();
48
+ if (completedSteps == taskInstance .TaskInstanceSteps .Count || taskInstance .CompletedOn .HasValue )
49
+ {
50
+ < span class = " badge bg-success" > @completedSteps / @taskInstance .TaskInstanceSteps .Count < / span >
51
+ }
52
+ else
53
+ {
54
+ <span class =" badge bg-info" >@completedSteps / @taskInstance.TaskInstanceSteps.Count </span >
55
+ }
56
+ <ul >
57
+ @foreach ( var step in taskInstance .TaskInstanceSteps )
58
+ {
59
+ <li >
60
+ @if (step .CompletedOn .HasValue )
61
+ {
62
+ <s >
63
+ <input type =" checkbox" @onchange =" () => HandleInstanceStepCheckboxChanged(step)" checked =" @step.CompletedOn.HasValue" />
64
+ @step.TaskDefinitionStep ! .Name
65
+ </s >
66
+ }
67
+ else
68
+ {
69
+ <input type =" checkbox" @onchange =" () => HandleInstanceStepCheckboxChanged(step)" checked =" @step.CompletedOn.HasValue" />
70
+ @step.TaskDefinitionStep ! .Name
71
+ }
72
+ </li >
73
+ }
74
+ </ul >
75
+ }
76
+ </td >
40
77
<td >@taskInstance.TaskDefinition ! .Asset ?.Name </td >
41
78
<td >@taskInstance.TaskDefinition ! .Area ?.Name </td >
42
79
<td >
@@ -76,11 +113,13 @@ else
76
113
public int ? TaskDefinitionId { get ; set ; }
77
114
[Parameter ]
78
115
public bool ? OnlyShowActive { get ; set ; }
116
+ private string ? _userId ;
79
117
80
118
private List <TaskInstance >? taskInstances ;
81
119
82
120
protected override async Task OnInitializedAsync ()
83
121
{
122
+ await GetClaimsPrincipalData ();
84
123
await base .OnInitializedAsync ();
85
124
}
86
125
@@ -90,13 +129,20 @@ else
90
129
await LoadTaskInstances ();
91
130
}
92
131
132
+ private async Task GetClaimsPrincipalData ()
133
+ {
134
+ var authState = await AuthenticationStateProvider .GetAuthenticationStateAsync ();
135
+ var user = authState .User ;
136
+ _userId = user .FindFirstValue (ClaimTypes .NameIdentifier );
137
+ }
138
+
93
139
private async Task LoadTaskInstances ()
94
140
{
95
141
taskInstances = (await TaskInstanceService .GetAsync ())
96
142
.Where (t => ! TaskDefinitionId .HasValue || (t .TaskDefinitionId == TaskDefinitionId ))
97
143
.Where (t => ! OnlyShowActive .HasValue || OnlyShowActive == false || (OnlyShowActive == true && t .CompletedOn == null ))
98
144
.ToList ();
99
-
145
+
100
146
await InvokeAsync (StateHasChanged );
101
147
}
102
148
@@ -119,4 +165,29 @@ else
119
165
await TaskInstanceService .UpdateAsync (taskInstance );
120
166
await LoadTaskInstances ();
121
167
}
168
+
169
+ private async Task HandleInstanceStepCheckboxChanged (TaskInstanceStep taskInstanceStep )
170
+ {
171
+ if (taskInstanceStep .CompletedOn .HasValue )
172
+ {
173
+ await UnCheckInstanceStep (taskInstanceStep );
174
+ }
175
+ else
176
+ {
177
+ await CheckOffInstanceStep (taskInstanceStep );
178
+ }
179
+ await LoadTaskInstances ();
180
+ }
181
+
182
+ private async Task CheckOffInstanceStep (TaskInstanceStep taskInstanceStep )
183
+ {
184
+ taskInstanceStep .CompletedOn = DateTimeOffset .UtcNow ;
185
+ await TaskInstanceStepService .UpdateAsync (taskInstanceStep );
186
+ }
187
+
188
+ private async Task UnCheckInstanceStep (TaskInstanceStep taskInstanceStep )
189
+ {
190
+ taskInstanceStep .CompletedOn = null ! ;
191
+ await TaskInstanceStepService .UpdateAsync (taskInstanceStep );
192
+ }
122
193
}
0 commit comments