public bool CreateProduct(ProductModel product, long categoryId, List<KeyValuePair<string, string>> attributeList ) { var service = new ProductServicePortClient(); var response = service.SaveProduct(new SaveProductRequest { auth = this.ProductAuthentication, product = new ProductRequest { productSellerCode = StockCodeToSellerCode(product.stockCode), title = product.title, subtitle = product.label, description = product.details, price = product.displayPrice, //approvalStatus = "", attributes = attributeList.Where(x => !String.IsNullOrWhiteSpace(x.Value)) .Select(x => new ProductAttributeRequest { name = x.Key, value = x.Value }).ToArray(), //attributes = new ProductAttributeRequest[] // { // new ProductAttributeRequest // { // name = "", // value = "" // } // }, category = new CategoryRequest { id = categoryId }, //discount = new ProductDiscountRequest(), //expirationDate = "", images = new ProductImage[] { new ProductImage { order = "1", url = product.picture1Path }, }, preparingDay = "3", ////////////////////////////////////// productCondition = "1", // Yeni //productionDate = "", //saleEndDate = "", //saleStartDate = "", shipmentTemplate = "Ürün Listeleme", stockItems = new ProductSkuRequest[] { new ProductSkuRequest { quantity = product.stockAmount.ToString(), sellerStockCode = product.stockCode, } }, } }); var result = response.result.status == "success"; if (!result) response.GetType(); return result; //var url = "https://api.n11.com/rest/secure/product/createOrUpdate.json"; //var paramStr = String.Format(""); //var paramObj = new JObject(); //paramObj["productSellerCode"] = StockCodeToSellerCode(product.stockCode); //paramObj["title"] = product.title; //paramObj["subtitle"] = product.label; //paramObj["description"] = product.details; //paramObj["category"] = JObject.Parse("{ 'id' : " + categoryId.ToString() + " }"); //paramObj["price"] = product.displayPrice; //paramObj["preparingDay"] = 3; //paramObj["productCondition"] = "1"; // Yeni ürün //paramObj["images"] = JArray.Parse("[ { 'url': '" + product.picture1Path + "', 'order': 1 } ]"); //paramObj["stockItem"] = JObject.Parse("{ 'quantity': " + product.stockAmount.ToString() + " }"); //var attStr = attributeList.Select(x => "{ 'name': '" + x.Key + "', 'value': '" + x.Value + "' }") // .Aggregate((a, b) => a + ", " + b); //paramObj["attributes"] = JArray.Parse("[" + attStr + "]"); //paramObj["stockItem"] = JObject.Parse("{ 'quantity': " + product.stockAmount.ToString() + ", 'attributes': [" + "" + "] }"); //paramObj["shipmentTemplate"] = "Ürün Listeleme"; //var obj = callPost(url, paramObj.ToString()); return true; }
public object GetProduct(string sellerCode) { var url = "https://api.n11.com/rest/secure/product/get.json"; url += String.Format("?appkey={0}&appsecret={1}&sellerCode={2}", appKey, appSecret, StockCodeToSellerCode(sellerCode)); var req = WebRequest.Create(url); req.ContentType = "text/plain"; //req.Headers.Add("Accept", "application/json"); var res = req.GetResponse(); var st = new System.IO.StreamReader(res.GetResponseStream()); var result = st.ReadToEnd(); st.Close(); var obj = JObject.Parse(result); var data = obj["response"]["data"] as JObject; if (data == null) return null; var prod = new ProductModel { id = (int) data["id"], title = (string) data["title"], subtitle = (string) data["subtitle"], stockCode = sellerCode, //productSellerCode = (string)x["productSellerCode"], //saleStatus = (string)x["saleStatus"], displayPrice = (decimal) data["displayPrice"], }; return prod; }
private void bgw_DoWork(object sender, DoWorkEventArgs e) { var i = 0; bgw1.ReportProgress(0, "Yeni ürünler kaydediliyor."); foreach (DataRow dr in newProductsTable.Rows) { i++; var percent = (int)Math.Round((double)(i * 100 / newProductsTable.Rows.Count)); if (dr["n11Category"] == System.DBNull.Value || String.IsNullOrWhiteSpace(dr["n11Category"].ToString())) { bgw1.ReportProgress(percent, String.Format("{0} için kategori seçilmedi.", dr["stockCode"])); continue; } if (!rowAttributeTable.ContainsKey((string) dr["stockCode"])) { bgw1.ReportProgress(percent, String.Format("{0} için özellikler seçilmedi.", dr["stockCode"])); continue; } var prod = new ProductModel { stockCode = (string) dr["stockCode"], label = (string) dr["label"], brand = (string) dr["brand"], title = (string)dr["label"], //dr["category"] = String.Format("{0} / {1} / {2}", sourceProd.mainCategory, sourceProd.category, sourceProd.subCategory); displayPrice = (decimal) dr["price"], stockAmount = (int) dr["stockAmount"], picture1Path = (string) dr["picture1Path"], details = (string) dr["details"] }; //var catId = long.Parse(((string)dr["n11Category"]).Split('-')[0]); var catIdStr = ((string) dr["n11Category"]).Split('-')[0]; //var cat = categoryTable[catId]; var cat = categoryTable.Values.First(x => x.Code == catIdStr); var attList = rowAttributeTable[(string) dr["stockCode"]]; var result = service.CreateProduct(prod, long.Parse(cat.Code), attList); if (result == false) { result.GetType(); } bgw1.ReportProgress(percent, String.Format("{0} / {1} ({2} %)", i, newProductsTable.Rows.Count, percent)); if (bgw1.CancellationPending) return; } i = 0; bgw1.ReportProgress(0, "Ürün fiyat ve stok miktarları güncelleniyor."); foreach (DataRow dr in updateProductsTable.Rows) { i++; var percent = (int)Math.Round((double)(i * 100 / updateProductsTable.Rows.Count)); var stockCode = (string)dr["stockCode"]; var oldPrice = (decimal) dr["oldPrice"]; var newPrice = (decimal)dr["newPrice"]; var oldStock = (int)dr["oldStock"]; var newStock = (int)dr["newStock"]; var diff = (decimal)dr["diff"]; if (oldPrice != newPrice) { // update price if (diff > 10) diff.GetType(); if (!service.UpdateProduct(stockCode, newPrice)) oldPrice.GetType(); } if (oldStock != newStock) { // update stock service.UpdateProductStock(stockCode, newStock); } bgw1.ReportProgress(percent, String.Format("{0} / {1} ({2} %)", i, updateProductsTable.Rows.Count, percent)); } i = 0; bgw1.ReportProgress(0, "N11deki eski ürünlerin stok bilgileri sıfırlanıyor."); foreach (DataRow dr in oldProductsTable.Rows) { i++; var percent = (int)Math.Round((double)(i * 100 / oldProductsTable.Rows.Count)); var productStockCode = (string)dr["stockCode"]; var productTitle = (string)dr["label"]; if (productTitle.Contains("Timberland")) { bgw1.ReportProgress(percent, String.Format("{0} / {1} ({2} %) {3} SIFIRLANMADI.", i, oldProductsTable.Rows.Count, percent, productTitle)); if (bgw1.CancellationPending) return; continue; } var sourceProd = sourceList.FirstOrDefault(x => productStockCode.Contains("_" + x.stockCode + "_")); if (sourceProd == null) { // Remove service.RemoveProduct(productStockCode); bgw1.ReportProgress(percent, String.Format("{0} / {1} ({2} %)", i, oldProductsTable.Rows.Count, percent)); Debug.WriteLine("{0} sıfırlandı\t{1}\t{2}", i, productStockCode, productTitle); } else { bgw1.ReportProgress(percent, String.Format("{0} / {1} ({2} %) Ürün ES'de mevcut, sıfırlanmıyor.", i, oldProductsTable.Rows.Count, percent)); sourceProd.GetType(); } if (bgw1.CancellationPending) return; } bgw1.ReportProgress(100, "Bitti"); }