Esempio n. 1
0
        public Guid GetRouterContactUnqueId(int routerContactId)
        {
            var           db   = new GloshareDbContext();
            RouterContact user = db.RouterContacts.FirstOrDefault(u => u.RouterContactId == routerContactId);

            return(user.UniqueId);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        private static Guid?GetPrecisionSampleUserId(RouterContact user)
        {
            if (user.RouterContactPrecisionSamples.Any())
            {
                return(user.RouterContactPrecisionSamples.First().UserGuid);
            }

            return(null);
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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));
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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);
        }