Esempio n. 1
0
        private ConfirmEnum DoOnlineGiving(string transactionReturn)
        {
            var p = List[0];
            if (p.IsNew)
            {
                p.AddPerson(null, p.org.EntryPointId ?? 0);
            }

            var desc = $"{p.person.Name}; {p.person.PrimaryAddress}; {p.person.PrimaryZip}";
            var staff = DbUtil.Db.StaffPeopleForOrg(org.OrganizationId)[0];
            var body = GivingConfirmation.PostAndBuild(DbUtil.Db, staff, p.person, p.setting.Body, p.org.OrganizationId, p.FundItemsChosen(), Transaction, desc,
                p.setting.DonationFundId);

            if (!Transaction.TransactionId.HasValue())
            {
                Transaction.TransactionId = transactionReturn;
                if (testing == true && !Transaction.TransactionId.Contains("(testing)"))
                {
                    Transaction.TransactionId += "(testing)";
                }
            }
            var contributionemail = (from ex in p.person.PeopleExtras
                                     where ex.Field == "ContributionEmail"
                                     select ex.Data).SingleOrDefault();
            if (contributionemail.HasValue())
            {
                contributionemail = (contributionemail ?? "").Trim();
            }

            if (Util.ValidEmail(contributionemail))
            {
                Log("UsingSpecialEmail");
            }
            else
            {
                contributionemail = p.person.FromEmail;
            }

            MailAddress from = null;
            if (!Util.TryGetMailAddress(DbUtil.Db.StaffEmailForOrg(p.org.OrganizationId), out from))
            {
                from = GetAdminMailAddress();
            }

            var m = new EmailReplacements(DbUtil.Db, body, from);
            body = m.DoReplacements(DbUtil.Db, p.person);

            DbUtil.Db.EmailFinanceInformation(from, p.person, p.setting.Subject, body);
            DbUtil.Db.EmailFinanceInformation(contributionemail, DbUtil.Db.StaffPeopleForOrg(p.org.OrganizationId),
                "online giving contribution received",
                $"see contribution records for {p.person.Name} ({p.PeopleId}) {Util.Host}");
            if (p.CreatingAccount)
            {
                p.CreateAccount();
            }

            return ConfirmEnum.Confirm;
        }
Esempio n. 2
0
 public void FinishLaterNotice()
 {
     var registerLink = EmailReplacements.CreateRegisterLink(masterorgid ?? Orgid,
         $"Resume registration for {Header}");
     var msg = "<p>Hi {first},</p>\n<p>Here is the link to continue your registration:</p>\n" + registerLink;
     Debug.Assert((masterorgid ?? Orgid) != null, "m.Orgid != null");
     var notifyids = DbUtil.Db.NotifyIds((masterorg ?? org).NotifyIds);
     var p = UserPeopleId.HasValue ? DbUtil.Db.LoadPersonById(UserPeopleId.Value) : List[0].person;
     DbUtil.Db.Email(notifyids[0].FromEmail, p, $"Continue your registration for {Header}", msg);
 }
