public Guid GetRouterContactUnqueId(int routerContactId) { var db = new GloshareDbContext(); RouterContact user = db.RouterContacts.FirstOrDefault(u => u.RouterContactId == routerContactId); return(user.UniqueId); }
private bool MapRouterUserFromMobileLead(RouterContact user, out RouterUser routerUser2) { routerUser2 = null; GloshareDbContext db = new GloshareDbContext(); var ml = db.MobilelLeads.FirstOrDefault(v => v.EmailAddress == user.Email); if (ml != null) { { routerUser2 = new RouterUser() { Email = ml.EmailAddress, First = ml.Firstname, Last = ml.Lastname, Address = ml.Address, City = ml.City, State = ml.State, Zip = ml.Zip, UniqueId = user.UniqueId.ToString(), Gender = ml.Gender, DOB = ml.Dob, PrecisionSampleUserID = GetPrecisionSampleUserId(user), RouterContactId = user.RouterContactId, IpAddress = ml.Ip }; return(true); } } return(false); }
private RouterUser GetRouterUser(string emailAddress) { //this is used for creating the router backend for a mobilelead //during registration. //This is also used for testing or add hoc emails //we will create a router contact if we don't have one var db = new GloshareDbContext(); RouterContact user = db.RouterContacts.Include("RouterContactPrecisionSamples").FirstOrDefault(u => u.Email == emailAddress); if (user == null) { user = RouterContactFullSetup(emailAddress); } else { if (!user.RouterContactPrecisionSamples.Any()) { //4/20/2018 MH Drop PrecisionSample //CreatePrecisionSampleUser(user); } } if (MapRouterUserFromOil(user, out var routerUser1)) { return(routerUser1); } throw new ArgumentException("Contact not found,", nameof(emailAddress)); }
public Guid?CreatePrecisionSampleUser(RouterContact routerContact) { GloshareDbContext db = new GloshareDbContext(); var existingPS = db.RouterContactPrecisionSamples.FirstOrDefault(p => p.RouterContactId == routerContact.RouterContactId); if (existingPS != null) { return(existingPS.UserGuid); } var ps = new PrecisionSample(); var leads = db.OptInLeads.Where(o => o.EmailAddress == routerContact.Email).ToList(); FormUrlEncodedContent content = null; if (leads.Any()) { OptInLead lead = leads.First(); if (leads.Count == 2) { lead = MergeLeads(leads); } content = ps.CreatePostContent(routerContact, lead); } //use the mobile lead over the opt in lead if both emails exist var mobileleads = db.MobilelLeads.Where(m => m.EmailAddress == routerContact.Email); if (mobileleads.Any()) { content = ps.CreatePostContent(routerContact, mobileleads.First()); } bool error = false; string userguid = ps.CreateUser(routerContact, content, out error); if (error) { OnProgress(new ProgressEventArgs(new string('=', 50))); OnProgress(new ProgressEventArgs($"Failed Creating Precision Sample User:{routerContact.Email}{Environment.NewLine}")); //contains raw message on fail OnProgress(new ProgressEventArgs($"{userguid}")); return(null); } RouterContactPrecisionSample rcps = new RouterContactPrecisionSample { UserGuid = Guid.Parse(userguid), RouterContactId = routerContact.RouterContactId }; db.RouterContactPrecisionSamples.Add(rcps); db.SaveChanges(); return(Guid.Parse(userguid)); }
private static Guid?GetPrecisionSampleUserId(RouterContact user) { if (user.RouterContactPrecisionSamples.Any()) { return(user.RouterContactPrecisionSamples.First().UserGuid); } return(null); }
private void SetStatusForRouterContact(RouterContact routerContact) { var db = new GloshareDbContext(); var rcToUpdate = db.RouterContacts.Find(routerContact.RouterContactId); rcToUpdate.DailySurveyEmailSentDate = routerContact.DailySurveyEmailSentDate; rcToUpdate.Removed = routerContact.Removed; rcToUpdate.ErrorOut = routerContact.ErrorOut; db.SaveChanges(); }
public string SendSurveyEmail(RouterContact routerContact, out bool error, ListrakRest listrak) { error = false; RouterUser user = null; try { user = GetRouterUser(routerContact.RouterContactId); } catch (Exception e) { error = true; return(e.ToString()); } //if (user.PrecisionSampleUserID == null) //{ // error = true; // return $"No precision sample id for {routerContact.Email}"; //} var routerReturnContainer = GetUserSurveys(Guid.Parse(user.UniqueId), user.IpAddress); string message = null; if (!routerReturnContainer.RouterReturnList.Any()) { error = true; message = $"No surveys found.{Environment.NewLine}{routerReturnContainer.Message}"; return(message); } if (routerReturnContainer.RouterReturnList.Count > 2) { var result = listrak.SendDailySurveysEmail(user, routerReturnContainer.RouterReturnList, out message); if (result) { return("Email Sent"); } } else { error = true; return("Less than 3 surveys. Email not sent."); } error = true; return("Email was not sent successfully. " + message); }
public RouterUser GetRouterUser(Guid uniqueId) { //used when coming from the mysurveys email var db = new GloshareDbContext(); RouterContact user = db.RouterContacts.Include("RouterContactPrecisionSamples").FirstOrDefault(u => u.UniqueId == uniqueId); if (user != null) { if (MapRouterUserFromOil(user, out var routerUser1)) { return(routerUser1); } if (MapRouterUserFromMobileLead(user, out var routerUser2)) { return(routerUser2); } } throw new ArgumentException("Contact not found,", nameof(uniqueId)); }
public RouterContact RouterContactFullSetup(string emailAddress) { GloshareDbContext db = new GloshareDbContext(); RouterContact user = db.RouterContacts.FirstOrDefault(r => r.Email == emailAddress); if (user == null) { user = new RouterContact() { Email = emailAddress }; db.RouterContacts.Add(user); db.SaveChanges(); } //4/20/2018 MH Drop PrecisionSample //CreatePrecisionSampleUser(user); return(user); }
public FormUrlEncodedContent CreatePostContent(RouterContact routerContact, MobilelLead lead) { var content = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("RID", "20690"), new KeyValuePair <string, string>("TxId", ""), new KeyValuePair <string, string>("ExtMemberId", routerContact.RouterContactId.ToString()), new KeyValuePair <string, string>("Country", lead.CountryId ?? "US"), new KeyValuePair <string, string>("State", lead.State), new KeyValuePair <string, string>("FirstName", lead.Firstname), new KeyValuePair <string, string>("LastName", lead.Lastname), new KeyValuePair <string, string>("EmailAddress", lead.EmailAddress), new KeyValuePair <string, string>("Zip", lead.Zip), new KeyValuePair <string, string>("Gender", lead.Gender), new KeyValuePair <string, string>("Dob", lead.Dob?.ToString("MM/dd/yyyy")), new KeyValuePair <string, string>("Address1", lead.Address), new KeyValuePair <string, string>("Address2", null), new KeyValuePair <string, string>("City", lead.City), new KeyValuePair <string, string>("Ethnicity", null), }); return(content); }
public string CreateUser(RouterContact routerContact, FormUrlEncodedContent content, out bool error) { error = false; var client = new HttpClient(); //FormUrlEncodedContent content = CreatePostContent(routerContact, lead); var result = client.PostAsync("http://api2.precisionsample.com/v2.asmx/Create", content).Result; XmlSerializer serializer = new XmlSerializer(typeof(string), "http://tempuri.org/"); string s = null; using (Stream stream = result.Content.ReadAsStreamAsync().Result) { s = (string)serializer.Deserialize(stream); } XmlSerializer innerSerializer = new XmlSerializer(typeof(result)); result surveyResult = null; using (TextReader reader = new StringReader(s)) { try { surveyResult = (result)innerSerializer.Deserialize(reader); return(surveyResult.UserGuid); } catch (Exception e) { error = true; return(s); //return the raw content } } return(null); }
public void SendEmailToAllRouterContacts(int max, int safetyHours) { DateTime startTime = DateTime.Now; List <DateTime> TimeFor10 = new List <DateTime>() { DateTime.Now }; var errors = new List <string>(); string errorFilename = $"error-{DateTime.Now:yyyy-MM-dd_hh-mm-ss-tt}.txt"; //create it here and pass so the auth headers are only created once. var listrak = new ListrakRest(); var routerContacts = GetRouterContactsForEmailRun(max, safetyHours); OnProgress(new ProgressEventArgs($"{routerContacts.Count} routercontact records to process.")); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int counter = 0; try { foreach (RouterContact routerContact in routerContacts) { CurrentEmail = routerContact.Email; if (counter > 0 && counter % 10 == 0) { TimeFor10.Add(DateTime.Now); OnProgress(new ProgressEventArgs($"{counter} records processed.")); } counter++; //Check safety hours. This prevents emails from being sent out too //close to when the last one was set. Initial setting is 12 hours. if (routerContact.DailySurveyEmailSentDate.HasValue) { var debug = routerContact.Email; if (routerContact.DailySurveyEmailSentDate.Value.AddHours(safetyHours) > DateTime.Now) { OnProgress(new ProgressEventArgs($"Skipping {routerContact.Email}")); continue; } } bool error = false; string result = SendSurveyEmail(routerContact, out error, listrak); if (!error) { //var db2 = new GloshareDbContext(); routerContact.DailySurveyEmailSentDate = DateTime.Now; OnProgress(new ProgressEventArgs($"Sent {routerContact.Email}.")); } if (error) { if (result.ToLower().Contains("unsubscribe") || result.ToLower().Contains("suppressed")) { routerContact.Removed = true; } else { routerContact.ErrorOut = true; var rc = new RouterContact() { Email = routerContact.Email, InsertDate = routerContact.InsertDate, RouterContactId = routerContact.RouterContactId, UniqueId = routerContact.UniqueId }; string err = ($"{result}{Environment.NewLine}{JsonConvert.SerializeObject(rc)}{Environment.NewLine}{new string('=',50)}{Environment.NewLine}"); File.AppendAllText(@"Logs\" + errorFilename, err); OnProgress(new ProgressEventArgs($"Error: {err}")); } } SetStatusForRouterContact(routerContact); if (stopwatch.Elapsed.TotalMinutes > 58) { OnProgress(new ProgressEventArgs($"Exit early due to running for {stopwatch.Elapsed.TotalMinutes} minutes.")); break; } } } catch (Exception e) { WriteRunStats(startTime, TimeFor10, routerContacts.Count, e); throw; } WriteRunStats(startTime, TimeFor10, routerContacts.Count, null); }
private bool MapRouterUserFromOil(RouterContact user, out RouterUser routerUser1) { routerUser1 = null; GloshareDbContext db = new GloshareDbContext(); var oils = db.VwOptInLeadSurveys.Where(v => v.EmailAddress == user.Email).OrderByDescending(o => o.OptInDate); if (oils.Any()) { if (oils.Count() == 1 || oils.Count() > 2) { var oil = oils.First(); routerUser1 = new RouterUser() { Email = oil.EmailAddress, First = oil.Firstname, Last = oil.Lastname, Address = oil.Address, City = oil.City, State = oil.State, Zip = oil.Zip, UniqueId = user.UniqueId.ToString(), Gender = GetGender(oil.Gender), DOB = GetBirthDate(oil.BirthdayDay, oil.BirthdayMonth, oil.BirthdayYear), PrecisionSampleUserID = GetPrecisionSampleUserId(user), RouterContactId = user.RouterContactId, IpAddress = oil.Ip }; return(true); } //merge the 2 bool second = false; VwOptInLeadSurvey oil1 = oils.First(); VwOptInLeadSurvey oil2 = null; foreach (VwOptInLeadSurvey optInLeadSurvey in oils) { if (second) { oil2 = optInLeadSurvey; } second = true; } //var oil2 = oils.Last(); This doesn't work for some reason so loop thing above routerUser1 = new RouterUser() { Email = oil1.EmailAddress, First = oil1.Firstname ?? oil2.Firstname, Last = oil1.Lastname ?? oil2.Lastname, Address = oil1.Address ?? oil2.Address, City = oil1.City ?? oil2.City, State = oil1.State ?? oil2.State, Zip = oil1.Zip ?? oil2.Zip, UniqueId = user.UniqueId.ToString(), Gender = GetGender(oil1.Gender ?? oil2.Gender), DOB = GetBirthDate(oil1.BirthdayDay ?? oil2.BirthdayDay, oil1.BirthdayMonth ?? oil2.BirthdayMonth, oil1.BirthdayYear ?? oil2.BirthdayYear), PrecisionSampleUserID = GetPrecisionSampleUserId(user), RouterContactId = user.RouterContactId, IpAddress = oil1.Ip //?? oil2.Ip }; return(true); } return(false); }