示例#1
0
        public async Task <object> RetryParticipationSyncImmediately(
            CrmData data,
            Configurations requestWideSettings,
            bool requestConsumerId = false)
        {
            var jobId = await Task.Run(() => BackgroundJob.Enqueue <ICrmConsumerProvider>(
                                           iCrmProvider =>
                                           iCrmProvider.CreateParticipationAsync(
                                               data,
                                               requestWideSettings,
                                               requestConsumerId)));

            var             result        = new object();
            IMonitoringApi  monitoringApi = JobStorage.Current.GetMonitoringApi();
            JobDetailsDto   jobDetails    = monitoringApi.JobDetails(jobId);
            SucceededJobDto jobDto        = monitoringApi.SucceededJobs(0, int.MaxValue)
                                            .First()
                                            //.FirstOrDefault(job => job.Key == "Key")
                                            .Value;

            if (jobDto != null)
            {
                result = jobDto.Result;
                return(JsonConvert.DeserializeObject <CrmResponse>(result.ToString()));
            }

            return(null);
        }
        public static string FormatMopupData(CrmData data)
        {
            var participation = new
            {
                Source     = data.GetSetting <string>("SourceName"),
                Attributes = new[]
                {
                    new
                    {
                        Name  = "Email",
                        Value = data.Data.Email
                    },
                    new
                    {
                        Name  = "Country",
                        Value = data.Data.Country
                    },
                    new
                    {
                        Name  = "list:Privacy_Policy_EN",
                        Value = (object)1
                    },
                    new
                    {
                        Name  = "List:CBZZ190301_Participants",
                        Value = (object)1
                    },
                    new
                    {
                        Name  = "list:Cadbury_Email",
                        Value = data.Data.NewsletterOptin ? (object)1 : (object)string.Empty
                    }
                },
                Transactions = new[]
                {
                    new
                    {
                        Name         = data.GetSetting <string>("TransactionName"),
                        Date_Created = DateTimeOffset.UtcNow.ToString()
                    }
                },
                LegalTextVersions = new[]
                {
                    new
                    {
                        LegalTextName = data.Data.PrivacyPolicyTextName,
                        Version       = data.Data.PrivacyPolicyVersion,
                        Created       = data.Data.PrivacyPolicyCreation
                    }
                }
            };

            return(JsonConvert.SerializeObject(participation));
        }
示例#3
0
        private CrmData GatherParticipationCrmDataToSend(ParticipationDto participation, CrmData legalDocument, string country)
        {
            var crmData = new CrmData();

            crmData.Data.Email           = participation.Email;
            crmData.Data.Country         = country;
            crmData.Data.PrivacyConsent  = true;
            crmData.Data.NewsletterOptin = participation.NewsletterOptin;

            crmData.Data.PrivacyPolicyTextName = legalDocument.Data.Data.Versions[0].LegalTextName;
            crmData.Data.PrivacyPolicyVersion  = legalDocument.Data.Data.Versions[0].Version;
            crmData.Data.PrivacyPolicyCreation = legalDocument.Data.Data.Versions[0].Created.ToString();

            return(crmData);
        }
示例#4
0
 public async Task DelayedParticipationRetrySync(
     CrmData data,
     Configurations requestWideSettings,
     TimeSpan delay,
     bool requestConsumerId = false)
 {
     await Task.Run(() =>
                    BackgroundJob.Schedule <ICrmConsumerProvider>(
                        iCrmProvider =>
                        iCrmProvider.CreateParticipationAsync(
                            data,
                            requestWideSettings,
                            requestConsumerId),
                        delay));
 }
示例#5
0
        public async Task RetryParticipationSyncRecurrently(
            CrmData data,
            Configurations requestWideSettings,
            CronEnum occurence,
            bool requestConsumerId = false)
        {
            var frequency = occurence.MapjobFrequency();

            await Task.Run(() => RecurringJob.AddOrUpdate <ICrmConsumerProvider>(
                               iCrmProvider =>
                               iCrmProvider.CreateParticipationAsync(
                                   data,
                                   requestWideSettings,
                                   requestConsumerId),
                               frequency));
        }
