예제 #1
0
            /// <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);
            }
예제 #2
0
        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));
        }