diff --git a/e-suite.API.Common/e-suite.API.Common/CreateActivity.cs b/e-suite.API.Common/e-suite.API.Common/CreateActivity.cs
new file mode 100644
index 0000000..6557eda
--- /dev/null
+++ b/e-suite.API.Common/e-suite.API.Common/CreateActivity.cs
@@ -0,0 +1,10 @@
+using eSuite.Core.Miscellaneous;
+
+namespace e_suite.API.Common;
+
+public class CreateActivity
+{
+ public GeneralIdRef WorkflowTemplateVersionId { get; set; }
+
+ public string ActivityName { get; set; }
+}
\ No newline at end of file
diff --git a/e-suite.API/eSuite.API/Controllers/ActivityController.cs b/e-suite.API/eSuite.API/Controllers/ActivityController.cs
new file mode 100644
index 0000000..30ed9e0
--- /dev/null
+++ b/e-suite.API/eSuite.API/Controllers/ActivityController.cs
@@ -0,0 +1,33 @@
+using e_suite.API.Common;
+using eSuite.API.security;
+using eSuite.API.Utilities;
+using eSuite.Core.Security;
+using Microsoft.AspNetCore.Mvc;
+
+namespace eSuite.API.Controllers;
+
+[Route("api/[controller]")]
+[ApiController]
+public class ActivityController : ESuiteControllerBase
+{
+ ///
+ /// Create a new workflow template
+ ///
+ /// Create a new user for e-suite. The minimum information needed is the email address, which forms the account user name. Once created the user will get an e-mail asking them to confirm the account.
+ /// Contains the details that need to be supplied to create the user.
+ ///
+ ///
+ [Route("create")]
+ [HttpPost]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status400BadRequest, Type = typeof(ProblemDetails))]
+ [AccessKey(SecurityAccess.AddWorkflowTemplate)]
+ public async Task CreateWorkflowTemplateVersion(
+ [FromBody] CreateActivity template,
+ CancellationToken cancellationToken = default!
+ )
+ {
+ //await _workflowTemplateManager.PostTemplateVersion(AuditUserDetails, template, cancellationToken);
+ return Ok();
+ }
+}
\ No newline at end of file
diff --git a/e-suite.Core/eSuite.Core/Enums/ActivityState.cs b/e-suite.Core/eSuite.Core/Enums/ActivityState.cs
new file mode 100644
index 0000000..ae6c80a
--- /dev/null
+++ b/e-suite.Core/eSuite.Core/Enums/ActivityState.cs
@@ -0,0 +1,15 @@
+using System.ComponentModel;
+
+namespace eSuite.Core.Enums;
+
+public enum ActivityState
+{
+ [Description("The activity is ready to start")]
+ Pending,
+ [Description("The activity has been cancelled")]
+ Cancelled,
+ [Description("The activity is currently active for processing")]
+ Active,
+ [Description("Processing of this activity has finished")]
+ Completed
+}
\ No newline at end of file
diff --git a/e-suite.Workflow.Core/Enums/TaskStatus.cs b/e-suite.Core/eSuite.Core/Enums/TaskStatus.cs
similarity index 89%
rename from e-suite.Workflow.Core/Enums/TaskStatus.cs
rename to e-suite.Core/eSuite.Core/Enums/TaskStatus.cs
index d5e7ac2..cc7db67 100644
--- a/e-suite.Workflow.Core/Enums/TaskStatus.cs
+++ b/e-suite.Core/eSuite.Core/Enums/TaskStatus.cs
@@ -1,6 +1,6 @@
using System.ComponentModel;
-namespace e_suite.Workflow.Core.Enums;
+namespace eSuite.Core.Enums;
public enum TaskState
{
diff --git a/e-suite.Core/eSuite.Core/Security/SecurityAccess.cs b/e-suite.Core/eSuite.Core/Security/SecurityAccess.cs
index 4194d68..74ee6af 100644
--- a/e-suite.Core/eSuite.Core/Security/SecurityAccess.cs
+++ b/e-suite.Core/eSuite.Core/Security/SecurityAccess.cs
@@ -249,4 +249,7 @@ public enum SecurityAccess
[Display(Name = "EditWorkflowTemplate", Description = "Delete Workflow Templates", GroupName = "Workflow Templates")]
DeleteWorkflowTemplate = 76,
+
+ [Display(Name = "CreateActivity", Description = "Create an activity based on a Workflow Template", GroupName = "Activities")]
+ CreateActivity = 77
}
\ No newline at end of file
diff --git a/e-suite.Database.Core/e-suite.Database.Core/EsuiteDatabaseDbContext.cs b/e-suite.Database.Core/e-suite.Database.Core/EsuiteDatabaseDbContext.cs
index d628fa0..3b61009 100644
--- a/e-suite.Database.Core/e-suite.Database.Core/EsuiteDatabaseDbContext.cs
+++ b/e-suite.Database.Core/e-suite.Database.Core/EsuiteDatabaseDbContext.cs
@@ -1,4 +1,5 @@
using e_suite.Database.Core.Helpers;
+using e_suite.Database.Core.Tables.Activity;
using e_suite.Database.Core.Tables.Contacts;
using e_suite.Database.Core.Tables.CustomFields;
using e_suite.Database.Core.Tables.Diagnostics;
@@ -72,4 +73,6 @@ public class EsuiteDatabaseDbContext : SunDatabaseEntityContext, IEsuiteDatabase
public DbSet ExternalKeys { get; set; }
public DbSet Workflows { get; set; }
public DbSet WorkflowVersions { get; set; }
+ public DbSet Activities { get; set; }
+ public DbSet ActivityTasks { get; set; }
}
\ No newline at end of file
diff --git a/e-suite.Database.Core/e-suite.Database.Core/IEsuiteDatabaseDbContext.cs b/e-suite.Database.Core/e-suite.Database.Core/IEsuiteDatabaseDbContext.cs
index f6ec146..251abd7 100644
--- a/e-suite.Database.Core/e-suite.Database.Core/IEsuiteDatabaseDbContext.cs
+++ b/e-suite.Database.Core/e-suite.Database.Core/IEsuiteDatabaseDbContext.cs
@@ -1,4 +1,5 @@
using e_suite.Database.Audit.Tables.Audit;
+using e_suite.Database.Core.Tables.Activity;
using e_suite.Database.Core.Tables.Contacts;
using e_suite.Database.Core.Tables.CustomFields;
using e_suite.Database.Core.Tables.Diagnostics;
@@ -15,7 +16,7 @@ using e_suite.Database.Core.Tables.Workflow;
namespace e_suite.Database.Core;
-public interface IEsuiteDatabaseDbContext : IAudit, ISentinel, IUserManager, IDiagnostics, ISequences, ICustomFields, IForm, IGlossaries, IPrinter, IContact, IMail, IDomain, IMiscellaneous, IWorkflowManager
+public interface IEsuiteDatabaseDbContext : IAudit, ISentinel, IUserManager, IDiagnostics, ISequences, ICustomFields, IForm, IGlossaries, IPrinter, IContact, IMail, IDomain, IMiscellaneous, IWorkflowManager, IActivity
{
IQueryable Set(Type entityType);
}
\ No newline at end of file
diff --git a/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/Activity.cs b/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/Activity.cs
new file mode 100644
index 0000000..2017e40
--- /dev/null
+++ b/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/Activity.cs
@@ -0,0 +1,45 @@
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using e_suite.Database.Audit.Attributes;
+using e_suite.Database.Core.Models;
+using e_suite.Database.Core.Tables.Workflow;
+using eSuite.Core.Enums;
+using Microsoft.EntityFrameworkCore;
+
+namespace e_suite.Database.Core.Tables.Activity;
+
+[DisplayName("Activity")]
+[Table("Activities", Schema = "Activity")]
+[Index(nameof(Name), IsUnique = true)]
+[Index(nameof(Guid), IsUnique = true)]
+public class Activity : IGeneralId, ISoftDeletable
+{
+ [Key]
+ public long Id { get; set; }
+ public Guid Guid { get; set; }
+
+ [AuditName]
+ [Required]
+ public string Name { get; set; } = string.Empty;
+
+ [Required]
+ public long WorkflowVersionId { get; set; }
+
+ [Required]
+ public ActivityState ActivityState { get; set; } = ActivityState.Pending;
+
+ [AuditSoftDelete(true)]
+ [Required]
+ [DefaultValue(false)]
+ public bool Deleted { get; set; }
+
+ [AuditLastUpdated]
+ public DateTimeOffset LastUpdated { get; set; }
+
+
+ [ForeignKey(nameof(WorkflowVersionId))]
+ public virtual WorkflowVersion WorkflowVersion { get; set; } = null!;
+
+ public ICollection Tasks { get; set; } = [];
+}
\ No newline at end of file
diff --git a/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/ActivityTask.cs b/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/ActivityTask.cs
new file mode 100644
index 0000000..84710e2
--- /dev/null
+++ b/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/ActivityTask.cs
@@ -0,0 +1,66 @@
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using e_suite.Database.Audit.Attributes;
+using e_suite.Database.Core.Models;
+using eSuite.Core.Enums;
+using Microsoft.EntityFrameworkCore;
+
+namespace e_suite.Database.Core.Tables.Activity;
+
+[DisplayName("Activity")]
+[Table("ActivityTasks", Schema = "Activity")]
+[Index(nameof(Guid), IsUnique = true)]
+[Index(nameof(ActivityId), nameof(ActivityOrdinal), IsUnique = true)]
+public class ActivityTask : IGeneralId, ISoftDeletable
+{
+ [Key]
+ public long Id { get; set; }
+
+ public Guid Guid { get; set; }
+
+ public long? ParentId { get; set; }
+
+ public long ActivityId { get; set; }
+
+ public long ActivityOrdinal { get; set; }
+
+ ///
+ /// This is the guid of the task from the workflow template
+ ///
+ [Required]
+ public Guid TaskGuid { get; set; }
+
+ [AuditName]
+ [Required]
+ public string TaskName { get; set; }
+
+ public ActivityState ActivityState { get; set; } = ActivityState.Pending;
+
+ ///
+ /// Contains the date and time when the task was changed from Pending to Active
+ ///
+ public DateTimeOffset? StartDateTime { get; set; }
+
+ ///
+ /// Contains the date and time when the task was changed from Active to Completed
+ ///
+ public DateTimeOffset? FinishDateTime { get; set; }
+
+ [AuditSoftDelete(true)]
+ [Required]
+ [DefaultValue(false)]
+ public bool Deleted { get; set; }
+
+ [AuditLastUpdated]
+ public DateTimeOffset LastUpdated { get; set; }
+
+
+ [ForeignKey(nameof(ActivityId))]
+ public virtual Activity Activity { get; set; } = null!;
+
+ [ForeignKey(nameof(ParentId))]
+ public virtual ActivityTask ParentTask { get; set; } = null!;
+
+ public ICollection Tasks { get; set; } = [];
+}
\ No newline at end of file
diff --git a/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/IActivity.cs b/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/IActivity.cs
new file mode 100644
index 0000000..c774972
--- /dev/null
+++ b/e-suite.Database.Core/e-suite.Database.Core/Tables/Activity/IActivity.cs
@@ -0,0 +1,9 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace e_suite.Database.Core.Tables.Activity;
+
+public interface IActivity : IDatabaseCore
+{
+ DbSet Activities { get; set; }
+ DbSet ActivityTasks { get; set; }
+}
\ No newline at end of file
diff --git a/e-suite.Database.Core/e-suite.Database.Core/Tables/Contacts/IContact.cs b/e-suite.Database.Core/e-suite.Database.Core/Tables/Contacts/IContact.cs
index 19d1bb7..1f923af 100644
--- a/e-suite.Database.Core/e-suite.Database.Core/Tables/Contacts/IContact.cs
+++ b/e-suite.Database.Core/e-suite.Database.Core/Tables/Contacts/IContact.cs
@@ -1,9 +1,8 @@
using Microsoft.EntityFrameworkCore;
-namespace e_suite.Database.Core.Tables.Contacts
+namespace e_suite.Database.Core.Tables.Contacts;
+
+public interface IContact : IDatabaseCore
{
- public interface IContact : IDatabaseCore
- {
- DbSet Contacts { get; set; }
- }
-}
+ DbSet Contacts { get; set; }
+}
\ No newline at end of file
diff --git a/e-suite.Database.Core/e-suite.Database.Core/Tables/Workflow/Workflow.cs b/e-suite.Database.Core/e-suite.Database.Core/Tables/Workflow/Workflow.cs
index 9195c0b..a7889a2 100644
--- a/e-suite.Database.Core/e-suite.Database.Core/Tables/Workflow/Workflow.cs
+++ b/e-suite.Database.Core/e-suite.Database.Core/Tables/Workflow/Workflow.cs
@@ -1,6 +1,5 @@
using e_suite.Database.Audit.Attributes;
using e_suite.Database.Core.Models;
-using e_suite.Database.Core.Tables.Forms;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
diff --git a/e-suite.Workflow.Core/Enums/WorkflowState.cs b/e-suite.Workflow.Core/Enums/WorkflowState.cs
index 41a0b4c..a53108e 100644
--- a/e-suite.Workflow.Core/Enums/WorkflowState.cs
+++ b/e-suite.Workflow.Core/Enums/WorkflowState.cs
@@ -6,12 +6,12 @@ public enum WorkflowState
{
[Description("The workflow has not yet started")]
Pending,
- [Description("The workflow has been cancelled abd wukk bit be processed")]
+ [Description("The workflow has been cancelled")]
Cancelled,
[Description("The workflow is currently active for user/system interaction and processing")]
Active,
[Description("The active portion of the workflow has finished and the workflow is ready to complete")]
ReadyToComplete,
- [Description("Processing of this item has finished the ")]
+ [Description("Processing of this item has finished")]
Completed
}
\ No newline at end of file