Beispiel #1
0
        //[Route("~/Pushpay/Registration/{DatumId:int}")]
        public async Task <ActionResult> Registration(PaymentForm pf)
        {
            OnlineRegModel    m     = new OnlineRegModel(CurrentDatabase);
            RegistrationDatum datum = CurrentDatabase.RegistrationDatas.SingleOrDefault(d => d.Id == pf.DatumId);

            if (datum == null)
            {
                ViewBag.Message = "Something went wrong";
                CurrentDatabase.LogActivity($"No datum found with id: {pf.DatumId}");
                return(View("~/Views/Shared/PageError.cshtml"));
            }

            decimal?Amount = pf.AmtToPay;
            var     mobile = CurrentDatabase.People.SingleOrDefault(p => p.PeopleId == m.UserPeopleId)?.CellPhone;
            var     org    = CurrentDatabase.Organizations.SingleOrDefault(o => o.OrganizationId == pf.OrgId);

            if (org == null)
            {
                ViewBag.Message = "Something went wrong";
                CurrentDatabase.LogActivity($"No org found with id: {pf.OrgId}");
                return(View("~/Views/Shared/PageError.cshtml"));
            }

            var fundName = await _resolver.GetOrgFund(CurrentDatabase.CreateRegistrationSettings(pf.OrgId.Value).PushpayFundName);

            var merchantHandle = GetMerchantHandle(pf.OrgId.Value);

            return(Redirect($"{_givingLink}{merchantHandle}?ru={_ru}&sr=re_{_state}_{pf.DatumId}-{pf.Amtdue}&rcv=false&r=no&up={mobile}&a={Amount}&fnd={fundName}&al=true&fndv=lock"));
        }
Beispiel #2
0
        public ActionResult QuestionsUpdate(int id)
        {
            var m = CurrentDatabase.CreateRegistrationSettings(id);

            DbUtil.LogActivity($"Update SettingsQuestions {m.org.OrganizationName}");
            m.AskItems.Clear();
            m.TimeSlots.list.Clear();
            try
            {
                if (!TryUpdateModel(m))
                {
                    var q = from e in ModelState.Values
                            where e.Errors.Count > 0
                            select e.Errors[0].ErrorMessage;
                    throw new Exception(q.First());
                }
                var s = m.ToString();
                m = CurrentDatabase.CreateRegistrationSettings(s, id);
                m.org.UpdateRegSetting(m);
                CurrentDatabase.SubmitChanges();
                CheckDuplicates(id);

                if (!m.org.NotifyIds.HasValue())
                {
                    ModelState.AddModelError("Form", needNotify);
                }
                return(PartialView("Registration/Questions", m));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("Form", ex.Message);
                return(Content("error:" + ex.Message));
            }
        }
Beispiel #3
0
        public async Task <ActionResult> PayAmtDue(int transactionId, decimal amtdue, int OrgId)
        {
            var fundName = await _resolver.GetOrgFund(CurrentDatabase.CreateRegistrationSettings(OrgId).PushpayFundName);

            var merchantHandle = GetMerchantHandle(OrgId);

            return(Redirect($"{_givingLink}{merchantHandle}?ru={_ru}&sr=pd_{_state}_{transactionId}&rcv=false&r=no&a={amtdue}&fnd={fundName}&al=true&fndv=lock"));
        }
Beispiel #4
0
        public void Update()
        {
            this.CopyPropertiesTo(Org, typeof(OrgAttribute));
            RegSettings.OrgFees.Clear();
            this.CopyPropertiesTo(RegSettings, typeof(RegAttribute));
            var os = CurrentDatabase.CreateRegistrationSettings(RegSettings.ToString(), Id);

            Org.UpdateRegSetting(os);
            CurrentDatabase.SubmitChanges();
        }
Beispiel #5
0
        private string GetMerchantHandle(int orgId)
        {
            var merchantHandle = CurrentDatabase.CreateRegistrationSettings(orgId).PushpayMerchantName;

            if (string.IsNullOrEmpty(merchantHandle))
            {
                return(_defaultMerchantHandle);
            }

            return(merchantHandle);
        }
