public override void ExecuteOption(OptionReport report)
        {
            string urlLoginName = _databaseExportContactToMailrelay.urlLoginName;

            Guid?crmListId = _databaseExportContactToMailrelay.listId;

            DatabaseUrlLogin      login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName);
            DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password);

            PagingInformation pagingInformation = new PagingInformation();

            while (pagingInformation.FirstRun || pagingInformation.MoreRecords)
            {
                MarketingList marketingList = MarketingList.GetListForMailrelayUpdate(dynamicsCrmConnection, pagingInformation, crmListId);

                if (marketingList != null)
                {
                    UpdateReport <Guid> result = ExportMailrelayContactFromList(dynamicsCrmConnection, marketingList);
                    Log.Write(Connection, result.AsLogText($"ExportContactToMailrelay {marketingList.new_mailrelaygroupid.Value}"), typeof(ExportContactToMailrelay), DataLayer.MongoData.Config.LogLevelEnum.OptionReport);
                }
            }

            report.Success = true;

            return;
        }
Example #2
0
        public override void ExecuteOption(OptionReport report)
        {
            decimal kreds      = Account.GetOptaltbeloebSumKreds(_dynamicsCrmConnection);
            decimal by         = Account.GetOptaltbeloebSumBy(_dynamicsCrmConnection);
            decimal total      = Account.GetOptaltbeloebSum(_dynamicsCrmConnection);
            Guid    campaignid = _databaseSumOptalt.campaignid;

            if (_databaseSumOptalt.kreds != kreds)
            {
                _databaseSumOptalt.kreds = kreds;
                Campaign.WriteOptaltsumKreds(_dynamicsCrmConnection, campaignid, kreds);
                report.Workload++;
            }

            if (_databaseSumOptalt.by != by)
            {
                _databaseSumOptalt.by = by;
                Campaign.WriteOptaltsumBy(_dynamicsCrmConnection, campaignid, by);
                report.Workload++;
            }

            if (_databaseSumOptalt.total != total)
            {
                _databaseSumOptalt.total = total;
                Campaign.WriteOptaltsum(_dynamicsCrmConnection, campaignid, total);
                report.Workload++;
            }

            report.Success = true;
        }
        public override void ExecuteOption(OptionReport report)
        {
            string urlLoginName = _databaseUpdateMailrelayFromContact.urlLoginName;
            int    pageSize     = _databaseUpdateMailrelayFromContact.pageSize;
            Guid?  contactId    = _databaseUpdateMailrelayFromContact.contactId;

            DatabaseUrlLogin      login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName);
            DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password);

            PagingInformation pagingInformation = new PagingInformation();

            List <MailrelayInformation> mailrelayInformations = new List <MailrelayInformation>();

            UpdateReport <int> intReport = new UpdateReport <int>();

            while (pagingInformation.FirstRun || pagingInformation.MoreRecords)
            {
                mailrelayInformations = MailrelayInformation.GetMailrelayFromContact(dynamicsCrmConnection, Config.GetResourcePath, pagingInformation, pageSize, contactId);
                mailrelayInformations.ForEach(information => UpdateIfNeeded(dynamicsCrmConnection, information, intReport));
            }

            Log.Write(Connection, intReport.AsLogText("UpdateMailrelayFromContact"), typeof(UpdateMailrelayFromContact), DataLayer.MongoData.Config.LogLevelEnum.OptionReport);

            report.Success = true;
            return;
        }
Example #4
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;
        }
Example #5
0
        public override void ExecuteOption(OptionReport report)
        {
            string urlLoginName = _databaseImportDanskeBank.urlLoginName;
            string importFolder = _databaseImportDanskeBank.importFolder;

            SetDynamicsCrmConnectionIfEmpty(urlLoginName);

            string folder = Config.GetOrCreateResourcePath(importFolder);

            string[] files = Directory.GetFiles(folder, "*.xml");

            List <XDocument> bankXmlFiles = GetBankXml(files);

            if (bankXmlFiles.Any() == false)
            {
                report.Success = true;
                return;
            }

            bankXmlFiles.ForEach(ImportXml);

            files.ToList().ForEach(file => MoveFileToImported(file, folder));

            DataLayer.MongoData.Option.Schedule recalculateSchedule = new DataLayer.MongoData.Option.Schedule()
            {
                NextAllowedExecution         = DateTime.Now,
                Recurring                    = false,
                TimeBetweenAllowedExecutions = TimeSpan.FromSeconds(60),
                Enabled      = true,
                ActionOnFail = DataLayer.MongoData.Option.Schedule.ActionOnFailEnum.TryAgain,
            };
            DataLayer.MongoData.Option.Options.Logic.SumIndbetaling.Create(Connection, urlLoginName, "Auto Generated indbetaling calculation", recalculateSchedule);

            report.Success = true;
        }
