Example #1
0
        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);
        }
Example #2
0
        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();
        }
Example #4
0
        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();
        }
Example #7
0
        private DatabaseWebCampaign GetWebcampaign()
        {
            DatabaseWebCampaign campaign = new DatabaseWebCampaign()
            {
                FormId = Guid.Parse("ff052597-5538-e611-80ef-001c4215c4a0"),
            };

            campaign.Insert(Connection);

            return(campaign);
        }
Example #8
0
        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);
        }
Example #9
0
        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;
            }
        }
Example #10
0
        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();
        }
Example #11
0
        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));
        }
Example #12
0
        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);
        }
Example #13
0
 protected DatabaseStub CreateStub(DatabaseWebCampaign webcampaign, string firstname)
 {
     return(CreateStub(webcampaign, firstname, $"lastname {Guid.NewGuid()}"));
 }
Example #14
0
        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);
            }
        }
Example #15
0
        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;
        }