Beispiel #6
0
        public ActionResult Index(int id)
        {
            var org = CurrentDatabase.LoadOrganizationById(id);

            ViewData["OrganizationId"] = id;
            ViewData["orgname"]        = org.OrganizationName;
            var regsetting = org.RegSettingXml;
            var os         = CurrentDatabase.CreateRegistrationSettings(regsetting, id);

            regsetting       = os.ToString();
            ViewData["text"] = regsetting;
            return(View());
        }
Beispiel #7
0
        private void SetHeaders(int id)
        {
            Settings setting = null;
            var      org     = CurrentDatabase.LoadOrganizationById(id);

            if (org != null)
            {
                SetHeaders2(id);
                return;
            }

            var shell = SetAlternativeManagedGivingShell();

            if (!shell.HasValue() && (settings == null || !settings.ContainsKey(id)))
            {
                setting = CurrentDatabase.CreateRegistrationSettings(id);
                shell   = DbUtil.Content(CurrentDatabase, setting.Shell, null);
            }
            if (!shell.HasValue() && settings != null && settings.ContainsKey(id))
            {
                shell = DbUtil.Content(CurrentDatabase, settings[id].Shell, null);
            }
            if (!shell.HasValue())
            {
                shell = DbUtil.Content(CurrentDatabase, "ShellDiv-" + id, DbUtil.Content(CurrentDatabase, "ShellDefault", ""));
            }

            var s = shell;

            if (s.HasValue())
            {
                var re = new Regex(@"(.*<!--FORM START-->\s*).*(<!--FORM END-->.*)", RegexOptions.Singleline);
                var t  = re.Match(s).Groups[1].Value.Replace("<!--FORM CSS-->",
                                                             ViewExtensions2.jQueryUICss() +
                                                             "\r\n<link href=\"/Content/styles/onlinereg.css?v=8\" rel=\"stylesheet\" type=\"text/css\" />\r\n");
                ViewBag.hasshell = true;
                var b = re.Match(s).Groups[2].Value;
                ViewBag.bottom = b;
            }
            else
            {
                ViewBag.hasshell = false;
                ViewBag.header   = DbUtil.Content(CurrentDatabase, "OnlineRegHeader-" + id,
                                                  DbUtil.Content(CurrentDatabase, "OnlineRegHeader", ""));
                ViewBag.top = DbUtil.Content(CurrentDatabase, "OnlineRegTop-" + id,
                                             DbUtil.Content(CurrentDatabase, "OnlineRegTop", ""));
                ViewBag.bottom = DbUtil.Content(CurrentDatabase, "OnlineRegBottom-" + id,
                                                DbUtil.Content(CurrentDatabase, "OnlineRegBottom", ""));
            }
        }
Beispiel #8
0
        public void RegMessagesXml(Stream stream, Settings.Messages messages)
        {
            var q = FetchOrgs();
            var w = new CmsData.API.APIWriter(stream);

            w.Start("OrgSearch");
            foreach (var o in q)
            {
                var os = CurrentDatabase.CreateRegistrationSettings(o.OrganizationId);
                os.WriteXmlMessages(w.writer, messages);
            }
            w.End();
            w.writer.Flush();
        }
Beispiel #9
0
        public void RegSettingsXml(Stream stream)
        {
            var q = FetchOrgs();
            var w = new CmsData.API.APIWriter(stream);

            w.Start("OrgSearch");
            foreach (var o in q)
            {
                var os = CurrentDatabase.CreateRegistrationSettings(o.OrganizationId);
                Util.Serialize(os, w.writer);
            }
            w.End();
            w.writer.Flush();
        }