Example #6
0
        public override void ExecuteOption(OptionReport report)
        {
            SetDynamicsCrmConnectionIfEmpty();

            DatabaseAggregateSubTable.AggregateEnum aggregate = _databaseAggregateSubTable.aggregate;
            string topEntityName            = _databaseAggregateSubTable.topEntityName;
            string topEntityIdName          = _databaseAggregateSubTable.topEntityIdName;
            string topEntityResultFieldName = _databaseAggregateSubTable.topEntityResultFieldName;
            string topEntityReferenceIdName = _databaseAggregateSubTable.topEntityReferenceIdName;

            string aggregateEntityName      = _databaseAggregateSubTable.aggregateEntityName;
            string aggregateEntityIdName    = _databaseAggregateSubTable.aggregateEntityIdName;
            string aggregateFieldName       = _databaseAggregateSubTable.aggregateFieldName;
            string aggregateReferenceIdName = _databaseAggregateSubTable.aggregateReferenceIdName;

            List <KeyValuePair <Guid, object> > topRows = GetTopFields(topEntityName, topEntityReferenceIdName, topEntityResultFieldName);

            report.Workload = topRows.Count;

            foreach (KeyValuePair <Guid, object> row in topRows)
            {
                object aggregateValue = GetAggregateValue(aggregateEntityName, aggregateEntityIdName, aggregateReferenceIdName, topEntityReferenceIdName, row.Key, aggregateFieldName, aggregate);

                if (aggregateValue.Equals(row.Value) == false)
                {
                    report.SubWorkload++;

                    UpdateRow(topEntityName, topEntityIdName, row.Key, topEntityResultFieldName, aggregateValue);
                }
            }

            report.Success = true;
        }
Example #7
0
        public override void ExecuteOption(OptionReport report)
        {
            string urlLoginName = _databaseSetMissingCampaignLeadtarget.urlLoginName;

            SetDynamicsCrmConnectionIfEmpty(urlLoginName);

            string baseUrl = _databaseSetMissingCampaignLeadtarget.baseUrl;

            List <Campaign> campaigns = Campaign.ReadAllCampaignsWithIdAndLeadtarget(_dynamicsCrmConnection);

            foreach (Campaign campaign in campaigns)
            {
                string oldUrl = campaign.new_leadtarget;

                StringBuilder urlBuilder = new StringBuilder();

                urlBuilder.Append($"{baseUrl}?formId={campaign.Id}");

                List <string> keyFields = campaign.GetKeyFields();
                foreach (string field in keyFields)
                {
                    urlBuilder.Append($"&{field}=[{field}]");
                }

                string newUrl = urlBuilder.ToString();

                if (oldUrl != newUrl)
                {
                    campaign.SetLeadtarget(newUrl);
                }
            }

            report.Success = true;
        }
Example #8
0
		private void UpdateEstimatedStatistics(OptionReport report)
		{
			lock (_statusLock)
			{
				string optionName = report.OptionType.Name;

				DatabaseOptionStatusLine line = null;

				if (_databaseOptionStatus.options.ContainsKey(optionName))
				{
					line = _databaseOptionStatus.options[optionName];
				}
				else
				{
					line = new DatabaseOptionStatusLine();
					_databaseOptionStatus.options.Add(optionName, line);
				}

				line.ExecutionTotal++;
				if (report.Success)
				{
					line.SuccessTotal++;
					line.Success10Minute++;
				}
				else
				{
					line.FailTotal++;
					line.Fail10Minute++;
				}
			}
		}
