Ejemplo n.º 1
0
        /// <summary>
        /// Generate Email Model method
        /// </summary>
        /// <returns> The <see cref="DealsEmailModel"/>. </returns>
        /// <exception cref="ModelContentException"> The input is insufficient for email model creation </exception>
        public DailyDealsContract GenerateModel(EmailTemplateData modelData)
        {
            DailyDealsContract dailyDealsContract  = null;
            DealsTemplateData  dailyDealsModelData = modelData as DealsTemplateData;

            if (dailyDealsModelData != null)
            {
                var            dealsList     = dailyDealsModelData.Deals == null ? null : dailyDealsModelData.Deals.ToList();
                DealContract[] dealsContract = null;
                if (dealsList != null)
                {
                    if (dailyDealsModelData.DealEmailType == DealEmailType.WeeklyDeal && dealsList.Count() <= 3)
                    {
                        throw new ModelContentException(string.Format("Number of deals is: {0}. This is insufficient for email model creation", dealsList.Count()));
                    }

                    dealsContract = new DealContract[dealsList.Count];
                    for (int i = 0; i < dealsList.Count; ++i)
                    {
                        DealContract dealContract = ConvertDeal(dealsList[i]);
                        if (dealContract != null)
                        {
                            dealsContract[i] = dealContract;
                        }
                    }

                    if (dailyDealsModelData.DealEmailType == DealEmailType.WeeklyDeal && dealsContract.Length <= 3)
                    {
                        throw new ModelContentException(string.Format("Number of deals is: {0}. This is insufficient for email model creation", dealsList.Count()));
                    }
                }

                var location    = Users.Dal.DataModel.Location.Parse(dailyDealsModelData.LocationId);
                var locationStr = string.Empty;
                if (location.Type == LocationType.Postal || location.Type == LocationType.City)
                {
                    Log.Info("Getting Location for user: {0}, locationId: {1}", dailyDealsModelData.EmailAddress, dailyDealsModelData.LocationId);
                    var geoCodePoint = GeoSpatial.GetGeoData(WebUtility.HtmlEncode(string.Format("{0} {1} {2}", location.CountryCode, location.AdminDistrict, location.Value)), GeoSpatial.GeoSource.VirtualEarth);
                    if (geoCodePoint != null && geoCodePoint.Location != null)
                    {
                        locationStr = geoCodePoint.Location.Locality;
                        Log.Info("Retrieved Location info : {0} for user: {1}, locationId: {2}", locationStr, dailyDealsModelData.EmailAddress, dailyDealsModelData.LocationId);
                    }
                    else
                    {
                        Log.Warn("Couldn't fetch location data for user: {0}, locationId: {1}", dailyDealsModelData.EmailAddress, location);
                    }
                }

                dailyDealsContract = new DailyDealsContract {
                    UnsubscribeUrl = dailyDealsModelData.UnsubscribeUrl, Deals = dealsContract, Location = locationStr
                };
            }

            return(dailyDealsContract);
        }
        /// <summary>
        /// Creates the template contract for merchant transaction report email
        /// </summary>
        /// <param name="modelData">Merchant Email template data</param>
        /// <returns>The MerchantReportContract</returns>
        public MerchantReportContract GenerateModel(EmailTemplateData modelData)
        {
            MerchantReportContract merchantReportContract = null;

            if (modelData is MerchantTemplateData)
            {
                MerchantTemplateData merchantTemplateData = modelData as MerchantTemplateData;
                merchantReportContract = new MerchantReportContract
                {
                    FromDate                  = merchantTemplateData.FromDate.ToString("MM/dd/yyyy"),
                    ToDate                    = merchantTemplateData.ToDate.ToString("MM/dd/yyyy"),
                    ScheduleType              = merchantTemplateData.ScheduleType,
                    MerchantPortalUrl         = merchantTemplateData.MerchantPortalUrl,
                    MerchantStoreTransactions = new MerchantStoreTransactionContract[merchantTemplateData.RedemptionsByMerchant.Count]
                };

                Dictionary <string, List <RedemptionContract> > redemptionsByMerhantId = merchantTemplateData.RedemptionsByMerchant;

                List <MerchantStoreTransactionContract> storeTransactions = new List <MerchantStoreTransactionContract>();
                foreach (KeyValuePair <string, List <RedemptionContract> > kvp in redemptionsByMerhantId)
                {
                    MerchantStoreTransactionContract   storeTransactionContract = new MerchantStoreTransactionContract();
                    List <MerchantTransactionContract> transactionContracts     = new List <MerchantTransactionContract>();

                    foreach (var merchantStore in kvp.Value)
                    {
                        if (string.IsNullOrEmpty(storeTransactionContract.MerchantName))
                        {
                            storeTransactionContract.MerchantName = merchantStore.MerchantName;
                        }

                        if (storeTransactionContract.StoreLocation == null)
                        {
                            storeTransactionContract.StoreLocation = new MerchantLocationContract
                            {
                                Address = string.Format("{0} {1}", merchantStore.MerchantLocation.Address1, merchantStore.MerchantLocation.Address2),
                                City    = merchantStore.MerchantLocation.City,
                                State   = merchantStore.MerchantLocation.State,
                                Postal  = merchantStore.MerchantLocation.Postal
                            };
                        }
                        List <Guid> dealsGuid = new List <Guid> {
                            merchantStore.DealId
                        };
                        Task <IEnumerable <Deal> > dealsByGuidTask = _dealsClient.GetDealsById(dealsGuid);
                        IEnumerable <Deal>         deals           = dealsByGuidTask.Result.ToList();

                        MerchantTransactionContract transactionContract = new MerchantTransactionContract
                        {
                            RedemptionTime = merchantStore.AuthorizationDateTimeLocal != null
                                                     ? merchantStore.AuthorizationDateTimeLocal.ToString()
                                                     : string.Empty,
                            DealTitle          = !deals.Any() ? string.Empty : deals.First().Title,
                            SettlementDate     = merchantStore.EventDateTimeUtc.ToString("MM/dd/yyyy"),
                            SettlementAmount   = merchantStore.Amount.ToString(),
                            Discount           = merchantStore.DiscountAmount.ToString(),
                            CardLastFourDigits = merchantStore.CardLastFourDigits
                        };

                        int dollarValue = merchantStore.Amount / 100;
                        int cents       = merchantStore.Amount % 100;
                        transactionContract.SettlementAmount = string.Format("${0}.{1}", dollarValue, cents.ToString("00"));

                        dollarValue = merchantStore.DiscountAmount / 100;
                        cents       = merchantStore.DiscountAmount % 100;
                        transactionContract.Discount = string.Format("${0}.{1}", dollarValue, cents.ToString("00"));

                        transactionContracts.Add(transactionContract);
                    }
                    storeTransactionContract.Transactions = transactionContracts.ToArray();
                    storeTransactions.Add(storeTransactionContract);
                }

                merchantReportContract.MerchantStoreTransactions = storeTransactions.ToArray();
            }

            return(merchantReportContract);
        }
        /// <summary>
        /// Generate Email Model method
        /// </summary>
        /// <returns> The <see cref="CampaignDataContract"/>. </returns>
        public CampaignDataContract GenerateModel(EmailTemplateData modelData)
        {
            CampaignDataContract campaignDataContract = null;
            CampaignTemplateData campaignTemplateData = modelData as CampaignTemplateData;

            if (campaignTemplateData != null)
            {
                var          location    = Users.Dal.DataModel.Location.Parse(campaignTemplateData.LocationId);
                const string locationStr = "Bellevue"; //Having a constant value here and commenting the below code since
                                                       //this code doesn't make sense anymore in Earn program. Also sending of emails
                                                       //will now be moved to Epiphany service and this code won't be used anymore
                //if (location.Type == Users.Dal.DataModel.LocationType.Postal || location.Type == Users.Dal.DataModel.LocationType.City)
                //{
                //    Log.Info("Getting Location for user: {0}, locationId: {1}", campaignTemplateData.EmailAddress, campaignTemplateData.LocationId);
                //    var geoCodePoint = GeoSpatial.GetGeoData(WebUtility.HtmlEncode(string.Format("{0} {1} {2}", location.CountryCode, location.AdminDistrict, location.Value)), GeoSpatial.GeoSource.VirtualEarth);
                //    if (geoCodePoint != null && geoCodePoint.Location != null)
                //    {
                //        locationStr = geoCodePoint.Location.Locality;
                //        Log.Info("Retrieved Location info : {0} for user: {1}, locationId: {2}", locationStr, campaignTemplateData.EmailAddress, campaignTemplateData.LocationId);
                //    }
                //    else
                //    {
                //        Log.Warn("Couldn't fetch location data for user: {0}, locationId: {1}", campaignTemplateData.EmailAddress, location);
                //    }
                //}


                var refinements = new Refinements
                {
                    ResultsPerBusiness = 1,
                    Market             = string.Format("en-{0}", location.CountryCode),
                    Flights            = string.Format("{0},{1}", CloFlight, campaignTemplateData.Campaign)
                };

                if (campaignTemplateData.IncludeBusinessNames)
                {
                    string regionCode = string.Format("{0} {1} {2}", location.CountryCode, location.AdminDistrict, location.Value);
                    Task <IEnumerable <Deal> > getDealsTask = this._dealsClient.GetDealsByRegion(regionCode, null, null, DealsCount, refinements);
                    var           returnedDeals             = getDealsTask.Result.ToList();
                    List <string> businesses = new List <string>();
                    foreach (var deal in returnedDeals)
                    {
                        if (!businesses.Contains(deal.Business.Name) && businesses.Count < 20)
                        {
                            businesses.Add(deal.Business.Name);
                        }
                    }
                    campaignDataContract = new CampaignDataContract {
                        UnsubscribeUrl = campaignTemplateData.UnsubscribeUrl, Content = campaignTemplateData.Content, Location = locationStr, PostalCode = location.Value, Businesses = businesses
                    };
                }
                else
                {
                    campaignDataContract = new CampaignDataContract {
                        UnsubscribeUrl = campaignTemplateData.UnsubscribeUrl, Content = campaignTemplateData.Content, Location = locationStr, PostalCode = location.Value
                    };
                }
            }

            return(campaignDataContract);
        }