コード例 #1
0
        public void LocalRefresh()
        {
            try
            {
                League.LocalRefresh();

                var memberships = Memberships.Select(vm => vm.Membership).ToList();

                var comparer = new MembershipComparer();
                var toRemove = memberships.Except(League.Memberships, comparer).ToList();
                var toAdd    = League.Memberships.Except(memberships, comparer).ToList();

                toRemove.ForEach(m => Memberships.Remove(Memberships.Single(vm => vm.Membership == m)));

                toAdd.ForEach(m => Memberships.Add(new MembershipViewModel {
                    MembershipId = m.Id
                }));

                Memberships.Sort(new MembershipSortComparer());
                Memberships.ToList().ForEach(vm => vm.NotifyPropertiesChanged());

                if (Memberships.Count == 0)
                {
                    Memberships.Add(new MembershipViewModel {
                        EmptyMessage = "This league has no members yet"
                    });
                }
            }
            catch (Exception e)
            {
                InsightsManager.Report(e);
            }
        }
コード例 #2
0
        async public Task GetLeaderboard(bool forceRefresh = false)
        {
            using (new Busy(this))
            {
                await AzureService.Instance.LeagueManager.GetItemAsync(League.Id, forceRefresh);

                _league = null;
                League.LocalRefresh();

                Memberships.Clear();
                League.Memberships.ForEach(i => Memberships.Add(new MembershipViewModel {
                    Membership = i
                }));
                Memberships.Sort(new MembershipSortComparer());

                if (Memberships.Count == 0)
                {
                    Memberships.Add(new MembershipViewModel
                    {
                        EmptyMessage = "This league has no members yet"
                    });
                }
            }
        }
コード例 #3
0
ファイル: Person.cs プロジェクト: SwarmCorp/Swarmops
        /// <summary>
        /// Returns most recent membership for each org wich is active or terminated within the grace period
        /// </summary>
        /// <param name="orgs">List of ids. If empty, all orgs</param>
        /// <param name="gracePeriod">For exired, number of days to add to allow it to be returned</param>
        /// <returns></returns>
        public Memberships GetRecentMemberships (List<int> orgs, int gracePeriod)
        {
            Memberships memberships = this.GetMemberships(true);
            Dictionary<int, Membership> collectMembers = new Dictionary<int, Membership>();

            memberships.Sort(delegate(Membership ms1, Membership ms2)
            {
                return ms2.DateTerminated.CompareTo(ms1.DateTerminated);
            });

            //Keep one for each org, the active one or the one with the highest Terminationdate
            foreach (Membership membership in memberships)
            {
                if (orgs.Count == 0 || orgs.Contains(membership.OrganizationId))
                {
                    if (membership.Active)
                    {
                        collectMembers[membership.OrganizationId] = membership;
                    }
                    else if (membership.DateTerminated.AddDays(gracePeriod) > DateTime.Today)
                    {
                        if (!collectMembers.ContainsKey(membership.OrganizationId)
                            || collectMembers[membership.OrganizationId].Active == false)
                        {
                            collectMembers[membership.OrganizationId] = membership;
                        }
                    }
                }
            }

            Memberships collectedMS = new Memberships();
            collectedMS.AddRange(collectMembers.Values);

            if (collectedMS.Count > 0)
            { //sort to get most recent first
                collectedMS.Sort(delegate(Membership ms1, Membership ms2)
                {
                    if (ms1.Active && ms1.Active != ms2.Active)
                        return -1; // active before terminated
                    else if (ms1.Active != ms2.Active)
                        return 1;// active before terminated
                    else if (ms1.Active)
                        return ms1.Expires.CompareTo(ms2.Expires); // active with lowest expiry
                    else
                        return ms2.DateTerminated.CompareTo(ms1.DateTerminated); // terminated with latest terminationdate
                });
            }

            return collectedMS;
        }