Example #9
0
        public void RunThread(object currentOptionObject)
        {
            OptionBase currentOption = (OptionBase)currentOptionObject;

            _optionStatus.BeginOption(currentOption, DatabaseWorker);

            OptionReport report = new OptionReport(currentOption.GetType());

            try
            {
                currentOption.ExecuteOption(report);

                _optionDecider.DelayOptionFromFails(currentOption);

                currentOption.DatabaseOption?.Execute(_mongoConnection);
            }
            catch (Exception exception)
            {
                Log.Write(_mongoConnection, exception.Message, typeof(ThreadHolder), exception.StackTrace, Config.LogLevelEnum.HeartError);

                _optionDecider.DelayOptionFromFails(currentOption);

                currentOption.DatabaseOption?.ExecuteFail(_mongoConnection);
            }
            finally
            {
                report.FinishReport();

                report.WriteLog(_mongoConnection);

                _optionStatus.EndOption(currentOption, report);
            }
        }
        public override void ExecuteOption(OptionReport report)
        {
            string urlLoginName            = _databaseMaterialeBehovAssignment.urlLoginName;
            int    updateProgressFrequency = _databaseMaterialeBehovAssignment.updateProgressFrequency;

            DatabaseUrlLogin      login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName);
            DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password);

            Materiale materiale = Materiale.ReadCalculationNeed(dynamicsCrmConnection, Config.GetResourcePath);

            if (materiale == null)
            {
                report.Success = true;
                return;
            }

            materiale.FindBehovDefinitioner(Config.GetResourcePath);

            int total = CountTotalAccountsToUpdate(dynamicsCrmConnection, materiale);
            int staleMaterialeBehovCount = materiale.CountStaleMaterialeBehov(Config.GetResourcePath);

            total += staleMaterialeBehovCount;

            materiale.new_beregningsstatus = 0;
            materiale.Update();

            materiale.RemoveStaleMaterialeBehov(Config.GetResourcePath, currentProgress => updateProgress(materiale, currentProgress, total), updateProgressFrequency);

            int progress = staleMaterialeBehovCount;
            int materialeAddedCurrent = -1;

            MaterialeProcessState state = new MaterialeProcessState();

            state.pagingInformation  = new PagingInformation();
            state.owningbusinessunit = materiale.owningbusinessunitGuid.Value;

            while (materialeAddedCurrent != 0)
            {
                materiale.AddMissingMateriale(state, Config.GetResourcePath);
                materialeAddedCurrent = state.AccountsProcessed;
                progress += materialeAddedCurrent;
                updateProgress(materiale, progress, total);
            }
            materialeAddedCurrent = -1;

            materiale.behovsberegning      = Materiale.behovsberegningEnum.Afsluttet;
            materiale.new_beregningsstatus = null;
            materiale.Update();

            report.Success = true;
            return;
        }
Example #11
0
        public override void ExecuteOption(OptionReport report)
        {
            string dns  = _databaseAdjustDns.dnsIp;
            string name = _databaseAdjustDns.adapterName;

            DnsHelper.SetDns(dns, name);

            List <IPAddress> addresses = DnsHelper.GetActiveEthernetIpv4DnsAddresses();

            report.Success = addresses.Any(address => address.ToString() == dns);

            return;
        }
Example #12
0
        public override void ExecuteOption(OptionReport report)
        {
            string insertedEntityName         = _databaseCopyNN.insertedEntityName;
            string insertedEntityIdName       = _databaseCopyNN.insertedEntityIdName;
            string insertedEntityOriginIdName = _databaseCopyNN.insertedEntityOriginIdName;

            SetDynamicsCrmConnectionIfEmpty();

            List <dynamic> insertedEntities = GetInsertedEntities(insertedEntityName, insertedEntityIdName, insertedEntityOriginIdName);

            foreach (dynamic insertedEntity in insertedEntities)
            {
                CreateInsertedIntermediateEntity(insertedEntityName, insertedEntityIdName, insertedEntityOriginIdName, insertedEntity);
            }
        }
Example #13
0
        public override void ExecuteOption(OptionReport report)
        {
            TimeSpan sleepTime = TimeSpan.FromSeconds(_databaseTest.SleepForSeconds);

            Thread.Sleep(sleepTime);

            if (_databaseTest.ThrowException)
            {
                report.Success = false;

                throw new Exception($"Test exception {Guid.NewGuid()}");
            }

            report.Success = true;
        }
