Exemplo n.º 1
0
        public OnlineRegPersonModel LoadExistingPerson(int id, int index)
        {
            var person = DbUtil.Db.LoadPersonById(id);
            var p      = new OnlineRegPersonModel
            {
                DateOfBirth        = person.DOB,
                EmailAddress       = person.EmailAddress.HasValue() ? person.EmailAddress : user.EmailAddress,
                FirstName          = person.PreferredName,
                LastName           = person.LastName,
                PeopleId           = id,
                Phone              = Util.PickFirst(person.CellPhone, person.HomePhone),
                orgid              = Orgid,
                masterorgid        = masterorgid,
                classid            = classid,
                IsFamily           = true,
                LoggedIn           = true,
                Found              = true,
                IsValidForExisting = true,
            };

            if (p.LoggedIn && org != null)
            {
                var setting = settings[org.OrganizationId];
                if (setting.AllowReRegister)
                {
                    var om = org.OrganizationMembers.SingleOrDefault(mm => mm.PeopleId == id);
                    if (om != null)
                    {
                        p.PopulateRegistrationFromDb(om);
                    }
                }
            }
            return(p);
        }
        private static void ValidBasic(OnlineRegPersonModel model, ModelStateDictionary modelState, int i)
        {
            if (!model.FirstName.HasValue())
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].FirstName), "first name required");
            }

            if (!model.LastName.HasValue())
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].LastName), "last name required");
            }

            var mindate = DateTime.Parse("1/1/1753");
            var n       = 0;

            if (model.birthday.HasValue && model.birthday < mindate)
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].DateOfBirth), "invalid date");
            }

            if (model.birthday.HasValue && model.birthday > mindate)
            {
                n++;
            }

            if (Util.ValidEmail(model.EmailAddress))
            {
                n++;
            }

            var d = model.Phone.GetDigits().Length;

            if (model.Phone.HasValue() && d >= 10)
            {
                n++;
            }

            if (d > 20)
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].Phone), "too many digits in phone");
            }

            if (n == 0)
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].DateOfBirth), "we require one of valid birthdate, email or phone to find your record");
            }

            if (!Util.ValidEmail(model.EmailAddress))
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].EmailAddress), "valid email required");
            }

            if (model.Phone.HasValue() && d < 10)
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].Phone), "10+ digits required");
            }
        }
Exemplo n.º 3
0
        public IEnumerable <FundItemChosen> FundItemsChosen()
        {
            if (FundItem == null)
            {
                return(new List <FundItemChosen>());
            }
            var items = OnlineRegPersonModel.Funds();
            var q     = from i in FundItem
                        join m in items on i.Key equals m.Value.ToInt()
                            where i.Value.HasValue
                        select new FundItemChosen
            {
                fundid = m.Value.ToInt(), desc = m.Text, amt = i.Value.Value
            };

            return(q);
        }
 private static void ValidateBirthdayRange(OnlineRegPersonModel model, ModelStateDictionary modelState, int i)
 {
     if (model.org == null)
     {
         return;
     }
     if (!model.birthday.HasValue && (model.org.BirthDayStart.HasValue || model.org.BirthDayEnd.HasValue))
     {
         modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].DateOfBirth), "birthday required");
     }
     else if (model.birthday.HasValue)
     {
         if ((model.org.BirthDayStart.HasValue && model.birthday < model.org.BirthDayStart) ||
             (model.org.BirthDayEnd.HasValue && model.birthday > model.org.BirthDayEnd))
         {
             modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].DateOfBirth), "birthday outside age allowed range");
         }
     }
 }
Exemplo n.º 5
0
        public OnlineRegPersonModel LoadExistingPerson(int id, int index)
        {
            var person = DbUtil.Db.LoadPersonById(id);
            var p      = new OnlineRegPersonModel
            {
                index              = index,
                dob                = person.DOB,
                email              = person.EmailAddress.HasValue() ? person.EmailAddress : user.EmailAddress,
                first              = person.PreferredName,
                last               = person.LastName,
                PeopleId           = id,
                phone              = Util.PickFirst(person.CellPhone, person.HomePhone),
                orgid              = orgid,
                masterorgid        = masterorgid,
                divid              = divid,
                classid            = classid,
                IsFamily           = true,
                LoggedIn           = true,
                Found              = true,
                IsValidForExisting = true,
            };

            return(p);
        }
