public void AddParticipation(string competition, string number) { if (Participations.Count(c => c.Competition == competition) == 0) { Participations.Add(new Participant() { Competition = competition, Number = number, Couple = this }); } }
public List <ListPerson> GetData(string sortBy) { List <ListPerson> retval = new List <ListPerson>(); if (this.listedPersons != null) { People ppl = People.FromIdentities(this.listedPersons); Dictionary <int, List <BasicParticipation> > membershipTable = Participations.GetParticipationsForPeople(ppl, Participation.GracePeriod); Participations participationsToLoad = new Participations(); foreach (Person p in ppl) { if (membershipTable.ContainsKey(p.Identity)) { foreach (BasicParticipation bm in membershipTable[p.Identity]) { if (bm.OrganizationId == this.selectedOrgId) { Participation ms = Participation.FromBasic(bm); participationsToLoad.Add(ms); } } } } Participation.LoadPaymentStatuses(participationsToLoad); Dictionary <int, Participation> memberships = new Dictionary <int, Participation>(); foreach (Participation ms in participationsToLoad) { memberships[ms.Identity] = ms; } foreach (Person p in ppl) { ListPerson lp = new ListPerson(p); if (membershipTable.ContainsKey(p.Identity)) { foreach (BasicParticipation bm in membershipTable[p.Identity]) { if (bm.OrganizationId == this.selectedOrgId) { Participation ms = memberships[bm.MembershipId]; lp.JoinedDate = ms.MemberSince; lp.ExpiresDate = ms.Expires; lp.MembershipId = ms.Identity; retval.Add(lp); } } } } } PropertyInfo pi = typeof(ListPerson).GetProperty(sortBy); if (pi != null) { MemberInfo[] miA = pi.PropertyType.GetMember("CompareTo", MemberTypes.Method, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static); if (miA.Length > 0) { MethodInfo mi = (MethodInfo)miA[0]; retval.Sort( delegate(ListPerson p1, ListPerson p2) { return(Convert.ToInt32(mi.Invoke(pi.GetValue(p1, null), new[] { pi.GetValue(p2, null) }))); }); } } return(retval); }
// This should run daily, suggested right after midnight. public static void ChurnExpiredMembers() { Organizations organizations = Organizations.GetAll(); foreach (Organization organization in organizations) { Participations participations = Participations.GetExpired(organization); // Mail each expiring member foreach (Participation membership in participations) { //only remove expired memberships if (membership.Expires > DateTime.Now.Date) { continue; } Person person = membership.Person; // TODO: Check for positions that expire with membership // Mail Participations personParticipations = person.GetParticipations(); Participations participationsToDelete = new Participations(); foreach (Participation personMembership in personParticipations) { if (personMembership.Expires <= DateTime.Now.Date) { participationsToDelete.Add(personMembership); } } ExpiredMail expiredmail = new ExpiredMail(); string membershipsIds = ""; if (participationsToDelete.Count > 1) { foreach (Participation personMembership in participationsToDelete) { membershipsIds += "," + personMembership.MembershipId; } membershipsIds = membershipsIds.Substring(1); string expiredMemberships = ""; foreach (Participation personMembership in participationsToDelete) { if (personMembership.OrganizationId != organization.Identity) { expiredMemberships += ", " + personMembership.Organization.Name; } } expiredMemberships += ". "; expiredmail.pMemberships = expiredMemberships.Substring(2).Trim(); } //TODO: URL for renewal, recieving end of this is NOT yet implemented... // intended to recreate the memberships in MID string tokenBase = person.PasswordHash + "-" + membership.Expires.Year; string stdLink = "https://pirateweb.net/Pages/Public/SE/People/MemberRenew.aspx?MemberId=" + person.Identity + "&SecHash=" + SHA1.Hash(tokenBase).Replace(" ", "").Substring(0, 8) + "&MID=" + membershipsIds; expiredmail.pStdRenewLink = stdLink; expiredmail.pOrgName = organization.MailPrefixInherited; person.SendNotice(expiredmail, organization.Identity); person.DeleteSubscriptionData(); string orgIdString = string.Empty; foreach (Participation personMembership in participationsToDelete) { if (personMembership.Active) { orgIdString += " " + personMembership.OrganizationId; personMembership.Terminate(EventSource.PirateBot, null, "Member churned in housekeeping."); } } } } }