Exemplo n.º 1
0
        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");
            }
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
 public AskItem(Ask ask, OrganizationMember om)
 {
     this.ask = ask;
     this.om  = om;
 }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
        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");
            }
        }
Exemplo n.º 7
0
        // 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));
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
 public static bool IsOrganizationModerator(this AuthUserSession session, OrganizationMember organizationMember) =>
 session.IsOrganizationOwner(organizationMember) || organizationMember?.IsModerator == true;
Exemplo n.º 10
0
 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 };
 }
Exemplo n.º 11
0
 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", ""));
        }
Exemplo n.º 13
0
        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;
                }
            }
        }
Exemplo n.º 14
0
        //---------------------------------------------------------------------------------------------------
        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)));
            }
        }
Exemplo n.º 15
0
        // 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));
        }
Exemplo n.º 16
0
        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;
                }
            }
        }
Exemplo n.º 17
0
        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());
                }
            }
        }
Exemplo n.º 18
0
 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));
 }
Exemplo n.º 19
0
        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;
                }
            }
        }
Exemplo n.º 20
0
 public AskItem(Ask ask, OrganizationMember om)
 {
     this.ask = ask;
     this.om = om;
 }
Exemplo n.º 21
0
 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);
 }
Exemplo n.º 22
0
        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");
            }
        }
Exemplo n.º 23
0
 public void RemoveFromSmallGroup(CMSDataContext Db, OrganizationMember om)
 {
     om.RemoveFromGroup(Db, SmallGroup);
 }
Exemplo n.º 24
0
        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));
        }
Exemplo n.º 25
0
        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;
                }
            }
        }
Exemplo n.º 26
0
        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
            });
        }
Exemplo n.º 27
0
        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);
        }
Exemplo n.º 28
0
        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;
                }
            }
        }
Exemplo n.º 29
0
        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());
            //            }
        }
Exemplo n.º 30
0
        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));
        }
Exemplo n.º 32
0
 public void RemoveFromSmallGroup(CMSDataContext Db, OrganizationMember om)
 {
     om.RemoveFromGroup(Db, SmallGroup.trim());
 }
Exemplo n.º 33
0
        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);
        }
Exemplo n.º 34
0
        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);
        }
Exemplo n.º 35
0
        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/>"));
            }
        }