コード例 #1
0
        public void SendEmails(int? additional)
        {
            var tag = Db.FetchOrCreateTag(Util.SessionId, Util.UserPeopleId, Db.NextTagId);
            Db.ExecuteCommand("delete TagPerson where Id = {0}", tag.Id);
            Db.TagAll(pids, tag);
            var dt = new DateTime(ticks);

            foreach (var id in pids)
            {
                var vr = new VolRequest
                {
                    MeetingId = meeting.MeetingId,
                    RequestorId = person.PeopleId,
                    Requested = dt,
                    VolunteerId = id,
                };
                meeting.VolRequests.Add(vr);
            }

            var qb = Db.QueryBuilderScratchPad();
            qb.CleanSlate(Db);
            qb.AddNewClause(QueryType.HasMyTag, CompareType.Equal, "{0},temp".Fmt(tag.Id));
            meeting.AddEditExtra(Db, "TotalVolunteersNeeded", ((additional ?? 0) + limit).ToString());
            Db.SubmitChanges();

            var reportlink = @"<a href=""{0}OnlineReg/RequestReport/{1}/{2}/{3}"">Volunteer Request Status Report</a>"
                .Fmt(Db.CmsHost, meeting.MeetingId, person.PeopleId, dt.Ticks);
            var list = Db.PeopleFromPidString(org.NotifyIds).ToList();
            //list.Insert(0, person);
            Db.Email(person.FromEmail, list,
                "Volunteer Commitment for " + org.OrganizationName,
                @"
            <p>{0} has requested volunteers on {1:MMM d} for {1:h:mm tt}.</p>
            <blockquote>
            {2}
            </blockquote>".Fmt(person.Name, meeting.MeetingDate, reportlink));

            // Email subs
            var m = new MassEmailer(qb.QueryId, null);
            m.Subject = subject;
            m.Body = message;

            DbUtil.LogActivity("Emailing Vol Subs");
            m.FromName = person.Name;
            m.FromAddress = person.FromEmail;

            var eqid = m.CreateQueue(transactional: true);
            string host = Util.Host;
            // save these from HttpContext to set again inside thread local storage
            var useremail = Util.UserEmail;
            var isinroleemailtest = HttpContext.Current.User.IsInRole("EmailTest");

            TaskAlias.Factory.StartNew(() =>
            {
                Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
                try
                {
                    var db = new CMSDataContext(Util.GetConnectionString(host));
                    db.Host = host;
                    // set these again inside thread local storage
                    Util.UserEmail = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    db.SendPeopleEmail(eqid);
                }
                catch (Exception ex)
                {
                    var ex2 = new Exception("Emailing error for queueid " + eqid, ex);
                    ErrorLog errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var db = new CMSDataContext(Util.GetConnectionString(host));
                    db.Host = host;
                    // set these again inside thread local storage
                    Util.UserEmail = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    var equeue = db.EmailQueues.Single(ee => ee.Id == eqid);
                    equeue.Error = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
        }
コード例 #2
0
ファイル: Person.cs プロジェクト: GSBCfamily/bvcms
		private void detach_VolResponses(VolRequest entity)
		{
			this.SendPropertyChanging();
			entity.Volunteer = null;
		}
コード例 #3
0
ファイル: Person.cs プロジェクト: GSBCfamily/bvcms
		private void detach_VolRequests(VolRequest entity)
		{
			this.SendPropertyChanging();
			entity.Requestor = null;
		}
コード例 #4
0
ファイル: Person.cs プロジェクト: GSBCfamily/bvcms
		private void attach_VolRequests(VolRequest entity)
		{
			this.SendPropertyChanging();
			entity.Requestor = this;
		}
コード例 #5
0
        public void SendEmails(int? additional)
        {
            var tag = Db.FetchOrCreateTag(Util.SessionId, Util.UserPeopleId, Db.NextTagId);
            Db.ExecuteCommand("delete TagPerson where Id = {0}", tag.Id);
            Db.TagAll(pids, tag);
            var dt = new DateTime(ticks);

            foreach (var id in pids)
            {
                var vr = new VolRequest
                {
                    MeetingId = meeting.MeetingId,
                    RequestorId = person.PeopleId,
                    Requested = dt,
                    VolunteerId = id
                };
                meeting.VolRequests.Add(vr);
            }

            var qb = Db.ScratchPadCondition();
            qb.Reset();
            qb.AddNewClause(QueryType.HasMyTag, CompareType.Equal, $"{tag.Id},temp");
            meeting.AddEditExtra(Db, "TotalVolunteersNeeded", ((additional ?? 0) + limit).ToString());
            qb.Save(DbUtil.Db);

            var rurl = DbUtil.Db.ServerLink($"/OnlineReg/VolRequestReport/{meeting.MeetingId}/{person.PeopleId}/{dt.Ticks}");
            var reportlink = $@"<a href=""{rurl}"">Volunteer Request Status Report</a>";
            var list = Db.PeopleFromPidString(org.NotifyIds).ToList();
            //list.Insert(0, person);
            Db.Email(person.FromEmail, list,
                "Volunteer Commitment for " + org.OrganizationName,
                $@"
            <p>{person.Name} has requested volunteers on {meeting.MeetingDate:MMM d} for {meeting.MeetingDate:h:mm tt}.</p>
            <blockquote>
            {reportlink}
            </blockquote>");

            // Email subs
            var m = new MassEmailer(qb.Id);
            m.Subject = subject;
            m.Body = message;

            DbUtil.LogActivity("Emailing Vol Subs");
            m.FromName = person.Name;
            m.FromAddress = person.FromEmail;

            var eqid = m.CreateQueue(true).Id;
            var host = Util.Host;
            // save these from HttpContext to set again inside thread local storage
            var useremail = Util.UserEmail;
            var isinroleemailtest = HttpContext.Current.User.IsInRole("EmailTest");

            HostingEnvironment.QueueBackgroundWorkItem(ct =>
            {
                try
                {
                    var db = DbUtil.Create(host);
                    // set these again inside thread local storage
                    Util.UserEmail = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    db.SendPeopleEmail(eqid);
                }
                catch (Exception ex)
                {
                    var ex2 = new Exception("Emailing error for queueid " + eqid, ex);
                    var errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var db = DbUtil.Create(host);
                    // set these again inside thread local storage
                    Util.UserEmail = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    var equeue = db.EmailQueues.Single(ee => ee.Id == eqid);
                    equeue.Error = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
        }
コード例 #6
0
 private void detach_VolRequests(VolRequest entity)
 {
     this.SendPropertyChanging();
     entity.Meeting = null;
 }