private CrmData GatherParticipationDataToSync(CrmDto data, CrmData legalDocument)
        {
            var crmData = new CrmData();

            crmData.Data.Firstname     = data.Firstname;
            crmData.Data.Lastname      = data.Lastname;
            crmData.Data.Email         = data.Email;
            crmData.Data.MobilePrivate = data.PhoneNumber;
            crmData.Data.Street1       = data.Address;
            crmData.Data.Street2       = data.AdditionalAddress;
            crmData.Data.City          = data.City;
            crmData.Data.ZipCode       = data.ZipCode;
            crmData.Data.Country       = data.Country;
            crmData.Data.AccountNumber = data.AccountNumber;
            crmData.Data.SortCode      = data.SortCode;
            crmData.Data.IBAN          = data.IBAN;
            crmData.Data.BIC           = data.BIC;

            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();

            crmData.Data.Payment         = data.PaymentType;
            crmData.Data.PrizeValue      = data.PrizeValue;
            crmData.Data.ParticipationId = data.ParticipationId;

            return(crmData);
        }
        public async Task <CrmData> CreateParticipationAsync(
            CrmData data,
            CrmConfiguration requestWideSettings,
            bool requestConsumerId = false)
        {
            data.AddSetting("SourceName", requestWideSettings.Settings.SourceName);
            data.AddSetting("TransactionName", requestWideSettings.Settings.TransactionName);

            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);
        }
        private void CreateMessageProcessingStepImage(
            IOrganizationService service,
            ITracingService tracer,
            Guid stepId,
            string imageName,
            CrmData.SdkImageType imageType,
            CrmData.SdkMessageName messageName,
            string attributes)
        {
            var existingImages = GetStepImageReferences(service, stepId, imageName, imageType);

            if (existingImages.Any())
            {
                tracer.Trace("A step image named '{0}' of type '{1}' already exists.", imageName, imageType.ToString());
            }
            else
            {
                var image = new Entity(CrmData.SdkMessageProcessingStepImageEntityName);
                image[CrmData.SdkMessageProcessingStepImage_SdkMessageProcessingStepId] = new EntityReference(CrmData.SdkMessageProccessingStepEntityName, stepId);
                image[CrmData.SdkMessageProcessingStepImage_Name]                = imageName;
                image[CrmData.SdkMessageProcessingStepImage_EntityAlias]         = imageName;
                image[CrmData.SdkMessageProcessingStepImage_ImageType]           = new OptionSetValue((int)imageType);
                image[CrmData.SdkMessageProcessingStepImage_MessagePropertyName] = CrmData.GetMessageProperyName(messageName);

                if (!string.IsNullOrEmpty(attributes))
                {
                    image[CrmData.SdkMessageProcessingStepImage_Attributes] = attributes;
                }

                service.Create(image);
            }
        }
Beispiel #4
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);
        }
Beispiel #5
0
        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));
        }
Beispiel #6
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));
 }
Beispiel #7
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);
        }
Beispiel #8
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));
        }
Beispiel #9
0
        /// <summary>
        /// 客户模块
        /// </summary>
        /// <param name="usertoken"></param>
        /// <param name="modelConfig"></param>
        /// <returns></returns>
        public List <CrmData> GetCustomerList(string usertoken, CrmApiData modelConfig)
        {
            List <CrmData> crmdata = new List <CrmData>();

            if (modelConfig == null)
            {
                return(crmdata);
            }
            string starttime = modelConfig.CurrentTime;
            string endtime   = modelConfig.CurrentTime;
            int    pagesize  = modelConfig.PageSize;
            int    pageindex = modelConfig.PageIndex;
            string url       = _crmApiHost + _customersUrl + $"?user_token={usertoken}&version_code={_versionCode}&device={_device}&start_date={starttime}&end_date={endtime}&per_page={pagesize}&page={pageindex}&date=other";

            string result = HttpHelper.GetData(url);

            if (!string.IsNullOrEmpty(result))
            {
                CrmBaseData <CRMNewIndexBoxData> returndata = Newtonsoft.Json.JsonConvert.DeserializeObject <CrmBaseData <CRMNewIndexBoxData> >(result);
                if (returndata != null && returndata.data.revisit_logs != null && returndata.data.revisit_logs.Count > 0)
                {
                    if (modelConfig.TotalPageSize <= 0)
                    {
                        modelConfig.TotalPageSize = Convert.ToInt32(Math.Ceiling(returndata.data.total_count / Convert.ToDecimal(returndata.data.per_page)));
                        base.Update(modelConfig, "totalpagesize");
                    }

                    foreach (CRMNewIndexData item in returndata.data.revisit_logs)
                    {
                        CrmBaseData <CRMLeadsData> leaddata = GetCrmfilterLeads(usertoken, item.loggable_id);
                        if (leaddata == null || leaddata.data == null || leaddata.data.address == null)
                        {
                            continue;
                        }
                        CrmData data = new CrmData();
                        data.phone        = leaddata.data.address.tel;
                        data.content      = item.content;
                        data.statecontent = leaddata.data.status_mapped;
                        data.name         = item.user.name;
                        data.AddTime      = item.real_revisit_at;
                        crmdata.Add(data);
                    }
                }
            }

            return(crmdata);
        }
        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);
        }
        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);
        }