Beispiel #10
0
        public void ParseSettings()
        {
            var list = new Dictionary <int, Settings>();

            if (masterorgid.HasValue)
            {
                foreach (var o in UserSelectClasses(masterorg))
                {
                    list[o.OrganizationId] = CurrentDatabase.CreateRegistrationSettings(o.OrganizationId);
                }

                list[masterorg.OrganizationId] = CurrentDatabase.CreateRegistrationSettings(masterorg.OrganizationId);
            }
            else if (_orgid == null)
            {
                return;
            }
            else if (org != null)
            {
                list[_orgid.Value] = CurrentDatabase.CreateRegistrationSettings(_orgid.Value);
            }

            HttpContextFactory.Current.Items["RegSettings"] = list;

            if (org == null || !org.AddToSmallGroupScript.HasValue())
            {
                return;
            }

            var script = CurrentDatabase.Content(org.AddToSmallGroupScript);

            if (script == null || !script.Body.HasValue())
            {
                return;
            }

            Log("Script:" + org.AddToSmallGroupScript);
            try
            {
                var pe = new PythonModel(CurrentDatabase.Host, "RegisterEvent", script.Body);
                HttpContextFactory.Current.Items["PythonEvents"] = pe;
            }
            catch (Exception ex)
            {
                Log("PythonError");
                org.AddToExtraText("Python.errors", ex.Message);
                throw;
            }
        }
Beispiel #11
0
        public ActionResult Update(int id, string text)
        {
            var org = CurrentDatabase.LoadOrganizationById(id);

            try
            {
                var os = CurrentDatabase.CreateRegistrationSettings(text, id);
                org.UpdateRegSetting(os);
                CurrentDatabase.SubmitChanges();
            }
            catch (Exception ex)
            {
                Util.TempError = ex.Message;
            }
            return(Redirect("/RegSettings/" + id));
        }
Beispiel #12
0
        private void SetHeaders2(int id)
        {
            var org   = CurrentDatabase.LoadOrganizationById(id);
            var shell = GetAlternativeManagedGivingShell(org.OrganizationId);

            if (!shell.HasValue() && (settings == null || !settings.ContainsKey(id)) && org != null)
            {
                var setting = CurrentDatabase.CreateRegistrationSettings(id);
                shell = CurrentDatabase.ContentOfTypeHtml(setting.ShellBs)?.Body;
            }
            if (!shell.HasValue() && settings != null && settings.ContainsKey(id))
            {
                shell = CurrentDatabase.ContentOfTypeHtml(settings[id].ShellBs)?.Body;
            }

            if (!shell.HasValue())
            {
                shell = CurrentDatabase.ContentOfTypeHtml("ShellDefaultBs")?.Body;
                if (!shell.HasValue())
                {
                    shell = CurrentDatabase.ContentOfTypeHtml("DefaultShellBs")?.Body;
                }
            }


            if (shell != null && shell.HasValue())
            {
                shell = shell.Replace("{title}", ViewBag.Title);
                var re = new Regex(@"(.*<!--FORM START-->\s*).*(<!--FORM END-->.*)", RegexOptions.Singleline);
                var t  = re.Match(shell).Groups[1].Value.Replace("<!--FORM CSS-->", ViewExtensions2.Bootstrap3Css());
                ViewBag.hasshell = true;
                ViewBag.top      = t;
                var b = re.Match(shell).Groups[2].Value;
                ViewBag.bottom = b;
            }
            else
            {
                ViewBag.hasshell = false;
            }
        }
Beispiel #13
0
 public ActionResult QuestionsEdit(int id)
 {
     return(PartialView("Registration/QuestionsEdit", CurrentDatabase.CreateRegistrationSettings(id)));
 }
Beispiel #14
0
 public ActionResult QuestionsHelpToggle(int id)
 {
     CurrentDatabase.ToggleUserPreference("ShowQuestionsHelp");
     return(PartialView("Registration/Questions", CurrentDatabase.CreateRegistrationSettings(id)));
 }