Esempio n. 3
0
        public void Should_Return_Anonymous_Replacement_Link()
        {
            using (var db = CMSDataContext.Create(DatabaseFixture.Host))
            {
                var      link      = EmailReplacements.SupportLinkAnonymousReplacement(db, "1", "1");
                String[] separator = { "//", "/" };
                var      url       = link.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                var      linkId    = url[4];
                var      guid      = linkId.ToGuid();

                var ot = db.OneTimeLinks.SingleOrDefault(oo => oo.Id == guid.Value);
                ot.ShouldNotBeNull();
            }
        }
        public void Confirm(Controller controller)
        {
            var details = ViewExtensions2.RenderPartialViewToString(controller, "ManageGiving/EmailConfirmation", this);

            var staff = DbUtil.Db.StaffPeopleForOrg(orgid)[0];

            var contributionEmail = (from ex in DbUtil.Db.PeopleExtras
                                     where ex.Field == "ContributionEmail"
                                     where ex.PeopleId == person.PeopleId
                                     select ex.Data).SingleOrDefault();

            if (!Util.ValidEmail(contributionEmail))
            {
                contributionEmail = person.FromEmail;
            }

            if (!string.IsNullOrEmpty(Setting.Body))
            {
                var text = Setting.Body.Replace("{church}", DbUtil.Db.Setting("NameOfChurch", "church"),
                                                ignoreCase: true);
//            text = text.Replace("{name}", person.Name, ignoreCase: true);
                text = text.Replace("{date}", DateTime.Now.ToString("d"), ignoreCase: true);
                text = text.Replace("{email}", person.EmailAddress, ignoreCase: true);
                text = text.Replace("{phone}", person.HomePhone.FmtFone(), ignoreCase: true);
                text = text.Replace("{contact}", staff.Name, ignoreCase: true);
                text = text.Replace("{contactemail}", staff.EmailAddress, ignoreCase: true);
                text = text.Replace("{contactphone}", Organization.PhoneNumber.FmtFone(), ignoreCase: true);
                text = text.Replace("{details}", details, ignoreCase: true);

                var from = Util.TryGetMailAddress(DbUtil.Db.StaffEmailForOrg(orgid));
                var mm   = new EmailReplacements(DbUtil.Db, text, from);
                text = mm.DoReplacements(DbUtil.Db, person);

                Util.SendMsg(Util.SysFromEmail, Util.Host, from, Setting.Subject, text,
                             Util.EmailAddressListFromString(contributionEmail), 0, pid);
            }

            Util.SendMsg(Util.SysFromEmail, Util.Host, Util.TryGetMailAddress(contributionEmail),
                         "Managed Giving",
                         $"Managed giving for {person.Name} ({pid})",
                         Util.EmailAddressListFromString(DbUtil.Db.StaffEmailForOrg(orgid)),
                         0, pid);

            var msg = GetThankYouMessage(@"<p>Thank you {first}, for managing your recurring giving</p>
<p>You should receive a confirmation email shortly.</p>");

            msg             = msg.Replace("{first}", person.PreferredName, ignoreCase: true);
            ThankYouMessage = msg;
        }
Esempio n. 5
0
        public void RsvpLink_Should_Have_regrets_Parameter()
        {
            using (var db = CMSDataContext.Create(DatabaseFixture.Host))
            {
                EmailReplacements email = new EmailReplacements(db, "", new System.Net.Mail.MailAddress("*****@*****.**"));
                EmailQueueTo      queue = new EmailQueueTo();

                queue.PeopleId      = 1;
                queue.Id            = 1;
                queue.GoerSupportId = 1;

                var    dynMethod = email.GetType().GetMethod("UnlayerLinkReplacement", BindingFlags.NonPublic | BindingFlags.Instance);
                string url       = dynMethod.Invoke(email, new object[] { "https://regretslink/?meeting=370&amp;confirm=true", queue }).ToString();

                url.ShouldContain("&regrets=true");
            }
        }
Esempio n. 6
0
        public ActionResult Application(int orgid, int peopleid, string content)
        {
#if DEBUG2
            var c            = System.IO.File.ReadAllText(Server.MapPath("/Application.html"));
            var replacements = new EmailReplacements(DbUtil.Db, c, null);
#else
            var c = DbUtil.Db.Content(content);
            if (c == null)
            {
                return(Message("no content at " + content));
            }
            var replacements = new EmailReplacements(DbUtil.Db, c.Body, null);
#endif
            var p = DbUtil.Db.LoadPersonById(peopleid);
            DbUtil.Db.SetCurrentOrgId(orgid);
            ViewBag.html = replacements.DoReplacements(DbUtil.Db, p);
            return(View());
        }
Esempio n. 7
0
        public ActionResult SaveProgress(OnlineRegModel m)
        {
            m.HistoryAdd("saveprogress");
            if (m.UserPeopleId == null)
            {
                m.UserPeopleId = Util.UserPeopleId;
            }
            m.UpdateDatum();
            var p = m.UserPeopleId.HasValue ? CurrentDatabase.LoadPersonById(m.UserPeopleId.Value) : m.List[0].person;

            if (p == null)
            {
                return(Content("We have not found your record yet, cannot save progress, sorry"));
            }
            if (m.masterorgid == null && m.Orgid == null)
            {
                return(Content("Registration is not far enough along to save, sorry."));
            }

            var msg          = CurrentDatabase.ContentHtml("ContinueRegistrationLink", @"
<p>Hi {first},</p>
<p>Here is the link to continue your registration:</p>
Resume [registration for {orgname}]
").Replace("{orgname}", m.Header);
            var linktext     = Regex.Match(msg, @"(\[(.*)\])", RegexOptions.Singleline).Groups[2].Value;
            var registerlink = EmailReplacements.CreateRegisterLink(m.masterorgid ?? m.Orgid, linktext);

            msg = Regex.Replace(msg, @"(\[.*\])", registerlink, RegexOptions.Singleline);

            var notifyids = CurrentDatabase.NotifyIds((m.masterorg ?? m.org).NotifyIds);

            CurrentDatabase.Email(notifyids[0].FromEmail, p, $"Continue your registration for {m.Header}", msg);

            /* We use Content as an ActionResult instead of Message because we want plain text sent back
             * This is an HttpPost ajax call and will have a SiteLayout wrapping this.
             */
            return(Content(@"
We have saved your progress. An email with a link to finish this registration will come to you shortly.
<input type='hidden' id='SavedProgress' value='true'/>
"));
        }
Esempio n. 8
0
        public override void ExecuteResult(ControllerContext context)
        {
            var response = context.HttpContext.Response;

            var list = ExcelExportModel.DirectoryList(id);

            if (list.Count == 0)
            {
                response.Write("no data found");
                return;
            }
            var wc    = new WebClient();
            var bytes = wc.DownloadData(template);

            var ms = new MemoryStream(bytes);

            docx = DocX.Load(ms);

            replacements = new EmailReplacements(DbUtil.Db, docx);
            emptyReplacementsDictionary = replacements.DocXReplacementsDictionary(null);

            if (emptyReplacementsDictionary.ContainsKey("{lastnamestartswith}"))
            {
                BuildDocumentIndexStyle(list);
            }
            else
            {
                BuildDocument(list);
            }

            response.Clear();
            response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
            response.AddHeader("content-disposition", $"attachment;filename={filename}-{DateTime.Now.ToSortableDateTime()}.docx");

            ms = new MemoryStream();
            docx.SaveAs(ms);
            ms.WriteTo(response.OutputStream);
            response.End();
        }
Esempio n. 9
0
        public ActionResult FinishLater(int id)
        {
            var ed = DbUtil.Db.RegistrationDatas.SingleOrDefault(e => e.Id == id);

            if (ed != null)
            {
                var m = Util.DeSerialize <OnlineRegModel>(ed.Data);

                var registerLink = EmailReplacements.CreateRegisterLink(m.masterorgid ?? m.Orgid, "Resume registration for {0}".Fmt(m.Header));
                var msg          = "<p>Hi {first},</p>\n<p>Here is the link to continue your registration:</p>\n" + registerLink;
                Debug.Assert((m.masterorgid ?? m.Orgid) != null, "m.Orgid != null");
                var notifyids = DbUtil.Db.NotifyIds((m.masterorgid ?? m.Orgid).Value, (m.masterorg ?? m.org).NotifyIds);
                var p         = m.UserPeopleId.HasValue ? DbUtil.Db.LoadPersonById(m.UserPeopleId.Value) : m.List[0].person;
                DbUtil.Db.Email(notifyids[0].FromEmail, p, "Continue your registration for {0}".Fmt(m.Header), msg);

                /* We use Content as an ActionResult instead of Message because we want plain text sent back
                 * This is an HttpPost ajax call and will have a SiteLayout wrapping this.
                 */
                //return Content("We have saved your progress. An email with a link to finish this registration will come to you shortly.");

                return(View(m));
            }
            return(View("Unknown"));
        }
Esempio n. 10
0
        private void DoHeaderFooterParagraphReplacments(Paragraph p, OrgInfo o)
        {
            var list = EmailReplacements.TextReplacementsList(p.Text);

            foreach (var code in list)
            {
                if (code.StartsWith("{datemeeting"))
                {
                    p.ReplaceText(code,
                                  Util.PickFirst(EmailReplacements
                                                 .DateFormattedReplacement(NewMeetingInfo.MeetingDate, code)
                                                 , "____"));
                }
                else if (code == "{orgname}")
                {
                    p.ReplaceText(code, o.Name);
                }
                else if (code == "{today}")
                {
                    p.ReplaceText(code, DateTime.Today.ToShortDateString());
                }
                else if (code == "{orgid}")
                {
                    p.ReplaceText(code, o.OrgId.ToString());
                }
                else if (code == "{barcodemeeting}")
                {
                    var text = $"M.{o.OrgId}.{NewMeetingInfo.MeetingDate:MMddyyHHmm}";
                    var s    = BarCodeStream(text, 50, showtext: false);
                    var img  = curr.AddImage(s);
                    p.AppendPicture(img.CreatePicture());
                    p.ReplaceText(code, "");
                    p.Alignment = Alignment.right;
                }
            }
        }
Esempio n. 11
0
        public ActionResult SendLink(string id)
        {
            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.SplitStr(",", 4);
            var orgid    = a[0].ToInt();
            var pid      = a[1].ToInt();
            var queueid  = a[2].ToInt();
            var linktype = a[3]; // for supportlink, this will also have the goerid
            var q        = (from pp in DbUtil.Db.People
                            where pp.PeopleId == pid
                            let org = DbUtil.Db.LoadOrganizationById(orgid)
                                      select new { p = pp, org }).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("sorry, registration is no longer available"));
            }

            ot.Used = true;
            DbUtil.Db.SubmitChanges();
            DbUtil.LogActivity("Sendlink: {0}".Fmt(q.org.OrganizationName));

            var subject = "Your link for " + q.org.OrganizationName;
            var msg     = @"<p>Here is your <a href=""{0}"">LINK</a></p>
<p>Note: If you did not request this link, please ignore this email,
or contact the church if you need help.</p>"
                          .Fmt(EmailReplacements.RegisterLinkUrl(DbUtil.Db, orgid, pid, queueid, linktype));
            var NotifyIds = DbUtil.Db.StaffPeopleForOrg(q.org.OrganizationId);

            DbUtil.Db.Email(NotifyIds[0].FromEmail, q.p, subject, msg); // send confirmation

            return(Content("Thank you, {0}, we just sent an email to {1} with your link...".Fmt(q.p.PreferredName, Util.ObscureEmail(q.p.EmailAddress))));
        }
Esempio n. 12
0
 public ActionResult Test(int?id)
 {
     EmailReplacements.ReCodes();
     return(Content("no test"));
 }
Esempio n. 13
0
        private static void ValidateEmailReplacementCodes(CMSDataContext db, string emailText, MailAddress fromAddress)
        {
            var er = new EmailReplacements(db, emailText, fromAddress);

            er.DoReplacements(db, DbUtil.Db.LoadPersonById(Util.UserPeopleId.Value));
        }
Esempio n. 14
0
        public ActionResult SendLink(string id, FormCollection formCollection)
        {
            var li = new LinkInfo(sendlinkSTR, landingSTR, id);

            if (li.error.HasValue())
            {
                return(Message(li.error));
            }

            try
            {
                if (!li.pid.HasValue)
                {
                    throw new Exception("missing peopleid");
                }

                if (!li.oid.HasValue)
                {
                    throw new Exception("missing orgid");
                }

                var queueid  = li.a[2].ToInt();
                var linktype = li.a[3]; // for supportlink, this will also have the goerid
                var q        = (from pp in DbUtil.Db.People
                                where pp.PeopleId == li.pid
                                let org = DbUtil.Db.LoadOrganizationById(li.oid)
                                          select new { p = pp, org }).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.LoadOrganizationById(oid)
                                   select new { p = pp, org }).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("sorry, registration is no longer available");
                }

                DbUtil.LogActivity($"{sendlinkSTR}{confirmSTR}", li.oid, li.pid);

                var expires = DateTime.Now.AddMinutes(DbUtil.Db.Setting("SendlinkExpireMintues", "30").ToInt());
                var c       = DbUtil.Content("SendLinkMessage");
                if (c == null)
                {
                    c = new Content
                    {
                        Name  = "SendLinkMessage",
                        Title = "Your Link for {org}",
                        Body  = @"
<p>Here is your temporary <a href='{url}'>LINK</a> to register for {org}.</p>

<p>This link will expire at {time} (30 minutes).
You may request another link by clicking the link in the original email you received.</p>

<p>Note: If you did not request this link, please ignore this email,
or contact the church if you need help.</p>
"
                    };
                    DbUtil.Db.Contents.InsertOnSubmit(c);
                    DbUtil.Db.SubmitChanges();
                }
                var url = EmailReplacements.RegisterLinkUrl(DbUtil.Db,
                                                            li.oid.Value, li.pid.Value, queueid, linktype, expires);
                var subject = c.Title.Replace("{org}", q.org.OrganizationName);
                var msg     = c.Body.Replace("{org}", q.org.OrganizationName)
                              .Replace("{time}", expires.ToString("f"))
                              .Replace("{url}", url)
                              .Replace("%7Burl%7D", url);

                var NotifyIds = DbUtil.Db.StaffPeopleForOrg(q.org.OrganizationId);
                DbUtil.Db.Email(NotifyIds[0].FromEmail, q.p, subject, msg); // send confirmation

                return(Message($"Thank you, {q.p.PreferredName}, we just sent an email to {Util.ObscureEmail(q.p.EmailAddress)} with your link..."));
            }
            catch (Exception ex)
            {
                DbUtil.LogActivity($"{sendlinkSTR}{confirmSTR}Error: {ex.Message}", li.oid, li.pid);
                return(Message(ex.Message));
            }
        }
