/// <summary> /// Generates a new UserPositionActivation object with the 'maximum' /// values for each field from the passed list. /// Messages property will be accumulated, /// Status will be the more restricted (lower value), /// NextStepURL will be that with lower NextStepRank (first on equal ranks) /// </summary> /// <param name="list"></param> /// <returns></returns> public static UserPositionActivation Max(IEnumerable <UserPositionActivation> list) { if (list == null) { throw new ArgumentNullException("list"); } UserPositionActivation max = null; foreach (var l in list) { if (max == null) { max = l; continue; } if ((short)l.Status < (short)max.Status) { max.Status = l.Status; } max.Messages.AddRange(l.Messages); if (max.NextAlert == null || l.NextAlert != null && l.NextAlert.DisplayRank < max.NextAlert.DisplayRank) { max.NextAlert = l.NextAlert; } } return(max); }
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)); }