Exemplo n.º 6
0
 private void RecordAllFamilyAttends(OrganizationMember om)
 {
     om.AddToGroup(DbUtil.Db, "Attended");
     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;
             }
             Person uperson = DbUtil.Db.LoadPersonById(PeopleId.Value);
             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.Value);
             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);
                 if (omm != null)
                 {
                     omm.RemoveFromGroup(DbUtil.Db, "Attended");
                 }
             }
         }
         if (omm == null)
         {
             continue;
         }
         if (fm.Attend)
         {
             omm.AddToGroup(DbUtil.Db, "Attended");
         }
         if (!fm.PeopleId.HasValue)
         {
             omm.AddToGroup(DbUtil.Db, "Added");
         }
     }
 }
Exemplo n.º 7
0
 public OnlineRegPersonModel LoadExistingPerson(int id, int index)
 {
     var person = DbUtil.Db.LoadPersonById(id);
     var p = new OnlineRegPersonModel
     {
         index = index,
         dob = person.DOB,
         email = person.EmailAddress.HasValue() ? person.EmailAddress : user.EmailAddress,
         first = person.PreferredName,
         last = person.LastName,
         PeopleId = id,
         phone = Util.PickFirst(person.CellPhone, person.HomePhone),
         orgid = orgid,
         masterorgid = masterorgid,
         classid = classid,
         IsFamily = true,
         LoggedIn = true,
         Found = true,
         IsValidForExisting = true,
     };
     if (p.LoggedIn && org != null)
     {
         var setting = settings[org.OrganizationId];
         if (setting.AllowReRegister)
         {
             var om = org.OrganizationMembers.SingleOrDefault(mm => mm.PeopleId == id);
             if (om != null)
                 p.PopulateRegistrationFromDb(om);
         }
     }
     return p;
 }
Exemplo n.º 8
0
 // Set suggested giving fee for an indidividual person
 private static void CheckSetFee(OnlineRegModel m, OnlineRegPersonModel p)
 {
     if (m.OnlineGiving() && p.setting.ExtraValueFeeName.HasValue())
     {
         var f = CmsWeb.Models.OnlineRegPersonModel.Funds().SingleOrDefault(ff => ff.Text == p.setting.ExtraValueFeeName);
         var evamt = p.person.GetExtra(p.setting.ExtraValueFeeName).ToDecimal();
         if (f != null && evamt > 0)
             p.FundItem[f.Value.ToInt()] = evamt;
     }
 }
Exemplo n.º 9
0
 public OnlineRegPersonModel LoadExistingPerson(int id, int index)
 {
     var person = DbUtil.Db.LoadPersonById(id);
     var p = new OnlineRegPersonModel
     {
         index = index,
         dob = person.DOB,
         email = person.EmailAddress.HasValue() ? person.EmailAddress : user.EmailAddress,
         first = person.PreferredName,
         last = person.LastName,
         PeopleId = id,
         phone = Util.PickFirst(person.CellPhone, person.HomePhone),
         orgid = orgid,
         masterorgid = masterorgid,
         classid = classid,
         IsFamily = true,
         LoggedIn = true,
         Found = true,
         IsValidForExisting = true,
     };
     return p;
 }
