コード例 #1
0
        // 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);
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }