private static string GetIncludedProductFilter(string adKey, PromotionEntryCodeProvider promotionEntryCodeProvider) { if (promotionEntryCodeProvider == null) { return(""); } var includedFilterText = string.Format("ad_key_included:'{0}'", adKey); var excludedFilterText = string.Format("NOT ad_key_excluded:'{0}'", adKey); var hasIncluded = promotionEntryCodeProvider.AdKeyHasIncluded(adKey); var hasExcluded = promotionEntryCodeProvider.AdKeyHasExcluded(adKey); if (hasIncluded && hasExcluded) { return(string.Format("{0} AND {1}", includedFilterText, excludedFilterText)); } if (hasIncluded) { return(includedFilterText); } if (hasExcluded) { return(excludedFilterText); } return(""); }
public AdsIndexBuilder( IAppConfig appConfig, IFileSystem fileSystem, FileHelper fileHelper, PromotionDataTableMapper dataTableMapper, PromotionEntryCodeProvider promotionEntryCodeProvider, IIndexSystemMapper indexSystem, IEnumerable <IAdsAppender> appenderPlugins, IAdConverter converterPlugin = null) { _appConfig = appConfig; _fileSystem = fileSystem; _fileHelper = fileHelper; _dataTableMapper = dataTableMapper; _promotionEntryCodeProvider = promotionEntryCodeProvider; _indexSystem = indexSystem; _converterPlugin = converterPlugin; _appenderPlugins = appenderPlugins.ToArray(); }
internal IEnumerable <IEntity> ConvertToAds(PromotionDataTableMapper promotionDataTableMapper, PromotionEntryCodeProvider promotionEntryCodeProvider) { var promotionLanguageMappedColumns = ToMappedColumnInfos(promotionDataTableMapper.PromotionLanguageDataTable, promotionEntryCodeProvider).ToArray(); var promotionMappedColumns = ToMappedColumnInfos(promotionDataTableMapper.PromotionDataTable).ToArray(); var campaignMappedColumns = ToMappedColumnInfos(promotionDataTableMapper.CampaignDataTable).ToArray(); foreach (var plpc in promotionDataTableMapper.Promotions) { var plpc1 = plpc; var plAttributes = promotionLanguageMappedColumns .Select(plmc => new Attribute(plmc.SpecificESalesName, plmc.GetValue(plpc1.PromotionLanguageRow))) .Where(a => !string.IsNullOrWhiteSpace(a.Values.FirstOrDefault())); var pAttributes = promotionMappedColumns .Select(pmc => new Attribute(pmc.SpecificESalesName, pmc.GetValue(plpc1.PromotionRow))) .Where(a => !string.IsNullOrWhiteSpace(a.Values.FirstOrDefault())); var cAttributes = campaignMappedColumns .Select(cmc => new Attribute(cmc.SpecificESalesName, cmc.GetValue(plpc1.CampaignRow))) .Where(a => !string.IsNullOrWhiteSpace(a.Values.FirstOrDefault())); //Unique attribute names. PromotionLanguage is most important, then Promotion and last Campaign. yield return(new Ad( cAttributes.Where(ca => !pAttributes.Select(pa => pa.Name).Contains(ca.Name)).Where(ca => !plAttributes.Select(pla => pla.Name).Contains(ca.Name)) .Concat(pAttributes.Where(pa => !plAttributes.Select(pla => pla.Name).Contains(pa.Name))) .Concat(plAttributes) .Concat(StaticAttributes))); } }
private static IEnumerable <MappedColumnInfo> ToMappedColumnInfos(PromotionDto.PromotionLanguageDataTable table, PromotionEntryCodeProvider promotionEntryCodeProvider = null) { var mappedColumns = new[] { new MappedColumnInfo("PromotionId", "ad_key", type.@string, r => AttributeHelper.CreateKey(r["PromotionId"].ToString(), r["LanguageCode"].ToString())), new MappedColumnInfo("PromotionId", "included", type.@string, r => { var language = r["LanguageCode"].ToString(); var includedProductFilter = GetIncludedProductFilter(AttributeHelper.CreateKey(r["PromotionId"].ToString(), language), promotionEntryCodeProvider); var includedLocaleFilter = string.Format("locale_filter:'{0}'", language.ToESalesLocale()); return(!string.IsNullOrWhiteSpace(includedProductFilter) ? string.Format("{0} AND {1}", includedLocaleFilter, includedProductFilter) : includedLocaleFilter); }, false), new MappedColumnInfo("DisplayName", "name", type.@string, new FilterOptions(Format.PipeSeparated, Tokenization.Words)), new MappedColumnInfo("LanguageCode", "locale", type.@string, r => r["LanguageCode"].ToString().ToESalesLocale(), false), new MappedColumnInfo("LanguageCode", "locale_filter", type.@string, r => r["LanguageCode"].ToString().ToESalesLocale()) }.ToLookup(mc => mc.ColumnName, mc => mc); var ignoredColumnNames = new HashSet <string> { "PromotionLanguageId" }; return(ToMappedColumnInfosInternal(table.Columns.Cast <DataColumn>(), mappedColumns, ignoredColumnNames)); }