private static IEnumerable <WorkingCopyStep> FindSteps(WorkingCopy work, WorkingCopyStep startStep, string endStepCode) { List <WorkingCopyStep> steps = new List <WorkingCopyStep>(); if (startStep.Code == endStepCode) { return(steps); } var nextSteps = work.Flows.Where(x => x.FromStep.Contains(startStep)).SelectMany(x => x.ToStep?.Steps).ToList().Distinct(); steps.AddRange(nextSteps); if (nextSteps?.Any() == true) { steps.AddRange(nextSteps.SelectMany(x => FindSteps(work, x, endStepCode))); } return(steps); }
/// <summary> /// build a group /// </summary> /// <param name="work"></param> /// <param name="workflow"></param> /// <param name="flow"></param> /// <param name="startStepId"></param> /// <param name="user"></param> /// <returns></returns> public static IEnumerable <WorkingCopyGroup> BuildGroup(WorkingCopy work, WorkFlowConfig workflow, WorkFlowConfigFlow flow, string startStepId, string user) { var startSteps = work.Steps.Where(x => x.Code == flow.GroupStartStepCode && (string.IsNullOrEmpty(startStepId) || x.Id == startStepId)) .ToList(); var groups = startSteps.Select(startStep => { var group = new WorkingCopyGroup { FLowId = flow.Id, StartStepCode = flow.GroupStartStepCode, EndStepCode = flow.CurrentStepCode, UpdatedAt = DateTime.UtcNow, UpdatedBy = user }; group.Steps.Add(startStep); group.RefreshGroup(work, workflow); return(group); }); return(groups); }