/// <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); }