Example #14
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 #15
0
        public override void ExecuteOption(OptionReport report)
        {
            string urlLoginName = _databaseSumIndbetaling.urlLoginName;

            SetDynamicsCrmConnectionIfEmpty(urlLoginName);

            IEnumerable <Indbetaling> indbetalings = Indbetaling.GetIndbetalingValue(_dynamicsCrmConnection);

            IndbetalingSumCollection byarbejdeCollection       = new IndbetalingSumCollection(IndbetalingSumCollection.CollectionTypeEnum.byarbejde);
            IndbetalingSumCollection campaignCollection        = new IndbetalingSumCollection(IndbetalingSumCollection.CollectionTypeEnum.campaign);
            IndbetalingSumCollection campaignCollectionBy      = new IndbetalingSumCollection(IndbetalingSumCollection.CollectionTypeEnum.campaign);
            IndbetalingSumCollection campaignCollectionKreds   = new IndbetalingSumCollection(IndbetalingSumCollection.CollectionTypeEnum.campaign);
            IndbetalingSumCollection indsamlingsstedCollection = new IndbetalingSumCollection(IndbetalingSumCollection.CollectionTypeEnum.indsamlingssted);
            IndbetalingSumCollection kontoCollection           = new IndbetalingSumCollection(IndbetalingSumCollection.CollectionTypeEnum.konto);

            Dictionary <Guid, IndbetalingSumCollection> byarbejdesumByCampaign    = new Dictionary <Guid, IndbetalingSumCollection>();
            Dictionary <Guid, IndbetalingSumCollection> indsamlingsstedByCampaign = new Dictionary <Guid, IndbetalingSumCollection>();

            int indbetalingCount = 0;

            foreach (Indbetaling indbetaling in indbetalings)
            {
                indbetalingCount++;

                if (indbetaling.kilde == null)
                {
                    report.TextBuilder.AppendLine($"indbetaling {indbetaling.Id} has no kilde");
                    continue;
                }

                AddIndbetalingToSums(indbetaling, byarbejdeCollection, campaignCollection, campaignCollectionBy, campaignCollectionKreds, indsamlingsstedCollection, kontoCollection, byarbejdesumByCampaign, indsamlingsstedByCampaign);
            }

            report.Workload = indbetalingCount;

            WriteByarbejdeAmount(byarbejdeCollection, byarbejdesumByCampaign);
            WriteCampaignAmount(campaignCollection, campaignCollectionBy, campaignCollectionKreds);
            WriteIndsamlingsstedAmount(indsamlingsstedCollection, indsamlingsstedByCampaign);
            WriteKontoAmount(kontoCollection);

            report.Success = true;
        }
Example #16
0
		public void EndOption(OptionBase currentOption, OptionReport report)
		{
			lock (_statusLock)
			{
				_databaseOptionStatus.ActiveOptionsRemove(currentOption.DatabaseOption);

				if (report != null)
				{
					DatabaseOptionResult.Create(_mongoConnection, report.BeginTime, report.EndTime, report.OptionType.Name, report.Success, report.Memory);

					UpdateEstimatedStatistics(report);

					if (_databaseOptionStatus.optionLastMemory.ContainsKey(report.OptionType.Name))
					{
						_databaseOptionStatus.optionLastMemory[report.OptionType.Name] = report.Memory;
					}
					else
					{
						_databaseOptionStatus.optionLastMemory.Add(report.OptionType.Name, report.Memory);
					}
				}
			}
		}
Example #17
0
        public override void ExecuteOption(OptionReport report)
        {
            string urlLoginName = _databaseExposeData.urlLoginName;
            string fetchXmlPath = _databaseExposeData.fetchXmlPath;
            string exposePath   = _databaseExposeData.exposePath;
            string exposeName   = _databaseExposeData.exposeName;

            DatabaseUrlLogin      login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName);
            DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password);

            string fullFetchXmlPath = Config.GetResourcePath(fetchXmlPath);
            string fullExposePath   = Config.GetResourcePath(exposePath);

            List <dynamic> dataList = DynamicFetch.ReadFromFetchXml(dynamicsCrmConnection, fullFetchXmlPath, new PagingInformation());

            JsonSerializerSettings settings = new JsonSerializerSettings()
            {
                NullValueHandling    = NullValueHandling.Ignore,
                StringEscapeHandling = StringEscapeHandling.EscapeNonAscii,
            };

            string json = JsonConvert.SerializeObject(dataList, Formatting.None, settings);

            json = json.Replace("\\r\\n", "\\n");

            if (Directory.Exists(fullExposePath) == false)
            {
                Directory.CreateDirectory(fullExposePath);
            }

            File.WriteAllText(fullExposePath + "/" + exposeName, json, Encoding.UTF8);

            report.Success = true;

            return;
        }