Beispiel #15
0
        public ActionResult VoteLinkSg(string id, string message, bool?confirm, FormCollection formCollection)
        {
            var li = new LinkInfo(votelinkSTR, confirmSTR, id);

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

            try
            {
                var smallgroup = li.a[4];

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

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

                var q = (from pp in CurrentDatabase.People
                         where pp.PeopleId == li.pid
                         let org = CurrentDatabase.Organizations.SingleOrDefault(oo => oo.OrganizationId == li.oid)
                                   let om = CurrentDatabase.OrganizationMembers.SingleOrDefault(oo => oo.OrganizationId == li.oid && oo.PeopleId == li.pid)
                                            select new { p = pp, org, om }).Single();

                if (q.org == null && CurrentDatabase.Host == "trialdb")
                {
                    var oid = li.oid + Util.TrialDbOffset;
                    q = (from pp in CurrentDatabase.People
                         where pp.PeopleId == li.pid
                         let org = CurrentDatabase.Organizations.SingleOrDefault(oo => oo.OrganizationId == oid)
                                   let om = CurrentDatabase.OrganizationMembers.SingleOrDefault(oo => oo.OrganizationId == oid && oo.PeopleId == li.pid)
                                            select new { p = pp, org, om }).Single();
                }

                if (q.org == null)
                {
                    throw new Exception("org missing, bad link");
                }
                if ((q.org.RegistrationTypeId ?? RegistrationTypeCode.None) == RegistrationTypeCode.None)
                {
                    throw new Exception("votelink is no longer active");
                }

                if (q.om == null && q.org.Limit <= q.org.RegLimitCount(CurrentDatabase))
                {
                    throw new Exception("sorry, maximum limit has been reached");
                }

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

                var setting = CurrentDatabase.CreateRegistrationSettings(li.oid.Value);
                if (IsSmallGroupFilled(setting, li.oid.Value, smallgroup))
                {
                    throw new Exception("sorry, maximum limit has been reached for " + smallgroup);
                }

                var omb = OrganizationMember.Load(CurrentDatabase, li.pid.Value, li.oid.Value) ??
                          OrganizationMember.InsertOrgMembers(CurrentDatabase,
                                                              li.oid.Value, li.pid.Value, MemberTypeCode.Member, Util.Now, null, false);

                if (q.org.AddToSmallGroupScript.HasValue())
                {
                    var script = CurrentDatabase.Content(q.org.AddToSmallGroupScript);
                    if (script != null && script.Body.HasValue())
                    {
                        try
                        {
                            var pe = new PythonModel(Util.Host, "RegisterEvent", script.Body);
                            pe.instance.AddToSmallGroup(smallgroup, omb);
                        }
                        catch (Exception)
                        {
                        }
                    }
                }
                omb.AddToGroup(CurrentDatabase, smallgroup);
                li.ot.Used = true;
                CurrentDatabase.SubmitChanges();

                DbUtil.LogActivity($"{votelinkSTR}{confirmSTR}: {smallgroup}", li.oid, li.pid);

                if (confirm == true)
                {
                    var subject = Util.PickFirst(setting.Subject, "no subject");
                    var msg     = Util.PickFirst(setting.Body, "no message");
                    msg = APIOrganization.MessageReplacements(CurrentDatabase, q.p, q.org.DivisionName, q.org.OrganizationId, q.org.OrganizationName, q.org.Location, msg);
                    msg = msg.Replace("{details}", smallgroup);
                    var NotifyIds = CurrentDatabase.StaffPeopleForOrg(q.org.OrganizationId);

                    try
                    {
                        CurrentDatabase.Email(NotifyIds[0].FromEmail, q.p, subject, msg); // send confirmation
                    }
                    catch (Exception ex)
                    {
                        CurrentDatabase.Email(q.p.FromEmail, NotifyIds,
                                              q.org.OrganizationName,
                                              "There was a problem sending confirmation from org: " + ex.Message);
                    }
                    CurrentDatabase.Email(q.p.FromEmail, NotifyIds,
                                          q.org.OrganizationName,
                                          $"{q.p.Name} has registered for {q.org.OrganizationName}<br>{smallgroup}<br>(from votelink)");
                }
            }
            catch (Exception ex)
            {
                DbUtil.LogActivity($"{votelinkSTR}{confirmSTR}Error: {ex.Message}", li.oid, li.pid);
                return(Message(ex.Message));
            }

            return(Message(message));
        }