Exemplo n.º 10
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/>"));
            }
        }
        public static void ValidateModelForOther(OnlineRegPersonModel model, ModelStateDictionary modelState, int i)
        {
            if (model.Parent.SupportMissionTrip)
            {
                model.OtherOK = modelState.IsValid;
                return;
            }
            if (model.RecordFamilyAttendance())
            {
                model.OtherOK = true;
                return;
            }
            foreach (var ask in model.setting.AskItems)
            {
                switch (ask.Type)
                {
                case "AskEmContact":
                    if (!model.emcontact.HasValue())
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].emcontact), "emergency contact required");
                    }
                    if (!model.emphone.HasValue())
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].emphone), "emergency phone # required");
                    }
                    break;

                case "AskInsurance":
                    if (!model.insurance.HasValue())
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].insurance), "insurance carrier required");
                    }
                    if (!model.policy.HasValue())
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].policy), "insurance policy # required");
                    }
                    break;

                case "AskDoctor":
                    if (!model.doctor.HasValue())
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].doctor), "Doctor's name required");
                    }
                    if (!model.docphone.HasValue())
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].docphone), "Doctor's phone # required");
                    }
                    break;

                case "AskTylenolEtc":
                    if (!model.tylenol.HasValue)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].tylenol), "please indicate");
                    }
                    if (!model.advil.HasValue)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].advil), "please indicate");
                    }
                    if (!model.maalox.HasValue)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].maalox), "please indicate");
                    }
                    if (!model.robitussin.HasValue)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].robitussin), "please indicate");
                    }
                    break;

                case "AskSize":
                    if (model.shirtsize == "0")
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].shirtsize), "please select a shirt size");
                    }
                    break;

                case "AskCoaching":
                    if (!model.coaching.HasValue)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].coaching), "please indicate");
                    }
                    break;

                case "AskSMS":
                    if (!model.sms.HasValue)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].sms), "please indicate");
                    }
                    break;

                case "AskDropdown":
                    string desc;
                    var    namedd = model.Parent.GetNameFor(mm => mm.List[i].option[ask.UniqueId]);
                    var    sgi    = ((AskDropdown)ask).SmallGroupChoice(model.option);
                    if (sgi == null || !sgi.SmallGroup.HasValue())
                    {
                        modelState.AddModelError(namedd, "please select an option");
                    }
                    else if (((AskDropdown)ask).IsSmallGroupFilled(model.GroupTags, model.option, out desc))
                    {
                        modelState.AddModelError(namedd, "limit reached for " + desc);
                    }
                    break;

                case "Askperson.Parents":
                    if (!model.mname.HasValue() && !model.fname.HasValue())
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].fname), "please provide either mother or father name");
                    }
                    else
                    {
                        string mfirst, mlast;
                        Util.NameSplit(model.mname, out mfirst, out mlast);
                        if (model.mname.HasValue() && !mfirst.HasValue())
                        {
                            modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].mname), "provide first and last names");
                        }
                        string ffirst, flast;
                        Util.NameSplit(model.fname, out ffirst, out flast);
                        if (model.fname.HasValue() && !ffirst.HasValue())
                        {
                            modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].fname), "provide first and last names");
                        }
                    }
                    break;

                case "AskTickets":
                    if ((model.ntickets ?? 0) == 0)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].ntickets), "please enter a number of tickets");
                    }
                    break;

                case "AskYesNoQuestions":
                    for (var n = 0; n < ((AskYesNoQuestions)ask).list.Count; n++)
                    {
                        var a = ((AskYesNoQuestions)ask).list[n];
                        if (model.YesNoQuestion == null || !model.YesNoQuestion.ContainsKey(a.SmallGroup))
                        {
                            modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].YesNoQuestion[a.SmallGroup]), "please select yes or no");
                        }
                    }
                    break;

                case "AskExtraQuestions":
                    var eq = (AskExtraQuestions)ask;
                    if (model.setting.AskVisible("AnswersNotRequired") == false)
                    {
                        for (var n = 0; n < eq.list.Count; n++)
                        {
                            var a = eq.list[n];
                            if (model.ExtraQuestion == null || !model.ExtraQuestion[eq.UniqueId].ContainsKey(a.Question) ||
                                !model.ExtraQuestion[eq.UniqueId][a.Question].HasValue())
                            {
                                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].ExtraQuestion[eq.UniqueId][a.Question]), "please give some answer");
                            }
                        }
                    }
                    break;

                case "AskText":
                    var tx = (AskText)ask;
                    if (model.setting.AskVisible("AnswersNotRequired") == false)
                    {
                        for (var n = 0; n < tx.list.Count; n++)
                        {
                            var a = tx.list[n];
                            if (model.Text == null || !model.Text[tx.UniqueId].ContainsKey(a.Question) ||
                                !model.Text[tx.UniqueId][a.Question].HasValue())
                            {
                                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].Text[tx.UniqueId][a.Question]), "please give some answer");
                            }
                        }
                    }
                    break;

                case "AskCheckboxes":
                    var namecb  = model.Parent.GetNameFor(mm => mm.List[i].Checkbox[ask.UniqueId]);
                    var cb      = ((AskCheckboxes)ask);
                    var cbcount = cb.CheckboxItemsChosen(model.Checkbox).Count();
                    if (cb.Max > 0 && cbcount > cb.Max)
                    {
                        modelState.AddModelError(namecb, "Max of {0} exceeded".Fmt(cb.Max));
                    }
                    else if (cb.Min > 0 && (model.Checkbox == null || cbcount < cb.Min))
                    {
                        modelState.AddModelError(namecb, "Min of {0} required".Fmt(cb.Min));
                    }
                    break;

                case "AskGradeOptions":
                    if (model.gradeoption == "00")
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].gradeoption), "please select a grade option");
                    }
                    break;
                }
            }
            var totalAmount = model.TotalAmount();

            if (model.setting.Deposit > 0)
            {
                if (!model.paydeposit.HasValue)
                {
                    modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].paydeposit), "please indicate");
                }
                else
                {
                    var amountToPay = model.AmountToPay();
                    if (model.paydeposit == true && amountToPay > totalAmount)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].paydeposit),
                                                 "Cannot use deposit since total due is less");
                    }
                }
            }
            if (model.OnlineGiving() && totalAmount <= 0)
            {
                modelState.AddModelError("form", "Gift amount required");
            }

            model.OtherOK = modelState.IsValid;
        }
        public static void ValidateModelForNew(OnlineRegPersonModel model, ModelStateDictionary modelState, int i)
        {
            var dobname   = model.Parent.GetNameFor(mm => mm.List[i].DateOfBirth);
            var foundname = model.Parent.GetNameFor(mm => mm.List[i].Found);

            ValidBasic(model, modelState, i);

            DateTime dt;

            if (model.RequiredDOB() && model.DateOfBirth.HasValue() && !Util.BirthDateValid(model.bmon, model.bday, model.byear, out dt))
            {
                modelState.AddModelError(dobname, "birthday invalid");
            }
            else if (!model.birthday.HasValue && model.RequiredDOB())
            {
                modelState.AddModelError(dobname, "birthday required");
            }
            if (model.birthday.HasValue && model.NoReqBirthYear() == false && model.birthday.Value.Year == Util.SignalNoYear)
            {
                modelState.AddModelError(dobname, "BirthYear is required");
                model.IsValidForNew = false;
                return;
            }

            var minage = DbUtil.Db.Setting("MinimumUserAge", "16").ToInt();

            if (model.orgid == Util.CreateAccountCode && model.age < minage)
            {
                modelState.AddModelError(dobname, "must be {0} to create account".Fmt(minage));
            }

            if (model.ComputesOrganizationByAge() && model.GetAppropriateOrg() == null)
            {
                modelState.AddModelError(dobname, model.NoAppropriateOrgError);
            }

            ValidateBirthdayRange(model, modelState, i);
            var n = 0;

            if (model.Phone.HasValue() && model.Phone.GetDigits().Length >= 10)
            {
                n++;
            }
            if (model.ShowAddress && model.HomePhone.HasValue() && model.HomePhone.GetDigits().Length >= 10)
            {
                n++;
            }

            if (model.RequiredPhone() && n == 0)
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].Phone), "cell or home phone required");
            }

            if (model.HomePhone.HasValue() && model.HomePhone.GetDigits().Length > 20)
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].HomePhone), "homephone too long");
            }

            if (model.EmailAddress.HasValue())
            {
                model.EmailAddress = model.EmailAddress.Trim();
            }

            if (!model.EmailAddress.HasValue() || !Util.ValidEmail(model.EmailAddress))
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].person.EmailAddress), "Please specify a valid email address.");
            }

            var isnewfamily = model.whatfamily == 3;

            if (isnewfamily)
            {
                if (!model.AddressLineOne.HasValue() && model.RequiredAddr())
                {
                    modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].AddressLineOne), "address required.");
                }
                if (model.RequiredZip() && model.AddressLineOne.HasValue())
                {
                    var addrok = model.City.HasValue() && model.State.HasValue();
                    if (model.ZipCode.HasValue())
                    {
                        addrok = true;
                    }

                    if (!addrok)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].ZipCode), "zip required (or \"na\")");
                    }

                    if (modelState.IsValid && model.AddressLineOne.HasValue() &&
                        (model.Country == "United States" || !model.Country.HasValue()))
                    {
                        var r = AddressVerify.LookupAddress(model.AddressLineOne, model.AddressLineTwo, model.City, model.State, model.ZipCode);
                        if (r.Line1 != "error")
                        {
                            if (r.found == false)
                            {
                                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].ZipCode), r.address + ", to skip address check, Change the country to USA, Not Validated");
                                model.ShowCountry = true;
                                return;
                            }
                            if (r.Line1 != model.AddressLineOne)
                            {
                                model.AddressLineOne = r.Line1;
                            }
                            if (r.Line2 != (model.AddressLineTwo ?? ""))
                            {
                                model.AddressLineTwo = r.Line2;
                            }
                            if (r.City != (model.City ?? ""))
                            {
                                model.City = r.City;
                            }
                            if (r.State != (model.State ?? ""))
                            {
                                model.State = r.State;
                            }
                            if (r.Zip != (model.ZipCode ?? ""))
                            {
                                model.ZipCode = r.Zip;
                            }
                        }
                    }
                }
            }

            if (!model.gender.HasValue && model.RequiredGender())
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].gender), "Please specify gender");
            }
            if (!model.married.HasValue && model.RequiredMarital())
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].married), "Please specify marital status");
            }

            if (model.MemberOnly())
            {
                modelState.AddModelError(foundname, "Sorry, must be a member of church");
            }
            else if (model.org != null && model.setting.ValidateOrgIds.Count > 0 && !model.Parent.SupportMissionTrip)
            {
                modelState.AddModelError(foundname, "Must be member of specified organization");
            }

            model.IsValidForNew      = modelState.IsValid;
            model.IsValidForContinue = modelState.IsValid;
        }
        public static void ValidateModelForFind(OnlineRegPersonModel model, ModelStateDictionary modelState, OnlineRegModel m, int i, bool selectFromFamily = false)
        {
            model.IsValidForContinue = true; // true till proven false
            if (model.UserSelectsOrganization())
            {
                if ((model.classid ?? 0) == 0)
                {
                    var          nameclassid             = model.Parent.GetNameFor(mm => mm.List[i].classid);
                    const string pleaseChooseAGroupEvent = "please choose a group/event";
                    if (model.IsFamily)
                    {
                        modelState.AddModelError(nameclassid, pleaseChooseAGroupEvent);
                    }
                    else
                    {
                        modelState.AddModelError(nameclassid, pleaseChooseAGroupEvent);
                    }
                    model.IsValidForExisting = modelState.IsValid;
                    return;
                }
            }

            var dobname   = model.Parent.GetNameFor(mm => mm.List[i].DateOfBirth);
            var foundname = model.Parent.GetNameFor(mm => mm.List[i].Found);

            if (model.IsFamily)
            {
                foundname = "fammember-" + model.PeopleId;
            }

            if (!model.PeopleId.HasValue)
            {
                ValidBasic(model, modelState, i);
            }

            if (model.ComputesOrganizationByAge() && !model.birthday.HasValue)
            {
                modelState.AddModelError(dobname, "birthday required");
            }

            var minage = DbUtil.Db.Setting("MinimumUserAge", "16").ToInt();

            if (model.orgid == Util.CreateAccountCode && model.age < minage)
            {
                modelState.AddModelError(dobname, "must be {0} to create account".Fmt(minage));
            }

            if (!model.IsFamily && (!model.EmailAddress.HasValue() || !Util.ValidEmail(model.EmailAddress)))
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].person.EmailAddress), "Please specify a valid email address.");
            }

            if (modelState.IsValid)
            {
                model.Found = model.person != null;
                if (model.count == 1)
                {
                    model.AddressLineOne = model.person.PrimaryAddress;
                    model.City           = model.person.PrimaryCity;
                    model.State          = model.person.PrimaryState;
                    model.ZipCode        = model.person.PrimaryZip;
                    model.gender         = model.person.GenderId;
                    model.married        = model.person.MaritalStatusId == 2 ? 2 : 1;

                    if (!model.person.EmailAddress.HasValue() &&
                        (model.ManageSubscriptions() ||
                         model.orgid == Util.CreateAccountCode ||
                         model.OnlineGiving() ||
                         model.ManageGiving() ||
                         model.OnlinePledge()
                        ))
                    {
                        modelState.AddModelError(foundname, "No Email Address on record");
                        model.NotFoundText       = @"<strong>No Email Address on Record</strong><br/>
We have found your record but we have no email address for you.<br/>
This means that we cannot proceed until we have that to protect your data.<br/>
Please call the church to resolve this before we can complete your information.";
                        model.IsValidForContinue = false;
                    }
                    else if (model.ComputesOrganizationByAge() && model.org == null)
                    {
                        var msg = model.NoAppropriateOrgError ?? "Sorry, no approprate org";
                        if (selectFromFamily)
                        {
                            modelState.AddModelError("age-" + model.person.PeopleId, msg);
                        }
                        else
                        {
                            modelState.AddModelError(dobname, msg);
                        }
                        model.IsValidForContinue = false;
                    }
                    else if (model.MemberOnly() && model.person.MemberStatusId != MemberStatusCode.Member)
                    {
                        modelState.AddModelError(foundname, "Sorry, must be a member of church");
                        model.NotFoundText       = @"<strong>Sorry, must be a member of this church</strong>";
                        model.IsValidForContinue = false;
                    }
                    else if (model.org != null)
                    {
                        var om = model.org.OrganizationMembers.SingleOrDefault(mm => mm.PeopleId == model.PeopleId);
                        if (model.org.RegistrationTypeId == RegistrationTypeCode.CreateAccount)
                        {
#if DEBUG
#else
                            if (model.person.Users.Count() > 0)
                            {
                                modelState.AddModelError(foundname, "You already have an account");
                                model.IsValidForContinue = false;
                            }
                            if (!Util.ValidEmail(model.person.EmailAddress))
                            {
                                modelState.AddModelError(foundname, "You must have a valid email address on record");
                                model.NotFoundText       = @"We have found your record but we do not have a valid email for you.<br/>
For your protection, we cannot continue to create an account.<br />
We can't use the one you enter online here since we can't be sure this is you.<br />
Please call the church to resolve this before we can complete your account.<br />";
                                model.IsValidForContinue = false;
                            }
#endif
                        }
                        else if (om != null && model.org.IsMissionTrip == true &&
                                 !model.Parent.SupportMissionTrip &&
                                 om.OrgMemMemTags.Any(mm => mm.MemberTag.Name == "Sender") &&
                                 !om.OrgMemMemTags.Any(mm => mm.MemberTag.Name == "Goer"))
                        {
                            model.IsValidForContinue = true;
                        }
                        else if (om != null && model.setting.AllowReRegister == false &&
                                 om.Organization.RegistrationTypeId != RegistrationTypeCode.ChooseVolunteerTimes &&
                                 !model.Parent.SupportMissionTrip)
                        {
                            modelState.AddModelError(foundname, "This person is already registered");
                            model.NotFoundText       = @"<strong>This person is already registered</strong>";
                            model.CancelText         = "Register a different person";
                            model.IsValidForContinue = false;
                        }
                        else if (model.setting.ValidateOrgIds.Count > 0 && !model.Parent.SupportMissionTrip)
                        {
                            var reqmemberids = model.setting.ValidateOrgIds.Where(ii => ii > 0).ToList();
                            if (reqmemberids.Count > 0)
                            {
                                if (!model.person.OrganizationMembers.Any(mm => reqmemberids.Contains(mm.OrganizationId)))
                                {
                                    modelState.AddModelError(foundname, "Must be member of specified organization");
                                    model.NotFoundText       = @"<strong>Must be a member of specified organization to register</strong>";
                                    model.IsValidForContinue = false;
                                }
                            }
                            var reqnomemberids = model.setting.ValidateOrgIds.Where(ii => ii < 0).ToList();
                            if (reqnomemberids.Count > 0)
                            {
                                if (model.person.OrganizationMembers.Any(mm => reqnomemberids.Contains(-mm.OrganizationId)))
                                {
                                    modelState.AddModelError(foundname, "Must not be a member of specified organization");
                                    model.NotFoundText       = @"<strong>Must not be a member of specified organization to register</strong>";
                                    model.IsValidForContinue = false;
                                }
                            }
                        }
                    }
                    if (m.List.Count(ii => ii.PeopleId == model.PeopleId) > 1)
                    {
                        modelState.AddModelError(foundname, "Person already in Pending Registration");
                        model.CancelText         = "Register a different person";
                        model.NotFoundText       = @"<strong>Person already in Pending Registration</strong>";
                        model.IsValidForContinue = false;
                    }
                }
                else if (model.count > 1)
                {
                    modelState.AddModelError(foundname, "More than one match, sorry");
                    model.NotFoundText       = @"<strong>MORE THAN ONE MATCH</strong><br />
We have found more than one record that matches your information
This is an unexpected error and we don't know which one is you.
Please call the church to resolve this before we can complete your registration.";
                    model.IsValidForContinue = false;
                }
                else if (model.count == 0)
                {
                    modelState.AddModelError(foundname, "record not found");
                    model.NotFoundText = @" <strong>RECORD NOT FOUND</strong><br />
                            We were not able to find you in our database. Please check the information you entered.
                            <ul>
                                <li>If everything looks good, select ""New Profile""</li>
                                <li>If you make a correction, select ""Search Again""</li>
                            </ul>";
                }
            }
            ValidateBirthdayRange(model, modelState, i);
            model.IsValidForExisting = modelState.IsValid;
        }
Exemplo n.º 14
0
Arquivo: Enroll.cs Projeto: vs06/bvcms
 private void RecordAllFamilyAttends(OrganizationMember om)
 {
     om.AddToGroup(DbUtil.Db, "Attended");
     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;
             }
             Person uperson = DbUtil.Db.LoadPersonById(PeopleId.Value);
             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.Value);
             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);
                 if (omm != null)
                     omm.RemoveFromGroup(DbUtil.Db, "Attended");
             }
         }
         if (omm == null)
             continue;
         if (fm.Attend)
             omm.AddToGroup(DbUtil.Db, "Attended");
         if (!fm.PeopleId.HasValue)
             omm.AddToGroup(DbUtil.Db, "Added");
     }
 }
Exemplo n.º 15
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/>" : ""));
            }
        }
Exemplo n.º 16
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.º 17
0
        public ManageGivingModel(int pid, int orgid = 0)
            : this()
        {
            this.pid   = pid;
            this.orgid = orgid;
            var rg = person.ManagedGiving();

            if (rg != null)
            {
                RepeatPattern = rg.SemiEvery != "S" ? rg.Period : rg.SemiEvery;
                SemiEvery     = rg.SemiEvery;
                StartWhen     = rg.StartWhen;
                StopWhen      = null; //rg.StopWhen;
                Day1          = rg.Day1;
                Day2          = rg.Day2;
                EveryN        = rg.EveryN;
                Period        = rg.Period;
                foreach (var ra in person.RecurringAmounts.AsEnumerable())
                {
                    FundItem.Add(ra.FundId, ra.Amt);
                }

                NextDate = rg.NextDate;
            }
            else if (Setting.ExtraValueFeeName.HasValue())
            {
                var f = OnlineRegPersonModel.FullFundList().SingleOrDefault(ff => ff.Text == Setting.ExtraValueFeeName);
                // reasonable defaults
                RepeatPattern = "M";
                Period        = "M";
                SemiEvery     = "E";
                EveryN        = 1;
                var evamt = person.GetExtra(Setting.ExtraValueFeeName).ToDecimal();
                if (f != null && evamt > 0)
                {
                    FundItem.Add(f.Value.ToInt(), evamt);
                }
            }

            var pi = person.PaymentInfo();

            if (pi == null)
            {
                pi = new PaymentInfo();
            }
            else
            {
                CreditCard           = pi.MaskedCard;
                Account              = pi.MaskedAccount;
                Expires              = pi.Expires;
                Routing              = Util.Mask(new StringBuilder(pi.Routing), 2);
                NoCreditCardsAllowed = DbUtil.Db.Setting("NoCreditCardGiving", "false").ToBool();
                Type = pi.PreferredGivingType;
                if (NoCreditCardsAllowed)
                {
                    Type = PaymentType.Ach; // bank account only
                }
                else if (NoEChecksAllowed)
                {
                    Type = PaymentType.CreditCard; // credit card only
                }
                Type = NoEChecksAllowed ? PaymentType.CreditCard : Type;

                ClearMaskedNumbers(pi);
            }

            FirstName = pi.FirstName ?? person.FirstName;
            Middle    = (pi.MiddleInitial ?? person.MiddleName).Truncate(1);
            LastName  = pi.LastName ?? person.LastName;
            Suffix    = pi.Suffix ?? person.SuffixCode;
            Address   = pi.Address ?? person.PrimaryAddress;
            Address2  = pi.Address2 ?? person.PrimaryAddress2;
            City      = pi.City ?? person.PrimaryCity;
            State     = pi.State ?? person.PrimaryState;
            Country   = pi.Country ?? person.PrimaryCountry;
            Zip       = pi.Zip ?? person.PrimaryZip;
            Phone     = pi.Phone ?? person.HomePhone ?? person.CellPhone;

            total = FundItem.Sum(ff => ff.Value) ?? 0;
        }