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:
Colin Dawson 2026-03-11 22:44:22 +00:00
parent 4bf1ab73fa
commit 8afe7ac5a0
83 changed files with 2595 additions and 197 deletions

View File

@ -8,10 +8,10 @@
</PropertyGroup>
<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="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" />
</ItemGroup>

View File

@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
</ItemGroup>
<ItemGroup>

View File

@ -22,4 +22,5 @@ public interface IActivityRepository : IRepository
);
Task AddActivityTasksAsync(AuditUserDetails auditUserDetails, IEnumerable<ActivityTask> activityTasks, CancellationToken cancellationToken);
Task UpdateActivityTasksAsync(AuditUserDetails auditUserDetails, ICollection<ActivityTask> tasks, CancellationToken cancellationToken);
}

View File

@ -14,7 +14,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -34,9 +34,9 @@
<PackageReference Include="AspNetCore.HealthChecks.SqlServer" 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="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="Swashbuckle.AspNetCore" Version="10.1.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.5" />
</ItemGroup>
<ItemGroup>

View File

@ -8,7 +8,7 @@
<ItemGroup>
<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" />
</ItemGroup>

View File

@ -10,6 +10,8 @@ public enum ActivityState
Cancelled,
[Description("The activity is currently active for processing")]
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")]
Completed
}

View File

@ -7,8 +7,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
</ItemGroup>
</Project>

View File

@ -16,10 +16,10 @@
</PropertyGroup>
<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="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" />
</ItemGroup>

View File

@ -16,7 +16,7 @@
</PropertyGroup>
<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="System.Linq.Dynamic.Core" Version="1.7.1" />
</ItemGroup>

View File

@ -8,11 +8,11 @@
</PropertyGroup>
<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="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -31,6 +31,12 @@ public class ActivityTask : IGeneralId, ISoftDeletable
[Required]
public Guid TaskGuid { get; set; }
/// <summary>
/// This is the fullname of the tasktype
/// </summary>
[Required]
public string TaskType { get; set; }
[AuditName]
[Required]
public string TaskName { get; set; }

View File

@ -9,7 +9,7 @@
<ItemGroup>
<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>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -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");
}
}
}

View File

@ -17,7 +17,7 @@ namespace esuite.Database.SqlServer.Migrations
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "10.0.3")
.HasAnnotation("ProductVersion", "10.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
@ -196,6 +196,10 @@ namespace esuite.Database.SqlServer.Migrations
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("TaskType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.HasIndex("Guid")

View File

@ -13,8 +13,8 @@
<ItemGroup>
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.3">
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -16,7 +16,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.4" />
</ItemGroup>
</Project>

View File

@ -12,9 +12,9 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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="NUnit.Analyzers" Version="4.11.2">
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -8,7 +8,7 @@
</PropertyGroup>
<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" />
</ItemGroup>

View File

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -12,9 +12,9 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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="NUnit.Analyzers" Version="4.11.2">
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -11,7 +11,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -12,9 +12,9 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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="NUnit.Analyzers" Version="4.11.2">
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -11,9 +11,9 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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="NUnit.Analyzers" Version="4.11.2">
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -10,7 +10,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -9,7 +9,7 @@
<ItemGroup>
<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" />
</ItemGroup>

View File

@ -11,9 +11,9 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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="NUnit.Analyzers" Version="4.11.2">
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -14,6 +14,6 @@
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<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>
</Project>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<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.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.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.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.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.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>
</Project>

View File

@ -11,7 +11,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -46,4 +46,13 @@ public class ActivityRepository : RepositoryBase, IActivityRepository
DatabaseDbContext.ActivityTasks.AddRange(activityTasks);
await DatabaseDbContext.SaveChangesAsync(auditUserDetails, cancellationToken);
}
public async Task UpdateActivityTasksAsync(
AuditUserDetails auditUserDetails,
ICollection<ActivityTask> tasks,
CancellationToken cancellationToken
)
{
await DatabaseDbContext.SaveChangesAsync(auditUserDetails, cancellationToken);
}
}

View File

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -11,9 +11,9 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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="NUnit.Analyzers" Version="4.11.2">
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -11,7 +11,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -11,7 +11,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -9,9 +9,9 @@
<ItemGroup>
<PackageReference Include="GoogleAuthenticator" Version="3.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="10.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="10.0.4" />
</ItemGroup>
<ItemGroup>

View File

@ -9,7 +9,7 @@
<ItemGroup>
<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" />
</ItemGroup>

View File

@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -10,7 +10,7 @@
<ItemGroup>
<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>

View File

@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -10,7 +10,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -18,7 +18,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="Dapper" Version="2.1.72" />
</ItemGroup>
<ItemGroup>

View File

@ -11,7 +11,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
</ItemGroup>
<ItemGroup>

View File

@ -12,9 +12,9 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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="NUnit.Analyzers" Version="4.11.2">
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<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" />
</ItemGroup>

View File

@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="Dapper" Version="2.1.72" />
<PackageReference Include="MySqlConnector" Version="2.5.0" />
</ItemGroup>

View File

