public void Supplement() { List <OrthoProduct> prods = GetProducts(); List <string> names = new List <string>(); foreach (OrthoProduct prod in prods) { names.Add(prod.Name); prod.Name = prod.Name.Replace("™", "").Replace("®", ""); } names.Sort(); List <InvSupplement> inv = null; if (File.Exists(supplement)) { inv = JsonConvert.DeserializeObject <List <InvSupplement> >(File.ReadAllText(supplement)); } else { CleanupInventory(master, cleaned); inv = JsonConvert.DeserializeObject <List <InvSupplement> >(File.ReadAllText(cleaned)).Where(i => i.Company == "Ortho Molecular").ToList(); } foreach (InvSupplement i in inv) { i.productNumber = ""; if (i.Company == "Ortho Molecular" && i.Active) { if (string.IsNullOrEmpty(i.Size)) { string[] s = i.Supplement.Split(" - "); i.Name = s[0]; if (s.Length >= 3) { i.Dosage = s[1]; i.Size = s[2]; i.Size = i.Size.Replace("caps", "C").Replace("tabs", "T").Replace("serv", "Serv").Replace("pkts", "Serv").Replace("oz", " oz."); } if (s.Length == 2) { i.Size = s[1]; i.Size = i.Size.Replace("caps", "C").Replace("tabs", "T").Replace("serv", "Serv").Replace("pkts", "Serv").Replace("oz", " oz."); } } if (i.Size != null) { if (i.Active) { OrthoProduct prod = prods.FirstOrDefault(p => p.Name == i.Name); if (prod == null) { System.Console.WriteLine($"No Matching Ortho Product - {i.Name}"); } else { OrthoProduct.Variant v; if (i.Flavor == null) { OrthoProduct.Option op = prod.Options.FirstOrDefault(o => o.variantTypeName == "Flavor"); if (op != null && op.values.Count == 1) { i.Flavor = op.values[0]; } } if (i.Flavor == null) { v = prod.Variants.FirstOrDefault(xv => xv.Option1 == i.Size && xv.Option2 == null); } else { v = prod.Variants.FirstOrDefault(xv => (xv.Option1 == i.Size || xv.Option2 == i.Size) && (xv.Option1 == i.Flavor || xv.Option2 == i.Flavor)); } if (v == null) { System.Console.WriteLine($"No Matching OrthoProduct Variant - {i.Name} - {i.Size} - {i.Flavor}"); } else { i.productNumber = v.ProductNumber; } } } } else { System.Console.WriteLine($"No Size OrthoProduct Product - {i.Name}"); } } } File.WriteAllText(supplement, JsonConvert.SerializeObject(inv, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); }
private OrthoProduct GetProduct(string path, string name, WebClient wc) { System.Console.Write(name); OrthoProduct product = new OrthoProduct(); HtmlDocument doc = GetPage(path, wc); HtmlNode node; node = doc.DocumentNode.SelectSingleNode("//meta[@property='og:image']"); product.ImageUrl = node.Attributes["content"].Value; product.Name = name; product.BriefDescription = doc.DocumentNode.SelectSingleNode("//p[@id='pShortDesc']")?.OuterHtml.Trim(); node = doc.DocumentNode.SelectSingleNode("//h3[contains(., 'OVERVIEW')]/.."); node?.RemoveChild(node.FirstChild); product.Description = node?.InnerHtml.Trim(); node = doc.DocumentNode.SelectSingleNode("//h3[contains(., 'CLINICAL APPLICATIONS')]/.."); node?.RemoveChild(node.FirstChild); product.Benefits = node?.InnerHtml.Trim(); HtmlNode nc = doc.DocumentNode.SelectSingleNode("//script[contains(., 'IdevSelections(')]"); if (nc != null) { OrthoProduct.Option op = new OrthoProduct.Option { variantTypeName = "Size" }; string json = nc.InnerText; json = json.Substring(json.IndexOf('{')); json = json.Substring(0, json.LastIndexOf('}') + 1); Example ex = JsonConvert.DeserializeObject <Example>(json); if (ex.Classifications.Count == 0) { HtmlNodeCollection nc2 = doc.DocumentNode.SelectNodes("//span[@class='bottleSize']"); if (nc2 != null) { foreach (HtmlNode n2 in nc2) { op.values.Add(n2.InnerText.Trim()); } } else { System.Console.Write(" Error"); } } if (ex.Classifications.Count > 1) { System.Console.Write(" Error2"); } foreach (Classification c in ex.Classifications) { foreach (S s in c.s) { op.values.Add(s.s); } } product.Options.Add(op); } else { System.Console.Write(" Error3"); } foreach (OrthoProduct.Option vt in product.Options) { foreach (string value in vt.values) { OrthoProduct.Variant v = new OrthoProduct.Variant { Option1 = value }; product.Variants.Add(v); } } if (product.Variants.Count == 1) { product.Variants[0].ImageUrl = product.ImageUrl; } System.Console.WriteLine(" - Complete"); return(product); }
public async Task Supplement2() { List <InvSupplement> inv2 = JsonConvert.DeserializeObject <List <InvSupplement> >(File.ReadAllText(supplement)); List <InvSupplement> inv = inv2.Where(i => i.Active && !i.Imported && !string.IsNullOrEmpty(i.productNumber)).ToList(); List <OrthoProduct> prods = GetProducts(); Dictionary <string, List <string> > toImport = new Dictionary <string, List <string> >(); foreach (InvSupplement i in inv) { List <OrthoProduct> p = prods.Where(xp => xp.Variants.Any(xv => xv.ProductNumber == i.productNumber)).ToList(); if (p.Count == 1) { if (toImport.ContainsKey(p[0].Name)) { if (!toImport[p[0].Name].Contains(i.productNumber)) { toImport[p[0].Name].Add(i.productNumber); } else { System.Console.WriteLine($"{i.Name} - {i.productNumber} - {i.Size} - {i.Flavor}"); } } else { toImport.Add(p[0].Name, new List <string>() { i.productNumber }); } } else { System.Console.WriteLine($"{i.Name} - {i.productNumber} - {i.Size} - {i.Flavor}"); } } foreach (KeyValuePair <string, List <string> > vp in toImport) { OrthoProduct prod = prods.FirstOrDefault(p => p.Name == vp.Key); if (prod != null) { prod.Variants.RemoveAll(v => !vp.Value.Contains(v.ProductNumber)); foreach (InvSupplement i in inv2.Where(iv => vp.Value.Contains(iv.productNumber))) { i.Imported = true; OrthoProduct.Variant v = prod.Variants.FirstOrDefault(pv => pv.ProductNumber == i.productNumber); if (v != null) { if (i.Retail == 0.00m) { } v.Price = i.Retail; } else { } } System.Console.Write($"{prod.Name} "); await BuildProduct(prod); await File.WriteAllTextAsync(supplement, JsonConvert.SerializeObject(inv2, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })); System.Console.WriteLine($"completed"); } else { } } }
private async Task BuildProduct(OrthoProduct p) { Product prod = new Product { Options = new List <ProductOption>(), Variants = new List <ProductVariant>(), Images = new List <ProductImage>(), PublishedScope = "global", Title = p.Name, BodyHtml = p.Description, Vendor = "Ortho Molecular" }; foreach (OrthoProduct.Option vt in p.Options) { ProductOption po = new ProductOption { Values = new List <string>(vt.values), Name = vt.variantTypeName, ProductId = prod.Id }; (prod.Options as List <ProductOption>).Add(po); } foreach (OrthoProduct.Variant v in p.Variants) { ProductVariant pv = new ProductVariant { Barcode = v.BarCode, Option1 = v.Option1, Option2 = v.Option2, Option3 = v.Option3, SKU = "Ortho-" + v.ProductNumber, Taxable = true, InventoryManagement = "shopify", InventoryQuantity = 0, Price = v.Price }; (prod.Variants as List <ProductVariant>).Add(pv); ProductImage image = new ProductImage(); string pngFile = $"f:\\temp\\Images\\Ortho Molecular\\{v.ProductNumber}.png"; image.Attachment = Convert.ToBase64String(File.ReadAllBytes(pngFile)); image.Filename = $"{pv.SKU}.png"; (prod.Images as List <ProductImage>).Add(image); } prod = await Shopify.CreateProductAsync(prod); foreach (ProductVariant pv in prod.Variants) { ProductImage pi = prod.Images.FirstOrDefault(pii => pii.Src.Contains($"/{pv.SKU}.png")); List <long> ids = new List <long> { pv.Id.Value }; pi.VariantIds = ids; } prod = await Shopify.UpdateProductAsync(prod); Shopify.CreateProductMetadata(prod.Id.Value, "ownProduct", "ShortDescription", p.BriefDescription); Shopify.CreateProductMetadata(prod.Id.Value, "ownProduct", "Benefits", p.Benefits); Shopify.CreateProductMetadata(prod.Id.Value, "ownProduct", "Contains", p.Contains); Shopify.CreateProductMetadata(prod.Id.Value, "ownProduct", "Directions", p.Directions); Shopify.CreateProductMetadata(prod.Id.Value, "ownProduct", "DoesNotContain", p.DoesNotContain); Shopify.CreateProductMetadata(prod.Id.Value, "ownProduct", "Ingredients", p.Ingredients); Shopify.CreateProductMetadata(prod.Id.Value, "ownProduct", "PatentInfo", p.PatentInfo); Shopify.CreateProductMetadata(prod.Id.Value, "ownProduct", "Storage", p.Storage); foreach (string collect in p.Categories) { Shopify.AddProductToCollection(prod, collect); } }
private async Task BuildProduct(string name) { OrthoProduct p = GetProduct(name); await BuildProduct(p); }