private DatabaseWebCampaign ReadOrCreateWebCampaign(Campaign campaign) { Guid formId = campaign.Id; DatabaseWebCampaign webCampaign = DatabaseWebCampaign.ReadSingleOrDefault(Connection, formId); List <string> keyFields = campaign.GetKeyFields(); DatabaseWebCampaign newWebCampaign = new DatabaseWebCampaign() { CollectType = Conversion.Campaign.ToDatabaseEnum(campaign.collecttype), FormId = formId, FormOwner = campaign.owner.Value, KeyFields = keyFields, RedirectTarget = campaign.new_redirecttarget, mailrelaygroupid = campaign.new_mailrelaygroupid, }; if (webCampaign == null) { newWebCampaign.Insert(Connection); return(newWebCampaign); } if (webCampaign.Equals(newWebCampaign)) { return(webCampaign); } Utilities.ReflectionHelper.Copy(newWebCampaign, webCampaign, new List <string> { "_id", "Id" }); webCampaign.Update(Connection); return(webCampaign); }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseCreateImportFromStub.urlLoginName; DatabaseSchedule ImportFromStubSchedule = _databaseCreateImportFromStub.ImportFromStubSchedule; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); List <Campaign> campaigns = Campaign.ReadCampaignsToImportStubDataTo(dynamicsCrmConnection); foreach (Campaign campaign in campaigns) { DatabaseWebCampaign webCampaign = ReadOrCreateWebCampaign(campaign); bool importExists = DatabaseImportFromStub.ReadByWebCampaign(Connection, webCampaign).Any(); if (importExists == false) { DatabaseImportFromStub.Create(Connection, webCampaign._id, urlLoginName, campaign.name, ImportFromStubSchedule); } } report.Success = true; return; }
public void ImportFromStubImportsStub() { DatabaseWebCampaign webCampaign = CreateWebCampaign(_campaign, new List <string>() { }); webCampaign.Insert(Connection); string firstname = $"firstname {Guid.NewGuid()}"; DatabaseStub stub = CreateStub(webCampaign, firstname); DatabaseStubPusher.GetInstance(Connection).Push(stub); DatabaseImportFromStub databaseImportFromStub = CreateDatabaseImportStub(webCampaign); ImportFromStub importFromStub = new ImportFromStub(Connection, databaseImportFromStub); importFromStub.ExecuteOption(new Administration.Option.Options.OptionReport(typeof(ImportFromStubTest))); Lead lead = Lead.ReadFromFetchXml(DynamicsCrmConnection, new List <string>() { "firstname" }, new Dictionary <string, string>() { { "firstname", firstname } }).Single(); lead.Delete(); }
protected DatabaseStub CreateStub(DatabaseWebCampaign webcampaign, string firstname, string lastname) { DatabaseStub stub = new DatabaseStub() { Contents = new List <DatabaseStubElement>() { new DatabaseStubElement() { Key = "firstname", Value = firstname } , new DatabaseStubElement() { Key = "lastname", Value = lastname } }, PostTime = DateTime.Now, }; if (webcampaign != null) { stub.WebCampaignId = webcampaign._id; } return(stub); }
private DatabaseImportFromStub CreateDatabaseImportStub(DatabaseWebCampaign webCampaign) { DatabaseImportFromStub databaseImportFromStub = CreateDatabaseImportStub(); databaseImportFromStub.WebCampaignId = webCampaign._id; return(databaseImportFromStub); }
public void ImportFromStubAssignsContactToAccount() { Account account = CreateAccount(); account.InsertWithoutRead(); DatabaseWebCampaign webCampaign = CreateWebCampaign(_campaign, new List <string>() { "emailaddress1" }); webCampaign.Insert(Connection); DatabaseStub stub = CreateStub(webCampaign); string emailaddress1 = $"emailaddress1 {Guid.NewGuid()}"; stub.Contents.Add(new DatabaseStubElement() { Key = "emailaddress1", Value = emailaddress1 }); stub.Contents.Add(new DatabaseStubElement() { Key = "indsamler2016", Value = account.Id.ToString() }); DatabaseStubPusher.GetInstance(Connection).Push(stub); DatabaseImportFromStub databaseImportFromStub = CreateDatabaseImportStub(webCampaign); ImportFromStub importFromStub = new ImportFromStub(Connection, databaseImportFromStub); importFromStub.ExecuteOption(new Administration.Option.Options.OptionReport(typeof(ImportFromStubTest))); Lead lead = Lead.ReadFromFetchXml(DynamicsCrmConnection, new List <string>() { "emailaddress1" }, new Dictionary <string, string>() { { "emailaddress1", emailaddress1 } }).Single(); Contact contact = Contact.ReadFromFetchXml(DynamicsCrmConnection, new List <string>() { "contactid", "emailaddress1", "new_indsamler2016" }, new Dictionary <string, string>() { { "emailaddress1", emailaddress1 } }).Single(); Account accountRead = Account.ReadFromFetchXml(DynamicsCrmConnection, new List <string>() { "accountid" }, new Dictionary <string, string>() { { "accountid", contact.indsamler2016.ToString() } }).Single(); lead.Delete(); contact.Delete(); accountRead.Delete(); }
private DatabaseWebCampaign GetWebcampaign() { DatabaseWebCampaign campaign = new DatabaseWebCampaign() { FormId = Guid.Parse("ff052597-5538-e611-80ef-001c4215c4a0"), }; campaign.Insert(Connection); return(campaign); }
public void ImportFromStubIsCreatedForCampaign() { DatabaseCreateImportFromStub databaseCreateImportFromStub = CreateDatabaseCreateImportFromStub(); CreateImportFromStub createImportFromStub = new CreateImportFromStub(Connection, databaseCreateImportFromStub); createImportFromStub.ExecuteOption(new Administration.Option.Options.OptionReport(typeof(CreateImportFromStubTest))); DatabaseWebCampaign webCampaign = DatabaseWebCampaign.ReadSingleOrDefault(Connection, _campaign.Id); List <DatabaseImportFromStub> importFromStubs = DatabaseImportFromStub.ReadByWebCampaign(Connection, webCampaign); Assert.AreEqual(1, importFromStubs.Count); }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseImportFromStub.urlLoginName; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); DatabaseWebCampaign webCampaign = DatabaseWebCampaign.ReadByIdBytesSingleOrDefault(Connection, _databaseImportFromStub.WebCampaignIdValue()); DatabaseWebCampaign.CollectTypeEnum collectType; DatabaseStub stub; if (webCampaign == null) { collectType = DatabaseWebCampaign.CollectTypeEnum.Lead; stub = DatabaseStub.ReadFirst(Connection); } else { collectType = webCampaign.CollectType; stub = DatabaseStub.ReadFirst(Connection, webCampaign); } if (stub == null) { report.Success = true; return; } try { ImportStub(dynamicsCrmConnection, stub, webCampaign, collectType); stub.Delete(Connection); report.Success = true; return; } catch (Exception exception) { Log.Write(Connection, exception.Message, typeof(ImportFromStub), exception.StackTrace, DataLayer.MongoData.Config.LogLevelEnum.OptionError); stub.ImportAttempt++; stub.Update(Connection); report.Success = false; return; } }
public void ImportFromStubImportsStubAndCreatesContact() { DatabaseWebCampaign webCampaign = CreateWebCampaign(_campaign, new List <string>() { "emailaddress1", "mobilephone" }); webCampaign.Insert(Connection); DatabaseStub stub = CreateStub(webCampaign); string emailaddress1 = $"emailaddress1 {Guid.NewGuid()}"; stub.Contents.Add(new DatabaseStubElement() { Key = "emailaddress1", Value = emailaddress1 }); DatabaseStubPusher.GetInstance(Connection).Push(stub); DatabaseImportFromStub databaseImportFromStub = CreateDatabaseImportStub(webCampaign); ImportFromStub importFromStub = new ImportFromStub(Connection, databaseImportFromStub); importFromStub.ExecuteOption(new Administration.Option.Options.OptionReport(typeof(ImportFromStubTest))); Lead lead = Lead.ReadFromFetchXml(DynamicsCrmConnection, new List <string>() { "emailaddress1" }, new Dictionary <string, string>() { { "emailaddress1", emailaddress1 } }).Single(); lead.Delete(); Contact contact = Contact.ReadFromFetchXml(DynamicsCrmConnection, new List <string>() { "emailaddress1" }, new Dictionary <string, string>() { { "emailaddress1", emailaddress1 } }).Single(); contact.Delete(); }
public void AddMailrelaySubscriberFromLeadTestAddsASubscriber() { DatabaseWebCampaign webCampaign = GetWebcampaign(); DatabaseAddMailrelaySubscriberFromLead databaseAddMailrelaySubscriberFromLead = AddMailrelaySubscriberFromLead.CreateIfValid(Connection, Guid.Empty, "test", "test", "test", webCampaign); AddMailrelaySubscriberFromLead addMailrelaySubscriberFromLead = new AddMailrelaySubscriberFromLead(Connection, databaseAddMailrelaySubscriberFromLead); _mailrelayConnectionTester.replies.Enqueue(new MailrelayArrayReply <getSubscribersReply>() { status = 1, data = new List <getSubscribersReply>() }); _mailrelayConnectionTester.replies.Enqueue(new MailrelayIntReply() { status = 1, data = 1 }); ExecuteWithFakeMailrelayConnection(addMailrelaySubscriberFromLead); Console.Out.WriteLine(_mailrelayConnectionTester); Assert.IsTrue(_mailrelayConnectionTester.sendFunctions.Any(function => function is addSubscriber)); }
public void AddMailrelaySubscriberFromLeadTestCanUpdateASubscriber() { DatabaseWebCampaign webCampaign = GetWebcampaign(); string email = "test"; DatabaseAddMailrelaySubscriberFromLead databaseAddMailrelaySubscriberFromLead = AddMailrelaySubscriberFromLead.CreateIfValid(Connection, _lead.Id, "test", "test", email, webCampaign); AddMailrelaySubscriberFromLead addMailrelaySubscriberFromLead = new AddMailrelaySubscriberFromLead(Connection, databaseAddMailrelaySubscriberFromLead); int randomId = new Random().Next(0, int.MaxValue); _mailrelayConnectionTester.replies.Enqueue(new MailrelayArrayReply <getSubscribersReply>() { status = 1, data = new List <getSubscribersReply>() { new getSubscribersReply() { email = email, id = randomId.ToString(), fields = new Dictionary <string, string>(), groups = new List <string>(), }, } }); _mailrelayConnectionTester.replies.Enqueue(new MailrelayIntReply() { status = 1, data = 1 }); ExecuteWithFakeMailrelayConnection(addMailrelaySubscriberFromLead); Console.Out.WriteLine(_mailrelayConnectionTester); updateSubscriber updateSubscriberFunction = (updateSubscriber)_mailrelayConnectionTester.sendFunctions.Single(function => function is updateSubscriber); Assert.AreEqual(email, updateSubscriberFunction.email); Assert.AreEqual(randomId, updateSubscriberFunction.id); }
protected DatabaseStub CreateStub(DatabaseWebCampaign webcampaign, string firstname) { return(CreateStub(webcampaign, firstname, $"lastname {Guid.NewGuid()}")); }
private void ImportStub(DynamicsCrmConnection dynamicsCrmConnection, DatabaseStub stub, DatabaseWebCampaign webCampaign, DatabaseWebCampaign.CollectTypeEnum collectType) { List <string> keyFields; if (webCampaign == null) { keyFields = new List <string>(); } else { keyFields = webCampaign.KeyFields; } List <DatabaseStubElement> contentList = Utilities.LinqExtension.DistinctBy(stub.Contents, content => content.Key).ToList(); contentList = contentList.Where(content => content.Key != null).ToList(); Dictionary <string, string> allContent = contentList.ToDictionary(content => content.Key, content => content.Value); Dictionary <string, string> keyContent = allContent.Where(content => keyFields.Contains(content.Key)).ToDictionary(content => content.Key, content => content.Value); Contact contact = null; int?numberOfMatchingContacts = null; if (keyContent.Any()) { List <Contact> matchingContacts = Contact.ReadFromFetchXml(dynamicsCrmConnection, new List <string> { "contactid", "ownerid" }, keyContent); numberOfMatchingContacts = matchingContacts.Count; if (numberOfMatchingContacts == 1) { contact = matchingContacts.Single(); } } Lead lead = Lead.Create(dynamicsCrmConnection, allContent); Guid?owner = null; if (webCampaign != null) { lead.campaign = webCampaign.FormId; owner = webCampaign.FormOwner; } if (contact != null && owner.HasValue == false) { if (owner.HasValue == false) { owner = contact.owner; } } switch (collectType) { case DatabaseWebCampaign.CollectTypeEnum.LeadOgContactHvisContactIkkeFindes: if (contact == null && numberOfMatchingContacts == 0) { contact = Contact.Create(dynamicsCrmConnection, allContent); contact.InsertWithoutRead(); if (owner.HasValue) { contact.owner = owner; contact.Assign(); } } break; } lead.subject = _databaseImportFromStub.Name; if (contact != null) { lead.parentcontact = contact.Id; } lead.InsertWithoutRead(); if (owner.HasValue) { lead.owner = owner; lead.Assign(); } if (webCampaign != null && webCampaign.mailrelaygroupid.HasValue) { AddMailrelaySubscriberFromLead.CreateIfValid(Connection, lead.Id, $"Auto subscribe from {_databaseImportFromStub.Name}", _databaseImportFromStub.urlLoginName, lead.emailaddress1, webCampaign); } }
public void StubWillBeImportedEvenIfItContainsInvalidData() { DatabaseWebCampaign webCampaign = CreateWebCampaign(_campaign, new List <string>() { "firstname" }); webCampaign.Insert(Connection); string firstname = $"firstname {Guid.NewGuid()}"; DatabaseStub stub = CreateStub(webCampaign, firstname); stub.Contents.AddRange(new List <DatabaseStubElement>() { new DatabaseStubElement() { Key = "lastname", Value = "test" }, new DatabaseStubElement() { Key = "address1_line1", Value = "test" }, new DatabaseStubElement() { Key = "address1_postalcode", Value = "test" }, new DatabaseStubElement() { Key = "address1_city", Value = "test" }, new DatabaseStubElement() { Key = "emailaddress1", Value = "test" }, new DatabaseStubElement() { Key = "mobilephone", Value = "test" }, new DatabaseStubElement() { Key = "new_oprindelseip", Value = "test" }, }); DatabaseStubPusher.GetInstance(Connection).Push(stub); DatabaseImportFromStub databaseImportFromStub = CreateDatabaseImportStub(webCampaign); ImportFromStub importFromStub = new ImportFromStub(Connection, databaseImportFromStub); importFromStub.ExecuteOption(new Administration.Option.Options.OptionReport(typeof(ImportFromStubTest))); Lead lead = Lead.ReadFromFetchXml(DynamicsCrmConnection, new List <string>() { "firstname" }, new Dictionary <string, string>() { { "firstname", firstname } }).Single(); lead.Delete(); }
private MailrelayInformation GetInformationFromFetchXml(DynamicsCrmConnection dynamicsCrmConnection, DatabaseWebCampaign webCampaign, string email) { Guid campaignId = webCampaign.FormId; MailrelayInformation information = MailrelayInformation.GetMailrelayFromLead(dynamicsCrmConnection, Config.GetResourcePath, email, campaignId); return(information); }
public static DatabaseAddMailrelaySubscriberFromLead CreateIfValid(MongoConnection connection, Guid leadId, string name, string urlLoginName, string emailaddress1, DatabaseWebCampaign webCampaign) { if (string.IsNullOrWhiteSpace(emailaddress1)) { return(null); } if (webCampaign == null) { return(null); } DatabaseAddMailrelaySubscriberFromLead databaseAddMailrelaySubscriberFromLead = DatabaseAddMailrelaySubscriberFromLead.Create ( connection, webCampaign, urlLoginName, leadId, emailaddress1, name, new DataLayer.MongoData.Option.Schedule() { NextAllowedExecution = DateTime.Now, Recurring = false, TimeBetweenAllowedExecutions = TimeSpan.FromSeconds(30), } ); return(databaseAddMailrelaySubscriberFromLead); }
public override void ExecuteOption(OptionReport report) { string urlLoginName = _databaseAddMailrelaySubscriberFromLead.urlLoginName; string email = _databaseAddMailrelaySubscriberFromLead.email; Guid leadId = _databaseAddMailrelaySubscriberFromLead.leadId; DatabaseUrlLogin login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName); DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password); DatabaseWebCampaign webCampaign = DatabaseWebCampaign.ReadByIdBytesSingleOrDefault(Connection, _databaseAddMailrelaySubscriberFromLead.WebCampaignIdValue()); if (webCampaign == null) { Log.Write(Connection, $"Could not find campaign for {_databaseAddMailrelaySubscriberFromLead.Name}", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionError); report.Success = false; return; } MailrelayInformation information = GetInformationFromFetchXml(dynamicsCrmConnection, webCampaign, email); if (information == null) { Log.Write(Connection, $"Information for lead {leadId} on {email} could not be found", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionMessage); report.Success = true; return; } if (information.campaign_new_mailrelaygroupid.HasValue == false) { Log.Write(Connection, $"Subscriber not added, campaign {webCampaign.FormId} has no group", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionMessage); report.Success = true; return; } getSubscribersReply ExistingSubscriber = GetExistingSubscribers(email); int subscriberId; if (ExistingSubscriber == null) { addSubscriber add = GetSubscriberFromFetchXml(information, email); subscriberId = SendSubscriberToMailrelay(add); } else { subscriberId = int.Parse(ExistingSubscriber.id); UdpateExistingSubscriberIfNeeded(information, ExistingSubscriber, email, subscriberId); } try { Lead.UpdateSubscriberId(dynamicsCrmConnection, leadId, subscriberId); } catch (Exception exception) { Log.Write(Connection, exception.Message, typeof(AddMailrelaySubscriberFromLead), exception.StackTrace, DataLayer.MongoData.Config.LogLevelEnum.OptionError); } report.Success = true; }