@ -2,7 +2,7 @@
using e_suite.Database.Audit;
using e_suite.Database.Core.Tables.Activity;
using e_suite.Workflow.Core;
using e_suite.Workflow.Core.Interfaces;
using e_suite.Workflow.Core.Extensions;
using eSuite.Core.Clock;
using eSuite.Core.Enums;
using eSuite.Core.Miscellaneous;
@ -58,9 +58,10 @@ public class WorkflowProcessor : IWorkflowProcessor
var workflowVersion = _workflowConverter.DeserialiseFromDatabase(activityInstance.WorkflowVersion);
bool hasCompletedTask = false;
await _activityRepository.TransactionAsync(async () =>
{
ICollection<ActivityTask> tasks;
if (activityInstance.ActivityState == ActivityState.Pending)
{
@ -69,14 +70,37 @@ public class WorkflowProcessor : IWorkflowProcessor
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)
@ -94,8 +118,10 @@ public class WorkflowProcessor : IWorkflowProcessor
Activity = activityInstance,
ActivityState = ActivityState.Pending,
TaskGuid = task.Guid,
ActivityOrdinal = activityOrdinalCounter++,
TaskType = task.GetType().FullName!,
TaskName = task.Name,
ActivityOrdinal = activityOrdinalCounter++,
};
activityTasks.Add(activityTask);

View File

@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.4" />
</ItemGroup>
<ItemGroup>

View File

@ -8,7 +8,7 @@
</PropertyGroup>
<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" />
</ItemGroup>

View File

@ -11,7 +11,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
<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" />
</ItemGroup>

View File

@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.4" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
namespace e_suite.Workflow.Core.Enums;
public enum DefaultOutcome
{
Complete
}

View File

@ -2,8 +2,11 @@
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);
}
}
}

View File

@ -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.Tasks;
using System.Collections.Concurrent;
using static System.Net.Mime.MediaTypeNames;
namespace e_suite.Workflow.Core.Extensions;
@ -92,10 +94,44 @@ public static class StageExtensions
});
}
public static IEnumerable<Type> AllowedTasks<T>(this IStage<T> stage)
where T : TaskTypeAttribute
extension<T>(IStage<T> stage) where T : TaskTypeAttribute
{
var attributeType = typeof(T);
return GetAllowedTaskTypes(attributeType);
public IEnumerable<Type> AllowedTasks()
{
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;
}
}
}

View File

@ -1,38 +1,41 @@
using e_suite.Database.Core.Models;
using e_suite.Database.Core.Tables.Contacts;
using e_suite.Database.Core.Tables.Domain;
using e_suite.Database.Core.Tables.Activity;
using e_suite.Workflow.Core.Attributes;
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.Text.Json;
using System.Text.Json.Serialization;
namespace e_suite.Workflow.Core.Extensions;
public static class TaskExtensions
{
private static Dictionary<string, object?> ToConfigDictionary(this ITask task)
extension(ITask task)
{
var dictionary = new Dictionary<string, object?>();
var type = task.GetType();
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var prop in properties)
private Dictionary<string, object?> ToConfigDictionary()
{
if (!prop.CanRead)
continue;
var dictionary = new Dictionary<string, object?>();
if (!prop.CanWrite)
continue;
var type = task.GetType();
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)
@ -88,36 +91,6 @@ public static class TaskExtensions
}
}
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)
{
var dict = new Dictionary<string, object>();
@ -137,6 +110,48 @@ public static class TaskExtensions
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)
//{
// var type = Type.GetType(def.Type, throwOnError: true)!;

View File

@ -0,0 +1,6 @@
namespace e_suite.Workflow.Core.Interfaces;
public interface IJoin
{
List<Guid> WaitFor { get; }
}

View File

@ -9,5 +9,4 @@ public interface IOutcome<T>
//public T? TaskOutcome { get; set; }
Dictionary<T, Guid> OutcomeActions { get; set; }
bool OverrideDefaultTaskProgression { get; set; }
}

View File

@ -3,8 +3,7 @@ using e_suite.Workflow.Core.Attributes;
namespace e_suite.Workflow.Core.Interfaces;
[TaskCapability]
public interface IStage<T> where T : TaskTypeAttribute
public interface IStage
{
/// <summary>
/// Tasks that need to be completed before this stage of a workflow is considered complete.
@ -12,3 +11,9 @@ public interface IStage<T> where T : TaskTypeAttribute
[Required]
ICollection<ITask> Tasks { get; }
}
[TaskCapability]
public interface IStage<T> : IStage where T : TaskTypeAttribute
{
}

View File

@ -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;
@ -31,25 +32,19 @@ public interface ITask
public TimeSpan Duration { get; set; }
/// <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>
List<ITask> Predecessors { get; set; }
/// <returns></returns>
public Task OnStartedAsync(ActivityTask activityTask);
//Todo can only be on a run-time instance
///// <summary>
///// 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>
///// <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();
/// <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>
public Task OnCompleteAsync(ActivityTask activityTask);
//Todo add support for events (soap, rest, sftp, e-mail)
}

View File