Beispiel #12
0
        public static string FormatParticipationData(CrmData data)
        {
            var participation = (Countries)data.Data.Country == Countries.IE ?
                                new
            {
                Source     = data.GetSetting <string>("SourceName"),
                Attributes = new[]
                {
                    new
                    {
                        Name  = "Firstname",
                        Value = data.Data.Firstname
                    },
                    new
                    {
                        Name  = "Lastname",
                        Value = data.Data.Lastname
                    },
                    new
                    {
                        Name  = "Email",
                        Value = data.Data.Email
                    },
                    new
                    {
                        Name  = "MobilePrivate",
                        Value = data.Data.MobilePrivate
                    },
                    new
                    {
                        Name  = "Street1",
                        Value = data.Data.Street1
                    },
                    new
                    {
                        Name  = "Street2",
                        Value = data.Data.Street2
                    },
                    new
                    {
                        Name  = "City",
                        Value = data.Data.City
                    },
                    new
                    {
                        Name  = "Zipcode",
                        Value = data.Data.ZipCode
                    },
                    new
                    {
                        Name  = "Country",
                        Value = data.Data.Country.ToString().ToUpper()
                    },
                    new
                    {
                        Name  = "TBZZ190101_Accountnumber",
                        Value = data.Data.AccountNumber
                    },
                    new
                    {
                        Name  = "TBZZ190101_Sortcode",
                        Value = data.Data.SortCode
                    },
                    new
                    {
                        Name  = "TBZZ190101_IBAN",
                        Value = data.Data.IBAN
                    },
                    new
                    {
                        Name  = "TBZZ190101_BIC",
                        Value = data.Data.BIC
                    },
                    new
                    {
                        Name  = "List:Privacy_Policy_EN",
                        Value = (object)1
                    },
                    new
                    {
                        Name  = "List:TBZZ190101_Participants",
                        Value = (object)1
                    }
                },
                Transactions = new[]
                {
                    new
                    {
                        Name         = data.GetSetting <string>("TransactionName"),
                        Date_Created = DateTime.UtcNow.ToString(),
                        Parameters   = new []
                        {
                            new
                            {
                                Name  = "Ident_short",
                                Value = (PaymentType)data.Data.Payment == PaymentType.CHEQUE ?
                                        (dynamic)"Cheque" : (dynamic)"Bank Transfer"
                            },
                            new
                            {
                                Name  = "Value",
                                Value = data.Data.PrizeValue
                            },
                            new
                            {
                                Name  = "Q1",
                                Value = data.Data.AccountNumber
                            },
                            new
                            {
                                Name  = "Q2",
                                Value = data.Data.SortCode
                            },
                            new
                            {
                                Name  = "Q3",
                                Value = data.Data.IBAN
                            },
                            new
                            {
                                Name  = "Q4",
                                Value = data.Data.BIC
                            },
                            new
                            {
                                Name  = "Q15",
                                Value = data.Data.ParticipationId
                            }
                        }
                    }
                },
                LegalTextVersions = new[]
                {
                    new
                    {
                        LegalTextName = data.Data.PrivacyPolicyTextName,
                        Version       = data.Data.PrivacyPolicyVersion,
                        Created       = data.Data.PrivacyPolicyCreation
                    }
                }
            } :
            new
            {
                Source     = data.GetSetting <string>("SourceName"),
                Attributes = new[]
                {
                    new
                    {
                        Name  = "Firstname",
                        Value = data.Data.Firstname
                    },
                    new
                    {
                        Name  = "Lastname",
                        Value = data.Data.Lastname
                    },
                    new
                    {
                        Name  = "Email",
                        Value = data.Data.Email
                    },
                    new
                    {
                        Name  = "MobilePrivate",
                        Value = data.Data.MobilePrivate
                    },
                    new
                    {
                        Name  = "Street1",
                        Value = data.Data.Street1
                    },
                    new
                    {
                        Name  = "Street2",
                        Value = data.Data.Street2
                    },
                    new
                    {
                        Name  = "City",
                        Value = data.Data.City
                    },
                    new
                    {
                        Name  = "Zipcode",
                        Value = data.Data.ZipCode
                    },
                    new
                    {
                        Name  = "Country",
                        Value = (object)"GB"
                    },
                    new
                    {
                        Name  = "TBZZ190101_Accountnumber",
                        Value = data.Data.AccountNumber
                    },
                    new
                    {
                        Name  = "TBZZ190101_Sortcode",
                        Value = data.Data.SortCode
                    },
                    new
                    {
                        Name  = "List:Privacy_Policy_EN",
                        Value = (object)1
                    },
                    new
                    {
                        Name  = "List:TBZZ190101_Participants",
                        Value = (object)1
                    }
                },
                Transactions = new[]
                {
                    new
                    {
                        Name         = data.GetSetting <string>("TransactionName"),
                        Date_Created = DateTime.UtcNow.ToString(),
                        Parameters   = new []
                        {
                            new
                            {
                                Name  = "Ident_short",
                                Value = (PaymentType)data.Data.Payment == PaymentType.CHEQUE ?
                                        (dynamic)"Cheque" : (dynamic)"Bank Transfer"
                            },
                            new
                            {
                                Name  = "Value",
                                Value = data.Data.PrizeValue
                            },
                            new
                            {
                                Name  = "Q1",
                                Value = data.Data.AccountNumber
                            },
                            new
                            {
                                Name  = "Q2",
                                Value = data.Data.SortCode
                            },
                            new
                            {
                                Name  = "Q15",
                                Value = data.Data.ParticipationId
                            }
                        }
                    }
                },
                LegalTextVersions = new[]
                {
                    new
                    {
                        LegalTextName = data.Data.PrivacyPolicyTextName,
                        Version       = data.Data.PrivacyPolicyVersion,
                        Created       = data.Data.PrivacyPolicyCreation
                    }
                }
            };

            return(JsonConvert.SerializeObject(participation));
        }
Beispiel #13
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);
        }