public void PrepareMissionTrip(int?gsid, int?goerid) { if (gsid.HasValue) // this means that the person is a supporter who got a support email { var goerSupporter = CurrentDatabase.GoerSupporters.SingleOrDefault(gg => gg.Id == gsid); // used for mission trips if (goerSupporter != null) { GoerId = goerSupporter.GoerId; // support this particular goer Goer = CurrentDatabase.LoadPersonById(goerSupporter.GoerId); GoerSupporterId = gsid; } else { GoerId = 0; // allow this supporter to still select a goer } } else if (goerid.HasValue) { GoerId = goerid; Goer = CurrentDatabase.LoadPersonById(goerid ?? 0); } // prepare supporter data OrganizationMember OrgMember = null; if (Goer != null) { OrgMember = CurrentDatabase.OrganizationMembers.SingleOrDefault(mm => mm.OrganizationId == org.OrganizationId && mm.PeopleId == Goer.PeopleId); } if (OrgMember != null) { var supporters = from g in CurrentDatabase.GoerSenderAmounts where g.GoerId == Goer.PeopleId where g.SupporterId != Goer.PeopleId where g.OrgId == org.OrganizationId let anonymous = (from s in CurrentDatabase.GoerSenderAmounts where s.Id == g.Id where s.NoNoticeToGoer == true select s.NoNoticeToGoer).Any() select new Supporter { Id = (anonymous ? 0 : g.SupporterId), // group all anonymous transactions together even if they're different supporters Name = (anonymous ? "Anonymous" : g.Sender.Name), Amt = (g.Amount ?? 0) }; var transactions = new TransactionsModel(CurrentDatabase, OrgMember.TranId) { GoerId = Goer.PeopleId }; var summaries = CurrentDatabase.ViewTransactionSummaries.SingleOrDefault(ts => ts.RegId == OrgMember.TranId && ts.PeopleId == Goer.PeopleId && ts.OrganizationId == org.OrganizationId); Supporters = supporters // combine and total multiple gifts from the same supporter id .GroupBy(s => s.Id) .Select(s => new Supporter { Id = s.First().Id, Name = s.First().Name, TotalAmt = s.Sum(x => x.Amt) }) .ToList(); // prepare funding data MissionTripCost = summaries.IndPaid + summaries.IndDue; MissionTripRaised = OrgMember.AmountPaidTransactions(CurrentDatabase); } // prepare date data if (org.FirstMeetingDate.HasValue && org.LastMeetingDate.HasValue) { DateTimeRangeFormatter formatter = new DateTimeRangeFormatter(); MissionTripDates = formatter.FormatDateRange(org.FirstMeetingDate.Value, org.LastMeetingDate.Value); } else if (org.FirstMeetingDate.HasValue) { MissionTripDates = org.FirstMeetingDate.Value.ToString("MMMM d, yyyy"); } else if (org.LastMeetingDate.HasValue) { MissionTripDates = org.LastMeetingDate.Value.ToString("MMMM d, yyyy"); } }
public void writeToXML(XmlWriter writer, string securityCode) { Person person = DbUtil.Db.People.SingleOrDefault(p => p.PeopleId == peopleID); Organization org = DbUtil.Db.Organizations.SingleOrDefault(o => o.OrganizationId == orgID); OrganizationMember orgMember = DbUtil.Db.OrganizationMembers.SingleOrDefault(om => om.PeopleId == person.PeopleId && om.OrganizationId == org.OrganizationId); int labelCount = org.NumCheckInLabels ?? 0; string orgName = org.OrganizationName; string location = org.Location; bool requiresecuritylabel = (orgMember != null && (orgMember.MemberTypeId == 220 || orgMember.MemberTypeId == 230)) && (person.Age.Value < 18) && !org.NoSecurityLabel.Value; string first = person.PreferredName; string last = person.LastName; DateTime?dob = person.BirthDate; bool transport = person.OkTransport ?? false; bool custody = person.CustodyIssue ?? false; bool member = orgMember != null && orgMember.MemberTypeId != 230 && orgMember.MemberTypeId != 310 && orgMember.MemberTypeId != 311; string allergies = person.GetRecReg().MedicalDescription; var parents = ""; if (person.PositionInFamilyId == 30) { if (person.Family.HeadOfHouseholdId != null) { parents = person.Family.HeadOfHousehold.FirstName; if (person.Family.HeadOfHouseholdSpouseId != null) { parents += " & " + person.Family.HeadOfHouseholdSpouse.FirstName; } } else if (person.Family.HeadOfHouseholdSpouseId != null) { parents = person.Family.HeadOfHouseholdSpouse.FirstName; } } writer.WriteStartElement("LabelInfo"); writer.WriteElementString("n", labelCount.ToString()); writer.WriteElementString("dob", dob != null ? dob.Value.ToString("s") : ""); writer.WriteElementString("location", location); writer.WriteElementString("allergies", allergies); writer.WriteElementString("org", orgName); writer.WriteElementString("hour", hour != null ? hour.Value.ToString("s") : ""); writer.WriteElementString("pid", person.PeopleId.ToString()); writer.WriteElementString("mv", member ? "M" : "G"); writer.WriteElementString("first", first); writer.WriteElementString("last", last); writer.WriteElementString("transport", transport.ToString().ToLower()); writer.WriteElementString("custody", custody.ToString().ToLower()); writer.WriteElementString("requiressecuritylabel", requiresecuritylabel.ToString().ToLower()); writer.WriteElementString("securitycode", securityCode); writer.WriteElementString("parents", parents); writer.WriteEndElement(); }
public AskItem(Ask ask, OrganizationMember om) { this.ask = ask; this.om = om; }
public ActionResult VoteLinkSg(string id, string message, bool?confirm, FormCollection formCollection) { var li = new LinkInfo(votelinkSTR, confirmSTR, id); if (li.error.HasValue()) { return(Message(li.error)); } try { var smallgroup = li.a[4]; if (!li.oid.HasValue) { throw new Exception("orgid missing"); } if (!li.pid.HasValue) { throw new Exception("peopleid missing"); } var q = (from pp in DbUtil.Db.People where pp.PeopleId == li.pid let org = DbUtil.Db.Organizations.SingleOrDefault(oo => oo.OrganizationId == li.oid) let om = DbUtil.Db.OrganizationMembers.SingleOrDefault(oo => oo.OrganizationId == li.oid && oo.PeopleId == li.pid) select new { p = pp, org, om }).Single(); if (q.org == null && DbUtil.Db.Host == "trialdb") { var oid = li.oid + Util.TrialDbOffset; q = (from pp in DbUtil.Db.People where pp.PeopleId == li.pid let org = DbUtil.Db.Organizations.SingleOrDefault(oo => oo.OrganizationId == oid) let om = DbUtil.Db.OrganizationMembers.SingleOrDefault(oo => oo.OrganizationId == oid && oo.PeopleId == li.pid) select new { p = pp, org, om }).Single(); } if (q.org == null) { throw new Exception("org missing, bad link"); } if ((q.org.RegistrationTypeId ?? RegistrationTypeCode.None) == RegistrationTypeCode.None) { throw new Exception("votelink is no longer active"); } if (q.om == null && q.org.Limit <= q.org.RegLimitCount(DbUtil.Db)) { throw new Exception("sorry, maximum limit has been reached"); } if (q.om == null && (q.org.RegistrationClosed == true || q.org.OrganizationStatusId == OrgStatusCode.Inactive)) { throw new Exception("sorry, registration has been closed"); } var setting = DbUtil.Db.CreateRegistrationSettings(li.oid.Value); if (IsSmallGroupFilled(setting, li.oid.Value, smallgroup)) { throw new Exception("sorry, maximum limit has been reached for " + smallgroup); } var omb = OrganizationMember.Load(DbUtil.Db, li.pid.Value, li.oid.Value) ?? OrganizationMember.InsertOrgMembers(DbUtil.Db, li.oid.Value, li.pid.Value, MemberTypeCode.Member, Util.Now, null, false); if (q.org.AddToSmallGroupScript.HasValue()) { var script = DbUtil.Db.Content(q.org.AddToSmallGroupScript); if (script != null && script.Body.HasValue()) { try { var pe = new PythonModel(Util.Host, "RegisterEvent", script.Body); pe.instance.AddToSmallGroup(smallgroup, omb); } catch (Exception) { } } } omb.AddToGroup(DbUtil.Db, smallgroup); li.ot.Used = true; DbUtil.Db.SubmitChanges(); DbUtil.LogActivity($"{votelinkSTR}{confirmSTR}: {smallgroup}", li.oid, li.pid); if (confirm == true) { var subject = Util.PickFirst(setting.Subject, "no subject"); var msg = Util.PickFirst(setting.Body, "no message"); msg = APIOrganization.MessageReplacements(DbUtil.Db, q.p, q.org.DivisionName, q.org.OrganizationId, q.org.OrganizationName, q.org.Location, msg); msg = msg.Replace("{details}", smallgroup); var NotifyIds = DbUtil.Db.StaffPeopleForOrg(q.org.OrganizationId); try { DbUtil.Db.Email(NotifyIds[0].FromEmail, q.p, subject, msg); // send confirmation } catch (Exception ex) { DbUtil.Db.Email(q.p.FromEmail, NotifyIds, q.org.OrganizationName, "There was a problem sending confirmation from org: " + ex.Message); } DbUtil.Db.Email(q.p.FromEmail, NotifyIds, q.org.OrganizationName, $"{q.p.Name} has registered for {q.org.OrganizationName}<br>{smallgroup}<br>(from votelink)"); } } catch (Exception ex) { DbUtil.LogActivity($"{votelinkSTR}{confirmSTR}Error: {ex.Message}", li.oid, li.pid); return(Message(ex.Message)); } return(Message(message)); }
public SummaryInfo(CMSDataContext db, OrganizationMember om) { this.om = om; First = om.Person.PreferredName; Last = om.Person.LastName; Orgname = om.Organization.OrganizationName; setting = db.CreateRegistrationSettings(om.OrganizationId); }
public static void AssertOrganizationModerator(IDbConnection db, int orgId, AuthUserSession user, out Organization organization, out OrganizationMember orgMember) { AssertCanViewOrganization(db, orgId, user, out organization, out orgMember); if (!user.IsOrganizationModerator(orgMember)) { throw HttpError.Forbidden("This action is limited to Organization Moderators"); } }
// todo: remove the following method after Aug 1, 2013 public ActionResult VoteLink(string id, string smallgroup, string message, bool?confirm) { if (!id.HasValue()) { return(Content("bad link")); } var guid = id.ToGuid(); if (guid == null) { return(Content("invalid link")); } var ot = DbUtil.Db.OneTimeLinks.SingleOrDefault(oo => oo.Id == guid.Value); if (ot == null) { return(Content("invalid link")); } if (ot.Used) { return(Content("link used")); } if (ot.Expires.HasValue && ot.Expires < DateTime.Now) { return(Content("link expired")); } var a = ot.Querystring.Split(','); var oid = a[0].ToInt(); var pid = a[1].ToInt(); var emailid = a[2].ToInt(); var pre = a[3]; var q = (from pp in DbUtil.Db.People where pp.PeopleId == pid let org = DbUtil.Db.Organizations.SingleOrDefault(oo => oo.OrganizationId == oid) let om = DbUtil.Db.OrganizationMembers.SingleOrDefault(oo => oo.OrganizationId == oid && oo.PeopleId == pid) select new { p = pp, org = org, om = om }).Single(); if (q.org == null) { return(Content("org missing, bad link")); } if (q.org.RegistrationTypeId == RegistrationTypeCode.None) { return(Content("votelink is no longer active")); } if (q.om == null && q.org.Limit <= q.org.MemberCount) { return(Content("sorry, maximum limit has been reached")); } if (q.om == null && (q.org.RegistrationClosed == true || q.org.OrganizationStatusId == OrgStatusCode.Inactive)) { return(Content("sorry, registration has been closed")); } var setting = new Settings(q.org.RegSetting, DbUtil.Db, oid); if (IsSmallGroupFilled(setting, oid, smallgroup)) { return(Content("sorry, maximum limit has been reached for " + smallgroup)); } var omb = q.om; omb = OrganizationMember.InsertOrgMembers(DbUtil.Db, oid, pid, 220, DateTime.Now, null, false); //DbUtil.Db.UpdateMainFellowship(oid); if (q.org.AddToSmallGroupScript.HasValue()) { var script = DbUtil.Db.Content(q.org.AddToSmallGroupScript); if (script != null && script.Body.HasValue()) { try { var pe = new PythonEvents(DbUtil.Db, "RegisterEvent", script.Body); pe.instance.AddToSmallGroup(smallgroup, omb); } catch (Exception) { } } } omb.AddToGroup(DbUtil.Db, smallgroup); omb.AddToGroup(DbUtil.Db, "emailid:" + emailid); ot.Used = true; DbUtil.Db.SubmitChanges(); DbUtil.LogActivity("Votelink: {0}".Fmt(q.org.OrganizationName)); if (confirm == true) { var subject = Util.PickFirst(setting.Subject, "no subject"); var msg = Util.PickFirst(setting.Body, "no message"); msg = CmsData.API.APIOrganization.MessageReplacements(q.p, q.org.DivisionName, q.org.OrganizationName, q.org.Location, msg); msg = msg.Replace("{details}", smallgroup); var NotifyIds = DbUtil.Db.StaffPeopleForOrg(q.org.OrganizationId); if (NotifyIds.Count == 0) { NotifyIds = DbUtil.Db.AdminPeople(); } DbUtil.Db.Email(NotifyIds[0].FromEmail, q.p, subject, msg); // send confirmation DbUtil.Db.Email(q.p.FromEmail, NotifyIds, q.org.OrganizationName, "{0} has registered for {1}<br>{2}<br>(from votelink)".Fmt(q.p.Name, q.org.OrganizationName, smallgroup)); } return(Content(message)); }
public async Task GetAllMembers_ReturnsDomainList(List <OrganizationMemberEntity> members, OrganizationMember memberDomain) { var mapDomain = new Mock <IMapper <OrganizationEntity, Organization> >(); mapDomain.Setup(x => x.Map(It.IsAny <OrganizationEntity>())).Returns(mapDomain.Object); var mapMemberDomain = new Mock <IMapper <OrganizationMemberEntity, OrganizationMember> >(); mapMemberDomain.Setup(x => x.Map(It.IsAny <OrganizationMemberEntity>())).Returns(mapMemberDomain.Object); mapMemberDomain.Setup(x => x.ToOutFormat()).Returns(memberDomain); var db = new InMemoryDb <OrganizationDbContext>(); var context = new OrganizationDbContext(db.GetOptions()); var repo = new ReadOnlyOrganizationMemberRepository(context, mapMemberDomain.Object, mapDomain.Object); context.OrganizationMembers.AddRange(members); context.SaveChanges(); // Act var hest = await repo.GetAllMembers(); // Arrange hest.Should().HaveCount(members.Count); }
public static bool IsOrganizationModerator(this AuthUserSession session, OrganizationMember organizationMember) => session.IsOrganizationOwner(organizationMember) || organizationMember?.IsModerator == true;
public SummaryInfo(CMSDataContext db, OrganizationMember om) { this.om = om; First = om.Person.PreferredName; Last = om.Person.LastName; Orgname = om.Organization.OrganizationName; setting = new Settings(om.Organization.RegSetting, db, om.Organization.OrganizationId) { org = om.Organization }; }
public static bool IsOrganizationOwner(this AuthUserSession session, OrganizationMember organizationMember) => session.IsAdmin() || organizationMember?.IsOwner == true;
public void OnEnrollTest() { var context = ContextTestUtils.CreateMockHttpContext(); var org = CreateOrganization(); var person = CreatePerson(); var om = OrganizationMember.AddOrgMember(db, org.OrganizationId, person.PeopleId, MemberTypeCode.Member, DateTime.Now, org.OrganizationName); org.UpdateRegSetting(new Settings { AskItems = new List <Ask>(new Ask[] { new AskText { Name = "ImportantQuestion" }, new AskCheckboxes { Name = "Options", list = new List <AskCheckboxes.CheckboxItem>(new[] { new AskCheckboxes.CheckboxItem { Name = "Item 1" } }) } }) }); db.SubmitChanges(); var notify = db.StaffPeopleForOrg(om.OrganizationId).First(); var personModel = new OnlineRegModel(db) { Orgid = om.OrganizationId, UserPeopleId = om.PeopleId, }; var model = new OnlineRegPersonModel(db) { orgid = om.OrganizationId, Parent = personModel, PeopleId = om.PeopleId, FirstName = om.Person.FirstName, LastName = om.Person.LastName, Checkbox = new List <string>(new[] { "Item 1" }), QuestionsOK = true, Text = new List <Dictionary <string, string> >(new[] { new Dictionary <string, string>() }) }; model.Text.First()["ImportantQuestion"] = "ImportantAnswer"; var script = "OnEnrollTest"; db.WriteContentPython(script, @"print(Data)"); model.setting.OnEnrollScript = script; model.OnEnroll(om); model.ScriptResults.Trim().ShouldBe($@"{{ ""PeopleId"": {om.PeopleId}, ""OrganizationId"": {om.OrganizationId}, ""OnlineNotifyId"": {notify.PeopleId}, ""OnlineNotifyEmail"": ""{notify.EmailAddress}"", ""OnlineNotifyName"": ""{notify.Name}"", ""LoggedIn"": true, ""FirstName"": ""{person.FirstName}"", ""LastName"": ""{person.LastName}"", ""TextQuestion"": {{ ""ImportantQuestion"": ""ImportantAnswer"" }}, ""Checkbox"": {{ ""Item 1"": true }} }}".Replace("\r", "")); }
private void ProcessExtraValues(CMSDataContext db, Person p, dynamic a) { if (!extravaluenames.Any()) { return; } foreach (var name in extravaluenames) { object o = a.GetValue(name); var vs = o as string; string type = null; if (!evtypes.TryGetValue(name, out type)) { p.AddEditExtraCode(name, Util.trim(a[name])); return; } switch (type) { case "txt": p.AddEditExtraText(name, a[name]); break; case "org": if (Testing) { continue; } var d = a[name].Trim().Trim(); if (!d.HasValue()) { continue; } if (d == "TRUE") { d = "Member"; } var oid = 0; if (orgs.ContainsKey(name)) { oid = orgs[name]; } else { var prog = Organization.FetchOrCreateProgram(db, "InsertPeople"); var div = Organization.FetchOrCreateDivision(db, prog, "InsertPeople"); var org = Organization.FetchOrCreateOrganization(db, div, name.SplitUpperCaseToString()); oid = org.OrganizationId; orgs.Add(name, oid); } var mtid = 0; if (membertypes.ContainsKey(d)) { mtid = membertypes[d]; } else { var mt = Organization.FetchOrCreateMemberType(db, d); mtid = mt.Id; membertypes.Add(d, mtid); } OrganizationMember.InsertOrgMembers(db, oid, p.PeopleId, mtid, DateTime.Today, null, false); break; case "dt": if (vs != null) { DateTime dt; if (Util.DateValid(vs, out dt)) { p.AddEditExtraDate(name, dt); } } else if (o is DateTime) { p.AddEditExtraDate(name, (DateTime)o); } break; case "int": if (o is int) { p.AddEditExtraInt(name, (int)o); } break; case "bit": if (o is int) { p.AddEditExtraBool(name, (int)o == 1); } break; } } }
//--------------------------------------------------------------------------------------------------- private void EnrollAndConfirm2() { var Db = DbUtil.Db; var ti = Transaction; for (var i = 0; i < List.Count; i++) { var p = List[i]; if (p.IsNew) { Person uperson = null; switch (p.whatfamily) { case 1: uperson = Db.LoadPersonById(UserPeopleId.Value); break; case 2: if (i > 0) { uperson = List[i - 1].person; } break; } p.AddPerson(uperson, p.org.EntryPointId ?? 0); } } var amtpaid = ti.Amt ?? 0; var pids2 = new List <TransactionPerson>(); foreach (var p in List) { if (p.PeopleId == null) { return; } pids2.Add(new TransactionPerson { PeopleId = p.PeopleId.Value, Amt = p.TotalAmount(), OrgId = p.orgid, }); } ti.TransactionDate = DateTime.Now; var pids = pids2.Select(pp => pp.PeopleId); ti.OriginalTransaction.TransactionPeople.AddRange(pids2); for (var i = 0; i < List.Count; i++) { var p = List[i]; var q = from pp in Db.People where pids.Contains(pp.PeopleId) where pp.PeopleId != p.PeopleId select pp.Name; var others = string.Join(",", q.ToArray()); var om = p.Enroll(ti, null, testing, others); om.RegisterEmail = p.EmailAddress; om.TranId = ti.OriginalId; int grouptojoin = p.setting.GroupToJoin.ToInt(); if (grouptojoin > 0) { OrganizationMember.InsertOrgMembers(Db, grouptojoin, p.PeopleId.Value, MemberTypeCode.Member, DateTime.Now, null, false); } OnlineRegPersonModel.CheckNotifyDiffEmails(p.person, Db.StaffEmailForOrg(p.org.OrganizationId), p.fromemail, p.org.OrganizationName, p.org.PhoneNumber); if (p.CreatingAccount == true) { p.CreateAccount(); } string DivisionName = masterorg.OrganizationName; string OrganizationName = p.org.OrganizationName; string emailSubject = null; string message = null; if (p.setting.Body.HasValue()) { emailSubject = Util.PickFirst(p.setting.Subject, "no subject"); message = p.setting.Body; } else { try { if (masterorgid.HasValue && !settings.ContainsKey(masterorgid.Value)) { ParseSettings(); } var os = settings[masterorgid.Value]; emailSubject = Util.PickFirst(os.Subject, "no subject"); message = Util.PickFirst(os.Body, "no body"); } catch (Exception) { if (masterorgid == null) { throw new Exception("masterorgid was null"); } if (settings == null) { throw new Exception("settings was null"); } if (!settings.ContainsKey(masterorgid.Value)) { throw new Exception("setting not found for masterorgid " + masterorgid.Value); } throw; } } var NotifyIds = Db.StaffPeopleForOrg(p.org.OrganizationId); var notify = NotifyIds[0]; string Location = p.org.Location; if (!Location.HasValue()) { Location = masterorg.Location; } message = CmsData.API.APIOrganization.MessageReplacements(DbUtil.Db, p.person, DivisionName, OrganizationName, Location, message); string details = p.PrepareSummaryText(ti); message = message.Replace("{phone}", p.org.PhoneNumber.FmtFone7()); message = message.Replace("{tickets}", List[0].ntickets.ToString()); message = message.Replace("{details}", details); message = message.Replace("{paid}", p.TotalAmount().ToString("c")); message = message.Replace("{sessiontotal}", amtpaid.ToString("c")); message = message.Replace("{participants}", details); Db.CurrentOrgId = p.orgid; // send confirmations if (emailSubject != "DO NOT SEND") { Db.Email(notify.FromEmail, p.person, Util.EmailAddressListFromString(p.fromemail), emailSubject, message, redacted: false); } // notify the staff Db.Email(Util.PickFirst(p.person.FromEmail, notify.FromEmail), NotifyIds, Header, @"{0} has registered for {1}<br/> Feepaid for this registrant: {2:C}<br/> Others in this registration session: {3:C}<br/> Total Fee paid for this registration session: {4:C}<br/> <pre>{5}</pre>".Fmt(p.person.Name, Header, p.AmountToPay(), others, amtpaid, p.PrepareSummaryText(ti))); } }
// todo: remove the following method after Aug 1, 2013 public ActionResult RsvpLink(string id, string smallgroup, string message, bool?confirm) { if (!id.HasValue()) { return(Content("bad link")); } var guid = id.ToGuid(); if (guid == null) { return(Content("invalid link")); } var ot = DbUtil.Db.OneTimeLinks.SingleOrDefault(oo => oo.Id == guid.Value); if (ot == null) { return(Content("invalid link")); } if (ot.Used) { return(Content("link used")); } if (ot.Expires.HasValue && ot.Expires < DateTime.Now) { return(Content("link expired")); } var a = ot.Querystring.Split(','); var meetingid = a[0].ToInt(); var pid = a[1].ToInt(); var emailid = a[2].ToInt(); var q = (from pp in DbUtil.Db.People where pp.PeopleId == pid let meeting = DbUtil.Db.Meetings.SingleOrDefault(mm => mm.MeetingId == meetingid) let org = meeting.Organization select new { p = pp, org, meeting }).Single(); if (q.org.RegistrationClosed == true || q.org.OrganizationStatusId == OrgStatusCode.Inactive) { return(Content("sorry, registration has been closed")); } if (q.org.RegistrationTypeId == RegistrationTypeCode.None) { return(Content("rsvp is no longer available")); } if (q.org.Limit <= q.meeting.Attends.Count(aa => aa.Commitment == 1)) { return(Content("sorry, maximum limit has been reached")); } var omb = OrganizationMember.InsertOrgMembers(DbUtil.Db, q.meeting.OrganizationId, pid, 220, DateTime.Now, null, false); if (smallgroup.HasValue()) { omb.AddToGroup(DbUtil.Db, smallgroup); } omb.AddToGroup(DbUtil.Db, "emailid:" + emailid); ot.Used = true; DbUtil.Db.SubmitChanges(); Attend.MarkRegistered(DbUtil.Db, pid, meetingid, 1); DbUtil.LogActivity("Rsvplink: {0}".Fmt(q.org.OrganizationName)); var setting = new Settings(q.org.RegSetting, DbUtil.Db, q.meeting.OrganizationId); if (confirm == true) { var subject = Util.PickFirst(setting.Subject, "no subject"); var msg = Util.PickFirst(setting.Body, "no message"); msg = CmsData.API.APIOrganization.MessageReplacements(q.p, q.org.DivisionName, q.org.OrganizationName, q.org.Location, msg); msg = msg.Replace("{details}", q.meeting.MeetingDate.ToString2("f")); var NotifyIds = DbUtil.Db.StaffPeopleForOrg(q.org.OrganizationId); if (NotifyIds.Count == 0) { NotifyIds = DbUtil.Db.AdminPeople(); } DbUtil.Db.Email(NotifyIds[0].FromEmail, q.p, subject, msg); // send confirmation DbUtil.Db.Email(q.p.FromEmail, NotifyIds, q.org.OrganizationName, "{0} has registered for {1}<br>{2}".Fmt(q.p.Name, q.org.OrganizationName, q.meeting.MeetingDate.ToString2("f"))); } return(Content(message)); }
private void SaveAnswers(OrganizationMember om) { om.OnlineRegData = Util.Serialize(this); // saves all answers var reg = person.SetRecReg(); foreach (var ask in setting.AskItems) { switch (ask.Type) { case "AskSize": om.ShirtSize = shirtsize; reg.ShirtSize = shirtsize; break; case "AskChurch": reg.ActiveInAnotherChurch = otherchurch; reg.Member = memberus; break; case "AskAllergies": reg.MedAllergy = medical.HasValue(); reg.MedicalDescription = medical; break; case "AskParents": reg.Mname = mname; reg.Fname = fname; break; case "AskEmContact": reg.Emcontact = emcontact; reg.Emphone = emphone; break; case "AskTylenolEtc": reg.Tylenol = tylenol; reg.Advil = advil; reg.Robitussin = robitussin; reg.Maalox = maalox; break; case "AskDoctor": reg.Docphone = docphone; reg.Doctor = doctor; break; case "AskCoaching": reg.Coaching = coaching; break; case "AskSMS": SaveSMSChoice(); break; case "AskInsurance": reg.Insurance = insurance; reg.Policy = policy; break; case "AskTickets": om.Tickets = ntickets; break; case "AskYesNoQuestions": SaveYesNoChoices(om, ask); break; case "AskCheckboxes": SaveCheckboxChoices(om, ask); break; case "AskExtraQuestions": foreach (var g in ExtraQuestion[ask.UniqueId]) { if (g.Value.HasValue()) { if (setting.TargetExtraValues || ((AskExtraQuestions)ask).TargetExtraValue == true) { person.AddEditExtraText(g.Key, g.Value); } } } break; case "AskText": foreach (var g in Text[ask.UniqueId]) { if (g.Value.HasValue()) { if (setting.TargetExtraValues || ((AskText)ask).TargetExtraValue == true) { person.AddEditExtraText(g.Key, g.Value); } } } break; case "AskMenu": SaveMenuChoices(om, ask); break; case "AskDropdown": SaveDropdownChoice(om, ask); break; case "AskGradeOptions": SaveGradeChoice(om); break; } } }
private void ProcessExtraValues(CMSDataContext db, Person p, string[] a) { if (!extravaluenames.Any()) { return; } foreach (var name in extravaluenames) { var b = name.Split('.'); if (name.EndsWith(".txt")) { p.AddEditExtraText(b[0], a[names[name]].Trim()); } else if (name.EndsWith(".org")) { if (testing) { continue; } var d = a[names[name]].Trim().Trim(); if (!d.HasValue()) { continue; } if (d == "TRUE") { d = "Member"; } var oid = 0; if (orgs.ContainsKey(b[0])) { oid = orgs[b[0]]; } else { var prog = Organization.FetchOrCreateProgram(db, "InsertPeople"); var div = Organization.FetchOrCreateDivision(db, prog, "InsertPeople"); var o = Organization.FetchOrCreateOrganization(db, div, b[0].SplitUpperCaseToString()); oid = o.OrganizationId; orgs.Add(b[0], oid); } var mtid = 0; if (membertypes.ContainsKey(d)) { mtid = membertypes[d]; } else { var mt = Organization.FetchOrCreateMemberType(db, d); mtid = mt.Id; membertypes.Add(d, mtid); } OrganizationMember.InsertOrgMembers(db, oid, p.PeopleId, mtid, DateTime.Today, null, false); } else if (name.EndsWith(".dt")) { var d = a[names[name]].Trim().ToDate(); if (d.HasValue) { p.AddEditExtraDate(b[0], d.Value); } } else if (name.EndsWith(".int")) { p.AddEditExtraInt(b[0], a[names[name]].Trim().ToInt()); } else if (name.EndsWith(".bit")) { var v = a[names[name]]; if (v.HasValue()) { p.AddEditExtraBool(b[0], v.ToInt() == 1); } } else { p.AddEditExtraCode(name, a[names[name]].Trim()); } } }
private string PrepareSummaryText2(OrganizationMember om) { const string razorTemplate = @"@model CmsData.API.APIOrganization.SummaryInfo <table> <tr><td>Org:</td><td>@Model.Orgname</td></tr> <tr><td>First:</td><td>@Model.First</td></tr> <tr><td>Last:</td><td>@Model.Last</td></tr> @foreach(var ask in Model.List()) { foreach(var row in ask.List()) { <tr><td>@row.Label</td><td>@row.Description</td></tr> } } </table> "; return Razor.Parse(razorTemplate, new SummaryInfo(Db, om)); }
public void RepopulateRegistration(OrganizationMember om) { var reg = person.RecRegs.SingleOrDefault(); if (reg == null) { reg = new RecReg(); person.RecRegs.Add(reg); } foreach (var ask in setting.AskItems) { switch (ask.Type) { case "AskSize": shirtsize = om.ShirtSize; break; case "AskChurch": otherchurch = reg.ActiveInAnotherChurch ?? false; memberus = reg.Member ?? false; break; case "AskAllergies": medical = reg.MedicalDescription; break; case "AskParents": mname = reg.Mname; fname = reg.Fname; break; case "AskEmContact": emcontact = reg.Emcontact; emphone = reg.Emphone; break; case "AskTylenolEtc": tylenol = reg.Tylenol; advil = reg.Advil; robitussin = reg.Robitussin; maalox = reg.Maalox; break; case "AskDoctor": docphone = reg.Docphone; doctor = reg.Doctor; break; case "AskCoaching": coaching = reg.Coaching; break; case "AskInsurance": insurance = reg.Insurance; policy = reg.Policy; break; case "AskTickets": ntickets = om.Tickets; break; case "AskYesNoQuestions": PopulateYesNoChoices(om, ask); break; case "AskCheckboxes": PopulateCheckboxChoices(om, ask); break; case "AskExtraQuestions": PopulateExtraAnswers(om, ask); break; case "AskText": PopulateTextAnswers(om, ask); break; case "AskMenu": break; case "AskDropdown": PopulateDropdownChoices(om, ask); break; case "AskGradeOptions": PopulateGradeChoice(om); break; } } }
public void AddToSmallGroup(CMSDataContext Db, OrganizationMember om, PythonEvents pe) { if (om == null) return; if (pe != null) { pe.instance.AddToSmallGroup(SmallGroup, om); om.Person.LogChanges(Db, om.PeopleId); } om.AddToGroup(Db, SmallGroup); if (MeetingTime.HasValue) Attend.MarkRegistered(Db, om.OrganizationId, om.PeopleId, MeetingTime.Value, 1); }
public static void AssertCanViewOrganization(IDbConnection db, Organization organization, AuthUserSession user, out OrganizationMember organizationMember) { LoadOrganizations(db); var userId = user?.GetUserId(); organizationMember = organization != null && userId != null ? orgMembersLookup[organization.Id]?.FirstOrDefault(x => x.UserId == userId) : null; if (organization == null || (organization.Deleted != null && !user.IsOrganizationModerator(organizationMember))) { throw HttpError.NotFound("Organization does not exist"); } }
public void RemoveFromSmallGroup(CMSDataContext Db, OrganizationMember om) { om.RemoveFromGroup(Db, SmallGroup); }
public ActionResult RsvpLinkSg(string id, string message, bool?confirm, FormCollection formCollection, bool regrets = false) { var li = new LinkInfo(rsvplinkSTR, landingSTR, id, false); if (li.error.HasValue()) { return(Message(li.error)); } try { if (!li.pid.HasValue) { throw new Exception("missing peopleid"); } var meetingid = li.a[0].ToInt(); var emailid = li.a[2].ToInt(); var smallgroup = li.a[3]; if (meetingid == 0 && li.a[0].EndsWith(".next")) { var orgid = li.a[0].Split('.')[0].ToInt(); var nextmeet = (from mm in DbUtil.Db.Meetings where mm.OrganizationId == orgid where mm.MeetingDate > DateTime.Now orderby mm.MeetingDate select mm).FirstOrDefault(); if (nextmeet == null) { return(Message("no meeting")); } meetingid = nextmeet.MeetingId; } var q = (from pp in DbUtil.Db.People where pp.PeopleId == li.pid let meeting = DbUtil.Db.Meetings.SingleOrDefault(mm => mm.MeetingId == meetingid) let org = meeting.Organization select new { p = pp, org, meeting }).Single(); if (q.org.RegistrationClosed == true || q.org.OrganizationStatusId == OrgStatusCode.Inactive) { throw new Exception("sorry, registration has been closed"); } if (q.org.RegistrationTypeId == RegistrationTypeCode.None) { throw new Exception("rsvp is no longer available"); } if (q.org.Limit <= q.meeting.Attends.Count(aa => aa.Commitment == 1)) { throw new Exception("sorry, maximum limit has been reached"); } var omb = OrganizationMember.Load(DbUtil.Db, li.pid.Value, q.meeting.OrganizationId) ?? OrganizationMember.InsertOrgMembers(DbUtil.Db, q.meeting.OrganizationId, li.pid.Value, MemberTypeCode.Member, DateTime.Now, null, false); if (smallgroup.HasValue()) { omb.AddToGroup(DbUtil.Db, smallgroup); } li.ot.Used = true; DbUtil.Db.SubmitChanges(); Attend.MarkRegistered(DbUtil.Db, li.pid.Value, meetingid, regrets ? AttendCommitmentCode.Regrets : AttendCommitmentCode.Attending); DbUtil.LogActivity($"{rsvplinkSTR}{confirmSTR}: {regrets}", q.org.OrganizationId, li.pid); var setting = DbUtil.Db.CreateRegistrationSettings(q.meeting.OrganizationId); if (confirm == true) { var subject = Util.PickFirst(setting.Subject, "no subject"); var msg = Util.PickFirst(setting.Body, "no message"); msg = APIOrganization.MessageReplacements(DbUtil.Db, q.p, q.org.DivisionName, q.org.OrganizationId, q.org.OrganizationName, q.org.Location, msg); msg = msg.Replace("{details}", q.meeting.MeetingDate.ToString2("f")); var NotifyIds = DbUtil.Db.StaffPeopleForOrg(q.org.OrganizationId); DbUtil.Db.Email(NotifyIds[0].FromEmail, q.p, subject, msg); // send confirmation DbUtil.Db.Email(q.p.FromEmail, NotifyIds, q.org.OrganizationName, $"{q.p.Name} has registered for {q.org.OrganizationName}<br>{q.meeting.MeetingDate.ToString2("f")}"); } } catch (Exception ex) { DbUtil.LogActivity($"{rsvplinkSTR}{confirmSTR}Error: {regrets}", peopleid: li.pid); return(Message(ex.Message)); } return(Message(message)); }
private void BuildDynamicData(PythonModel pe, OrganizationMember om) { pe.DictionaryAdd("PeopleId", PeopleId ?? 0); pe.DictionaryAdd("OrganizationId", om.OrganizationId); var notifyIds = DbUtil.Db.StaffPeopleForOrg(om.OrganizationId); pe.DictionaryAdd("OnlineNotifyId", notifyIds[0].PeopleId); pe.DictionaryAdd("OnlineNotifyEmail", notifyIds[0].EmailAddress); pe.DictionaryAdd("OnlineNotifyName", notifyIds[0].Name); var props = typeof(OnlineRegPersonModel).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var pi in props.Where(vv => vv.CanRead && vv.CanWrite)) { switch (pi.Name) { case "ExtraQuestion": AddQuestions(pe); break; case "Text": AddText(pe); break; case "YesNoQuestion": AddYesNo(pe); break; case "option": AddDropDownOptions(pe); break; case "Checkbox": AddCheckboxes(pe); break; case "MenuItem": AddMenuItems(pe); break; case "ScriptResults": if (ScriptResults.HasValue()) { pe.DictionaryAdd(pi.Name, ScriptResults); } break; case "memberus": if (memberus) { pe.DictionaryAdd("MemberUs", memberus); } break; case "otherchurch": if (otherchurch) { pe.DictionaryAdd("OtherChurch", otherchurch); } break; case "LoggedIn": pe.DictionaryAdd(pi.Name, LoggedIn); break; case "FirstName": pe.DictionaryAdd(pi.Name, FirstName); break; case "LastName": pe.DictionaryAdd(pi.Name, LastName); break; } } }
private ReturnResult AddOrgMembers(int id, int origin, int membertypeid = MemberTypeCode.Member, bool pending = false) { string message = null; if (id > 0) { var org = DbUtil.Db.LoadOrganizationById(id); if (pending == false && PendingList.Count == 1 && org.AllowAttendOverlap != true) { var om = DbUtil.Db.OrganizationMembers.FirstOrDefault(mm => mm.OrganizationId != id && mm.MemberTypeId != 230 && // inactive mm.MemberTypeId != 500 && // inservice mm.Organization.AllowAttendOverlap != true && mm.PeopleId == PendingList[0].PeopleId && mm.Organization.OrgSchedules.Any(ss => DbUtil.Db.OrgSchedules.Any(os => os.OrganizationId == id && os.ScheduleId == ss.ScheduleId))); if (om != null) { message = ViewExtensions2.Markdown($@" **Already a member of {om.OrganizationId} (orgid) with same schedule** You can do one of these things: * Drop the person from the other org first * Use the 'move' feature to transfer them to the new org * Use Allow Attendance Overlap, if appropriate * See <a href=""http://docs.touchpointsoftware.com/Organizations/AlreadyAMember.html"" title=""Already a Member"" target=""_blank"">this help article</a> ").ToString(); message = $@"<div style=""text-align: left"">{message}</div>"; return(new ReturnResult { close = true, how = "CloseAddDialog", error = message, from = AddContext }); } } foreach (var p in PendingList) { AddPerson(p, PendingList, origin, EntryPointId); var om = OrganizationMember.InsertOrgMembers(DbUtil.Db, id, p.PeopleId.Value, membertypeid, Util.Now, null, pending); if (membertypeid == MemberTypeCode.InActive && org.IsMissionTrip == true) { om.AddToGroup(DbUtil.Db, "Sender"); } if (om.CreatedDate.HasValue) { if ((DateTime.Now - om.CreatedDate.Value).TotalSeconds < 5) { var type = pending ? "Pending" : membertypeid == MemberTypeCode.InActive ? "Inactive" : membertypeid == MemberTypeCode.Prospect ? "Prospect" : "Member"; DbUtil.LogActivity($"Org{type} Add", om.OrganizationId, om.PeopleId); } } } DbUtil.Db.SubmitChanges(); DbUtil.Db.UpdateMainFellowship(id); } return(new ReturnResult { close = true, how = "rebindgrids", error = message, from = AddContext }); }
public OrganizationMember Enroll(Transaction ti, string paylink, bool?testing, string others) { var membertype = MemberTypeCode.Member; if (setting.AddAsProspect) { membertype = MemberTypeCode.Prospect; } var om = OrganizationMember.InsertOrgMembers(DbUtil.Db, org.OrganizationId, person.PeopleId, membertype, DateTime.Now, null, false); var reg = person.RecRegs.SingleOrDefault(); if (reg == null) { reg = new RecReg(); person.RecRegs.Add(reg); } if (Parent.SupportMissionTrip) { if (!om.IsInGroup("Goer")) { om.MemberTypeId = MemberTypeCode.InActive; } om.AddToGroup(DbUtil.Db, "Sender"); return(om); } if (RecordFamilyAttendance()) { RecordAllFamilyAttends(om); return(om); } om.Amount = TotalAmount(); //om.AmountPaid = ti.Amt; // if (ti.Id != ti.OriginalId) // { // var ti0 = DbUtil.Db.Transactions.Single(tt => tt.Id == ti.OriginalId); // om.AmountPaid += ti0.Amt; // } foreach (var ask in setting.AskItems) { switch (ask.Type) { case "AskSize": om.ShirtSize = shirtsize; reg.ShirtSize = shirtsize; break; case "AskChurch": reg.ActiveInAnotherChurch = otherchurch; reg.Member = memberus; break; case "AskAllergies": reg.MedAllergy = medical.HasValue(); reg.MedicalDescription = medical; break; case "AskParents": reg.Mname = mname; reg.Fname = fname; break; case "AskEmContact": reg.Emcontact = emcontact; reg.Emphone = emphone; break; case "AskTylenolEtc": reg.Tylenol = tylenol; reg.Advil = advil; reg.Robitussin = robitussin; reg.Maalox = maalox; break; case "AskDoctor": reg.Docphone = docphone; reg.Doctor = doctor; break; case "AskCoaching": reg.Coaching = coaching; break; case "AskSMS": if (sms.HasValue && LoggedIn == true) { person.UpdateValue("ReceiveSMS", sms.Value); } break; case "AskInsurance": reg.Insurance = insurance; reg.Policy = policy; break; case "AskTickets": om.Tickets = ntickets; break; case "AskYesNoQuestions": if (setting.TargetExtraValues == false) { foreach (var yn in ((AskYesNoQuestions)ask).list) { om.RemoveFromGroup(DbUtil.Db, "Yes:" + yn.SmallGroup); om.RemoveFromGroup(DbUtil.Db, "No:" + yn.SmallGroup); } foreach (var g in YesNoQuestion) { om.AddToGroup(DbUtil.Db, (g.Value == true ? "Yes:" : "No:") + g.Key); } } else { foreach (var g in YesNoQuestion) { person.AddEditExtraValue(g.Key, g.Value == true ? "Yes" : "No"); } } break; case "AskCheckboxes": if (setting.TargetExtraValues) { foreach (var ck in ((AskCheckboxes)ask).list) { person.RemoveExtraValue(DbUtil.Db, ck.SmallGroup); } foreach (var g in ((AskCheckboxes)ask).CheckboxItemsChosen(Checkbox)) { person.AddEditExtraBool(g.SmallGroup, true); } } else { foreach (var ck in ((AskCheckboxes)ask).list) { ck.RemoveFromSmallGroup(DbUtil.Db, om); } foreach (var i in ((AskCheckboxes)ask).CheckboxItemsChosen(Checkbox)) { i.AddToSmallGroup(DbUtil.Db, om, PythonEvents); } } break; case "AskExtraQuestions": foreach (var g in ExtraQuestion[ask.UniqueId]) { if (g.Value.HasValue()) { if (setting.TargetExtraValues) { person.AddEditExtraData(g.Key, g.Value); } else { om.AddToMemberData("{0}: {1}".Fmt(g.Key, g.Value)); } } } break; case "AskText": foreach (var g in Text[ask.UniqueId]) { if (g.Value.HasValue()) { if (setting.TargetExtraValues) { person.AddEditExtraData(g.Key, g.Value); } else { om.AddToMemberData("{0}:".Fmt(g.Key)); var lines = g.Value.SplitLines(); foreach (var line in lines) { om.AddToMemberData("\t{0}".Fmt(line)); } } } } break; case "AskMenu": foreach (var i in MenuItem[ask.UniqueId]) { om.AddToGroup(DbUtil.Db, i.Key, i.Value); } { var menulabel = ((AskMenu)ask).Label; foreach (var i in ((AskMenu)ask).MenuItemsChosen(MenuItem[ask.UniqueId])) { om.AddToMemberData(menulabel); string desc; if (i.amt > 0) { desc = "{0} {1} (at {2:N2})".Fmt(i.number, i.desc, i.amt); } else { desc = "{0} {1}".Fmt(i.number, i.desc); } om.AddToMemberData(desc); menulabel = string.Empty; } } break; case "AskDropdown": if (setting.TargetExtraValues) { foreach (var op in ((AskDropdown)ask).list) { person.RemoveExtraValue(DbUtil.Db, op.SmallGroup); } person.AddEditExtraValue(((AskDropdown)ask).SmallGroupChoice(option).SmallGroup, "true"); } else { foreach (var op in ((AskDropdown)ask).list) { op.RemoveFromSmallGroup(DbUtil.Db, om); } ((AskDropdown)ask).SmallGroupChoice(option).AddToSmallGroup(DbUtil.Db, om, PythonEvents); } break; case "AskGradeOptions": if (setting.TargetExtraValues) { person.Grade = gradeoption.ToInt(); } else { om.Grade = gradeoption.ToInt(); person.Grade = gradeoption.ToInt(); } break; } } if (setting.TargetExtraValues) { foreach (var ag in setting.AgeGroups) { person.RemoveExtraValue(DbUtil.Db, ag.SmallGroup); } if (setting.AgeGroups.Count > 0) { person.AddEditExtraValue(AgeGroup(), "true"); } } else { foreach (var ag in setting.AgeGroups) { om.RemoveFromGroup(DbUtil.Db, ag.SmallGroup); } if (setting.AgeGroups.Count > 0) { om.AddToGroup(DbUtil.Db, AgeGroup()); } } if (setting.LinkGroupsFromOrgs.Count > 0) { var q = from omt in DbUtil.Db.OrgMemMemTags where setting.LinkGroupsFromOrgs.Contains(omt.OrgId) where omt.PeopleId == om.PeopleId select omt.MemberTag.Name; foreach (var name in q) { om.AddToGroup(DbUtil.Db, name); } } if (om.Organization.IsMissionTrip == true) { om.AddToGroup(DbUtil.Db, "Goer"); } var sb = new StringBuilder(); sb.AppendFormat("{0:g} ----------------\n", DateTime.Now); if (om.AmountPaid > 0) { sb.AppendFormat("{0:c} ({1} id) transaction amount\n", ti.Amt, ti.Id); sb.AppendFormat("{0:c} applied to this registrant\n", AmountToPay()); sb.AppendFormat("{0:c} total due all registrants\n", ti.Amtdue); if (others.HasValue()) { sb.AppendFormat("Others: {0}\n", others); } } om.AddToMemberData(sb.ToString()); var sbreg = new StringBuilder(); sbreg.AppendFormat("{0}\n".Fmt(org.OrganizationName)); sbreg.AppendFormat("{0:g} ----------------\n", DateTime.Now); if (om.AmountPaid > 0) { sbreg.AppendFormat("{0:c} ({1} id) transaction amount\n", ti.Amt, ti.Id); sbreg.AppendFormat("{0:c} applied to this registrant\n", AmountToPay()); sbreg.AppendFormat("{0:c} total due all registrants\n", ti.Amtdue); } if (paylink.HasValue()) { sbreg.AppendLine(paylink); om.PayLink = paylink; } if (request.HasValue()) { sbreg.AppendFormat("Request: {0}\n", request); om.Request = request; } sbreg.AppendFormat("{0}\n", EmailAddress); reg.AddToComments(sbreg.ToString()); DbUtil.Db.SubmitChanges(); return(om); }
internal void ProcessExtraValues(CMSDataContext db, Person p, dynamic a) { if (!Extravaluenames.Any()) { return; } foreach (var name in Extravaluenames) { object o = a.GetValue(name); var vs = o as string; string type = null; if (!Evtypes.TryGetValue(name, out type)) { p.AddEditExtraCode(name, ((string)a[name])?.Trim()); continue; } switch (type) { case "fam": p.Family.AddEditExtraCode(name, ((string)a[name])?.Trim()); break; case "txt": p.AddEditExtraText(name, $"{a[name]}".Trim()); break; case "org": if (Testing) { continue; } var d = ((string)a[name])?.Trim(); if (!d.HasValue()) { continue; } if (d.Equal("true")) { d = "Member"; } var oid = 0; if (Orgs.ContainsKey(name)) { oid = Orgs[name]; } else { var prog = Organization.FetchOrCreateProgram(db, "InsertPeople"); var div = Organization.FetchOrCreateDivision(db, prog, "InsertPeople"); var org = Organization.FetchOrCreateOrganization(db, div, name.SplitUpperCaseToString()); oid = org.OrganizationId; Orgs.Add(name, oid); } var mtid = 0; if (Membertypes.ContainsKey(d)) { mtid = Membertypes[d]; } else { var mt = Organization.FetchOrCreateMemberType(db, d); mtid = mt.Id; Membertypes.Add(d, mtid); } OrganizationMember.InsertOrgMembers(db, oid, p.PeopleId, mtid, DateTime.Today, null, false); break; case "dt": if (o is DateTime) { p.AddEditExtraDate(name, (DateTime)o); } var dt = o.ToDate(); if (dt == null) { continue; } p.AddEditExtraDate(name, dt); break; case "int": var i = GetInt(o); if (i.HasValue) { p.AddEditExtraInt(name, i.Value); } break; case "bit": p.AddEditExtraBool(name, IsTrue(o)); break; } } }
public void PopulateRegistrationFromDb(OrganizationMember om) { var reg = person.RecRegs.SingleOrDefault(); if (reg == null) { reg = new RecReg(); person.RecRegs.Add(reg); } foreach (var ask in setting.AskItems) { switch (ask.Type) { case "AskSize": shirtsize = om.ShirtSize; break; case "AskChurch": otherchurch = reg.ActiveInAnotherChurch ?? false; memberus = reg.Member ?? false; break; case "AskAllergies": medical = reg.MedicalDescription; break; case "AskParents": mname = reg.Mname; fname = reg.Fname; break; case "AskEmContact": emcontact = reg.Emcontact; emphone = reg.Emphone; break; case "AskTylenolEtc": tylenol = reg.Tylenol; advil = reg.Advil; robitussin = reg.Robitussin; maalox = reg.Maalox; break; case "AskDoctor": docphone = reg.Docphone; doctor = reg.Doctor; break; case "AskCoaching": coaching = reg.Coaching; break; // case "AskSMS": // sms = person.ReceiveSMS; // break; case "AskInsurance": insurance = reg.Insurance; policy = reg.Policy; break; case "AskTickets": ntickets = om.Tickets; break; case "AskYesNoQuestions": if (setting.TargetExtraValues == false) { foreach (var yn in ((AskYesNoQuestions)ask).list) { { if (om.IsInGroup("Yes:" + yn.SmallGroup)) { YesNoQuestion[yn.SmallGroup] = true; } if (om.IsInGroup("No:" + yn.SmallGroup)) { YesNoQuestion[yn.SmallGroup] = false; } } } } else { foreach (var yn in ((AskYesNoQuestions)ask).list) { if (person.GetExtra(yn.SmallGroup) == "Yes") { YesNoQuestion[yn.SmallGroup] = true; } if (person.GetExtra(yn.SmallGroup) == "No") { YesNoQuestion[yn.SmallGroup] = false; } } } break; case "AskCheckboxes": if (setting.TargetExtraValues) { foreach (var ck in ((AskCheckboxes)ask).list) { if (person.GetExtra(ck.SmallGroup).ToBool()) { Checkbox.Add(ck.SmallGroup); } } } else { foreach (var ck in ((AskCheckboxes)ask).list) { if (om.IsInGroup(ck.SmallGroup)) { Checkbox.Add(ck.SmallGroup); } } } break; case "AskExtraQuestions": if (ExtraQuestion == null) { ExtraQuestion = new List <Dictionary <string, string> >(); } var eq = new Dictionary <string, string>(); ExtraQuestion.Add(eq); var lines = (om.UserData ?? "").Split('\n'); foreach (var q in ((AskExtraQuestions)ask).list) { if (setting.TargetExtraValues) { var v = person.GetExtra(q.Question); if (v.HasValue()) { eq[q.Question] = v; } } else { var v = (from li in lines where li.StartsWith(q.Question + ": ") select li.Substring(q.Question.Length + 2)).FirstOrDefault(); if (v.HasValue()) { eq[q.Question] = v; } } } break; case "AskText": if (Text == null) { Text = new List <Dictionary <string, string> >(); } var tx = new Dictionary <string, string>(); Text.Add(tx); lines = (om.UserData ?? "").Split('\n'); foreach (var q in ((AskText)ask).list) { if (setting.TargetExtraValues) { var v = person.GetExtra(q.Question); if (v.HasValue()) { tx[q.Question] = v; } } else { var sb = new StringBuilder(); var i = 0; for (; i < lines.Length; i++) { if (lines[i] == q.Question + ":") { break; } } for (i++; i < lines.Length; i++) { if (lines[i].Length == 0 || lines[i][0] != '\t') { break; } sb.AppendLine(lines[i].Substring(1)); } if (sb.Length > 0) { tx[q.Question] = sb.ToString(); } } } break; case "AskMenu": // foreach (var i in MenuItem) // om.AddToGroup(DbUtil.Db, i.Key, i.Value); // { // var menulabel = "Menu Items"; // foreach (var i in ((AskMenu)ask).MenuItemsChosen(MenuItem)) // { // om.AddToMemberData(menulabel); // string desc; // if (i.amt > 0) // desc = "{0} {1} (at {2:N2})".Fmt(i.number, i.desc, i.amt); // else // desc = "{0} {1}".Fmt(i.number, i.desc); // om.AddToMemberData(desc); // menulabel = string.Empty; // } // } break; case "AskDropdown": if (option == null) { option = new List <string>(); } if (setting.TargetExtraValues) { foreach (var dd in ((AskDropdown)ask).list) { if (person.GetExtra(dd.SmallGroup) == "true") { option.Add(dd.SmallGroup); } } } else { foreach (var dd in ((AskDropdown)ask).list) { if (om.IsInGroup(dd.SmallGroup)) { option.Add(dd.SmallGroup); } } } break; case "AskGradeOptions": gradeoption = person.Grade.ToString(); if (!setting.TargetExtraValues) { gradeoption = om.Grade.ToString(); } break; } } // if (setting.TargetExtraValues) // { // foreach (var ag in setting.AgeGroups) // person.RemoveExtraValue(DbUtil.Db, ag.SmallGroup); // if (setting.AgeGroups.Count > 0) // person.AddEditExtraValue(AgeGroup(), "true"); // } // else // { // foreach (var ag in setting.AgeGroups) // om.RemoveFromGroup(DbUtil.Db, ag.SmallGroup); // if (setting.AgeGroups.Count > 0) // om.AddToGroup(DbUtil.Db, AgeGroup()); // } }
public void EnrollAndConfirm() { if (masterorgid.HasValue) { EnrollAndConfirm2(); return; } var Db = DbUtil.Db; var ti = Transaction; // make a list of email addresses var elist = new List <MailAddress>(); if (UserPeopleId.HasValue) { if (user.SendEmailAddress1 ?? true) { Util.AddGoodAddress(elist, user.FromEmail); } if (user.SendEmailAddress2 ?? false) { Util.AddGoodAddress(elist, user.FromEmail2); } } if (registertag.HasValue()) { var guid = registertag.ToGuid(); var ot = DbUtil.Db.OneTimeLinks.SingleOrDefault(oo => oo.Id == guid.Value); ot.Used = true; } var participants = new StringBuilder(); for (var i = 0; i < List.Count; i++) { var p = List[i]; if (p.IsNew) { Person uperson = null; switch (p.whatfamily) { case 1: uperson = Db.LoadPersonById(UserPeopleId.Value); break; case 2: if (i > 0) { uperson = List[i - 1].person; } break; } p.AddPerson(uperson, p.org.EntryPointId ?? 0); } Util.AddGoodAddress(elist, p.fromemail); participants.Append(p.ToString()); } var p0 = List[0].person; if (this.user != null) { p0 = user; } //var emails = string.Join(",", elist.ToArray()); string paylink = string.Empty; var amtpaid = ti.Amt ?? 0; var amtdue = ti.Amtdue; var pids2 = new List <TransactionPerson>(); foreach (var p in List) { if (p.PeopleId == null) { return; } if (pids2.Any(pp => pp.PeopleId == p.PeopleId)) { continue; } pids2.Add(new TransactionPerson { PeopleId = p.PeopleId.Value, Amt = p.TotalAmount(), OrgId = Orgid, }); } ti.Emails = Util.EmailAddressListToString(elist); ti.Participants = participants.ToString(); ti.TransactionDate = DateTime.Now; ti.OriginalTransaction.TransactionPeople.AddRange(pids2); if (org.IsMissionTrip == true) { paylink = Util.ResolveServerUrl("/OnlineReg/{0}?goerid={1}".Fmt(Orgid, p0.PeopleId)); } else { var estr = HttpUtility.UrlEncode(Util.Encrypt(ti.OriginalId.ToString())); paylink = Util.ResolveServerUrl("/OnlineReg/PayAmtDue?q=" + estr); } var pids = pids2.Select(pp => pp.PeopleId); var details = new StringBuilder("<table>"); for (var i = 0; i < List.Count; i++) { var p = List[i]; var q = from pp in Db.People where pids.Contains(pp.PeopleId) where pp.PeopleId != p.PeopleId select pp.Name; var others = string.Join(",", q.ToArray()); var om = p.Enroll(ti, paylink, testing, others); details.AppendFormat(@" <tr><td colspan='2'><hr/></td></tr> <tr><th valign='top'>{0}</th><td> {1} </td></tr>", i + 1, p.PrepareSummaryText(ti)); om.RegisterEmail = p.EmailAddress; om.TranId = ti.OriginalId; int grouptojoin = p.setting.GroupToJoin.ToInt(); if (grouptojoin > 0) { OrganizationMember.InsertOrgMembers(Db, grouptojoin, p.PeopleId.Value, MemberTypeCode.Member, DateTime.Now, null, false); DbUtil.Db.UpdateMainFellowship(grouptojoin); } OnlineRegPersonModel.CheckNotifyDiffEmails(p.person, Db.StaffEmailForOrg(p.org.OrganizationId), p.fromemail, p.org.OrganizationName, p.org.PhoneNumber); if (p.IsCreateAccount()) { p.CreateAccount(); } } details.Append("\n</table>\n"); Db.SubmitChanges(); var DivisionName = org.DivisionName; var os = settings[Orgid.Value]; var EmailSubject = Util.PickFirst(os.Subject, "no subject"); var EmailMessage = Util.PickFirst(os.Body, "no body"); bool usedAdmins; var NotifyIds = Db.StaffPeopleForOrg(org.OrganizationId, out usedAdmins); var Location = org.Location; var subject = Util.PickFirst(EmailSubject, "no subject"); var message = Util.PickFirst(EmailMessage, "no message"); message = CmsData.API.APIOrganization.MessageReplacements(DbUtil.Db, p0, DivisionName, org.OrganizationName, Location, message); subject = subject.Replace("{org}", org.OrganizationName); message = message.Replace("{phone}", org.PhoneNumber.FmtFone7()); message = message.Replace("{tickets}", List[0].ntickets.ToString()); message = message.Replace("{details}", details.ToString()); message = message.Replace("{paid}", amtpaid.ToString("c")); message = message.Replace("{sessiontotal}", amtpaid.ToString("c")); message = message.Replace("{participants}", details.ToString()); if (amtdue > 0) { message = message.Replace("{paylink}", "<a href='{0}'>Click this link to make a payment on your balance of {1:C}</a>.".Fmt(paylink, amtdue)); } else { message = message.Replace("{paylink}", "You have a zero balance."); } var re = new Regex(@"\{donation(?<text>.*)donation\}", RegexOptions.Singleline | RegexOptions.Multiline); if (SupportMissionTrip && TotalAmount() > 0) { var p = List[0]; ti.Fund = p.setting.DonationFund(); var goerid = p.Parent.GoerId ?? p.MissionTripGoerId; if (goerid > 0 && p.MissionTripSupportGoer > 0) { DbUtil.Db.GoerSenderAmounts.InsertOnSubmit( new GoerSenderAmount { Amount = p.MissionTripSupportGoer.Value, GoerId = goerid, Created = DateTime.Now, OrgId = p.orgid.Value, SupporterId = p.PeopleId.Value, NoNoticeToGoer = p.MissionTripNoNoticeToGoer, }); if (p.Parent.GoerSupporterId.HasValue) { var gs = DbUtil.Db.GoerSupporters.Single(gg => gg.Id == p.Parent.GoerSupporterId); if (!gs.SupporterId.HasValue) { gs.SupporterId = p.PeopleId; } } if (!ti.TransactionId.StartsWith("Coupon")) { p.person.PostUnattendedContribution(DbUtil.Db, p.MissionTripSupportGoer.Value, p.setting.DonationFundId, "SupportMissionTrip: org={0}; goer={1}".Fmt(p.orgid, goerid), tranid: ti.Id); // send notices if (!p.MissionTripNoNoticeToGoer) { var goer = DbUtil.Db.LoadPersonById(goerid.Value); Db.Email(NotifyIds[0].FromEmail, goer, org.OrganizationName + "-donation", "{0:C} donation received from {1}".Fmt(p.MissionTripSupportGoer.Value, Transaction.FullName(ti))); } } } if (p.MissionTripSupportGeneral > 0) { DbUtil.Db.GoerSenderAmounts.InsertOnSubmit( new GoerSenderAmount { Amount = p.MissionTripSupportGeneral.Value, Created = DateTime.Now, OrgId = p.orgid.Value, SupporterId = p.PeopleId.Value }); if (!ti.TransactionId.StartsWith("Coupon")) { p.person.PostUnattendedContribution(DbUtil.Db, p.MissionTripSupportGeneral.Value, p.setting.DonationFundId, "SupportMissionTrip: org={0}".Fmt(p.orgid), tranid: ti.Id); } } var notifyids = Db.NotifyIds(org.OrganizationId, org.GiftNotifyIds); Db.Email(NotifyIds[0].FromEmail, notifyids, org.OrganizationName + "-donation", "${0:N2} donation received from {1}".Fmt(ti.Amt, Transaction.FullName(ti))); var senderSubject = os.SenderSubject ?? "NO SUBJECT SET"; var senderBody = os.SenderBody ?? "NO SENDEREMAIL MESSAGE HAS BEEN SET"; senderBody = CmsData.API.APIOrganization.MessageReplacements(DbUtil.Db, p.person, DivisionName, org.OrganizationName, Location, senderBody); senderBody = senderBody.Replace("{phone}", org.PhoneNumber.FmtFone7()); senderBody = senderBody.Replace("{paid}", ti.Amt.ToString2("c")); ti.Description = "Mission Trip Giving"; Db.Email(notifyids[0].FromEmail, p.person, elist, senderSubject, senderBody, false); Db.SubmitChanges(); return; } if (!SupportMissionTrip && org != null && org.IsMissionTrip == true && ti.Amt > 0) { var p = List[0]; ti.Fund = p.setting.DonationFund(); DbUtil.Db.GoerSenderAmounts.InsertOnSubmit( new GoerSenderAmount { Amount = ti.Amt, GoerId = p.PeopleId, Created = DateTime.Now, OrgId = p.orgid.Value, SupporterId = p.PeopleId.Value }); if (!ti.TransactionId.StartsWith("Coupon")) { p.person.PostUnattendedContribution(DbUtil.Db, ti.Amt.Value, p.setting.DonationFundId, "MissionTrip: org={0}; goer={1}".Fmt(p.orgid, p.PeopleId), tranid: ti.Id); ti.Description = "Mission Trip Giving"; } } else if (ti.Donate > 0) { var p = List[donor.Value]; ti.Fund = p.setting.DonationFund(); var desc = "{0}; {1}; {2}, {3} {4}".Fmt( p.person.Name, p.person.PrimaryAddress, p.person.PrimaryCity, p.person.PrimaryState, p.person.PrimaryZip); if (!ti.TransactionId.StartsWith("Coupon")) { p.person.PostUnattendedContribution(DbUtil.Db, ti.Donate.Value, p.setting.DonationFundId, desc, tranid: ti.Id); } var ma = re.Match(message); if (ma.Success) { var v = ma.Groups["text"].Value; message = re.Replace(message, v); } message = message.Replace("{donation}", ti.Donate.ToString2("N2")); // send donation confirmations Db.Email(NotifyIds[0].FromEmail, NotifyIds, subject + "-donation", "${0:N2} donation received from {1}".Fmt(ti.Donate, Transaction.FullName(ti))); } else { message = re.Replace(message, ""); } Db.CurrentOrgId = Orgid; // send confirmations if (subject != "DO NOT SEND") { Db.Email(NotifyIds[0].FromEmail, p0, elist, subject, message, false); } Db.SubmitChanges(); // notify the staff foreach (var p in List) { Db.Email(Util.PickFirst(p.person.FromEmail, NotifyIds[0].FromEmail), NotifyIds, Header, @"{6}{0} has registered for {1}<br/> Feepaid for this registrant: {2:C}<br/> Total Fee for this registration: {3:C}<br/> AmountDue: {4:C}<br/> <pre>{5}</pre>".Fmt(p.person.Name, Header, amtpaid, TotalAmount(), amtdue, // Amount Due p.PrepareSummaryText(ti), usedAdmins ? @"<span style='color:red'>THERE ARE NO NOTIFY IDS ON THIS REGISTRATION!!</span><br/> <a href='http://docs.bvcms.com/OnlineRegistration/MessagesSettings.html'>see documentation</a><br/><br/>" : "")); } }
public async Task <IActionResult> UpdateOrganizationMember(UpdateTeamMemberViewModel request, string personId, string organizationId) { var currentUser = await _userManager.FindByEmailAsync(_accessor.HttpContext.User.Identity.Name); OrganizationMember currentOrgMember = _organzationMemberRepo.Find(null, o => o.PersonId == Guid.Parse(personId)).Items?.FirstOrDefault(); if (!currentOrgMember.IsAdministrator ?? false || currentOrgMember.OrganizationId != Guid.Parse(organizationId)) { throw new UnauthorizedOperationException("Only admins of this organization can update existing users", EntityOperationType.Update); } var userToUpdate = _aspNetUsersRepository.Find(null, u => u.PersonId == Guid.Parse(personId)).Items?.FirstOrDefault(); var personToUpdate = _personRepo.Find(null, p => p.Id == Guid.Parse(personId)).Items?.FirstOrDefault(); ApplicationUser appUser = await _userManager.FindByIdAsync(userToUpdate.Id).ConfigureAwait(false); //check password's validity if one was provided if (!string.IsNullOrEmpty(request.Password)) { if (!IsPasswordValid(request.Password)) { throw new Exception(PasswordRequirementMessage(request.Password)); } } //if email was provided check its availability if (!string.IsNullOrEmpty(request.Email)) { //if email is not the same as user's current email if (!appUser.NormalizedEmail.Equals(request.Email.ToUpper())) { var existingEmailUser = _aspNetUsersRepository.Find(null, u => u.Email == request.Email).Items?.FirstOrDefault(); if (existingEmailUser != null) { throw new Exception("A user already exists for the provided email address"); } var personEmailToUpdate = _personEmailRepository.Find(null, p => p.PersonId == Guid.Parse(personId)).Items?.FirstOrDefault(); var emailVerificationToUpdate = _emailVerificationRepository.Find(null, p => p.PersonId == Guid.Parse(personId)).Items?.FirstOrDefault(); //update application user's email appUser.Email = request.Email; appUser.NormalizedEmail = request.Email.ToUpper(); appUser.UserName = request.Email; appUser.NormalizedUserName = request.Email.ToUpper(); //update additional email tables personEmailToUpdate.Address = request.Email; emailVerificationToUpdate.Address = request.Email; _personEmailRepository.Update(personEmailToUpdate); _emailVerificationRepository.Update(emailVerificationToUpdate); } } //update name if one was provided if (!string.IsNullOrEmpty(request.Name)) { appUser.Name = request.Name; personToUpdate.Name = request.Name; _personRepo.Update(personToUpdate); } //update password if (!string.IsNullOrEmpty(request.Password)) { appUser.ForcedPasswordChange = false; var token = await _userManager.GeneratePasswordResetTokenAsync(appUser); IdentityResult result = await _userManager.ResetPasswordAsync(appUser, token, request.Password); if (!result.Succeeded) { throw new Exception("Failed to set new password"); } } //update application user if (!string.IsNullOrEmpty(request.Password) || !string.IsNullOrEmpty(request.Email)) { _userManager.UpdateAsync(appUser); } return(new OkObjectResult(appUser)); }
public void RemoveFromSmallGroup(CMSDataContext Db, OrganizationMember om) { om.RemoveFromGroup(Db, SmallGroup.trim()); }
public bool DoUpload(string text, bool testing = false) { var rt = Db2.UploadPeopleRuns.OrderByDescending(mm => mm.Id).First(); var csv = new CsvReader(new StringReader(text), false, '\t'); var list = csv.ToList(); var list0 = list.First().Select(kk => kk).ToList(); names = list0.ToDictionary(i => i.TrimEnd(), i => list0.FindIndex(s => s == i), StringComparer.OrdinalIgnoreCase); if (names.ContainsKey("campus")) { var campuslist = (from li in list.Skip(1) where li.Length == names.Count group li by li[names["campus"]] into campus where campus.Key.HasValue() select campus.Key).ToList(); var dbc = from c in campuslist join cp in Db.Campus on c equals cp.Description into j from cp in j.DefaultIfEmpty() select new { cp, c }; var clist = dbc.ToList(); if (clist.Count > 0) { var maxcampusid = 0; if (Db.Campus.Any()) { maxcampusid = Db.Campus.Max(c => c.Id); } foreach (var i in clist) { if (i.cp == null) { var cp = new Campu { Description = i.c, Id = ++maxcampusid }; if (!testing) { Db.Campus.InsertOnSubmit(cp); } } } } } var now = DateTime.Now; if (!testing) { Db.SubmitChanges(); } Campuses = Db.Campus.ToDictionary(cp => cp.Description, cp => cp.Id); var q = (from li in list.Skip(1) where li.Length == names.Count group li by li[names["familyid"]] into fam select fam).ToList(); rt.Count = q.Sum(ff => ff.Count()); Db2.SubmitChanges(); var standardnames = new List <string> { "familyid", "title", "first", "last", "goesby", "altname", "gender", "marital", "maidenName", "address", "address2", "city", "state", "zip", "position", "birthday", "cellphone", "homephone", "workphone", "email", "email2", "suffix", "middle", "joindate", "dropdate", "baptismdate", "weddingdate", "memberstatus", "employer", "occupation" }; var orgs = new Dictionary <string, int>(); var membertypes = new Dictionary <string, int>(); foreach (var fam in q) { Family f = null; FindPerson3 pid; Person p = null; foreach (var a in fam) { var potentialdup = false; var first = a[names["first"]]; var last = a[names["last"]]; DateTime dt; DateTime?dob = null; if (names.ContainsKey("birthday")) { if (DateTime.TryParse(a[names["birthday"]], out dt)) { dob = dt; if (dob.Value < SqlDateTime.MinValue) { dob = null; } } } string email = null; string cell = null; string homephone = null; if (names.ContainsKey("email")) { email = a[names["email"]].Trim(); } if (names.ContainsKey("cellphone")) { cell = a[names["cellphone"]].GetDigits(); } if (names.ContainsKey("homephone")) { homephone = a[names["homephone"]].GetDigits(); } pid = Db.FindPerson3(first, last, dob, email, cell, homephone, null).FirstOrDefault(); if (noupdate && pid != null) { if (!testing) { var pd = Db.LoadPersonById(pid.PeopleId.Value); pd.AddEditExtraBool("FoundDup", true); } potentialdup = true; pid = null; } if (pid != null) // found { p = Db.LoadPersonById(pid.PeopleId.Value); psb = new List <ChangeDetail>(); fsb = new List <ChangeDetail>(); UpdateField(p, a, "TitleCode", "title"); UpdateField(p, a, "FirstName", "first"); UpdateField(p, a, "NickName", "goesby"); UpdateField(p, a, "LastName", "last"); UpdateField(p, a, "EmailAddress", "email"); UpdateField(p, a, "EmailAddress2", "email2"); UpdateField(p, a, "DOB", "birthday"); UpdateField(p, a, "AltName", "altname"); UpdateField(p, a, "SuffixCode", "suffix"); UpdateField(p, a, "MiddleName", "middle"); UpdateField(p, a, "CellPhone", "cellphone", GetDigits(a, "cellphone")); UpdateField(p, a, "WorkPhone", "workphone", GetDigits(a, "workphone")); UpdateField(p, a, "GenderId", "gender", Gender(a)); UpdateField(p, a, "MaritalStatusId", "marital", Marital(a)); UpdateField(p, a, "PositionInFamilyId", "position", Position(a)); if (!testing) { UpdateField(p, a, "CampusId", "campus", Campus(a)); } UpdateField(p.Family, a, "AddressLineOne", "address"); UpdateField(p.Family, a, "AddressLineTwo", "address2"); UpdateField(p.Family, a, "CityName", "city"); UpdateField(p.Family, a, "StateCode", "state"); UpdateField(p.Family, a, "ZipCode", "zip"); if (!testing) { p.LogChanges(Db, psb, PeopleId); p.Family.LogChanges(Db, fsb, p.PeopleId, PeopleId); Db.SubmitChanges(); p.AddEditExtraBool("InsertPeopleUpdated", true); } } else // new person { if (f == null || !a[names["familyid"]].HasValue()) { f = new Family(); SetField(f, a, "AddressLineOne", "address"); SetField(f, a, "AddressLineTwo", "address2"); SetField(f, a, "CityName", "city"); SetField(f, a, "StateCode", "state"); SetField(f, a, "ZipCode", "zip"); SetField(f, a, "HomePhone", "homephone", GetDigits(a, "homephone")); Db.Families.InsertOnSubmit(f); if (!testing) { Db.SubmitChanges(); } } string goesby = null; if (names.ContainsKey("goesby")) { goesby = a[names["goesby"]]; } p = Person.Add(Db, false, f, 10, null, a[names["first"]], goesby, a[names["last"]], dob.FormatDate(), 0, 0, 0, null, testing); p.FixTitle(); SetField(p, a, "AltName", "altname"); SetField(p, a, "SuffixCode", "suffix"); SetField(p, a, "MiddleName", "middle"); SetField(p, a, "MaidenName", "maidenname"); SetField(p, a, "EmployerOther", "employer"); SetField(p, a, "OccupationOther", "occupation"); SetField(p, a, "CellPhone", "cellphone", GetDigits(a, "cellphone")); SetField(p, a, "WorkPhone", "workphone", GetDigits(a, "workphone")); SetField(p, a, "EmailAddress", "email"); SetField(p, a, "EmailAddress2", "email2"); SetField(p, a, "GenderId", "gender", Gender(a)); SetField(p, a, "MaritalStatusId", "marital", Marital(a)); SetField(p, a, "WeddingDate", "weddingdate", GetDate(p, a, "weddingdate")); SetField(p, a, "JoinDate", "joindate", GetDate(p, a, "joindate")); SetField(p, a, "DropDate", "dropdate", GetDate(p, a, "dropdate")); SetField(p, a, "BaptismDate", "baptismdate", GetDate(p, a, "baptismdate")); SetField(p, a, "PositionInFamilyId", "position", Position(a)); SetField(p, a, "TitleCode", "title", Title(a)); if (!testing) { SetField(p, a, "CampusId", "campus", Campus(a)); } if (names.ContainsKey("memberstatus")) { var ms = a[names["memberstatus"]]; var qms = from mm in Db.MemberStatuses where mm.Description == ms select mm; var m = qms.SingleOrDefault(); if (m == null) { var nx = Db.MemberStatuses.Max(mm => mm.Id) + 1; m = new MemberStatus { Id = nx, Description = ms, Code = nx.ToString() }; Db.MemberStatuses.InsertOnSubmit(m); } p.MemberStatusId = m.Id; } } var nq = from name in names.Keys where !standardnames.Contains(name, StringComparer.OrdinalIgnoreCase) select name; foreach (var name in nq) { var b = name.Split('.'); if (name.EndsWith(".txt")) { p.AddEditExtraData(b[0], a[names[name]].Trim()); } else if (name.EndsWith(".org")) { if (testing) { continue; } var d = a[names[name]].Trim().Trim(); if (!d.HasValue()) { continue; } var oid = 0; if (orgs.ContainsKey(b[0])) { oid = orgs[b[0]]; } else { var org = Db.Organizations.First(); var o = org.CloneOrg(Db); o.OrganizationName = b[0].SplitUpperCaseToString(); oid = o.OrganizationId; orgs.Add(b[0], oid); } var mtid = 0; if (membertypes.ContainsKey(d)) { mtid = membertypes[d]; } else { var mt = Organization.FetchOrCreateMemberType(Db, d); mtid = mt.Id; membertypes.Add(d, mtid); } OrganizationMember.InsertOrgMembers(Db, oid, p.PeopleId, mtid, DateTime.Today, null, false); } else if (name.EndsWith(".dt")) { var d = a[names[name]].Trim().ToDate(); if (d.HasValue) { p.AddEditExtraDate(b[0], d.Value); } } else if (name.EndsWith(".int")) { p.AddEditExtraInt(b[0], a[names[name]].Trim().ToInt()); } else if (name.EndsWith(".bit")) { var v = a[names[name]]; if (v.HasValue()) { p.AddEditExtraBool(b[0], v.ToInt() == 1); } } else { p.AddEditExtraValue(name, a[names[name]].Trim()); } } rt.Processed++; Db2.SubmitChanges(); if (!testing) { p.AddEditExtraBool("InsertPeopleAdded", true); if (potentialdup) { p.AddEditExtraBool("FoundDup", true); } Db.SubmitChanges(); } } if (!testing) { Db.SubmitChanges(); } } rt.Completed = DateTime.Now; Db2.SubmitChanges(); return(true); }
private OrganizationMember RecordAllFamilyAttends(OrganizationMember om) { om.AddToGroup(DbUtil.Db, "Attending"); om.AddToGroup(DbUtil.Db, "Registered"); foreach (var fm in FamilyAttend) { if (fm.PeopleId == -1) { continue; } Person pp = null; OrganizationMember omm = null; if (!fm.PeopleId.HasValue && fm.Attend) { if (!fm.Name.HasValue()) { continue; } string first, last; Util.NameSplit(fm.Name, out first, out last); if (!first.HasValue()) { first = last; last = LastName; } var uperson = DbUtil.Db.LoadPersonById(PeopleId ?? 0); var p = new OnlineRegPersonModel() { FirstName = first, LastName = last, DateOfBirth = fm.Birthday, EmailAddress = fm.Email, gender = fm.GenderId, married = fm.MaritalId }; p.AddPerson(uperson, org.EntryPointId ?? 0); pp = p.person; omm = OrganizationMember.InsertOrgMembers(DbUtil.Db, org.OrganizationId, pp.PeopleId, MemberTypeCode.Member, DateTime.Now, null, false); } else { pp = DbUtil.Db.LoadPersonById(fm.PeopleId ?? 0); if (fm.Attend) { omm = OrganizationMember.InsertOrgMembers(DbUtil.Db, org.OrganizationId, pp.PeopleId, MemberTypeCode.Member, DateTime.Now, null, false); } else { omm = OrganizationMember.Load(DbUtil.Db, pp.PeopleId, org.OrganizationId); omm?.RemoveFromGroup(DbUtil.Db, "Attending"); } } if (omm == null) { continue; } if (fm.Attend) { omm.AddToGroup(DbUtil.Db, "Attending"); } if (!fm.PeopleId.HasValue) { omm.AddToGroup(DbUtil.Db, "Added"); } } return(om); }
public void EnrollAndConfirm() { if (masterorgid.HasValue) { EnrollAndConfirm2(); return; } var Db = DbUtil.Db; var ti = Transaction; // make a list of email addresses var elist = new List <MailAddress>(); if (UserPeopleId.HasValue) { if (user.SendEmailAddress1 ?? true) { Util.AddGoodAddress(elist, user.FromEmail); } if (user.SendEmailAddress2 ?? false) { Util.AddGoodAddress(elist, user.FromEmail2); } } if (registertag.HasValue()) { var guid = registertag.ToGuid(); var ot = DbUtil.Db.OneTimeLinks.SingleOrDefault(oo => oo.Id == guid.Value); ot.Used = true; } var participants = new StringBuilder(); for (var i = 0; i < List.Count; i++) { var p = List[i]; if (p.IsNew) { Person uperson = null; switch (p.whatfamily) { case 1: uperson = Db.LoadPersonById(UserPeopleId.Value); break; case 2: if (i > 0) { uperson = List[i - 1].person; } break; } p.AddPerson(uperson, p.org.EntryPointId ?? 0); } Util.AddGoodAddress(elist, p.fromemail); participants.Append(p.ToString()); } var p0 = List[0].person; if (this.user != null) { p0 = user; } //var emails = string.Join(",", elist.ToArray()); string paylink = string.Empty; var amtpaid = ti.Amt ?? 0; var amtdue = ti.Amtdue; var pids2 = new List <TransactionPerson>(); foreach (var p in List) { if (p.PeopleId == null) { return; } if (pids2.Any(pp => pp.PeopleId == p.PeopleId)) { continue; } pids2.Add(new TransactionPerson { PeopleId = p.PeopleId.Value, Amt = p.TotalAmount(), OrgId = orgid, }); } ti.Emails = Util.EmailAddressListToString(elist); ti.Participants = participants.ToString(); ti.TransactionDate = DateTime.Now; ti.TransactionPeople.AddRange(pids2); var estr = HttpUtility.UrlEncode(Util.Encrypt(ti.Id.ToString())); paylink = Util.ResolveServerUrl("/OnlineReg/PayAmtDue?q=" + estr); var pids = pids2.Select(pp => pp.PeopleId); var details = new StringBuilder("<table>"); for (var i = 0; i < List.Count; i++) { var p = List[i]; var q = from pp in Db.People where pids.Contains(pp.PeopleId) where pp.PeopleId != p.PeopleId select pp.Name; var others = string.Join(",", q.ToArray()); others += "(Total due {0:c})".Fmt(amtdue); var om = p.Enroll(ti, paylink, testing, others); details.AppendFormat(@" <tr><td colspan='2'><hr/></td></tr> <tr><th valign='top'>{0}</th><td> {1} </td></tr>", i + 1, p.PrepareSummaryText(ti)); om.RegisterEmail = p.email; om.TranId = ti.Id; if (p.setting.GiveOrgMembAccess == true) { if (p.person.Users.Count() == 0) { p.IsNew = false; var u = p.CreateAccount(); if (u != null) { var list = u.Roles.ToList(); if (!list.Contains("Access")) { list.Add("Access"); } if (!list.Contains("OrgMembersOnly")) { list.Add("OrgMembersOnly"); } u.SetRoles(Db, list.ToArray(), false); } } Db.SubmitChanges(); } int grouptojoin = p.setting.GroupToJoin.ToInt(); if (grouptojoin > 0) { OrganizationMember.InsertOrgMembers(Db, grouptojoin, p.PeopleId.Value, 220, DateTime.Now, null, false); DbUtil.Db.UpdateMainFellowship(grouptojoin); } OnlineRegPersonModel.CheckNotifyDiffEmails(p.person, Db.StaffEmailForOrg(p.org.OrganizationId), p.fromemail, p.org.OrganizationName, p.org.PhoneNumber); if (p.CreatingAccount == true && p.setting.GiveOrgMembAccess == false) { p.CreateAccount(); } } details.Append("\n</table>\n"); Db.SubmitChanges(); string DivisionName = null; if (masterorgid.HasValue) { DivisionName = masterorg.OrganizationName; } else if (div != null) { DivisionName = div.Name; } else if (org != null) { DivisionName = org.DivisionName; } string OrganizationName = null; if (org != null) { OrganizationName = org.OrganizationName; } else if (div != null) { OrganizationName = DivisionName; } if (!OrganizationName.HasValue()) { OrganizationName = DivisionName; } string EmailSubject = null; string EmailMessage = null; if (org != null && settings[orgid.Value].Body.HasValue()) { var os = settings[orgid.Value]; EmailSubject = Util.PickFirst(os.Subject, "no subject"); EmailMessage = Util.PickFirst(os.Body, "no body"); } else if (masterorgid.HasValue && settings[masterorgid.Value].Body.HasValue()) { var os = settings[masterorgid.Value]; EmailSubject = Util.PickFirst(os.Subject, "no subject"); EmailMessage = Util.PickFirst(os.Body, "no body"); } else if (div != null) { EmailSubject = div.EmailSubject; EmailMessage = div.EmailMessage; } List <Person> NotifyIds = null; if (div != null) { NotifyIds = Db.StaffPeopleForDiv(div.Id); } else if (masterorgid.HasValue) { NotifyIds = Db.StaffPeopleForOrg(masterorg.OrganizationId); } else if (org != null) { NotifyIds = Db.StaffPeopleForOrg(org.OrganizationId); } var hasnotifyids = true; if (NotifyIds.Count() == 0) { NotifyIds = Db.AdminPeople(); hasnotifyids = false; } var notify = NotifyIds[0]; string Location = null; if (div != null) { Location = List[0].org.Location; } else if (org != null) { Location = org.Location; } var subject = Util.PickFirst(EmailSubject, "no subject"); var message = Util.PickFirst(EmailMessage, "no message"); message = CmsData.API.APIOrganization.MessageReplacements(p0, DivisionName, OrganizationName, Location, message); subject = subject.Replace("{org}", org.OrganizationName); message = message.Replace("{phone}", org.PhoneNumber.FmtFone7()); message = message.Replace("{tickets}", List[0].ntickets.ToString()); message = message.Replace("{details}", details.ToString()); message = message.Replace("{paid}", amtpaid.ToString("c")); message = message.Replace("{sessiontotal}", amtpaid.ToString("c")); message = message.Replace("{participants}", details.ToString()); if (amtdue > 0) { message = message.Replace("{paylink}", "<a href='{0}'>Click this link to make a payment on your balance of {1:C}</a>.".Fmt(paylink, amtdue)); } else { message = message.Replace("{paylink}", "You have a zero balance."); } var re = new Regex(@"\{donation(?<text>.*)donation\}", RegexOptions.Singleline | RegexOptions.Multiline); if (ti.Donate > 0) { var p = List[donor.Value]; ti.Fund = p.setting.DonationFund(); var desc = "{0}; {1}; {2}, {3} {4}".Fmt( p.person.Name, p.person.PrimaryAddress, p.person.PrimaryCity, p.person.PrimaryState, p.person.PrimaryZip); p.person.PostUnattendedContribution(DbUtil.Db, ti.Donate.Value, p.setting.DonationFundId, desc); var ma = re.Match(message); if (ma.Success) { var v = ma.Groups["text"].Value; message = re.Replace(message, v); } message = message.Replace("{donation}", ti.Donate.ToString2("N2")); // send donation confirmations Db.Email(notify.FromEmail, NotifyIds, subject + "-donation", "${0:N2} donation received from {1}".Fmt(ti.Donate, ti.FullName)); } else { message = re.Replace(message, ""); } // send confirmations Db.Email(notify.FromEmail, p0, elist, subject, message, false); // notify the staff foreach (var p in List) { var orgstaff = Db.StaffPeopleForOrg(p.org.OrganizationId); orgstaff.AddRange(NotifyIds); Db.Email(Util.PickFirst(p.person.FromEmail, notify.FromEmail), orgstaff, Header, @"{6}{0} has registered for {1}<br/> Feepaid for this registrant: {2:C}<br/> Total Fee for this registration: {3:C}<br/> AmountDue: {4:C}<br/> <pre>{5}</pre>".Fmt(p.person.Name, Header, amtpaid, TotalAmount(), amtdue, // Amount Due p.PrepareSummaryText(ti), hasnotifyids? "" : @"<span style='color:red'>THERE ARE NO NOTIFY IDS ON THIS REGISTRATION!!</span><br/> <a href='http://www.bvcms.com/Doc/MessagesSettings'>see documentation</a><br/>")); } }