@ -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;
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 required ITask Parent { get; set; }
@ -19,14 +20,15 @@ public abstract class TaskBase : ITask, IBudget, ITags
public Priority Priority { get; set; } = Priority.Normal;
public IList<string> Tags { get; set; } = new List<string>();
//Todo can only be on a run-time instance
//public virtual Task OnActivateAsync()
//{
// return Task.CompletedTask;
//}
public List<Guid> WaitFor { get; }
//public virtual Task<bool> OnCompleteAsync()
//{
// return Task.FromResult(true);
//}
public virtual Task OnStartedAsync(ActivityTask activityTask)
{
return Task.CompletedTask;
}
public virtual Task OnCompleteAsync(ActivityTask activityTask)
{
return Task.CompletedTask;
}
}

View File

@ -9,6 +9,6 @@ public class AdhocApprovalTask : TaskBase, IAssignees<ApprovalTaskAssignee>, IOu
{
public List<ApprovalTaskAssignee> Assignees { 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; }
}

View File

@ -1,11 +1,13 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
namespace e_suite.Workflow.Core.Tasks;
[ApprovalTask]
public class ApprovalStep : TaskBase, IAssignees<ApprovalTaskAssignee>
public class ApprovalStep : TaskBase, IAssignees<ApprovalTaskAssignee>, IOutcome<DefaultOutcome>
{
public List<ApprovalTaskAssignee> Assignees { get; set; } = [];
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -9,6 +9,6 @@ public class ApprovalTask : TaskBase, IStage<ApprovalTaskAttribute>, IOutcome<Ap
{
public ICollection<ITask> Tasks { get; } = new List<ITask>();
public ApprovalVerdict TaskOutcome { get; set; }
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; }
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; } = [];
public bool OverrideDefaultTaskProgression { get; set; }
}

View File

@ -1,8 +1,11 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
namespace e_suite.Workflow.Core.Tasks;
[GeneralTask]
public class AssetUploadTask : TaskBase
public class AssetUploadTask : TaskBase, IOutcome<DefaultOutcome>
{
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -1,5 +1,6 @@
using System.ComponentModel;
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
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
/// </summary>
[GeneralTask]
public class BasicTask : TaskBase, IAssignees<TaskAssignee>
public class BasicTask : TaskBase, IAssignees<TaskAssignee>, IOutcome<DefaultOutcome>
{
public List<TaskAssignee> Assignees { get; set; } = [];
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -1,4 +1,5 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
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
/// </summary>
[GeneralTask]
public class ContentCollationTask : TaskBase, IAssignees<TaskAssignee>
public class ContentCollationTask : TaskBase, IAssignees<TaskAssignee>, IOutcome<DefaultOutcome>
{
public List<TaskAssignee> Assignees { get; set; } = [];
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -1,4 +1,6 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
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
/// </summary>
[GeneralTask(allowMultiple: false)]
public class FileReleaseTask : TaskBase
public class FileReleaseTask : TaskBase, IOutcome<DefaultOutcome>
{
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -1,11 +1,12 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
using eSuite.Core.Miscellaneous;
namespace e_suite.Workflow.Core.Tasks;
[GeneralTask]
public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTemplate
public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTemplate, IOutcome<DefaultOutcome>
{
public List<TaskAssignee> Assignees { get; set; } = [];
public bool IsMultiple { get; set; }
@ -16,4 +17,6 @@ public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTempla
if (FormIdRef == null)
yield return "FormIdRef is required.";
}
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -1,9 +1,11 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
namespace e_suite.Workflow.Core.Tasks;
[GeneralTask]
public class LinkActivityTask : TaskBase
public class LinkActivityTask : TaskBase, IOutcome<DefaultOutcome>
{
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -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;
@ -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.
/// </summary>
[GeneralTask]
public class MilestoneTask : TaskBase
public class MilestoneTask : TaskBase, IOutcome<DefaultOutcome>
{
//Todo can only be on a run-time instance
//public override async Task OnActivateAsync()
//{
// await base.OnActivateAsync();
// TaskState = TaskState.ReadyToComplete;
//}
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
public override async Task OnStartedAsync(ActivityTask activityTask)
{
await base.OnStartedAsync(activityTask);
activityTask.ActivityState = ActivityState.ReadyToComplete;
//TODO need to set the outcome of completed here
}
}

View File

@ -1,12 +1,14 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
namespace e_suite.Workflow.Core.Tasks;
[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 bool Bypassable { get; set; }
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -1,9 +1,11 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
namespace e_suite.Workflow.Core.Tasks;
[GeneralTask]
public class VisualBriefReviewTask : TaskBase
public class VisualBriefReviewTask : TaskBase, IOutcome<DefaultOutcome>
{
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -1,9 +1,11 @@
using e_suite.Workflow.Core.Attributes;
using e_suite.Workflow.Core.Enums;
using e_suite.Workflow.Core.Interfaces;
namespace e_suite.Workflow.Core.Tasks;
[GeneralTask]
public class VisualBriefUploadTask : TaskBase
public class VisualBriefUploadTask : TaskBase, IOutcome<DefaultOutcome>
{
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
}

View File

@ -14,6 +14,6 @@
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<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>
</Project>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<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.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.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.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.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.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>
</Project>