public bool IsCriteriaSatisfied(Criteria criteria, int nbOccurrence) { if (criteria.SEntry.IfPart != null && criteria.SEntry.IfPart.Condition != null) { if (!ExpressionParser.IsValid(criteria.SEntry.IfPart.Condition, ExecutionContext)) { return(false); } } foreach (var planItemOnPart in criteria.SEntry.PlanItemOnParts) { var id = BaseCasePlanItemInstance.BuildId(AggregateId, planItemOnPart.SourceRef, nbOccurrence); var source = GetCasePlanItem(id); if (planItemOnPart.StandardEvent != source.LatestTransition) { return(false); } } foreach (var caseItemOnPart in criteria.SEntry.FileItemOnParts) { var id = CaseFileItemInstance.BuildId(AggregateId, caseItemOnPart.SourceRef); var source = GetCaseFileItem(id); if (caseItemOnPart.StandardEvent != source.LatestTransition) { return(false); } } return(true); }
public static CasePlanInstanceAggregate New(string id, CasePlanAggregate caseplan, ICollection <CasePlanInstanceRole> permissions, Dictionary <string, string> parameters) { var result = new CasePlanInstanceAggregate(); var roles = caseplan.Roles.Select(_ => new CasePlanInstanceRole { Id = _.Id, Name = _.Name }).ToList(); var files = caseplan.Files.Select(_ => new CaseFileItemInstance { DefinitionType = _.DefinitionType, EltId = _.Id, Id = CaseFileItemInstance.BuildId(id, _.Id), Name = _.Name }).ToList(); var stage = CMMNParser.ExtractStage(caseplan.XmlContent, id); var json = stage.ToJson(); var evt = new CasePlanInstanceCreatedEvent(Guid.NewGuid().ToString(), id, 0, caseplan.CaseOwner, roles, permissions, json, DateTime.UtcNow, caseplan.AggregateId, caseplan.Name, parameters, files); result.Handle(evt); result.DomainEvents.Add(evt); return(result); }