Skip to content

Commit 62162ce

Browse files
Thierry Habarthabarthierry-hue
authored andcommitted
Ticket 25 : Display a case plan instance
1 parent 2895f6b commit 62162ce

File tree

49 files changed

+508
-269
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+508
-269
lines changed

src/CaseManagement.CMMN.AspNetCore/Apis/CasePlanInstancesController.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,7 @@ private static FindWorkflowInstanceParameter ExtractFindParameter(IEnumerable<Ke
800800
FindOrders findOrder;
801801
string casePlanId;
802802
string owner;
803+
bool takeLatest;
803804
var parameter = new FindWorkflowInstanceParameter();
804805
if (query.TryGet("start_index", out startIndex))
805806
{
@@ -831,6 +832,11 @@ private static FindWorkflowInstanceParameter ExtractFindParameter(IEnumerable<Ke
831832
parameter.CaseOwner = owner;
832833
}
833834

835+
if (query.TryGet("take_latest", out takeLatest))
836+
{
837+
parameter.TakeLatest = takeLatest;
838+
}
839+
834840
return parameter;
835841
}
836842
}

src/CaseManagement.CMMN/Domains/CasePlanInstance/CasePlanInstanceAggregate.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,7 @@ private void Handle(CaseInstanceCreatedEvent evt)
715715
private CaseElementInstance Handle(CaseElementCreatedEvent evt)
716716
{
717717
var existingPlanItem = WorkflowElementInstances.Where(p => p.CasePlanElementId == evt.CasePlanElementId).OrderByDescending(p => p.Version).FirstOrDefault();
718-
var elt = new CaseElementInstance(evt.CasePlanElementId, evt.CreateDateTime, evt.CasePlanElementId, evt.CasePlanElementType, existingPlanItem == null ? 0 : existingPlanItem.Version + 1, evt.ParentId)
718+
var elt = new CaseElementInstance(evt.CasePlanElementInstanceId, evt.CreateDateTime, evt.CasePlanElementId, evt.CasePlanElementType, existingPlanItem == null ? 0 : existingPlanItem.Version + 1, evt.ParentId)
719719
{
720720
CasePlanElementName = evt.CasePlanElementName
721721
};

src/CaseManagement.CMMN/Domains/CasePlanInstance/Events/CaseElementCreatedEvent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ public CaseElementCreatedEvent(string id, string aggregateId, int version, strin
2424
public DateTime CreateDateTime { get; set; }
2525
public string ParentId { get; set; }
2626
}
27-
}
27+
}

src/CaseManagement.CMMN/Parser/CMMNParser.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ private static SEntry BuildSEntry(tSentry sEntry)
126126

