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));
        }