Example #18
0
        public override void ExecuteOption(OptionReport report)
        {
            string     urlLoginName      = _databaseSendTableFromMailrelay.urlLoginName;
            Guid?      contactid         = _databaseSendTableFromMailrelay.contactid;
            string     contactIdName     = _databaseSendTableFromMailrelay.contactidName;
            string     queryFindContacts = _databaseSendTableFromMailrelay.queryFindContacts;
            string     queryCreateTable  = _databaseSendTableFromMailrelay.queryCreateTable;
            string     subject           = _databaseSendTableFromMailrelay.subject;
            string     html                       = _databaseSendTableFromMailrelay.html;
            string     tablerow                   = _databaseSendTableFromMailrelay.tablerow;
            string     matchidname                = _databaseSendTableFromMailrelay.matchidname;
            string     limitOnDateName            = _databaseSendTableFromMailrelay.limitOnDateName;
            List <int> requireDataOnDaysFromToday = _databaseSendTableFromMailrelay.requireDataOnDaysFromToday;
            TimeSpan   sleepTimeOnFailiure        = _databaseSendTableFromMailrelay.sleepTimeOnFailiure;
            string     orderbyDescending          = _databaseSendTableFromMailrelay.orderbyDescending;
            string     orderby                    = _databaseSendTableFromMailrelay.orderby;
            string     headerDateFormat           = _databaseSendTableFromMailrelay.headerDateFormat;
            string     tableDateFormat            = _databaseSendTableFromMailrelay.tableDateFormat;

            int mailboxfromid   = _databaseSendTableFromMailrelay.mailboxfromid;
            int mailboxreplyid  = _databaseSendTableFromMailrelay.mailboxreplyid;
            int mailboxreportid = _databaseSendTableFromMailrelay.mailboxreportid;
            int packageid       = _databaseSendTableFromMailrelay.packageid;

            string smtpHost     = _databaseSendTableFromMailrelay.smtpHost;
            string fromEmail    = _databaseSendTableFromMailrelay.fromEmail;
            string toEmail      = _databaseSendTableFromMailrelay.toEmail;
            int    port         = _databaseSendTableFromMailrelay.port;
            string smtpUsername = _databaseSendTableFromMailrelay.smtpUsername;
            string smtpPassword = _databaseSendTableFromMailrelay.smtpPassword;

            DatabaseSendTableFromMailrelay.SendTypeEnum sendType = _databaseSendTableFromMailrelay.sendType;

            SetDynamicsCrmConnectionIfEmpty(urlLoginName);

            PagingInformation pagingInformation = new PagingInformation();

            XDocument xDocument = XDocument.Parse(queryFindContacts);

            XmlHelper.SetCount(xDocument, 1);

            /*
             * if (contactid.HasValue)
             * {
             *      XmlHelper.AddCondition(xDocument, contactIdName, "eq", contactid.ToString());
             * }
             */
            if (string.IsNullOrWhiteSpace(headerDateFormat))
            {
                headerDateFormat = "yyyy-MM-dd";
            }

            if (string.IsNullOrWhiteSpace(tableDateFormat))
            {
                tableDateFormat = "yyyy-MM-dd";
            }

            while (pagingInformation.FirstRun || pagingInformation.MoreRecords)
            {
                dynamic receiver = DynamicFetch.ReadFromFetchXml(_dynamicsCrmConnection, xDocument, pagingInformation).SingleOrDefault();

                if (receiver == null)
                {
                    report.Success = true;
                    return;
                }

                IDictionary <string, object> receiverDictionary = (IDictionary <string, object>)receiver;

                if (contactid.HasValue)
                {
                    if ((Guid)receiverDictionary[contactIdName] != contactid)
                    {
                        continue;
                    }
                }

                if (receiverDictionary.ContainsKey("emailaddress1") == false)
                {
                    continue;
                }

                report.Workload++;

                string fullname      = receiver.fullname;
                string emailaddress1 = receiver.emailaddress1;
                Guid   matchid       = receiver.matchid;

                if (string.IsNullOrWhiteSpace(toEmail) == false)
                {
                    emailaddress1 = toEmail;
                }

                XDocument tableDocument = XDocument.Parse(queryCreateTable);

                XmlHelper.AddCondition(tableDocument, matchidname, "eq", matchid.ToString());

                List <dynamic> tableRowList = DynamicFetch.ReadFromFetchXml(_dynamicsCrmConnection, tableDocument, new PagingInformation());

                StringBuilder rowBuilder = new StringBuilder();

                if (string.IsNullOrWhiteSpace(orderby) == false)
                {
                    tableRowList = tableRowList.OrderBy(row =>
                    {
                        IDictionary <string, object> rowDictionary = (IDictionary <string, object>)row;
                        object sortObject = null;
                        if (rowDictionary.ContainsKey(orderby))
                        {
                            sortObject = rowDictionary[orderby];
                        }
                        return(sortObject);
                    }).ToList();
                }
                if (string.IsNullOrWhiteSpace(orderbyDescending) == false)
                {
                    tableRowList = tableRowList.OrderByDescending(row =>
                    {
                        IDictionary <string, object> rowDictionary = (IDictionary <string, object>)row;
                        object sortObject = null;
                        if (rowDictionary.ContainsKey(orderbyDescending))
                        {
                            sortObject = rowDictionary[orderbyDescending];
                        }
                        return(sortObject);
                    }).ToList();
                }

                foreach (dynamic rowDynamic in tableRowList)
                {
                    IDictionary <string, object> rowDictionary = (IDictionary <string, object>)rowDynamic;

                    string row = InsertFilledFields(tablerow, rowDictionary, tableDateFormat);

                    rowBuilder.Append(row);
                }

                string htmlWithRows = html.Replace("{rows}", rowBuilder.ToString());

                receiver.RowCount = tableRowList.Count();
                DateTime today = DateTime.Now.Date;
                receiver.Today     = today;
                receiver.Yesterday = today.AddDays(-1);

                if (string.IsNullOrWhiteSpace(limitOnDateName) == false)
                {
                    if (requireDataOnDaysFromToday == null || requireDataOnDaysFromToday.Any() == false)
                    {
                        continue;
                    }

                    bool isMailAllowed = false;
                    foreach (int daysToAdd in requireDataOnDaysFromToday)
                    {
                        int rowCount = FindRowCountInPeriod(tableRowList, limitOnDateName, today.AddDays(daysToAdd), today.AddDays(daysToAdd + 1));

                        receiverDictionary["RowCountDay" + daysToAdd.ToString()] = rowCount;

                        if (rowCount != 0)
                        {
                            isMailAllowed = true;
                        }
                    }

                    if (isMailAllowed == false)
                    {
                        continue;
                    }
                }

                report.SubWorkload += receiver.RowCount;

                string htmlWithRowsAndFields = InsertFilledFields(htmlWithRows, receiverDictionary, headerDateFormat);

                bool mailSent = false;

                if (sendType == DatabaseSendTableFromMailrelay.SendTypeEnum.Api)
                {
                    mailSent = TrySendMail(htmlWithRowsAndFields, fullname, emailaddress1, subject, packageid, mailboxfromid, mailboxreplyid, mailboxreportid);
                }

                if (sendType == DatabaseSendTableFromMailrelay.SendTypeEnum.Smtp)
                {
                    mailSent = TrySendSmtpMail(htmlWithRowsAndFields, fullname, fromEmail, emailaddress1, subject, smtpHost, port, smtpUsername, smtpPassword);
                }

                if (mailSent == false)
                {
                    Log.Write(Connection, $"failed sending email to {emailaddress1} sleeping {sleepTimeOnFailiure}", typeof(SendTableFromMailrelay), DataLayer.MongoData.Config.LogLevelEnum.OptionError);
                    Thread.Sleep(sleepTimeOnFailiure);
                }

                report.TextBuilder.AppendLine($"Sent to {emailaddress1} - Rows {receiver.RowCount}");
            }

            report.Success = true;
        }
        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;
        }
Example #20
0
 public abstract void ExecuteOption(OptionReport report);