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(); } }); }
private void detach_VolResponses(VolRequest entity) { this.SendPropertyChanging(); entity.Volunteer = null; }
private void detach_VolRequests(VolRequest entity) { this.SendPropertyChanging(); entity.Requestor = null; }
private void attach_VolRequests(VolRequest entity) { this.SendPropertyChanging(); entity.Requestor = this; }
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(); } }); }
private void detach_VolRequests(VolRequest entity) { this.SendPropertyChanging(); entity.Meeting = null; }