internal static void ProcessReceivedPayment(BasicEvent newEvent) { // Set membership expiry to one year from today's expiry // First, find this particular membership Membership renewedMembership = null; bool foundExisting = false; try { renewedMembership = Membership.FromBasic(Memberships.GetMembership(newEvent.VictimPersonId, newEvent.OrganizationId)); foundExisting = true; } catch (ArgumentException) { } // an exception here means there was no active membership if (foundExisting) { Person person = renewedMembership.Person; DateTime expires = renewedMembership.Expires; ChurnData.LogRetention(person.Identity, renewedMembership.OrganizationId, expires); Events.CreateEvent(EventSource.CustomServiceInterface, EventType.ExtendedMembership, person.Identity, renewedMembership.OrganizationId, person.GeographyId, person.Identity, 0, string.Empty); expires = expires.AddYears(1); // If the membership is in organization 1, then propagate the expiry to every other org this person is a member of // Cheat and assume Swedish. In the future, take this from a template. string mailBody = "Tack för att du har valt att förnya ditt medlemskap och fortsätta vara en del av piratrörelsen i " + "Sverige! Ditt medlemskap går nu ut " + expires.ToString("yyyy-MM-dd") + ", och gäller följande föreningar:\r\n\r\n"; Memberships memberships = person.GetMemberships(); foreach (Membership membership in memberships) { if (membership.Organization.Inherits(1) || membership.OrganizationId == 1) { membership.Expires = expires; mailBody += membership.Organization.Name + "\r\n"; } } mailBody += "\r\nOm du har några frågor, så kontakta gärna Medlemsservice på [email protected]. Återigen, " + "välkommen att vara med i vårt fortsatta arbete!\r\n"; new PirateWeb.Utility.Mail.MailTransmitter("Piratpartiet Medlemsservice", "*****@*****.**", "Piratpartiet: Ditt medlemskap är förnyat", mailBody, person).Send(); } else { // This person's membership has expired, so he/she needs a new one. // TODO } }
public List <ListPerson> GetData(string sortBy) { List <ListPerson> retval = new List <ListPerson>(); if (listedPersons != null) { People ppl = People.FromIdentities(listedPersons); Dictionary <int, List <BasicMembership> > membershipTable = Memberships.GetMembershipsForPeople(listedPersons, Membership.GracePeriod); Memberships membershipsToLoad = new Memberships(); foreach (Person p in ppl) { if (membershipTable.ContainsKey(p.Identity)) { foreach (BasicMembership bm in membershipTable[p.Identity]) { if (bm.OrganizationId == selectedOrgId) { Membership ms = Membership.FromBasic(bm); membershipsToLoad.Add(ms); } } } } Membership.LoadPaymentStatuses(membershipsToLoad); Dictionary <int, Membership> memberships = new Dictionary <int, Membership>(); foreach (Membership ms in membershipsToLoad) { memberships[ms.Identity] = ms; } foreach (Person p in ppl) { ListPerson lp = new ListPerson(p); if (membershipTable.ContainsKey(p.Identity)) { foreach (BasicMembership bm in membershipTable[p.Identity]) { if (bm.OrganizationId == selectedOrgId) { Membership 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 object[] { pi.GetValue(p2, null) }))); }); } } return(retval); }