public List <Domain.PriceExtension> GetLevel2Extensions() { List <RockDMZ.Domain.PriceExtension> extensions = new List <RockDMZ.Domain.PriceExtension>(); var campaigns = new AdWordsCampaignStructure(); campaigns.CampaignTemplates = new List <AdWordsCampaignTemplate>(); campaigns.CampaignTemplates.Add(new AdWordsCampaignTemplate() { NameTemplate = "NB_Generiek_#ProductType#" }); campaigns.CampaignTemplates.Add(new AdWordsCampaignTemplate() { NameTemplate = "NB_Intent-High_#ProductType#" }); campaigns.CampaignTemplates.Add(new AdWordsCampaignTemplate() { NameTemplate = "NB_Intent-Medium_#ProductType#" }); campaigns.CampaignTemplates.Add(new AdWordsCampaignTemplate() { NameTemplate = "NB_BCC_#ProductType#" }); // get a list of distinct product types in the product feed var productTypes = _db.PriceExtensionProductFeeds.Select(x => x.ProductType).Distinct(); foreach (var pt in productTypes) { var campaignName = pt.Replace(" en ", "-").Replace(" ", "-"); foreach (var c in campaigns.CampaignTemplates) { var pe = new RockDMZ.Domain.PriceExtension(); pe.Action = "ADD"; pe.Campaign = c.NameTemplate.Replace("#ProductType#", campaignName); pe.Adgroup = ""; pe.CustomId = pe.Campaign + "#" + pe.Adgroup; pe.ItemId = pe.CustomId; pe.Type = "Merken"; pe.PriceQualifier = "Vanaf"; pe.Language = "nl"; // pe.TrackingTemplate = ""; pe.Items = new List <Item>(); // get the brands for this producttype var brands = (from x in _db.PriceExtensionProductFeeds group x by new { x.ItemHeader, x.ItemDescription, x.ItemPrice, x.ItemPriceUnit, x.LinkLevel2, x.PriceExtensionProjectId, x.ProductType, x.FromPriceLevel2, x.Account } into p where p.Key.ProductType == pt where p.Key.ItemDescription != "" where p.Key.ItemHeader != "" where p.Key.ItemHeader != null where p.Key.ItemDescription != null select new Domain.Item() { Header = p.Key.ItemHeader, Description = p.Key.ItemDescription, Price = p.Key.ItemPrice, PriceUnit = p.Key.ItemPriceUnit, FinalUrl = p.Key.LinkLevel2, FromPrice = p.Key.FromPriceLevel2, Account = p.Key.Account } ).ToList(); if (brands.Count() < 3) { break; } var counter = 0; foreach (var b in brands) { counter++; if (counter > 8) { break; } // clean up itemheader & itemprice b.Price = ConvertToPriceExtensionPrice(Math.Round(Convert.ToDouble(b.FromPrice), 2).ToString()); b.Header = PrettifyString(b.Header, true); b.PriceUnit = pe.PriceQualifier; b.Index = counter; if (!pe.Items.Exists(x => x.Header == b.Header)) { pe.Items.Add(b); } } extensions.Add(pe); } } return(extensions); }
private void GenerateAdCustomizerFeed(string accountId, string localFilePath) { var items = new List <List <string> >(); var header = new List <string>(); var hashtable = new HashSet <string>(); var campaigns = new AdWordsCampaignStructure(); campaigns.CampaignTemplates = new List <AdWordsCampaignTemplate>(); var cGeneric = new AdWordsCampaignTemplate() { NameTemplate = "NB_Generiek_#CategoryLevel2SingularTC#" }; cGeneric.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "[#CategoryLevel2SingularLC#]" }); cGeneric.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "[#CategoryLevel2PluralLC#]" }); campaigns.CampaignTemplates.Add(cGeneric); var cType = new AdWordsCampaignTemplate() { NameTemplate = "NB_Type_#CategoryLevel2SingularTC#" }; cType.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "#CategoryLevel3ShortLC#" }); campaigns.CampaignTemplates.Add(cGeneric); var cIntentH = new AdWordsCampaignTemplate() { NameTemplate = "NB_Intent-High_#CategoryLevel2SingularTC#" }; cIntentH.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "bestellen" }); cIntentH.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "kopen" }); cIntentH.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "online" }); campaigns.CampaignTemplates.Add(cIntentH); var cIntentM = new AdWordsCampaignTemplate() { NameTemplate = "NB_Intent-Medium_#CategoryLevel2SingularTC#" }; cIntentM.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "aanbieding" }); cIntentM.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "goede" }); cIntentM.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "nieuw" }); cIntentM.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "vergelijk" }); campaigns.CampaignTemplates.Add(cIntentM); var cBCC = new AdWordsCampaignTemplate() { NameTemplate = "NB_BCC_#CategoryLevel2SingularTC#" }; cBCC.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "#CategoryLevel3SingularTC#" }); // cBCC.AdgroupTemplates.Add(new AdWordsAdgroupTemplate { NameTemplate = "#CategoryLevel3PluralTC#" }); campaigns.CampaignTemplates.Add(cBCC); // create the join using (var db = new ToolsContext()) { var input = (from i in db.BccSourceFeedItems where i.AccountId == accountId select new { i.ClientProductId, i.CategoryLevel1, i.CategoryLevel2, i.CategoryLevel3, i.Brand, i.Price, i.ProductName, i.Type, i.AccountId, i.StockQuantity, i.SourceFeedPromoLine, i.PricePreviously }).ToList(); var customTagLines = db.AdWordsCustomTagLines.Where(x => x.ClientName == "BCC").ToList(); // calculate fromPrice & numberofproducts for level2 and level3 var l2FromPriceDict = new Dictionary <string, decimal>(); var l2NoProductsDict = new Dictionary <string, int>(); var l3FromPriceDict = new Dictionary <string, decimal>(); var l3NoProductsDict = new Dictionary <string, int>(); foreach (var i in input) { var price = Convert.ToDecimal(i.Price, CultureInfo.CreateSpecificCulture("en-us")); if (!l2FromPriceDict.Keys.Contains(i.CategoryLevel2)) { l2FromPriceDict.Add(i.CategoryLevel2, price); } else { if (l2FromPriceDict[i.CategoryLevel2] > price) { l2FromPriceDict[i.CategoryLevel2] = price; } } if (!l2NoProductsDict.Keys.Contains(i.CategoryLevel2)) { l2NoProductsDict.Add(i.CategoryLevel2, 1); } else { l2NoProductsDict[i.CategoryLevel2] = l2NoProductsDict[i.CategoryLevel2] + 1; } // l3 if (!l3FromPriceDict.Keys.Contains(i.CategoryLevel3)) { l3FromPriceDict.Add(i.CategoryLevel3, price); } else { if (l3FromPriceDict[i.CategoryLevel3] > price) { l3FromPriceDict[i.CategoryLevel3] = price; } } if (!l3NoProductsDict.Keys.Contains(i.CategoryLevel3)) { l3NoProductsDict.Add(i.CategoryLevel3, 1); } else { l3NoProductsDict[i.CategoryLevel3] = l3NoProductsDict[i.CategoryLevel3] + 1; } } foreach (var r in input) { var lac = new CategoryLevelBusinessDataItem(); // set header once if (header.Count == 0) { header = lac.Header; } foreach (var ct in campaigns.CampaignTemplates) { var pt = r.CategoryLevel2.Replace(" en ", "-").Replace(" ", "-").Replace(" / ", "").Trim(); lac.CampaignName = ct.NameTemplate.Replace("#CategoryLevel2SingularTC#", pt); lac.SetCategoryLevel1(r.CategoryLevel1); lac.SetCategoryLevel2(r.CategoryLevel2); lac.SetCategoryLevel3(r.CategoryLevel3); foreach (var ag in ct.AdgroupTemplates) { var adgroupName = ""; adgroupName = ag.NameTemplate.Replace("#CategoryLevel3SingularLC#", lac.CategoryLevel3(false, "LC")); adgroupName = adgroupName.Replace("#CategoryLevel3PluralLC#", lac.CategoryLevel3(true, "LC")); adgroupName = adgroupName.Replace("#CategoryLevel3SingularTC#", lac.CategoryLevel3(false, "TC")); adgroupName = adgroupName.Replace("#CategoryLevel3PluralTC#", lac.CategoryLevel3(true, "TC")); adgroupName = adgroupName.Replace("#CategoryLevel3PluralTC#", lac.CategoryLevel3(true, "TC")); adgroupName = adgroupName.Replace("#CategoryLevel2PluralLC#", lac.CategoryLevel2(true, "LC")); adgroupName = adgroupName.Replace("#CategoryLevel2SingularTC#", lac.CategoryLevel2(false, "TC")); adgroupName = adgroupName.Replace("#CategoryLevel2SingularLC#", lac.CategoryLevel2(false, "LC")); adgroupName = adgroupName.Replace("#CategoryLevel2PluralTC#", lac.CategoryLevel2(true, "TC")); adgroupName = adgroupName.Replace("#CategoryLevel2PluralLC#", lac.CategoryLevel2(true, "LC")); adgroupName = adgroupName.Replace("#CategoryLevel3ShortLC#", lac.CategoryLevel3(false, "LC").Replace(lac.CategoryLevel2(false, "LC"), "")).Trim(); lac.AdgroupName = adgroupName; lac.CustomId = lac.CampaignName + "!" + lac.AdgroupName; foreach (var ctl in customTagLines) { if (ctl.TargetCategoryLevel1 == r.CategoryLevel1) { if (ctl.TargetCategoryLevel2 == null || ctl.TargetCategoryLevel2 == r.CategoryLevel2) { if (ctl.TargetCategoryLevel3 == null || ctl.TargetCategoryLevel3 == r.CategoryLevel3) { lac.BrandAwarenessLine30 = ctl.BrandAwarenessLine30; lac.BrandAwarenessLine50 = ctl.BrandAwarenessLine50; lac.BrandAwarenessLine80 = ctl.BrandAwarenessLine80; lac.PromoAwarenessLine30 = ctl.PromoAwarenessLine30; lac.PromoAwarenessLine50 = ctl.PromoAwarenessLine50; lac.PromoAwarenessLine80 = ctl.PromoAwarenessLine80; lac.ActivationLine30 = ctl.ActivationLine30; lac.ActivationLine50 = ctl.ActivationLine50; lac.ActivationLine80 = ctl.ActivationLine80; } } } } // calculate fromPrice & numberofproducts for level2 and level3 lac.FromPriceLevel2PrettyPrice10 = lac.PrettifyPrice("€ " + Math.Round(l2FromPriceDict[r.CategoryLevel2], 2).ToString(CultureInfo.CreateSpecificCulture("nl-nl"))); lac.FromPriceLevel2PrettyPrice10 = lac.ShortenPrice("€ " + Math.Round(l2FromPriceDict[r.CategoryLevel2], 2).ToString(CultureInfo.CreateSpecificCulture("nl-nl"))); lac.FromPriceLevel3PrettyPrice10 = lac.PrettifyPrice("€ " + Math.Round(l3FromPriceDict[r.CategoryLevel3], 2).ToString(CultureInfo.CreateSpecificCulture("nl-nl"))); lac.FromPriceLevel3PrettyPrice10 = lac.ShortenPrice("€ " + Math.Round(l3FromPriceDict[r.CategoryLevel3], 2).ToString(CultureInfo.CreateSpecificCulture("nl-nl"))); lac.ProductsInCategoryLevel2 = l2NoProductsDict[r.CategoryLevel2].ToString(); lac.ProductsInCategoryLevel3 = l3NoProductsDict[r.CategoryLevel3].ToString(); lac.Level2FromPriceLine30 = lac.CategoryLevel2(true, "TC") + " v/a " + lac.FromPriceLevel2PrettyPrice10; lac.Level3FromPriceLine30 = lac.CategoryLevel3(true, "TC") + " v/a " + lac.FromPriceLevel3PrettyPrice10; lac.Level2ProductChoiceLine30 = "Kies uit " + lac.ProductsInCategoryLevel2 + " " + lac.CategoryLevel2(true, "LC"); lac.Level3ProductChoiceLine30 = "Kies uit " + lac.ProductsInCategoryLevel3 + " " + lac.CategoryLevel3(true, "LC"); // avoid duplicate entries if (!hashtable.Contains(lac.CustomId)) { hashtable.Add(lac.CustomId); items.Add(lac.Row); } } } } } // store feed AddToFile(items, localFilePath, header, false); }