public static UserPositionActivation CheckUserPositionActivation(int userID, Dictionary <int, dynamic> positionsStatuses) { // Avoid cache before get updated data: CleanCacheGetUserPos(userID); var newStatuses = GetUserPositionsStatuses(userID); var posActivationList = new List <UserPositionActivation>(); var totalNumbers = LcData.GetUserAlertsNumbers(userID); foreach (var ps in newStatuses) { var rtn = new UserPositionActivation(userID); // Get alert numbers for this position or an empty numbers if there is no alerts actived for the position. var numbers = totalNumbers.ContainsKey(ps.Key) ? totalNumbers[ps.Key] : new LcData.UserAlertsNumbers(); rtn.NextAlert = numbers.NextAlert; // Check if is enabled if (ps.Value.StatusID == 1) { // By default, set as complete until other conditions change it: rtn.Status = UserPositionActivation.Statuses.Complete; if (ps.Value.StatusID != positionsStatuses[ps.Key].StatusID) { // It was enabled right now: rtn.Status = UserPositionActivation.Statuses.JustCompleted; rtn.Messages.Add(LcRessources.GetText("PositionActivationComplete", ps.Value.PositionSingular)); } // There are still non required alerts? must be showed as Enhance if (numbers.CountActiveAlerts > 0) { rtn.Status = UserPositionActivation.Statuses.Enhance; } } else if (ps.Value.StatusID == 2) { rtn.Status = UserPositionActivation.Statuses.InProgress; if (numbers.CountRequiredAlerts > 0) { // It is still incomplete, show progress rtn.Messages.Add(LcRessources.GetText("PositionActivationProgress", numbers.CountRequiredPassedAlerts, numbers.CountRequiredAlerts, ps.Value.PositionSingular) ); } } posActivationList.Add(rtn); } return(UserPositionActivation.Max(posActivationList)); }