// Store store, Option[] options, Variant[] variants, title, description, type, tags, productImages, public static bool Upload_Shopbase(ShopifyTokenData store, DTO.Shopbase.Option[] options, DTO.Shopbase.Variant[] variants, ProductState productState, ProductImage[] productImages, RichTextBox logTextBox) { string baseUrl = "https://" + store.ShopDomain + "/admin"; var client = new RestClient(baseUrl); //client.AddDefaultHeader("x-shopbase-access-token", store.Token); client.Authenticator = new HttpBasicAuthenticator(store.ShopifyToken, store.Password); var createProdoductRequest = new RestRequest("/products.json", Method.POST); var product = new Product(new string[0], new string[0], options, variants, productState.body_html, productState.title, productState.product_type, productState.tags, Utils.Utilities.Capitalize(store.NameShop)); createProdoductRequest.AddJsonBody(JsonConvert.SerializeObject(new CreateProductRequest(product))); var response = client.Execute(createProdoductRequest); if (response.StatusCode != System.Net.HttpStatusCode.OK) { // Log failed SP.WriteLogs(logTextBox, "Create product failed, content: " + response.Content + ",err: " + response.ErrorMessage); return(false); } var res = JsonConvert.DeserializeObject <CreateProductResponse>(response.Content); var productId = res?.product?.id; var responseVariants = res?.product?.variants; foreach (var prodImage in productImages) { var productType = Helper.GetProductType(prodImage.type); var listVariants = new List <long>(); foreach (var variant in responseVariants) { if (variant.option1 == productType && variant.option3 == prodImage.color) { listVariants.Add(variant.id); } } byte[] bytes = File.ReadAllBytes(prodImage.path); string base64 = Convert.ToBase64String(bytes); var uploadVariantImageRequest = new RestRequest($"/products/{productId}/images.json", Method.POST); uploadVariantImageRequest.AddJsonBody(new { image = new { attachment = base64, variant_ids = listVariants.ToArray() } }); var uploadImageResponse = client.Execute(uploadVariantImageRequest); if (uploadImageResponse.StatusCode != System.Net.HttpStatusCode.OK) { SP.WriteLogs(logTextBox, "Upload image response failed, content: " + response.Content + ",err: " + response.ErrorMessage); } else { SP.WriteLogs(logTextBox, "Upload image succeed"); } } return(true); }
private void btnRun_Click(object sender, RoutedEventArgs e) { rtbLogsUploadProduct.Document.Blocks.Clear(); SP.WriteLogs(rtbLogsUploadProduct, "Kiểm tra các thông tin đầu vào"); ShopifyTokenData selectionShopifyDetail = (ShopifyTokenData)workspaceComboBox.SelectedItem; if (selectionShopifyDetail == null) { MessageBox.Show("Lựa chọn store shopify mà bạn muốn upload"); SP.WriteLogs(rtbLogsUploadProduct, "Chưa lựa chọn store shopify"); return; } List <string> listTags = new List <string>(); if (txtListTags.Text.Length > 0) { listTags = txtListTags.Text.Split(',').ToList(); } int i = 0; btnRun.IsEnabled = false; new Task(() => { ThreadPool.SetMinThreads(10, 10); ThreadPool.SetMaxThreads(10, 10); if (dgListDesigns.Items.Count > 0) { foreach (FileDesignDTO dgr in dgListDesigns.ItemsSource) { //var store = new DTO.Shopbase.Store(selectionShopifyDetail.ShopDomain, selectionShopifyDetail.ShopifyToken, selectionShopifyDetail.NameShop); ThreadPool.QueueUserWorkItem(requestUploadProducts_Shopbase_Thread, new object[] { dgr, selectionShopifyDetail.ShopDomain, dgListDesigns, listTags, selectionShopifyDetail, i }); i++; } } else { MessageBox.Show("Bạn chưa chọn design hoặc kiểm tra folder output!"); btnRun.IsEnabled = true; return; } }).Start(); btnRun.IsEnabled = true; }
private void requestUploadProducts_Shopbase_Thread(object o) { // Break object get data object[] array = o as object[]; FileDesignDTO fileDesign = (FileDesignDTO)(array[0]); string domain = (string)array[1]; DataGrid dgv_designs_UploadShopify = (DataGrid)array[2]; List <string> listTags = (List <string>)array[3]; ShopifyTokenData store = (ShopifyTokenData)array[4]; int i = Convert.ToInt32(array[5]); // Init data temp List <string> fileImageList = new List <string>(); List <string> colorsList = new List <string>(); List <string> productType = new List <string>(); List <ProductImage> productImages = new List <ProductImage>(); BUS_UploadShopify busUploadShopify = new BUS_UploadShopify(); StatusDTO dtoStatus = new StatusDTO(); var colorsByType = new Dictionary <string, List <string> >(); try { Application.Current.Dispatcher.Invoke(() => { SP.WriteLogs(rtbLogsUploadProduct, domain + " uploading design số " + i + ": " + fileDesign.Filename.ToString()); string[] files = Directory.GetFiles(txtDesigns_UploadShopify.Text); Array.Sort(files, StringComparer.InvariantCulture); // Check if file is image and has description foreach (var oFile in files) { if (oFile.Contains(".png") || oFile.ToLower().Contains(".jpg")) { if (oFile.Contains(fileDesign.Filename.ToString())) { string prodType = oFile.Split('-')[1]; productType.Add(prodType); string color = ""; if (oFile.Split('-')[1] == "mug" || oFile.Split('-')[1] == "pillow") { color = SP.CapitalizeFirstLetter(oFile.Split('-')[oFile.Split('-').Length - 2].Replace(".png", "").Replace(".jpg", "")); } else { color = SP.CapitalizeFirstLetter(oFile.Split('-')[oFile.Split('-').Length - 3].Replace(".png", "").Replace(".jpg", "")); } fileImageList.Add(oFile); if (!colorsByType.ContainsKey(prodType)) { colorsByType.Add(prodType, new List <string>()); } colorsByType[prodType].Add(color); productImages.Add(new ProductImage(oFile, fileDesign.Filename, oFile.Split('-')[1], color)); if (File.Exists(pathDescriptionFormat + "\\" + oFile.Split('-')[1] + ".chel") && oFile.Split('-')[1].ToLower() == "mug" || oFile.Split('-')[1].ToLower() == "pillow") { continue; } if (sizePriceName.Text.Length == 0) { MessageBox.Show("Chưa chọn loại sản phẩm!"); return; } var desDocument = descriptionContent.Document; if (new TextRange(desDocument.ContentStart, desDocument.ContentEnd).IsEmpty) { MessageBox.Show("Chưa nhập description!"); return; } } } } var productTypes = productType.Distinct().ToList(); var ind = 0; while (true) { var stop = true; foreach (var prodType in productTypes) { var prodTypeColors = colorsByType.GetValueOrNull(prodType); if (prodTypeColors != null && ind < prodTypeColors.Count) { var newColor = prodTypeColors.ElementAt(ind); colorsList.Add(newColor); stop = false; } } ind++; if (stop) { break; } } // Group by product type list => unique list (set) var title = SP.CapitalizeFirstLetter(fileDesign.Filename.ToString()); var colors = colorsList.Distinct().ToList(); var sizePrices = new List <SizePrice>(); var items = this.sizePriceGrid.Items; foreach (var item in items) { sizePrices.Add((SizePrice)item); } var options = UploadShopifyHelper.GetOptions(productTypes.ToArray(), sizePrices.ToArray(), colors.ToArray()); var variants = UploadShopifyHelper.GetVariants(productTypes.ToArray(), productImages.ToArray(), pathPriceSizeFormat); TextRange textRange = new TextRange(descriptionContent.Document.ContentStart, descriptionContent.Document.ContentEnd); string body_html = textRange.Text.Replace("\"", "\\\"").Replace("\n", ""); var productState = new ProductState(title, body_html, Helper.GetProductType(sizePriceName.Text), listTags.ToArray()); var success = BUS_UploadShopbase.Upload_Shopbase(store, options, variants, productState, productImages.ToArray(), rtbLogsUploadProduct); if (success) { dgv_designs_UploadShopify.Dispatcher.Invoke(new Action(delegate { DataGridRow row = dgv_designs_UploadShopify.ItemContainerGenerator.ContainerFromItem(fileDesign) as DataGridRow; SolidColorBrush brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 81, 211, 115)); row.Background = brush; })); } else { dgv_designs_UploadShopify.Dispatcher.Invoke(new Action(delegate { DataGridRow row = dgv_designs_UploadShopify.ItemContainerGenerator.ContainerFromItem(fileDesign) as DataGridRow; SolidColorBrush brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 233, 80, 101)); row.Background = brush; })); } }); } catch (Exception ex) { MessageBox.Show(ex.ToString()); SP.WriteLogs(rtbLogsUploadProduct, ex.Message); } }
private void requestUploadProducts_Shopbase_Thread(object o) { // Break object get data object[] array = o as object[]; FileDesignDTO fileDesign = (FileDesignDTO)(array[0]); string domain = (string)array[1]; DataGrid dgv_designs_UploadShopify = (DataGrid)array[2]; List <string> listTags = (List <string>)array[3]; ShopifyTokenData store = (ShopifyTokenData)array[4]; int i = Convert.ToInt32(array[5]); // Init data temp List <string> fileImageList = new List <string>(); List <string> colorsList = new List <string>(); List <string> productType = new List <string>(); List <ProductImage> productImages = new List <ProductImage>(); BUS_UploadShopify busUploadShopify = new BUS_UploadShopify(); StatusDTO dtoStatus = new StatusDTO(); try { Application.Current.Dispatcher.Invoke(() => { SP.WriteLogs(rtbLogsUploadProduct, domain.Replace(".myshopify.com", "") + " uploading design số " + i + ": " + fileDesign.Filename.ToString()); string[] files = Directory.GetFiles(txtDesigns_UploadShopify.Text); // Check if file is image and has description foreach (var oFile in files) { if (oFile.Contains(".png") || oFile.ToLower().Contains(".jpg")) { if (oFile.Contains(fileDesign.Filename.ToString())) { productType.Add(oFile.Split('-')[1]); string color = ""; if (oFile.Split('-')[1] == "mug" || oFile.Split('-')[1] == "pillow") { fileImageList.Add(oFile); color = SP.CapitalizeFirstLetter(oFile.Split('-')[oFile.Split('-').Length - 2].Replace(".png", "").Replace(".jpg", "")); } else { fileImageList.Add(oFile); color = SP.CapitalizeFirstLetter(oFile.Split('-')[oFile.Split('-').Length - 3].Replace(".png", "").Replace(".jpg", "")); } colorsList.Add(color); productImages.Add(new ProductImage(oFile, fileDesign.Filename, oFile.Split('-')[1], color)); if (File.Exists(pathDescriptionFormat + "\\" + oFile.Split('-')[1] + ".chel") && oFile.Split('-')[1].ToLower() == "mug" || oFile.Split('-')[1].ToLower() == "pillow") { continue; } if (!File.Exists(pathDescriptionFormat + "\\" + oFile.Split('-')[1] + "-men" + ".chel")) { MessageBox.Show("chưa có description cho dòng áo: " + oFile.Split('-')[1] + "-men"); return; } if (!File.Exists(pathDescriptionFormat + "\\" + oFile.Split('-')[1] + "-women" + ".chel")) { MessageBox.Show("chưa có description cho dòng áo: " + oFile.Split('-')[1] + "-women"); return; } if (!File.Exists(pathPriceSizeFormat + "\\" + oFile.Split('-')[1] + ".chel")) { MessageBox.Show("chưa có price-size cho dòng áo: " + oFile.Split('-')[1]); return; } } } } // Group by product type list => unique list (set) var title = SP.CapitalizeFirstLetter(fileDesign.Filename.ToString()); SP.WriteLogs(rtbLogsUploadProduct, "Product title: " + title); var productTypeFromSize = Path.GetFileName(selectedFileNameSizePrice).Replace(".chel", ""); var productTypes = productType.Distinct().ToList(); var colors = colorsList.Distinct().ToList(); var sizePrices = new List <SizePrice>(); var items = this.sizePriceGrid.Items; foreach (var item in items) { sizePrices.Add((SizePrice)item); } var options = UploadShopifyHelper.GetOptions(productTypes.ToArray(), sizePrices.ToArray(), colors.ToArray()); var variants = UploadShopifyHelper.GetVariants(productTypes.ToArray(), productImages.ToArray(), pathPriceSizeFormat); TextRange textRange = new TextRange(descriptionContent.Document.ContentStart, descriptionContent.Document.ContentEnd); string body_html = "<h2 style=\\\"text-align: center; \\\">" + title + "</h2>" + textRange.Text.Replace("\"", "\\\"").Replace("\n", ""); var productState = new ProductState(title, body_html, productTypeFromSize, listTags.ToArray()); var success = BUS_UploadShopbase.Upload_Shopbase(store, options, variants, productState, productImages.ToArray(), rtbLogsUploadProduct); if (success) { dgv_designs_UploadShopify.Dispatcher.Invoke(new Action(delegate { DataGridRow row = dgv_designs_UploadShopify.ItemContainerGenerator.ContainerFromItem(fileDesign) as DataGridRow; SolidColorBrush brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 81, 211, 115)); row.Background = brush; })); } else { dgv_designs_UploadShopify.Dispatcher.Invoke(new Action(delegate { DataGridRow row = dgv_designs_UploadShopify.ItemContainerGenerator.ContainerFromItem(fileDesign) as DataGridRow; SolidColorBrush brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(255, 233, 80, 101)); row.Background = brush; })); } }); } catch (Exception ex) { MessageBox.Show(ex.ToString()); SP.WriteLogs(rtbLogsUploadProduct, ex.Message); } }