Beispiel #16
0
        public ActionResult RsvpLinkSg(string id, string message, bool?confirm, FormCollection formCollection, bool regrets = false)
        {
            var li = new LinkInfo(rsvplinkSTR, landingSTR, id, false);

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

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

                var meetingid  = li.a[0].ToInt();
                var emailid    = li.a[2].ToInt();
                var smallgroup = li.a[3];
                if (meetingid == 0 && li.a[0].EndsWith(".next"))
                {
                    var orgid    = li.a[0].Split('.')[0].ToInt();
                    var nextmeet = (from mm in CurrentDatabase.Meetings
                                    where mm.OrganizationId == orgid
                                    where mm.MeetingDate > DateTime.Now
                                    orderby mm.MeetingDate
                                    select mm).FirstOrDefault();
                    if (nextmeet == null)
                    {
                        return(Message("no meeting"));
                    }

                    meetingid = nextmeet.MeetingId;
                }
                var q = (from pp in CurrentDatabase.People
                         where pp.PeopleId == li.pid
                         let meeting = CurrentDatabase.Meetings.SingleOrDefault(mm => mm.MeetingId == meetingid)
                                       let org = meeting.Organization
                                                 select new { p = pp, org, meeting }).Single();

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

                if (q.org.RegistrationTypeId == RegistrationTypeCode.None)
                {
                    throw new Exception("rsvp is no longer available");
                }

                if (q.org.Limit <= q.meeting.Attends.Count(aa => aa.Commitment == 1))
                {
                    throw new Exception("sorry, maximum limit has been reached");
                }

                var omb = OrganizationMember.Load(CurrentDatabase, li.pid.Value, q.meeting.OrganizationId) ??
                          OrganizationMember.InsertOrgMembers(CurrentDatabase,
                                                              q.meeting.OrganizationId, li.pid.Value, MemberTypeCode.Member, DateTime.Now, null, false);
                if (smallgroup.HasValue())
                {
                    omb.AddToGroup(CurrentDatabase, smallgroup);
                }

                li.ot.Used = true;
                CurrentDatabase.SubmitChanges();
                Attend.MarkRegistered(CurrentDatabase, li.pid.Value, meetingid, regrets ? AttendCommitmentCode.Regrets : AttendCommitmentCode.Attending);
                DbUtil.LogActivity($"{rsvplinkSTR}{confirmSTR}: {regrets}", q.org.OrganizationId, li.pid);
                var setting = CurrentDatabase.CreateRegistrationSettings(q.meeting.OrganizationId);

                if (confirm == true)
                {
                    var subject = Util.PickFirst(setting.Subject, "no subject");
                    var msg     = Util.PickFirst(setting.Body, "no message");
                    msg = APIOrganization.MessageReplacements(CurrentDatabase, q.p, q.org.DivisionName, q.org.OrganizationId, q.org.OrganizationName, q.org.Location, msg);
                    msg = msg.Replace("{details}", q.meeting.MeetingDate.ToString2("f"));
                    var NotifyIds = CurrentDatabase.StaffPeopleForOrg(q.org.OrganizationId);

                    CurrentDatabase.Email(NotifyIds[0].FromEmail, q.p, subject, msg); // send confirmation
                    CurrentDatabase.Email(q.p.FromEmail, NotifyIds,
                                          q.org.OrganizationName,
                                          $"{q.p.Name} has registered for {q.org.OrganizationName}<br>{q.meeting.MeetingDate.ToString2("f")}");
                }
            }
            catch (Exception ex)
            {
                DbUtil.LogActivity($"{rsvplinkSTR}{confirmSTR}Error: {regrets}", peopleid: li.pid);
                return(Message(ex.Message));
            }
            return(Message(message));
        }