Пример #1
0
            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);
        }