public void Init() { instance = new CatalogApi(); testAccounts = new TestAccounts(); var testAccount = testAccounts["US-Prod"]; Configuration.Default.AccessToken = testAccount.AccessToken; try { var request = new BatchUpsertCatalogObjectsRequest( IdempotencyKey: Guid.NewGuid().ToString(), Batches: new List <CatalogObjectBatch>() ); request.Batches.Add(new CatalogObjectBatch(Objects: OBJECTS)); var response = instance.BatchUpsertCatalogObjects(request); idMap = response.IdMappings.ToDictionary( keySelector: m => m.ClientObjectId, elementSelector: m => m.ObjectId ); } catch (Exception ex) { Assert.Fail("Failed to build catalog objects. {0}", ex.ToString()); } }
static public async Task FixLocations() { CatalogApi api = new CatalogApi(); string cursor = null; string[] types = { "MODIFIER_LIST", "ITEM", "MODIFIER", "CATEGORY", "DISCOUNT", "TAX", "ITEM_VARIATION" }; foreach (string type in types) { List <CatalogObjectBatch> batches = new List <CatalogObjectBatch>(); CatalogObjectBatch batch = new CatalogObjectBatch { Objects = new List <CatalogObject>() }; batches.Add(batch); do { ListCatalogResponse resp = await api.ListCatalogAsync(cursor, type); if (resp.Objects != null && resp.Objects.Count > 0) { batch.Objects.AddRange(resp.Objects.Where(o => o.PresentAtAllLocations == false)); } cursor = resp.Cursor; } while (cursor != null); foreach (CatalogObject obj in batch.Objects) { obj.PresentAtAllLocations = true; } BatchUpsertCatalogObjectsRequest body = new BatchUpsertCatalogObjectsRequest(Guid.NewGuid().ToString(), batches); BatchUpsertCatalogObjectsResponse response = await api.BatchUpsertCatalogObjectsAsync(body); } }
static public async Task PortCatagories() { List <ShopifySharp.CustomCollection> list = await Shopify.GetCollections(); List <CatalogObjectBatch> batches = new List <CatalogObjectBatch>(); CatalogObjectBatch batch = new CatalogObjectBatch { Objects = new List <CatalogObject>() }; batches.Add(batch); foreach (ShopifySharp.CustomCollection collection in list) { CatalogObject category = new CatalogObject( Type: "CATEGORY", Id: $"#{collection.Title}", PresentAtAllLocations: true, CategoryData: new CatalogCategory { Name = collection.Title } ); batch.Objects.Add(category); } CatalogApi api = new CatalogApi(); BatchUpsertCatalogObjectsRequest body = new BatchUpsertCatalogObjectsRequest(Guid.NewGuid().ToString(), batches); BatchUpsertCatalogObjectsResponse response = await api.BatchUpsertCatalogObjectsAsync(body); }
public void TestBatchUpsertCatalogObjects() { var batches = new List <CatalogObjectBatch>(); int numObjects = 0; for (int batchNum = 0; batchNum < BATCH_NUMBER; batchNum++) { var objects = new List <CatalogObject>(); for (int i = 0; i < CATALOG_PER_BATCH_NUMBER; i++) { var itemId = string.Format("#Item-{0}-{1}", batchNum, i); var itemName = string.Format("Item Name {0}-{1}", batchNum, i); var variationId = string.Format("#ItemVariation-{0}-{1}", batchNum, i); objects.Add(new CatalogObject( Type: TypeEnum.ITEM, Id: itemId, ItemData: new CatalogItem( Name: itemName, Variations: new List <CatalogObject>() { new CatalogObject( Type: TypeEnum.ITEMVARIATION, Id: variationId, ItemVariationData: new CatalogItemVariation( ItemId: itemId, Name: "Regular", PricingType: CatalogItemVariation.PricingTypeEnum.FIXEDPRICING, PriceMoney: new Money(Amount: 100L, Currency: Money.CurrencyEnum.USD) ) ) } ) )); numObjects++; } var batch = new CatalogObjectBatch(objects); batches.Add(batch); } var request = new BatchUpsertCatalogObjectsRequest( IdempotencyKey: Guid.NewGuid().ToString(), Batches: batches ); var response = instance.BatchUpsertCatalogObjects(request); Assert.AreEqual(numObjects, response.Objects.Count); response.IdMappings.ForEach(m => idMap.Add(m.ClientObjectId, m.ObjectId)); }
static public async Task FixBarCodes(List <ShopifySharp.Product> products) { CatalogApi api = new CatalogApi(); string cursor = null; List <CatalogObjectBatch> batches = new List <CatalogObjectBatch>(); CatalogObjectBatch batch = new CatalogObjectBatch { Objects = new List <CatalogObject>() }; batches.Add(batch); do { ListCatalogResponse resp = await api.ListCatalogAsync(cursor, "ITEM_VARIATION"); if (resp.Objects != null && resp.Objects.Count > 0) { batch.Objects.AddRange(resp.Objects); } cursor = resp.Cursor; } while (cursor != null); foreach (CatalogObject obj in batch.Objects) { long id = long.Parse(obj.ItemVariationData.UserData); ShopifySharp.Product prod = products.FirstOrDefault(p => p.Variants.Any(v => v.Id == id)); ShopifySharp.ProductVariant variant = prod.Variants.FirstOrDefault(v => v.Id == id); // ShopifySharp.ProductVariant variant = products.Select(p => p.Variants.First(v => v.Id.ToString() == obj.ItemVariationData.UserData)).First(); obj.ItemVariationData.Upc = variant.Barcode; obj.ItemVariationData.Sku = variant.Barcode; // obj.PresentAtAllLocations = true; } BatchUpsertCatalogObjectsRequest body = new BatchUpsertCatalogObjectsRequest(Guid.NewGuid().ToString(), batches); BatchUpsertCatalogObjectsResponse response = await api.BatchUpsertCatalogObjectsAsync(body); }
static public async Task PortItemsAsync2(string locationId) { List <ShopifySharp.Product> products = await Shopify.GetProductsAsync(); List <CatalogObjectBatch> batches = new List <CatalogObjectBatch>(); CatalogObjectBatch batch = new CatalogObjectBatch { Objects = new List <CatalogObject>() }; batches.Add(batch); CatalogObject tax = new CatalogObject( "TAX", Id: $"#salestax", PresentAtAllLocations: true, TaxData: new CatalogTax { Name = "SalesTax", AppliesToCustomAmounts = true, CalculationPhase = "SUBTOTALPHASE", Enabled = true, InclusionType = "ADDITIVE", Percentage = "8.9" } ); CatalogObject employee = new CatalogObject( Type: "DISCOUNT", Id: $"#employee", PresentAtAllLocations: true, DiscountData: new CatalogDiscount { Name = "Employee", DiscountType = "FIXEDPERCENTAGE", LabelColor = "Red", PinRequired = false, Percentage = "40" } ); batch.Objects.Add(tax); foreach (ShopifySharp.Product prod in products) { CatalogObject obj = new CatalogObject( Type: "ITEM", Id: $"#{prod.Title}", PresentAtAllLocations: true, ItemData: new CatalogItem { Name = prod.Title, // Description = prod., // CategoryId = "#Beverages", TaxIds = new List <string>() { "#salestax" }, Variations = new List <CatalogObject>() } ); foreach (ShopifySharp.ProductVariant variant in prod.Variants) { CatalogObject vari = new CatalogObject ( Type: "ITEMVARIATION", Id: $"#{prod.Title}-{variant.Title}", PresentAtAllLocations: true, ItemVariationData: new CatalogItemVariation() { UserData = variant.Id.ToString(), Upc = variant.Barcode, ItemId = $"#{prod.Title}", Name = variant.Title, TrackInventory = true, PricingType = "FIXEDPRICING", PriceMoney = new Money( Amount: variant.Price.HasValue ? ((long?)(variant.Price.Value * 100L)) : null, Currency: "USD" ) } ); obj.ItemData.Variations.Add(vari); } batch.Objects.Add(obj); } CatalogApi api = new CatalogApi(); BatchUpsertCatalogObjectsRequest body = new BatchUpsertCatalogObjectsRequest(Guid.NewGuid().ToString(), batches); BatchUpsertCatalogObjectsResponse response = await api.BatchUpsertCatalogObjectsAsync(body); foreach (CatalogObject item in response.Objects.Where(o => o.Type == "ITEM")) { if (!string.IsNullOrEmpty(item.ItemData.Variations?[0].ItemVariationData.UserData)) { long oldId = long.Parse(item.ItemData.Variations?[0].ItemVariationData.UserData); ShopifySharp.Product prod = products.FirstOrDefault(p => p.Variants.Any(v => v.Id == oldId)); await ImageUploader.PortImage(locationId, item.Id, prod.Images.First().Src); } } }