Esempio n. 15
0
        private ConfirmEnum ConfirmTransaction(OnlineRegModel m, string transactionId)
        {
            m.ParseSettings();
            if (m.List.Count == 0)
            {
                throw new Exception(" unexpected, no registrants found in confirmation");
            }
            var ret           = ConfirmEnum.Confirm;
            var managingsubs  = m.ManagingSubscriptions();
            var choosingslots = m.ChoosingSlots();
            var t             = m.Transaction;

            if (t == null && !managingsubs && !choosingslots)
            {
                m.HistoryAdd("ConfirmTransaction");
                m.UpdateDatum(completed: true);
                var pf = PaymentForm.CreatePaymentForm(m);
                t        = pf.CreateTransaction(DbUtil.Db);
                m.TranId = t.Id;
            }
            if (t != null)
            {
                ViewBag.message = t.Message;
            }

            if (m.org != null && m.org.RegistrationTypeId == RegistrationTypeCode.CreateAccount)
            {
                m.List[0].CreateAccount();
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (m.OnlineGiving())
            {
                var p = m.List[0];
                if (p.IsNew)
                {
                    p.AddPerson(null, p.org.EntryPointId ?? 0);
                }

                var staff = DbUtil.Db.StaffPeopleForOrg(p.org.OrganizationId)[0];
                var text  = p.setting.Body.Replace("{church}", DbUtil.Db.Setting("NameOfChurch", "church"), ignoreCase: true);
                text = text.Replace("{amt}", (t.Amt ?? 0).ToString("N2"));
                text = text.Replace("{date}", DateTime.Today.ToShortDateString());
                text = text.Replace("{tranid}", t.Id.ToString());
                //text = text.Replace("{name}", p.person.Name);
                text = text.Replace("{account}", "");
                text = text.Replace("{email}", p.person.EmailAddress);
                text = text.Replace("{phone}", p.person.HomePhone.FmtFone());
                text = text.Replace("{contact}", staff.Name);
                text = text.Replace("{contactemail}", staff.EmailAddress);
                text = text.Replace("{contactphone}", p.org.PhoneNumber.FmtFone());
                var re    = new Regex(@"(?<b>.*?)<!--ITEM\sROW\sSTART-->(?<row>.*?)\s*<!--ITEM\sROW\sEND-->(?<e>.*)", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
                var match = re.Match(text);
                var b     = match.Groups["b"].Value;
                var row   = match.Groups["row"].Value.Replace("{funditem}", "{0}").Replace("{itemamt}", "{1:N2}");
                var e     = match.Groups["e"].Value;
                var sb    = new StringBuilder(b);

                var desc = "{0}; {1}; {2}".Fmt(
                    p.person.Name,
                    p.person.PrimaryAddress,
                    p.person.PrimaryZip);
                foreach (var g in p.FundItemsChosen())
                {
                    if (g.amt > 0)
                    {
                        sb.AppendFormat(row, g.desc, g.amt);
                        p.person.PostUnattendedContribution(DbUtil.Db, g.amt, g.fundid, desc, tranid: t.Id);
                    }
                }
                t.TransactionPeople.Add(new TransactionPerson
                {
                    PeopleId = p.person.PeopleId,
                    Amt      = t.Amt,
                    OrgId    = m.Orgid,
                });
                t.Financeonly = true;
                if (t.Donate > 0)
                {
                    var fundname = DbUtil.Db.ContributionFunds.Single(ff => ff.FundId == p.setting.DonationFundId).FundName;
                    sb.AppendFormat(row, fundname, t.Donate);
                    t.Fund = p.setting.DonationFund();
                    p.person.PostUnattendedContribution(DbUtil.Db, t.Donate ?? 0, p.setting.DonationFundId, desc, tranid: t.Id);
                }
                sb.Append(e);
                if (!t.TransactionId.HasValue())
                {
                    t.TransactionId = transactionId;
                    if (m.testing == true && !t.TransactionId.Contains("(testing)"))
                    {
                        t.TransactionId += "(testing)";
                    }
                }
                var contributionemail = (from ex in p.person.PeopleExtras
                                         where ex.Field == "ContributionEmail"
                                         select ex.Data).SingleOrDefault();
                if (contributionemail.HasValue())
                {
                    contributionemail = (contributionemail ?? "").Trim();
                }
                if (!Util.ValidEmail(contributionemail))
                {
                    contributionemail = p.person.FromEmail;
                }


                var body = sb.ToString();
                var from = Util.TryGetMailAddress(DbUtil.Db.StaffEmailForOrg(p.org.OrganizationId));
                var mm   = new EmailReplacements(DbUtil.Db, body, from);
                body = mm.DoReplacements(p.person);

                Util.SendMsg(Util.SysFromEmail, Util.Host, from, p.setting.Subject, body,
                             Util.EmailAddressListFromString(contributionemail), 0, p.PeopleId);
                DbUtil.Db.Email(contributionemail, DbUtil.Db.StaffPeopleForOrg(p.org.OrganizationId),
                                "online giving contribution received",
                                "see contribution records for {0} ({1})".Fmt(p.person.Name, p.PeopleId));
                if (p.CreatingAccount == true)
                {
                    p.CreateAccount();
                }
            }
            else if (managingsubs)
            {
                m.ConfirmManageSubscriptions();
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (choosingslots)
            {
                m.ConfirmPickSlots();
                m.URL = null;
                ViewBag.ManagingVolunteer = true;
                ViewBag.CreatedAccount    = m.List[0].CreatingAccount;
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (m.OnlinePledge())
            {
                m.SendLinkForPledge();
                ViewBag.CreatedAccount = m.List[0].CreatingAccount;
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (m.ManageGiving())
            {
                m.SendLinkToManageGiving();
                ret = ConfirmEnum.ConfirmAccount;
            }
            else if (t.TransactionGateway.ToLower() == "serviceu")
            {
                t.TransactionId = transactionId;
                if (m.testing == true && !t.TransactionId.Contains("(testing)"))
                {
                    t.TransactionId += "(testing)";
                }
                t.Message  = "Transaction Completed";
                t.Approved = true;
                m.EnrollAndConfirm();
                if (m.List.Any(pp => pp.PeopleId == null))
                {
                    LogOutOfOnlineReg();
                    throw new Exception("no person");
                }
                m.UseCoupon(t.TransactionId, t.Amt ?? 0);
            }
            else
            {
                if (!t.TransactionId.HasValue())
                {
                    t.TransactionId = transactionId;
                    if (m.testing == true && !t.TransactionId.Contains("(testing)"))
                    {
                        t.TransactionId += "(testing)";
                    }
                }
                m.EnrollAndConfirm();
                if (m.List.Any(pp => pp.PeopleId == null))
                {
                    LogOutOfOnlineReg();
                    throw new Exception("no person");
                }
                m.UseCoupon(t.TransactionId, t.Amt ?? 0);
            }
            if (m.IsCreateAccount() || m.ManagingSubscriptions())
            {
                m.email = m.List[0].person.EmailAddress;
            }
            else
            {
                m.email = m.List[0].EmailAddress;
            }
            ViewBag.email = m.email;

            if (m.masterorgid.HasValue && m.Orgid.HasValue && !m.settings[m.Orgid.Value].Subject.HasValue())
            {
                ViewBag.orgname = m.masterorg.OrganizationName;
            }
            else
            {
                ViewBag.orgname = m.org != null ? m.org.OrganizationName : m.masterorg.OrganizationName;
            }

            LogOutOfOnlineReg();
            return(ret);
        }
Esempio n. 16
0
        private ConfirmEnum DoOnlineGiving(string transactionReturn)
        {
            var p = List[0];

            if (p.IsNew)
            {
                p.AddPerson(null, p.org.EntryPointId ?? 0);
            }

            var staff = DbUtil.Db.StaffPeopleForOrg(p.org.OrganizationId)[0];
            var text  = p.setting.Body;

            text = text.Replace("{church}", DbUtil.Db.Setting("NameOfChurch", "church"), ignoreCase: true);
            text = text.Replace("{amt}", (Transaction.Amt ?? 0).ToString("N2"));
            text = text.Replace("{date}", DateTime.Today.ToShortDateString());
            text = text.Replace("{tranid}", Transaction.Id.ToString());
            text = text.Replace("{account}", "");
            text = text.Replace("{email}", p.person.EmailAddress);
            text = text.Replace("{phone}", p.person.HomePhone.FmtFone());
            text = text.Replace("{contact}", staff.Name);
            text = text.Replace("{contactemail}", staff.EmailAddress);
            text = text.Replace("{contactphone}", p.org.PhoneNumber.FmtFone());
            var re = new Regex(@"(?<b>.*?)<!--ITEM\sROW\sSTART-->(?<row>.*?)\s*<!--ITEM\sROW\sEND-->(?<e>.*)",
                               RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
            var match = re.Match(text);
            var b     = match.Groups["b"].Value;
            var row   = match.Groups["row"].Value.Replace("{funditem}", "{0}").Replace("{itemamt}", "{1:N2}");
            var e     = match.Groups["e"].Value;
            var sb    = new StringBuilder(b);

            var desc = $"{p.person.Name}; {p.person.PrimaryAddress}; {p.person.PrimaryZip}";

            foreach (var g in p.FundItemsChosen())
            {
                if (g.amt > 0)
                {
                    sb.AppendFormat(row, g.desc, g.amt);
                    p.person.PostUnattendedContribution(DbUtil.Db, g.amt, g.fundid, desc, tranid: Transaction.Id);
                }
            }
            Transaction.TransactionPeople.Add(new TransactionPerson
            {
                PeopleId = p.person.PeopleId,
                Amt      = Transaction.Amt,
                OrgId    = Orgid,
            });
            Transaction.Financeonly = true;
            if (Transaction.Donate > 0)
            {
                var fundname = DbUtil.Db.ContributionFunds.Single(ff => ff.FundId == p.setting.DonationFundId).FundName;
                sb.AppendFormat(row, fundname, Transaction.Donate);
                Transaction.Fund = p.setting.DonationFund();
                p.person.PostUnattendedContribution(DbUtil.Db, Transaction.Donate ?? 0, p.setting.DonationFundId, desc,
                                                    tranid: Transaction.Id);
                Log("PostedContribution");
            }
            sb.Append(e);
            if (!Transaction.TransactionId.HasValue())
            {
                Transaction.TransactionId = transactionReturn;
                if (testing == true && !Transaction.TransactionId.Contains("(testing)"))
                {
                    Transaction.TransactionId += "(testing)";
                }
            }
            var contributionemail = (from ex in p.person.PeopleExtras
                                     where ex.Field == "ContributionEmail"
                                     select ex.Data).SingleOrDefault();

            if (contributionemail.HasValue())
            {
                contributionemail = (contributionemail ?? "").Trim();
            }

            if (Util.ValidEmail(contributionemail))
            {
                Log("UsingSpecialEmail");
            }
            else
            {
                contributionemail = p.person.FromEmail;
            }

            var body = sb.ToString();
            var from = Util.TryGetMailAddress(DbUtil.Db.StaffEmailForOrg(p.org.OrganizationId));
            var mm   = new EmailReplacements(DbUtil.Db, body, @from);

            body = mm.DoReplacements(DbUtil.Db, p.person);

            Util.SendMsg(Util.SysFromEmail, Util.Host, @from, p.setting.Subject, body,
                         Util.EmailAddressListFromString(contributionemail), 0, p.PeopleId);
            DbUtil.Db.Email(contributionemail, DbUtil.Db.StaffPeopleForOrg(p.org.OrganizationId),
                            "online giving contribution received",
                            $"see contribution records for {p.person.Name} ({p.PeopleId})");
            if (p.CreatingAccount)
            {
                p.CreateAccount();
            }
            return(ConfirmEnum.Confirm);
        }
Esempio n. 17
0
        public override void ExecuteResult(ControllerContext context)
        {
            var response = context.HttpContext.Response;

            if (Meetingid.HasValue)
            {
                meeting = DbUtil.Db.Meetings.Single(mt => mt.MeetingId == Meetingid);
                Debug.Assert(meeting.MeetingDate != null, "meeting.MeetingDate != null");
                NewMeetingInfo = new NewMeetingInfo {
                    MeetingDate = meeting.MeetingDate.Value
                };
            }
            var list1 = NewMeetingInfo.ByGroup ? ReportList2().ToList() : ReportList().ToList();

            if (!list1.Any())
            {
                response.Write("no data found");
                return;
            }

            var bytes = RollsheetTemplate() ?? Resource1.DocxRollsheet;
            var ms    = new MemoryStream(bytes);

            docx         = DocX.Load(ms);
            replacements = new EmailReplacements(DbUtil.Db, docx);
            var sources = new List <Source>();

            foreach (var o in list1)
            {
                curr = docx.Copy();

                foreach (var p in curr.Headers.odd.Paragraphs)
                {
                    DoHeaderFooterParagraphReplacments(p, o);
                }
                foreach (var p in curr.Footers.odd.Paragraphs)
                {
                    DoHeaderFooterParagraphReplacments(p, o);
                }

                var tbl      = curr.Tables[0];
                var emptyrow = tbl.InsertRow();
                tbl.Rows.Add(emptyrow);
                tbl.RemoveRow(0);

                if (meeting != null)
                {
                    var q = from at in meeting.Attends
                            where at.AttendanceFlag || AttendCommitmentCode.committed.Contains(at.Commitment ?? 0)
                            orderby at.Person.LastName, at.Person.FamilyId, at.Person.Name2
                        select new RollsheetPersonInfo()
                    {
                        Person         = at.Person,
                        MemberTypeCode = at.MemberType.Code,
                    };
                    foreach (var m in q)
                    {
                        AddRowWithReplacements(tbl, m, meeting.OrganizationId);
                    }
                }
                else if (OrgSearchModel != null)
                {
                    var q = from om in DbUtil.Db.OrganizationMembers
                            where om.OrganizationId == o.OrgId
                            join m in DbUtil.Db.OrgPeople(o.OrgId, o.Groups) on om.PeopleId equals m.PeopleId
                            where om.EnrollmentDate <= Util.Now
                            orderby om.Person.LastName, om.Person.FamilyId, om.Person.Name2
                    let p = om.Person
                            let useAltName = NewMeetingInfo.UseAltNames && p.AltName != null && p.AltName.Length > 0
                                             select new RollsheetPersonInfo()
                    {
                        Person         = p,
                        MemberTypeCode = om.MemberType.Code,
                        UseAltName     = useAltName,
                        Highlight      = om.OrgMemMemTags.Any(mm => mm.MemberTag.Name == NewMeetingInfo.HighlightGroup)
                                        ? NewMeetingInfo.HighlightGroup
                                        : ""
                    };
                    foreach (var m in q)
                    {
                        AddRowWithReplacements(tbl, m, o.OrgId);
                    }
                }
                else if (Filter?.GroupSelect == GroupSelectCode.Member)
                {
                    var q = from om in DbUtil.Db.OrganizationMembers
                            where om.OrganizationId == Filter.Id
                            join m in DbUtil.Db.OrgFilterPeople(QueryId, null)
                            on om.PeopleId equals m.PeopleId
                            where om.EnrollmentDate <= Util.Now
                            where NewMeetingInfo.ByGroup == false || m.Groups.Contains((char)10 + o.Groups + (char)10)
                            orderby om.Person.LastName, om.Person.FamilyId, om.Person.Name2
                    let p = om.Person
                            let useAltName = NewMeetingInfo.UseAltNames && p.AltName != null && p.AltName.Length > 0
                                             select new RollsheetPersonInfo()
                    {
                        Person         = p,
                        MemberTypeCode = om.MemberType.Code,
                        UseAltName     = useAltName,
                        Highlight      =
                            om.OrgMemMemTags.Any(mm => mm.MemberTag.Name == NewMeetingInfo.HighlightGroup)
                                        ? NewMeetingInfo.HighlightGroup
                                        : ""
                    };
                    foreach (var m in q)
                    {
                        AddRowWithReplacements(tbl, m, o.OrgId);
                    }
                }
                else
                {
                    var q = from m in DbUtil.Db.OrgFilterPeople(QueryId, null)
                            orderby m.Name2
                            let p                   = DbUtil.Db.People.Single(pp => pp.PeopleId == m.PeopleId)
                                             let om = p.OrganizationMembers.SingleOrDefault(mm => mm.OrganizationId == Filter.Id)
                                                      let useAltName = NewMeetingInfo.UseAltNames && p.AltName != null && p.AltName.Length > 0
                                                                       select new RollsheetPersonInfo
                    {
                        Person         = p,
                        MemberTypeCode = om == null ? "Guest" : om.MemberType.Code,
                        UseAltName     = useAltName,
                        Highlight      = om.OrgMemMemTags.Any(mm => mm.MemberTag.Name == NewMeetingInfo.HighlightGroup)
                                    ? NewMeetingInfo.HighlightGroup
                                    : ""
                    };

                    foreach (var m in q)
                    {
                        AddRowWithReplacements(tbl, m, o.OrgId);
                    }
                }
                if ((OrgSearchModel != null && NewMeetingInfo.ByGroup == false) ||
                    (Filter != null &&
                     Filter.GroupSelect == GroupSelectCode.Member &&
                     meeting == null &&
                     !Filter.SgFilter.HasValue() &&
                     !Filter.NameFilter.HasValue() &&
                     !Filter.FilterIndividuals == true &&
                     !Filter.FilterTag == true &&
                     NewMeetingInfo.ByGroup == false))
                {
                    var q = from vp in DbUtil.Db.OrgVisitorsAsOfDate(o.OrgId, NewMeetingInfo.MeetingDate, NoCurrentMembers: true)
                            let p = DbUtil.Db.People.Single(pp => pp.PeopleId == vp.PeopleId)
                                    orderby p.LastName, p.FamilyId, p.PreferredName
                        select new RollsheetPersonInfo {
                        Person = p, MemberTypeCode = vp.VisitorType
                    };
                    foreach (var m in q)
                    {
                        AddRowWithReplacements(tbl, m, o.OrgId);
                    }
                }
                curr.Tables[0].RemoveRow(0);
                {
                    var memStream = new MemoryStream();
                    curr.SaveAs(memStream);
                    memStream.Position = 0;
                    var wmlDocument = new WmlDocument(null, memStream);
                    sources.Add(new Source(wmlDocument, keepSections: true));
                }
            }

            context.HttpContext.Response.Clear();
            context.HttpContext.Response.ContentType =
                "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
            context.HttpContext.Response.AddHeader("Content-Disposition",
                                                   $"attachment;filename=rollsheet.docx");
            var finaldoc = DocumentBuilder.BuildDocument(sources);

            context.HttpContext.Response.OutputStream.Write(finaldoc.DocumentByteArray, 0, finaldoc.DocumentByteArray.Length);
        }
Esempio n. 18
0
        public ActionResult SendLink(string id, FormCollection formCollection)
        {
            var li = new LinkInfo(CurrentDatabase, sendlinkSTR, landingSTR, id);

            if (li.error.HasValue())
            {
                return(Message(li.error));
            }

            try
            {
                if (!li.pid.HasValue)
                {
                    throw new Exception("missing peopleid");
                }

                if (!li.oid.HasValue)
                {
                    throw new Exception("missing orgid");
                }

                var queueid  = li.a[2].ToInt();
                var linktype = li.a[3]; // for supportlink, this will also have the goerid

                int?gsid = null;
                if (linktype.Contains("supportlink:"))
                {
                    gsid = linktype.Split(':')[1].ToInt();
                }

                Organization  oorg   = null;
                Person        person = null;
                string        personPreferredName;
                string        personEmailAddress;
                GoerSupporter gs = null;
                if (li.pid == 0)
                {
                    oorg = CurrentDatabase.Organizations.SingleOrDefault(o => o.OrganizationId == li.oid);
                    gs   = CurrentDatabase.GoerSupporters.SingleOrDefault(s => s.Id == gsid);
                    personPreferredName = string.Empty;
                    personEmailAddress  = gs.NoDbEmail;
                }
                else
                {
                    var q = (from pp in CurrentDatabase.People
                             where pp.PeopleId == li.pid
                             let org = CurrentDatabase.LoadOrganizationById(li.oid)
                                       select new { p = pp, org }).Single();

                    oorg   = q.org;
                    person = q.p;
                    personPreferredName = $"{person.PreferredName}, ";
                    personEmailAddress  = person.EmailAddress;
                }

                if (oorg == null && CurrentDatabase.Host == "trialdb")
                {
                    var oid = li.oid + Util.TrialDbOffset;
                    var q   = (from pp in CurrentDatabase.People
                               where pp.PeopleId == li.pid
                               let org = CurrentDatabase.LoadOrganizationById(oid)
                                         select new { p = pp, org }).Single();

                    oorg   = q.org;
                    person = q.p;
                    personPreferredName = $"{person.PreferredName}, ";
                    personEmailAddress  = person.EmailAddress;
                }

                if (oorg.RegistrationClosed == true || oorg.OrganizationStatusId == OrgStatusCode.Inactive)
                {
                    throw new Exception("sorry, registration has been closed");
                }

                if (oorg.RegistrationTypeId == RegistrationTypeCode.None)
                {
                    throw new Exception("sorry, registration is no longer available");
                }

                DbUtil.LogActivity($"{sendlinkSTR}{confirmSTR}", li.oid, li.pid);

                var    expires = DateTime.Now.AddMinutes(CurrentDatabase.Setting("SendlinkExpireMinutes", "30").ToInt());
                string action  = (linktype.Contains("supportlink") ? "support" : "register for");
                string minutes = CurrentDatabase.Setting("SendLinkExpireMinutes", "30");
                var    c       = DbUtil.Content(CurrentDatabase, "SendLinkMessage");
                if (c == null)
                {
                    c = new Content
                    {
                        Name  = "SendLinkMessage",
                        Title = "Your Link for {org}",
                        Body  = @"
<p>Here is your temporary <a href='{url}'>LINK</a> to {action} {org}.</p>

<p>This link will expire at {time} ({minutes} minutes).
You may request another link by clicking the link in the original email you received.</p>

<p>Note: If you did not request this link, please ignore this email,
or contact the church if you need help.</p>
"
                    };
                    CurrentDatabase.Contents.InsertOnSubmit(c);
                    CurrentDatabase.SubmitChanges();
                }
                var url = EmailReplacements.RegisterLinkUrl(CurrentDatabase,
                                                            li.oid.Value, li.pid.Value, queueid, linktype, expires);
                var subject = c.Title.Replace("{org}", oorg.OrganizationName);
                var msg     = c.Body.Replace("{org}", oorg.OrganizationName)
                              .Replace("{time}", expires.ToString("f"))
                              .Replace("{url}", url)
                              .Replace("{action}", action)
                              .Replace("{minutes}", minutes)
                              .Replace("%7Burl%7D", url);

                var NotifyIds = CurrentDatabase.StaffPeopleForOrg(oorg.OrganizationId);

                if (person != null)
                {
                    CurrentDatabase.Email(NotifyIds[0].FromEmail, person, subject, msg); // send confirmation
                }
                else //send email to no db person
                {
                    var from = new MailAddress(NotifyIds[0].EmailAddress ?? NotifyIds[0].EmailAddress2, NotifyIds[0].Name);
                    CurrentDatabase.SendEmail(from, subject, msg, Util.ToMailAddressList(gs.NoDbEmail), gs.Id);
                }

                return(Message($"Thank you, {personPreferredName}we just sent an email to {Util.ObscureEmail(personEmailAddress)} with your link..."));
            }
            catch (Exception ex)
            {
                DbUtil.LogActivity($"{sendlinkSTR}{confirmSTR}Error: {ex.Message}", li.oid, li.pid);
                return(Message(ex.Message));
            }
        }