public bool CompareStatusOrder(string currentStatusCode, List<string> limitStatusesCodes, int order = -1)
if (order != -1 && order != 1)
throw new InvalidOperationException("Invalid order parameter, should be '-1' (before) or '1' (after)");
NH90CM_Status currentStatus = context.NH90CM_Status.Where(status => status.Code == currentStatusCode).First();
if (currentStatus == null)
throw new InvalidOperationException("Unknown NH90Status code " + currentStatusCode);
List<NH90CM_Status> limitStatuses = context.NH90CM_Status.Where(status => limitStatusesCodes.Contains(status.Code)).ToList();
if (limitStatuses == null)
throw new InvalidOperationException("Unknown NH90Status codes " + limitStatusesCodes);
List<NH90CM_StatusTransition> transitions = context.NH90CM_StatusTransition.Where(transition =>
limitStatusesCodes.Contains(order == -1 ? transition.ToStatus.Code : transition.FromStatus.Code) && !transition.IsRegression
bool statusIsIncludes = transitions.Any(transition => order == -1 ?
transition.FromStatus.Code.Equals(currentStatusCode, StringComparison.OrdinalIgnoreCase) :
transition.ToStatus.Code.Equals(currentStatusCode, StringComparison.OrdinalIgnoreCase));
else if (transitions.Count == 0 || limitStatusesCodes.Contains(currentStatusCode))
List<string> newLimitStatusesCode = order == -1 ?
transitions.Select(t => t.FromStatus.Code).Distinct().ToList() :
transitions.Select(t => t.ToStatus.Code).Distinct().ToList();
return newLimitStatusesCode.OrderBy(t => t).SequenceEqual(limitStatusesCodes.OrderBy(t => t)) ?
false : CompareStatusOrder(currentStatusCode, newLimitStatusesCode, order);