示例#6
0
        public async Task <CrmData> CreateParticipationAsync(
            CrmData data,
            Configurations requestWideSettings,
            bool requestConsumerId = false)
        {
            data.AddSetting("SourceName", requestWideSettings.Settings.Source);
            data.AddSetting("TransactionName", requestWideSettings.Settings.Transaction);

            data.AddSetting("ListPrivacyPolicy", (bool)data.Data.PrivacyConsent ? 1 : 0);
            data.AddSetting("ListCadbury", (bool)data.Data.NewsletterOptin ? 1 : 0);
            data.AddSetting("IdentLong", (string)data.Data.Retailer);
            data.AddSetting("IdentShort", (int)data.Data.ChocolateBar);
            data.AddSetting("Q1", (string)data.Data.Place);
            data.AddSetting("Q2", (string)data.Data.TriedFlavours);
            data.AddSetting("PrivacyPolicyTextName", (string)data.Data.PrivacyPolicyTextName);
            data.AddSetting("PrivacyPolicyVersion", (long)data.Data.PrivacyPolicyVersion);
            data.AddSetting("PrivacyPolicyCreation", (string)data.Data.PrivacyPolicyCreation);

            var settings = new ProCampaignSettings
            {
                ConsumerBaseUrl   = new Uri(Configuration.Settings.ConsumerBaseUrl),
                ParticipationPath = Configuration.Settings.ParticipationPath,
                ApiKey            = requestWideSettings.Settings.ApiKey,
                ApiSecret         = requestWideSettings.Settings.ApiSecret
            };
            var ApiData = ProCampaignData.FormatParticipationData(data);

            var response = await ApiHelper.PostParticipationAsync(ApiData, settings, requestConsumerId);

            var returnData = new CrmData();

            returnData.AddSetting("Success", response.IsSuccessful);
            returnData.AddSetting("ApiStatus", response.StatusCode);
            returnData.AddSetting("ApiMessage", response.StatusMessage);
            returnData.AddSetting("HttpStatus", response.HttpStatusCode);
            returnData.AddSetting("HttpMessage", response.HttpStatusMessage);
            returnData.AddSetting("Data", response.Data);

            return(returnData);
        }
示例#7
0
        public async Task <CrmData> ReadTextDocumentAsync()
        {
            var settings = new ProCampaignSettings
            {
                ApiBaseUrl          = new Uri(Configuration.Settings.DocumentBaseUrl),
                DocumentPath        = Configuration.Settings.DocumentPath,
                InternationalApiKey = Configuration.Settings.InternationalApiKey
            };

            var response = await ApiHelper.GetPermissionTextAsync(settings);

            var returnData = new CrmData();

            returnData.AddSetting("Success", response.IsSuccessful);
            returnData.AddSetting("ApiStatus", response.StatusCode);
            returnData.AddSetting("ApiMessage", response.StatusMessage);
            returnData.AddSetting("HttpStatus", response.HttpStatusCode);
            returnData.AddSetting("HttpMessage", response.HttpStatusMessage);
            returnData.AddSetting("Data", response.Data);

            return(returnData);
        }
示例#8
0
        private async Task <(bool, string)> ProceedToParticipationSyncRetryProcess(ParticipationDto participation, CrmData crmData, Configurations configuration)
        {
            var success    = false;
            var consumerId = string.Empty;

            // Store locally
            var failed = new FailedTransactionDto
            {
                Id = Guid.NewGuid(),
                ParticipationId = participation.Id,
                TermsConsent    = true,
                NewsletterOptin = participation.NewsletterOptin,
                CreatedDate     = DateTimeOffset.UtcNow
            };

            _failedTransactionService.Create(failed);

            // Another attempt
            var reSyncResponse = await _scheduler.RetryParticipationSyncImmediately(crmData, configuration, true);

            var typedResponse = (CrmResponse)reSyncResponse;

            success = typedResponse.Data.Success;

            if (success)
            {
                var currentParticipation = _participationService.GetParticipation(participation.Id);

                currentParticipation.Status       = ParticipationStatus.PARTICIPATION_RETRY_SUCCESS.ToString();
                currentParticipation.ApiStatus    = typedResponse.Data.ApiStatus.ToString();
                currentParticipation.ConsumerId   = typedResponse.Data.Data.ConsumerId;
                currentParticipation.ApiMessage   = typedResponse.Data.ApiMessage;
                currentParticipation.ModifiedDate = DateTimeOffset.UtcNow;
                _participationService.UpdateParticipation(currentParticipation);

                _failedTransactionService.Delete(failed.Id);

                consumerId = typedResponse.Data.Data.ConsumerId;
            }
            else
            {
                var currentParticipation = _participationService.GetParticipation(participation.Id);

                currentParticipation.Status       = ParticipationStatus.PARTICIPATION_RETRY_FAILED.ToString();
                currentParticipation.ModifiedDate = DateTimeOffset.UtcNow;
                _participationService.UpdateParticipation(currentParticipation);
            }

            return(success, consumerId);
        }