127127
private static PlanItemDefinition BuildPlanItem(string id, string name, tPlanItemDefinition planItemDef)
128128
{
129+
if (string.IsNullOrWhiteSpace(name))
130+
{
131+
name = planItemDef.name;
132+
}
133+
129134
if (planItemDef is tProcessTask)
130135
{
131136
return PlanItemDefinition.New(id, name, BuildProcessTask((tProcessTask)planItemDef));

src/CaseManagement.CMMN/Persistence/InMemory/InMemoryCaseInstanceQueryRepository.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class InMemoryCaseInstanceQueryRepository : ICasePlanInstanceQueryReposit
1818
{ "state", "State" },
1919
{ "create_datetime", "CreateDateTime" }
2020
};
21-
private ConcurrentBag<Domains.CasePlanInstanceAggregate> _instances;
21+
private ConcurrentBag<CasePlanInstanceAggregate> _instances;
2222

2323
public InMemoryCaseInstanceQueryRepository(ConcurrentBag<CasePlanInstanceAggregate> instances)
2424
{
@@ -28,6 +28,12 @@ public InMemoryCaseInstanceQueryRepository(ConcurrentBag<CasePlanInstanceAggrega
2828
public Task<FindResponse<CasePlanInstanceAggregate>> Find(FindWorkflowInstanceParameter parameter)
2929
{
3030
IQueryable<Domains.CasePlanInstanceAggregate> result = _instances.AsQueryable();
31+
if (parameter.TakeLatest)
32+
{
33+
result = result.OrderByDescending(r => r.Version);
34+
result = result.GroupBy(r => r.CasePlanId).Select(r => r.First());
35+
}
36+
3137
if (!string.IsNullOrWhiteSpace(parameter.CasePlanId))
3238
{
3339
result = result.Where(r => r.CasePlanId == parameter.CasePlanId);

src/CaseManagement.CMMN/Persistence/Parameters/FindWorkflowInstanceParameter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ public FindWorkflowInstanceParameter() : base()
1212
public string CasePlanId { get; set; }
1313
public string CaseOwner { get; set; }
1414
public ICollection<string> Roles { get; set; }
15+
public bool TakeLatest { get; set; }
1516
}
1617
}

src/CaseManagement.Gateway.Website.AspNetCore/Apis/CasePlanInstancesController.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using CaseManagement.Gateway.Website.AspNetCore.Extensions;
2+
using CaseManagement.Gateway.Website.CasePlanInstance.CommandHandlers;
3+
using CaseManagement.Gateway.Website.CasePlanInstance.Commands;
24
using CaseManagement.Gateway.Website.CasePlanInstance.Queries;
35
using CaseManagement.Gateway.Website.CasePlanInstance.QueryHandlers;
46
using Microsoft.AspNetCore.Authorization;
@@ -14,13 +16,15 @@ public class CasePlanInstancesController : Controller
1416
private readonly ISearchCasePlanInstanceQueryHandler _searchCasePlanInstanceQueryHandler;
1517
private readonly IGetCasePlanInstanceQueryHandler _getCasePlanInstanceQueryHandler;
1618
private readonly IGetAssignedCasePlanInstanceQueryHandler _getAssignedCasePlanInstanceQueryHandler;
19+
private readonly IEnableCasePlanElementInstanceCommandHandler _enableCasePlanElementInstanceCommandHandler;
1720

18-
public CasePlanInstancesController(ISearchAssignedCasePlanInstanceQueryHandler searchAssignedCasePlanInstanceQueryHandler, ISearchCasePlanInstanceQueryHandler searchCasePlanInstanceQueryHandler, IGetCasePlanInstanceQueryHandler getCasePlanInstanceQueryHandler, IGetAssignedCasePlanInstanceQueryHandler getAssignedCasePlanInstanceQueryHandler)
21+
public CasePlanInstancesController(ISearchAssignedCasePlanInstanceQueryHandler searchAssignedCasePlanInstanceQueryHandler, ISearchCasePlanInstanceQueryHandler searchCasePlanInstanceQueryHandler, IGetCasePlanInstanceQueryHandler getCasePlanInstanceQueryHandler, IGetAssignedCasePlanInstanceQueryHandler getAssignedCasePlanInstanceQueryHandler, IEnableCasePlanElementInstanceCommandHandler enableCasePlanElementInstanceCommandHandler)
1922
{
2023
_searchAssignedCasePlanInstanceQueryHandler = searchAssignedCasePlanInstanceQueryHandler;
2124
_searchCasePlanInstanceQueryHandler = searchCasePlanInstanceQueryHandler;
2225
_getCasePlanInstanceQueryHandler = getCasePlanInstanceQueryHandler;
2326
_getAssignedCasePlanInstanceQueryHandler = getAssignedCasePlanInstanceQueryHandler;
27+
_enableCasePlanElementInstanceCommandHandler = enableCasePlanElementInstanceCommandHandler;
2428
}
2529

2630
[HttpGet("search")]
@@ -56,5 +60,13 @@ public async Task<IActionResult> GetMe(string id)
5660
var result = await _getAssignedCasePlanInstanceQueryHandler.Handle(new GetAssignedCasePlanInstanceQuery { CasePlanInstanceId = id, IdentityToken = this.GetIdentityToken() });
5761
return new OkObjectResult(CasePlansController.ToDto(result));
5862
}
63+
64+
[HttpGet("{id}/enable/{eltId}")]
65+
[Authorize("enable_caseplaninstance")]
66+
public async Task<IActionResult> Enable(string id, string eltId)
67+
{
68+
await _enableCasePlanElementInstanceCommandHandler.Handle(new EnableCasePlanElementInstanceCommand { CasePlanElementInstanceId = eltId, CasePlanInstanceId = id });
69+
return new OkResult();
70+
}
5971
}
6072
}

src/CaseManagement.Gateway.Website.Host/Startup.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,9 @@ public void ConfigureServices(IServiceCollection services)
7070
policy.AddPolicy("terminate_caseplaninstance", p => p.RequireRole("businessanalyst"));
7171
policy.AddPolicy("search_caseplaninstance", p => p.RequireRole("businessanalyst"));
7272
policy.AddPolicy("get_caseplaninstance", p => p.RequireRole("businessanalyst"));
73+
policy.AddPolicy("enable_caseplaninstance", p => p.RequireRole("businessanalyst"));
7374
policy.AddPolicy("me_search_caseplaninstance", p => p.RequireRole("caseworker"));
74-
policy.AddPolicy("me_get_caseplaninstance", p => p.RequireRole("businessanalyst"));
75+
policy.AddPolicy("me_get_caseplaninstance", p => p.RequireRole("caseworker"));
7576
});
7677
services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
7778
.AllowAnyMethod()
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using CaseManagement.Gateway.Website.CasePlanInstance.Commands;
2+
using CaseManagement.Gateway.Website.CasePlanInstance.Services;
3+
using System.Threading.Tasks;
4+
5+
namespace CaseManagement.Gateway.Website.CasePlanInstance.CommandHandlers
6+
{
7+
public class EnableCasePlanElementInstanceCommandHandler : IEnableCasePlanElementInstanceCommandHandler
8+
{
9+
private readonly ICasePlanInstanceService _casePlanInstanceService;
10+
11+
public EnableCasePlanElementInstanceCommandHandler(ICasePlanInstanceService casePlanInstanceService)
12+
{
13+
_casePlanInstanceService = casePlanInstanceService;
14+
}
15+
16+
public Task Handle(EnableCasePlanElementInstanceCommand command)
17+
{
18+
return _casePlanInstanceService.Enable(command.CasePlanInstanceId, command.CasePlanElementInstanceId);
19+
}
20+
}
21+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using CaseManagement.Gateway.Website.CasePlanInstance.Commands;
2+
using System.Threading.Tasks;
3+
4+
namespace CaseManagement.Gateway.Website.CasePlanInstance.CommandHandlers
5+
{
6+
public interface IEnableCasePlanElementInstanceCommandHandler
7+
{
8+
Task Handle(EnableCasePlanElementInstanceCommand command);
9+
}
10+
}

0 commit comments

Comments
 (0)