More work on the workflow processing engine, removed the predecessors, and have change the architecture to progress based on IOutcome<T> only.
This commit is contained in:
parent
4bf1ab73fa
commit
8afe7ac5a0
@ -8,10 +8,10 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.3" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -22,4 +22,5 @@ public interface IActivityRepository : IRepository
|
|||||||
);
|
);
|
||||||
|
|
||||||
Task AddActivityTasksAsync(AuditUserDetails auditUserDetails, IEnumerable<ActivityTask> activityTasks, CancellationToken cancellationToken);
|
Task AddActivityTasksAsync(AuditUserDetails auditUserDetails, IEnumerable<ActivityTask> activityTasks, CancellationToken cancellationToken);
|
||||||
|
Task UpdateActivityTasksAsync(AuditUserDetails auditUserDetails, ICollection<ActivityTask> tasks, CancellationToken cancellationToken);
|
||||||
}
|
}
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -34,9 +34,9 @@
|
|||||||
<PackageReference Include="AspNetCore.HealthChecks.SqlServer" Version="9.0.0" />
|
<PackageReference Include="AspNetCore.HealthChecks.SqlServer" Version="9.0.0" />
|
||||||
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
|
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
|
||||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
|
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.4" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.5" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,8 @@ public enum ActivityState
|
|||||||
Cancelled,
|
Cancelled,
|
||||||
[Description("The activity is currently active for processing")]
|
[Description("The activity is currently active for processing")]
|
||||||
Active,
|
Active,
|
||||||
|
[Description("Interactive processing of this task has finished and the workflow processor can process the outcome")]
|
||||||
|
ReadyToComplete,
|
||||||
[Description("Processing of this activity has finished")]
|
[Description("Processing of this activity has finished")]
|
||||||
Completed
|
Completed
|
||||||
}
|
}
|
||||||
@ -7,8 +7,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -16,10 +16,10 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.3" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.3" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.4" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||||
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.7.1" />
|
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.7.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@ -8,11 +8,11 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.3" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -31,6 +31,12 @@ public class ActivityTask : IGeneralId, ISoftDeletable
|
|||||||
[Required]
|
[Required]
|
||||||
public Guid TaskGuid { get; set; }
|
public Guid TaskGuid { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is the fullname of the tasktype
|
||||||
|
/// </summary>
|
||||||
|
[Required]
|
||||||
|
public string TaskType { get; set; }
|
||||||
|
|
||||||
[AuditName]
|
[AuditName]
|
||||||
[Required]
|
[Required]
|
||||||
public string TaskName { get; set; }
|
public string TaskName { get; set; }
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.3">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.4">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
2224
e-suite.Database.SqlServer/e-suite.Database.SqlServer/Migrations/20260311161348_addingTaskType.Designer.cs
generated
Normal file
2224
e-suite.Database.SqlServer/e-suite.Database.SqlServer/Migrations/20260311161348_addingTaskType.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,31 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace esuite.Database.SqlServer.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class addingTaskType : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "TaskType",
|
||||||
|
schema: "Activity",
|
||||||
|
table: "ActivityTasks",
|
||||||
|
type: "nvarchar(max)",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "TaskType",
|
||||||
|
schema: "Activity",
|
||||||
|
table: "ActivityTasks");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -17,7 +17,7 @@ namespace esuite.Database.SqlServer.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "10.0.3")
|
.HasAnnotation("ProductVersion", "10.0.4")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
@ -196,6 +196,10 @@ namespace esuite.Database.SqlServer.Migrations
|
|||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("nvarchar(max)");
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
|
b.Property<string>("TaskType")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("Guid")
|
b.HasIndex("Guid")
|
||||||
|
|||||||
@ -13,8 +13,8 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.4" />
|
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.4" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.3" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.3">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.4">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@ -12,9 +12,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.4" />
|
||||||
<PackageReference Include="RabbitMQ.Client" Version="7.2.1" />
|
<PackageReference Include="RabbitMQ.Client" Version="7.2.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -12,9 +12,9 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -12,9 +12,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -11,9 +11,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -11,9 +11,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -14,6 +14,6 @@
|
|||||||
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.3\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.3\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
|
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.4\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.4\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
||||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.3\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.3\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.4\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.4\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -46,4 +46,13 @@ public class ActivityRepository : RepositoryBase, IActivityRepository
|
|||||||
DatabaseDbContext.ActivityTasks.AddRange(activityTasks);
|
DatabaseDbContext.ActivityTasks.AddRange(activityTasks);
|
||||||
await DatabaseDbContext.SaveChangesAsync(auditUserDetails, cancellationToken);
|
await DatabaseDbContext.SaveChangesAsync(auditUserDetails, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task UpdateActivityTasksAsync(
|
||||||
|
AuditUserDetails auditUserDetails,
|
||||||
|
ICollection<ActivityTask> tasks,
|
||||||
|
CancellationToken cancellationToken
|
||||||
|
)
|
||||||
|
{
|
||||||
|
await DatabaseDbContext.SaveChangesAsync(auditUserDetails, cancellationToken);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -9,7 +9,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -11,9 +11,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -9,9 +9,9 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="GoogleAuthenticator" Version="3.2.0" />
|
<PackageReference Include="GoogleAuthenticator" Version="3.2.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.3" />
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="10.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapper" Version="2.1.66" />
|
<PackageReference Include="Dapper" Version="2.1.72" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -12,9 +12,9 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapper" Version="2.1.66" />
|
<PackageReference Include="Dapper" Version="2.1.72" />
|
||||||
<PackageReference Include="MySqlConnector" Version="2.5.0" />
|
<PackageReference Include="MySqlConnector" Version="2.5.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
using e_suite.Database.Audit;
|
using e_suite.Database.Audit;
|
||||||
using e_suite.Database.Core.Tables.Activity;
|
using e_suite.Database.Core.Tables.Activity;
|
||||||
using e_suite.Workflow.Core;
|
using e_suite.Workflow.Core;
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Extensions;
|
||||||
using eSuite.Core.Clock;
|
using eSuite.Core.Clock;
|
||||||
using eSuite.Core.Enums;
|
using eSuite.Core.Enums;
|
||||||
using eSuite.Core.Miscellaneous;
|
using eSuite.Core.Miscellaneous;
|
||||||
@ -58,9 +58,10 @@ public class WorkflowProcessor : IWorkflowProcessor
|
|||||||
|
|
||||||
var workflowVersion = _workflowConverter.DeserialiseFromDatabase(activityInstance.WorkflowVersion);
|
var workflowVersion = _workflowConverter.DeserialiseFromDatabase(activityInstance.WorkflowVersion);
|
||||||
|
|
||||||
|
bool hasCompletedTask = false;
|
||||||
|
|
||||||
await _activityRepository.TransactionAsync(async () =>
|
await _activityRepository.TransactionAsync(async () =>
|
||||||
{
|
{
|
||||||
|
|
||||||
ICollection<ActivityTask> tasks;
|
ICollection<ActivityTask> tasks;
|
||||||
if (activityInstance.ActivityState == ActivityState.Pending)
|
if (activityInstance.ActivityState == ActivityState.Pending)
|
||||||
{
|
{
|
||||||
@ -69,14 +70,37 @@ public class WorkflowProcessor : IWorkflowProcessor
|
|||||||
cancellationToken);
|
cancellationToken);
|
||||||
|
|
||||||
tasks = await PlanTaskExecution(auditUserDetails, activityInstance, workflowVersion, cancellationToken);
|
tasks = await PlanTaskExecution(auditUserDetails, activityInstance, workflowVersion, cancellationToken);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tasks = activityInstance.Tasks;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Invoke startable tasks.
|
await StartInitialTasks(auditUserDetails, tasks, workflowVersion, cancellationToken);
|
||||||
|
|
||||||
|
if (tasks.Any(task => task.ActivityState == ActivityState.ReadyToComplete))
|
||||||
|
{
|
||||||
|
hasCompletedTask = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (hasCompletedTask)
|
||||||
|
{
|
||||||
|
//send workflow progress message here.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task StartInitialTasks(AuditUserDetails auditUserDetails, ICollection<ActivityTask> tasks, WorkflowVersion workflowVersion, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var startTasks = workflowVersion.GetStartTasks().ToList();
|
||||||
|
var startTaskGuids = startTasks.Select(t => t.Guid).ToHashSet();
|
||||||
|
|
||||||
|
foreach (var task in tasks)
|
||||||
|
{
|
||||||
|
if (startTaskGuids.Contains(task.TaskGuid))
|
||||||
|
{
|
||||||
|
var taskDefinition = workflowVersion.FindTask(task.TaskGuid)!;
|
||||||
|
await taskDefinition.StartTask(task, _clock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await _activityRepository.UpdateActivityTasksAsync(auditUserDetails, tasks, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<ICollection<ActivityTask>> PlanTaskExecution(AuditUserDetails auditUserDetails, Activity activityInstance, WorkflowVersion workflowVersion, CancellationToken cancellationToken)
|
private async Task<ICollection<ActivityTask>> PlanTaskExecution(AuditUserDetails auditUserDetails, Activity activityInstance, WorkflowVersion workflowVersion, CancellationToken cancellationToken)
|
||||||
@ -94,8 +118,10 @@ public class WorkflowProcessor : IWorkflowProcessor
|
|||||||
Activity = activityInstance,
|
Activity = activityInstance,
|
||||||
ActivityState = ActivityState.Pending,
|
ActivityState = ActivityState.Pending,
|
||||||
TaskGuid = task.Guid,
|
TaskGuid = task.Guid,
|
||||||
ActivityOrdinal = activityOrdinalCounter++,
|
TaskType = task.GetType().FullName!,
|
||||||
TaskName = task.Name,
|
TaskName = task.Name,
|
||||||
|
ActivityOrdinal = activityOrdinalCounter++,
|
||||||
|
|
||||||
};
|
};
|
||||||
activityTasks.Add(activityTask);
|
activityTasks.Add(activityTask);
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.4" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||||
<PackageReference Include="Moq" Version="4.20.72" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.3" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
6
e-suite.Workflow.Core/Enums/DefaultOutcome.cs
Normal file
6
e-suite.Workflow.Core/Enums/DefaultOutcome.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace e_suite.Workflow.Core.Enums;
|
||||||
|
|
||||||
|
public enum DefaultOutcome
|
||||||
|
{
|
||||||
|
Complete
|
||||||
|
}
|
||||||
@ -2,8 +2,11 @@
|
|||||||
|
|
||||||
public static class ObjectExtensions
|
public static class ObjectExtensions
|
||||||
{
|
{
|
||||||
public static bool In<T>(this T obj, params T[] args)
|
extension<T>(T obj)
|
||||||
{
|
{
|
||||||
return args.Contains(obj);
|
public bool In(params T[] args)
|
||||||
|
{
|
||||||
|
return args.Contains(obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,6 +1,8 @@
|
|||||||
using System.Collections.Concurrent;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
using e_suite.Workflow.Core.Attributes;
|
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
using e_suite.Workflow.Core.Tasks;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using static System.Net.Mime.MediaTypeNames;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Extensions;
|
namespace e_suite.Workflow.Core.Extensions;
|
||||||
|
|
||||||
@ -92,10 +94,44 @@ public static class StageExtensions
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<Type> AllowedTasks<T>(this IStage<T> stage)
|
extension<T>(IStage<T> stage) where T : TaskTypeAttribute
|
||||||
where T : TaskTypeAttribute
|
|
||||||
{
|
{
|
||||||
var attributeType = typeof(T);
|
public IEnumerable<Type> AllowedTasks()
|
||||||
return GetAllowedTaskTypes(attributeType);
|
{
|
||||||
|
var attributeType = typeof(T);
|
||||||
|
return GetAllowedTaskTypes(attributeType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension(IStage stage)
|
||||||
|
{
|
||||||
|
public IEnumerable<Guid> GetAllTargets()
|
||||||
|
{
|
||||||
|
return stage.Tasks.SelectMany(t => t.GetTargetGuids()).Distinct();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<ITask> GetStartTasks()
|
||||||
|
{
|
||||||
|
var allTargets = stage.GetAllTargets().ToHashSet();
|
||||||
|
return stage.Tasks.Where(t => !allTargets.Contains(t.Guid));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ITask? FindTask(Guid taskGuid, bool deepScan = true)
|
||||||
|
{
|
||||||
|
foreach (var task in stage.Tasks)
|
||||||
|
{
|
||||||
|
if (task.Guid == taskGuid)
|
||||||
|
return task;
|
||||||
|
|
||||||
|
if (!deepScan || task is not IStage nestedStage)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var found = nestedStage.FindTask(taskGuid, deepScan);
|
||||||
|
if (found != null)
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,38 +1,41 @@
|
|||||||
using e_suite.Database.Core.Models;
|
using e_suite.Database.Core.Models;
|
||||||
using e_suite.Database.Core.Tables.Contacts;
|
using e_suite.Database.Core.Tables.Activity;
|
||||||
using e_suite.Database.Core.Tables.Domain;
|
|
||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
using eSuite.Core.Miscellaneous;
|
using eSuite.Core.Clock;
|
||||||
|
using eSuite.Core.Enums;
|
||||||
|
using System.Collections;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Extensions;
|
namespace e_suite.Workflow.Core.Extensions;
|
||||||
|
|
||||||
public static class TaskExtensions
|
public static class TaskExtensions
|
||||||
{
|
{
|
||||||
private static Dictionary<string, object?> ToConfigDictionary(this ITask task)
|
extension(ITask task)
|
||||||
{
|
{
|
||||||
var dictionary = new Dictionary<string, object?>();
|
private Dictionary<string, object?> ToConfigDictionary()
|
||||||
|
|
||||||
var type = task.GetType();
|
|
||||||
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
|
||||||
|
|
||||||
foreach (var prop in properties)
|
|
||||||
{
|
{
|
||||||
if (!prop.CanRead)
|
var dictionary = new Dictionary<string, object?>();
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!prop.CanWrite)
|
var type = task.GetType();
|
||||||
continue;
|
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||||
|
|
||||||
var value = prop.GetValue(task);
|
foreach (var prop in properties)
|
||||||
|
{
|
||||||
|
if (!prop.CanRead)
|
||||||
|
continue;
|
||||||
|
|
||||||
dictionary[prop.Name] = value;
|
if (!prop.CanWrite)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var value = prop.GetValue(task);
|
||||||
|
|
||||||
|
dictionary[prop.Name] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dictionary;
|
||||||
}
|
}
|
||||||
|
|
||||||
return dictionary;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ITask ToTask(this TaskDefinition definition, JsonSerializerOptions jsonSerializerOptions)
|
public static ITask ToTask(this TaskDefinition definition, JsonSerializerOptions jsonSerializerOptions)
|
||||||
@ -87,37 +90,7 @@ public static class TaskExtensions
|
|||||||
prop.SetValue(obj, value);
|
prop.SetValue(obj, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TaskDefinition ToDefinition(this ITask task)
|
|
||||||
{
|
|
||||||
if (task is null)
|
|
||||||
throw new NullReferenceException();
|
|
||||||
|
|
||||||
|
|
||||||
return new TaskDefinition
|
|
||||||
{
|
|
||||||
Type = task.GetType().FullName,
|
|
||||||
Config = task.ToConfigDictionary()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
//public static TaskDefinition ToDefinition(this ITask task)
|
|
||||||
//{
|
|
||||||
// if (task is ITemplateValidatable v)
|
|
||||||
// {
|
|
||||||
// var errors = v.ValidateForTemplate().ToList();
|
|
||||||
// if (errors.Count != 0)
|
|
||||||
// throw new InvalidOperationException(
|
|
||||||
// $"Task {task.GetType().Name} is invalid: {string.Join("; ", errors)}");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return new TaskDefinition
|
|
||||||
// {
|
|
||||||
// Type = task.GetType().FullName!,
|
|
||||||
// Config = ExtractConfig(task)
|
|
||||||
// };
|
|
||||||
//}
|
|
||||||
|
|
||||||
private static Dictionary<string, object> ExtractConfig(object task)
|
private static Dictionary<string, object> ExtractConfig(object task)
|
||||||
{
|
{
|
||||||
var dict = new Dictionary<string, object>();
|
var dict = new Dictionary<string, object>();
|
||||||
@ -136,6 +109,48 @@ public static class TaskExtensions
|
|||||||
|
|
||||||
return dict;
|
return dict;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension(ITask task)
|
||||||
|
{
|
||||||
|
public TaskDefinition ToDefinition()
|
||||||
|
{
|
||||||
|
if (task is null)
|
||||||
|
throw new NullReferenceException();
|
||||||
|
|
||||||
|
|
||||||
|
return new TaskDefinition
|
||||||
|
{
|
||||||
|
Type = task.GetType().FullName!,
|
||||||
|
Config = task.ToConfigDictionary()!
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<Guid> GetTargetGuids()
|
||||||
|
{
|
||||||
|
var outcomeInterface = task.GetType()
|
||||||
|
.GetInterfaces()
|
||||||
|
.FirstOrDefault(i => i.IsGenericType &&
|
||||||
|
i.GetGenericTypeDefinition() == typeof(IOutcome<>));
|
||||||
|
|
||||||
|
if (outcomeInterface == null)
|
||||||
|
return Enumerable.Empty<Guid>();
|
||||||
|
|
||||||
|
var prop = outcomeInterface.GetProperty("OutcomeActions");
|
||||||
|
var dict = (IDictionary)prop.GetValue(task);
|
||||||
|
|
||||||
|
return dict!.Values.Cast<Guid>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task StartTask(ActivityTask activityTask, IClock clock)
|
||||||
|
{
|
||||||
|
activityTask.ActivityState = ActivityState.Active;
|
||||||
|
activityTask.StartDateTime = clock.GetNow;
|
||||||
|
|
||||||
|
await task.OnStartedAsync(activityTask);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//public static ITask ToTask(this TaskDefinition def)
|
//public static ITask ToTask(this TaskDefinition def)
|
||||||
//{
|
//{
|
||||||
|
|||||||
6
e-suite.Workflow.Core/Interfaces/IJoin.cs
Normal file
6
e-suite.Workflow.Core/Interfaces/IJoin.cs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
|
public interface IJoin
|
||||||
|
{
|
||||||
|
List<Guid> WaitFor { get; }
|
||||||
|
}
|
||||||
@ -9,5 +9,4 @@ public interface IOutcome<T>
|
|||||||
//public T? TaskOutcome { get; set; }
|
//public T? TaskOutcome { get; set; }
|
||||||
|
|
||||||
Dictionary<T, Guid> OutcomeActions { get; set; }
|
Dictionary<T, Guid> OutcomeActions { get; set; }
|
||||||
bool OverrideDefaultTaskProgression { get; set; }
|
|
||||||
}
|
}
|
||||||
@ -3,12 +3,17 @@ using e_suite.Workflow.Core.Attributes;
|
|||||||
|
|
||||||
namespace e_suite.Workflow.Core.Interfaces;
|
namespace e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
[TaskCapability]
|
public interface IStage
|
||||||
public interface IStage<T> where T : TaskTypeAttribute
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tasks that need to be completed before this stage of a workflow is considered complete.
|
/// Tasks that need to be completed before this stage of a workflow is considered complete.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Required]
|
[Required]
|
||||||
ICollection<ITask> Tasks { get; }
|
ICollection<ITask> Tasks { get; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[TaskCapability]
|
||||||
|
public interface IStage<T> : IStage where T : TaskTypeAttribute
|
||||||
|
{
|
||||||
}
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Database.Core.Tables.Activity;
|
||||||
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Interfaces;
|
namespace e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
@ -31,25 +32,19 @@ public interface ITask
|
|||||||
public TimeSpan Duration { get; set; }
|
public TimeSpan Duration { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// List of tasks that need to be completed before this on can start. (If empty, will start when the workflow starts)
|
/// Called when the task status has been progressed from Pending to Active.
|
||||||
|
///
|
||||||
|
/// Note: You can use this method to set the TaskStatus to ReadyToComplete if there is no manual processing needed for this task.
|
||||||
|
/// After this method is completed, the TaskStatus must be either Active or ReadyToComplete.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
List<ITask> Predecessors { get; set; }
|
/// <returns></returns>
|
||||||
|
public Task OnStartedAsync(ActivityTask activityTask);
|
||||||
|
|
||||||
//Todo can only be on a run-time instance
|
/// <summary>
|
||||||
///// <summary>
|
/// Called when the task status has been progressed from ReadyToComplete to Completed
|
||||||
///// Called when the task status has been progressed from Pending to Active.
|
/// </summary>
|
||||||
/////
|
/// <returns>True when the task completes successfully, false when it is considered failed.</returns>
|
||||||
///// Note: You can use this method to set the TaskStatus to ReadyToComplete if there is no manual processing needed for this task.
|
public Task OnCompleteAsync(ActivityTask activityTask);
|
||||||
///// After this method is completed, the TaskStatus must be either Active or ReadyToComplete.
|
|
||||||
///// </summary>
|
|
||||||
///// <returns></returns>
|
|
||||||
//Task OnActivateAsync();
|
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// Called when the task status has been progressed from ReadyToComplete to Completed
|
|
||||||
///// </summary>
|
|
||||||
///// <returns>True when the task completes successfully, false when it is considered failed.</returns>
|
|
||||||
//Task<bool> OnCompleteAsync();
|
|
||||||
|
|
||||||
//Todo add support for events (soap, rest, sftp, e-mail)
|
//Todo add support for events (soap, rest, sftp, e-mail)
|
||||||
}
|
}
|
||||||
@ -1,9 +1,10 @@
|
|||||||
using e_suite.Workflow.Core.Enums;
|
using e_suite.Database.Core.Tables.Activity;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core;
|
namespace e_suite.Workflow.Core;
|
||||||
|
|
||||||
public abstract class TaskBase : ITask, IBudget, ITags
|
public abstract class TaskBase : ITask, IBudget, ITags, IJoin
|
||||||
{
|
{
|
||||||
public Guid Guid { get; set; } = Guid.CreateVersion7();
|
public Guid Guid { get; set; } = Guid.CreateVersion7();
|
||||||
public required ITask Parent { get; set; }
|
public required ITask Parent { get; set; }
|
||||||
@ -19,14 +20,15 @@ public abstract class TaskBase : ITask, IBudget, ITags
|
|||||||
public Priority Priority { get; set; } = Priority.Normal;
|
public Priority Priority { get; set; } = Priority.Normal;
|
||||||
public IList<string> Tags { get; set; } = new List<string>();
|
public IList<string> Tags { get; set; } = new List<string>();
|
||||||
|
|
||||||
//Todo can only be on a run-time instance
|
public List<Guid> WaitFor { get; }
|
||||||
//public virtual Task OnActivateAsync()
|
|
||||||
//{
|
|
||||||
// return Task.CompletedTask;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public virtual Task<bool> OnCompleteAsync()
|
public virtual Task OnStartedAsync(ActivityTask activityTask)
|
||||||
//{
|
{
|
||||||
// return Task.FromResult(true);
|
return Task.CompletedTask;
|
||||||
//}
|
}
|
||||||
|
|
||||||
|
public virtual Task OnCompleteAsync(ActivityTask activityTask)
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -9,6 +9,6 @@ public class AdhocApprovalTask : TaskBase, IAssignees<ApprovalTaskAssignee>, IOu
|
|||||||
{
|
{
|
||||||
public List<ApprovalTaskAssignee> Assignees { get; set; } = [];
|
public List<ApprovalTaskAssignee> Assignees { get; set; } = [];
|
||||||
public ApprovalVerdict TaskOutcome { get; set; }
|
public ApprovalVerdict TaskOutcome { get; set; }
|
||||||
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; }
|
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; } = [];
|
||||||
public bool OverrideDefaultTaskProgression { get; set; }
|
public bool OverrideDefaultTaskProgression { get; set; }
|
||||||
}
|
}
|
||||||
@ -1,11 +1,13 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
[ApprovalTask]
|
[ApprovalTask]
|
||||||
public class ApprovalStep : TaskBase, IAssignees<ApprovalTaskAssignee>
|
public class ApprovalStep : TaskBase, IAssignees<ApprovalTaskAssignee>, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
public List<ApprovalTaskAssignee> Assignees { get; set; } = [];
|
public List<ApprovalTaskAssignee> Assignees { get; set; } = [];
|
||||||
|
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -9,6 +9,6 @@ public class ApprovalTask : TaskBase, IStage<ApprovalTaskAttribute>, IOutcome<Ap
|
|||||||
{
|
{
|
||||||
public ICollection<ITask> Tasks { get; } = new List<ITask>();
|
public ICollection<ITask> Tasks { get; } = new List<ITask>();
|
||||||
public ApprovalVerdict TaskOutcome { get; set; }
|
public ApprovalVerdict TaskOutcome { get; set; }
|
||||||
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; }
|
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; } = [];
|
||||||
public bool OverrideDefaultTaskProgression { get; set; }
|
public bool OverrideDefaultTaskProgression { get; set; }
|
||||||
}
|
}
|
||||||
@ -1,8 +1,11 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class AssetUploadTask : TaskBase
|
public class AssetUploadTask : TaskBase, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
@ -8,7 +9,8 @@ namespace e_suite.Workflow.Core.Tasks;
|
|||||||
/// A user has to open this task, manually set it to ready to complete
|
/// A user has to open this task, manually set it to ready to complete
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class BasicTask : TaskBase, IAssignees<TaskAssignee>
|
public class BasicTask : TaskBase, IAssignees<TaskAssignee>, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
public List<TaskAssignee> Assignees { get; set; } = [];
|
public List<TaskAssignee> Assignees { get; set; } = [];
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
@ -7,7 +8,8 @@ namespace e_suite.Workflow.Core.Tasks;
|
|||||||
/// Create a table of field data for output to PDF or AdobeIllustrator
|
/// Create a table of field data for output to PDF or AdobeIllustrator
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class ContentCollationTask : TaskBase, IAssignees<TaskAssignee>
|
public class ContentCollationTask : TaskBase, IAssignees<TaskAssignee>, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
public List<TaskAssignee> Assignees { get; set; } = [];
|
public List<TaskAssignee> Assignees { get; set; } = [];
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -1,4 +1,6 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
@ -6,7 +8,7 @@ namespace e_suite.Workflow.Core.Tasks;
|
|||||||
/// This task will allow Asset files to be released, and automatically uploaded to an external source
|
/// This task will allow Asset files to be released, and automatically uploaded to an external source
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[GeneralTask(allowMultiple: false)]
|
[GeneralTask(allowMultiple: false)]
|
||||||
public class FileReleaseTask : TaskBase
|
public class FileReleaseTask : TaskBase, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -1,11 +1,12 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
using eSuite.Core.Miscellaneous;
|
using eSuite.Core.Miscellaneous;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTemplate
|
public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTemplate, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
public List<TaskAssignee> Assignees { get; set; } = [];
|
public List<TaskAssignee> Assignees { get; set; } = [];
|
||||||
public bool IsMultiple { get; set; }
|
public bool IsMultiple { get; set; }
|
||||||
@ -16,4 +17,6 @@ public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTempla
|
|||||||
if (FormIdRef == null)
|
if (FormIdRef == null)
|
||||||
yield return "FormIdRef is required.";
|
yield return "FormIdRef is required.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -1,9 +1,11 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class LinkActivityTask : TaskBase
|
public class LinkActivityTask : TaskBase, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -1,4 +1,8 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Database.Core.Tables.Activity;
|
||||||
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
using eSuite.Core.Enums;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
@ -6,12 +10,14 @@ namespace e_suite.Workflow.Core.Tasks;
|
|||||||
/// A Milestone task does not have any specific processing, so is ready to complete as soon at it starts.
|
/// A Milestone task does not have any specific processing, so is ready to complete as soon at it starts.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class MilestoneTask : TaskBase
|
public class MilestoneTask : TaskBase, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
//Todo can only be on a run-time instance
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
//public override async Task OnActivateAsync()
|
|
||||||
//{
|
public override async Task OnStartedAsync(ActivityTask activityTask)
|
||||||
// await base.OnActivateAsync();
|
{
|
||||||
// TaskState = TaskState.ReadyToComplete;
|
await base.OnStartedAsync(activityTask);
|
||||||
//}
|
activityTask.ActivityState = ActivityState.ReadyToComplete;
|
||||||
|
//TODO need to set the outcome of completed here
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,14 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
using e_suite.Workflow.Core.Interfaces;
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class StageTask : TaskBase, IStage<GeneralTaskAttribute>, IBypassable
|
public class StageTask : TaskBase, IStage<GeneralTaskAttribute>, IBypassable, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
public ICollection<ITask> Tasks { get; } = new List<ITask>();
|
public ICollection<ITask> Tasks { get; } = new List<ITask>();
|
||||||
|
|
||||||
public bool Bypassable { get; set; }
|
public bool Bypassable { get; set; }
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -1,9 +1,11 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class VisualBriefReviewTask : TaskBase
|
public class VisualBriefReviewTask : TaskBase, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -1,9 +1,11 @@
|
|||||||
using e_suite.Workflow.Core.Attributes;
|
using e_suite.Workflow.Core.Attributes;
|
||||||
|
using e_suite.Workflow.Core.Enums;
|
||||||
|
using e_suite.Workflow.Core.Interfaces;
|
||||||
|
|
||||||
namespace e_suite.Workflow.Core.Tasks;
|
namespace e_suite.Workflow.Core.Tasks;
|
||||||
|
|
||||||
[GeneralTask]
|
[GeneralTask]
|
||||||
public class VisualBriefUploadTask : TaskBase
|
public class VisualBriefUploadTask : TaskBase, IOutcome<DefaultOutcome>
|
||||||
{
|
{
|
||||||
|
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||||
}
|
}
|
||||||
@ -14,6 +14,6 @@
|
|||||||
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.3\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.3\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
|
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.4\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.4\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
||||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.3\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.3\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.4\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.4\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
Loading…
Reference in New Issue
Block a user