Exemplo n.º 1
0
        private static string GetBonanzaRecordDescription(AllStockSize asSize, AllStockSneaker asSneaker, FullCatalogRoot fullCatalog)
        {
            var boothUrl = System.Configuration.ConfigurationManager.AppSettings["bonanzaBoothUrl"];
            var title    = asSneaker.title;
            var sku      = asSneaker.sku;
            var size     = SizeChart.GetSizeStatic(new Size(asSneaker.brand, asSneaker.category, asSize.us, null, null, null, null));

            if (size == null)
            {
                _logger.Warn("Ошибка в размере. sku: " + asSneaker.sku);
                return(null);
            }

            var sizeString = size.GetSizeStringUsEuUkCm();

            string description =
                "<h3 style=\"text-align: center;\"><strong>" +
                title.ToUpper() +
                "</strong></h3>" +
                "<h3 style=\"text-align: center;\"><strong>" +
                "STYLE: " + sku +
                "</strong></h3>" +
                "<h3 style=\"text-align: center;\"><strong>" +
                "SIZE: " + sizeString +
                "</strong></h3>" +
                "<h3 style=\"text-align: center;\"><strong>" +
                "100% AUTHENTIC" +
                "</strong></h3>" +
                "<h3 style=\"text-align: center;\"><strong>" +
                "WORLDWIDE SHIPPING FOR 5-10 DAYS IN DOUBLE BOX WITH TRACKING NUMBER.<br>" +
                "</strong></h3>" +
                "<h3 style=\"text-align: center;\"><strong>" +
                "SHIP IN 2 BUSINESS DAY." +
                "</strong></h3>";

            //description += "<h3 style=\"text-align: center;\"><strong>All sizes of this model available in stock</strong></h3>";

            //if (sizeList != null)
            //{
            //    if (sizeList.Count > 0)
            //    {
            //        foreach (var size in sizeList)
            //        {
            //            //725076-301+6.5US
            //            description += "<h4 style=\"text-align: center;\"><strong><a href=\"" + boothUrl + "?utf8=%E2%9C%93&amp;item_sort_options%5Bfilter_string%5D=" + sku + "+" + size + "US&amp;item_sort_options%5Bfilter_category_id%5D=&amp;item_sort_options%5Bcustom_category_id%5D=&amp;commit=Go\" rel=\"nofollow\" target=\"_blank\">Size " + size + " US</a></strong></h4>";
            //        }
            //    }
            //}

            description += "<h3 style=\"text-align: center;\"><strong>" +
                           "Other sizes of this model available in out stock: " +
                           "<a href=\"" + boothUrl + "?utf8=%E2%9C%93&amp;item_sort_options%5Bfilter_string%5D=" + sku + "&amp;item_sort_options%5Bfilter_category_id%5D=&amp;item_sort_options%5Bcustom_category_id%5D=&amp;commit=Go\" rel=\"nofollow\" target=\"_blank\">Link</a>" +
                           "</strong></h3>";

            description += "<h3 style=\"text-align: center;\"><strong>" + "Please feel free to ask any questions and see <a href=\"" + boothUrl + "\" rel=\"nofollow\" target=\"_blank\">all our listings</a> for more great deals." + "</strong></h3>";

            //throw new NotImplementedException();
            return(description);
        }
Exemplo n.º 2
0
        public static SizeChartViewModel ToViewModel(this SizeChart sizeChart)
        {
            var sizeChartViewModel = new SizeChartViewModel
            {
                Id       = sizeChart.Id,
                FileName = sizeChart.FileName
            };

            return(sizeChartViewModel);
        }
Exemplo n.º 3
0
        public static SizeChart ToDbModel(this SizeChartViewModel sizeChartViewModel)
        {
            var sizeChart = new SizeChart
            {
                Id       = sizeChartViewModel.Id,
                FileName = sizeChartViewModel.FileName
            };

            return(sizeChart);
        }
Exemplo n.º 4
0
        private void StoreSizeChart(Product product, ProductViewModel productViewModel)
        {
            try
            {
                var sizeChartImageId = Convert.ToInt32(productViewModel.SizeChartImage);

                product.SizeChartId = sizeChartImageId;
            }
            catch (FormatException)
            {
                var newSizeChartImage = new SizeChart {
                    FileName = productViewModel.SizeChartImage
                };

                product.SizeChart = newSizeChartImage;
            }
        }
        private bool ValidateSize(string sizeUS, string category)
        {
            category = Helper.ConvertCategoryRusToEng(category);
            SizeChart sizeChart = SizeConverter.ReadSizeChartJson();
            var       menSizes  = sizeChart.sizes.FindAll(x => x.category == category);
            var       size      = menSizes.Find(x => x.us == sizeUS);

            if (size == null)
            {
                return(false);
            }
            else
            {
                return(true);
            }
            //throw new NotImplementedException();
        }
Exemplo n.º 6
0
        private static AllStockSize CreateSize(ListingSize size, AllStockSneaker sneaker, Listing listing, RootParsingObject market, Shop jsonMarket)
        {
            var sizeAllStock = new AllStockSize();

            if (size.us == null)
            {
                size.us = SizeConverters.SizeConverter.GetSizeUs(sneaker.brand, sneaker.category, size.eu, size.uk, size.cm);
            }
            if (size.us == null)
            {
                //значит размер левый или его нет в таблице размеров
                return(null);
            }
            else
            {
                if (listing.category != sneaker.category)
                {
                    Program.Logger.Warn("wrong category. SKU:" + listing.sku + "\n"
                                        + "Listing Category: " + listing.category + ".\n"
                                        + "FullCatalog Category:" + sneaker.category + "\n"
                                        + "ListingTite: " + listing.title + "\n"
                                        + "Listing Link:" + listing.url);
                    return(null);
                }
                var schSize = SizeChart.GetSizeStatic(new Size(sneaker.brand, sneaker.category, size.us, size.eu, size.uk, size.cm, size.ru));
                if (schSize == null)
                {
                    Program.Logger.Warn("wrong size. SKU:" + listing.sku + "\n"
                                        + "Listing Category: " + listing.category + ".\n"
                                        + "FullCatalog Category:" + sneaker.category + "\n"
                                        + "ListingTite: " + listing.title + "\n"
                                        + "Listing Link:" + listing.url);
                    return(null);
                }
                sizeAllStock.us   = size.us;
                sizeAllStock.sku2 = sneaker.sku + "-" + size.us;
                sizeAllStock.upc  = size.upc;
                var offer = CreateOffer(listing, market, jsonMarket);
                sizeAllStock.offers.Add(offer);
                return(sizeAllStock);
            }
        }
        public static string ValidateSize(string brand, string category, string sizeUS, string sizeEU, string sizeUK, string sizeCM, SizeChart sizeChart = null)
        {
            var log = String.Empty;

            if (ValidateBrand(brand))
            {
                if (ValidateCategory(category))
                {
                    //проверяю есть ли такой размер в таблице размеров (по разным размерным сеткам)
                    if (sizeChart == null)
                    {
                        sizeChart = SizeChart.ReadSizeChartJson();
                    }

                    var size       = new Size(brand, category, sizeUS, sizeEU, sizeUK, sizeCM, null);
                    var resultSize = sizeChart.GetSize(size, out log);
                    if (resultSize == null)
                    {
                        return(log);
                    }
                    else
                    {
                        return(null); //если null значит всё норм
                    }
                }
                else
                {
                    log = "ValidateSize failed. Reason: wrong category. Class Validator. Category value: " + category;
                    return(log);
                }
            }
            else
            {
                log = "ValidateSize failed. Reason: wrong brand. Class Validator. Brand value: " + brand;
                return(log);
            }
        }
Exemplo n.º 8
0
        private static AvitoAd GetAdFromSneaker(Listing sneaker, FullCatalogRecord fcSneaker, DateTime startTime,
                                                int position, int count)
        {
            AvitoAd Ad = new AvitoAd();

            if (fcSneaker == null)
            {
                _logger.Warn("is not exist in fullcatalog sku:" + sneaker.sku);
                return(null);
            }

            _logger.Info("sku: " + sneaker.sku + "  title: " + fcSneaker.title);

            if (String.IsNullOrWhiteSpace(sneaker.category))
            {
                _logger.Warn("Skip sneaker. Reason: category is empty");
                return(null);
            }
            else if (sneaker.category == "kids")
            {
                _logger.Info("skip sneaker. Reason: kids category");
                return(null);
            }

            if (sneaker.sizes == null)
            {
                _logger.Warn("Skip sneaker. Reason: sizes is empty");
                return(null);
            }

            if (sneaker.sizes.Count == 0)
            {
                _logger.Warn("Skip sneaker. Reason: sizes is empty. Sku:" + sneaker.sku);
                return(null);
            }

            if (fcSneaker.images == null)
            {
                _logger.Warn("Skip sneaker. Reason: images is empty. Sku: " + sneaker.sku);
                return(null);
            }
            else if (fcSneaker.images.Count == 0)
            {
                _logger.Warn("Skip sneaker. Reason: images is empty. Sku: " + sneaker.sku);
                return(null);
            }

            Ad.Id = sneaker.sku;

            //DateBegin

            /* нужно все объявления размазать на месяц (ну пусть будет на 30 дней).
             * допустим если у меня есть 3000 объявлений то это значит что нужно постить по 100 в день
             * Постить будем допустим с 7.00 утра 23.59. Получается 17 часов. это 61200 секунд.
             * Получается объявление нужно постить каждые 612 секунд, начиная с 7 утра
             *
             * В сутках 24 часа, это 86400 секунд.
             * В 30 днях 2 592 000 секунд
             * То есть если у нас есть 3000 объявлений, значит начиная с текущего момента нужно постить объявление каждые 864 секунды
             */
            double delay    = 2592000 / count * position; //todo сделать распределение на 10 часов а не 24
            var    intDelay = (int)delay;

            //Ad.DateBegin = startTime.AddSeconds(intDelay); //todo datebegin можно определить только после того, как известно точное кол-во выгружаемых позиций (с учетом отфильтрованных невалидных)
            //Ad.DateBegin = startTime;
            Ad.DateBegin    = GetDateBegin(startTime, count, position, DaysPeriod, EndHour, StartHour);
            Ad.ManagerName  = "Роман";
            Ad.ContactPhone = "88002001121";
            Ad.AllowEmail   = "Да";
            //Ad.Region = "Самарская область";
            Ad.City = "Москва";

            //goods type
            var category = fcSneaker.category;

            if (category == "men")
            {
                Ad.Category  = "Одежда, обувь, аксессуары";
                Ad.GoodsType = "Мужская одежда";
            }
            else if (category == "women")
            {
                Ad.Category  = "Одежда, обувь, аксессуары";
                Ad.GoodsType = "Женская одежда";
            }
            else if (category == "kids")
            {
                _logger.Info("skip sneaker. Reason: kids category");
                return(null);
            }
            else
            {
                _logger.Warn("null or wrong category");
                return(null);
            }

            Ad.Apparel = "Обувь";

            //size
            //буду брать случайный русский размер из списка размеров, нужно будет округлить до целого
            var rnd2              = new Random().Next(sneaker.sizes.Count - 1); //todo брать только артикулы у которых 3 или больше размеров в наличии
            var sizeUsAllStock    = sneaker.sizes[rnd2];
            var sizeAllStock      = new Size(sneaker.brand, sneaker.category, sizeUsAllStock.us, null, null, null, null);
            var sizeFromSizeChart = SizeChart.GetSizeStatic(sizeAllStock);

            if (sizeFromSizeChart == null)
            {
                Ad.Size = "Без размера";
            }
            else
            {
                var    ruSize       = sizeFromSizeChart.ru.Replace(".", ",");
                double doubleRuSize = 0;
                if (Double.TryParse(ruSize, out doubleRuSize))
                {
                    Ad.Size = Math.Round(doubleRuSize, 0).ToString();
                }
                else
                {
                    Ad.Size = "Без размера";
                }
            }
            if (Ad.Size == "Без размера")
            {
                _logger.Error("Wrong size: " + sizeUsAllStock.us);
                return(null);
                //if (sneaker.category == "men")
                //    Ad.Size = "42";
                //else if (sneaker.category == "women")
                //    Ad.Size = "37";
                //else if (sneaker.category == "kids")
                //    Ad.Size = "35";
            }

            //title
            var type = string.Empty;

            if (!string.IsNullOrWhiteSpace(fcSneaker.type))
            {
                type = fcSneaker.type + " ";
            }
            Ad.Title = "Новые " + type + sneaker.title.ToLower();
            if (Ad.Title.Length > 50)
            {
                Ad.Title = Ad.Title.Substring(0, 50);
            }
            Ad.Title = Helper.UpperFirstCharInWord(Ad.Title);

            //description
            var br   = "\n";
            var desc = "<![CDATA[" + br;

            if (fcSneaker.type == null)
            {
                fcSneaker.type = String.Empty;
            }
            desc += "<p>Новые оригинальные " + fcSneaker.type.ToLower() + " " + sneaker.title.ToUpper() + "</p>" + br;
            desc += "<p>Артикул: " + sneaker.sku + "</p>" + br;
            desc += "<p>В оригинальной упаковке Nike.</p>" + br;
            desc += "<p>БЕСПЛАТНАЯ доставка по Москве в день заказа или на следующий день</p>" + br;
            desc += "<p>Работаем 7 дней в неделю, без праздников и выходных</p>" + br;
            desc += "<p>Доставка по России 3-5 дней компанией СДЭК.</p>" + br;
            desc += "<p>Стоимость доставки по РФ - 300 рублей.</p>" + br;
            desc += "<p>Доставка по РФ только по 100% предоплате, наложенным платежом не отправляем</p>" + br;
            desc += "<p>Работаем с 2014 года, более 4000 моделей в ассортименте. Можете перейти в магазин авито (страница Контакты), потом на сайт и в группу Вконтакте, чтобы убедиться в том, что мы ПРОДАЕМ ТОЛЬКО ОРИГИНАЛЬНУЮ ОБУВЬ. НИКАКИХ ПОДДЕЛОК И РЕПЛИК!</p>" + br;
            desc += "<p>В нашей группе Вконтакте более 70 реальных отзывов от клиентов!</p>" + br;
            desc += "<p>Размеры в наличии:</p>" + br;
            desc += "<ul>" + br;
            foreach (var size in sneaker.sizes)
            {
                var scSize = SizeChart.GetSizeStatic(new Size(sneaker.brand, sneaker.category, size.us, null, null, null, null));
                if (scSize != null)
                {
                    desc += "<li>" + scSize.GetAllSizeString() + "</li>" + br;
                }
            }
            desc          += "</ul>" + br;
            desc          += "<p>Уточняйте наличие размеров.</p>" + br;
            desc          += "<p>Если размера нет в наличии, возможно его можно привезти под заказ. Срок поставки товара под заказ: 7-10 дней. </p>" + br;
            desc          += "<p>Sneaker Icon - это большой выбор оригинальной брендовой обуви Nike и Jordan. Кроссовки, кеды, бутсы, футзалки, шиповки, сланцы, ботинки и другие типы обуви</p>" + br;
            desc          += "<p>БОЛЬШИЕ РАЗМЕРЫ: доставляем под заказ обувь до 55 размера, а также обувь двойной полноты стопы и другие редкие модели и размеры</p>" + br;
            desc          += "<p>ДЛЯ СПОРТИВНЫХ КОМАНД: подбираем полные комплекты обуви, одежды и сопутствующих товаров для спортивных команд</p>" + br;
            desc          += "<p>ДЛЯ ОПТОВИКОВ: отправляем в регионы оптом брендовую обувь, одежду и аксессуары по оптовым ценам.</p>" + br;
            desc          += "<p>Звоните или пишите в сообщения Авито по всем вопросам</p>" + br;
            desc          += "]]>";
            Ad.Description = desc;

            //price
            Ad.Price = (int)sneaker.price + MARGIN;

            Ad.Images = fcSneaker.images;

            return(Ad);
        }
        private static AvitoAd GetAdFromSneaker(Model.AllStock.AllStockSneaker sneaker, FullCatalogRecord fcSneaker, DateTime startTime, int position, int count)
        {
            AvitoAd Ad = new AvitoAd();

            if (fcSneaker.images == null)
            {
                return(null);
            }
            if (fcSneaker.images.Count == 0)
            {
                return(null);
            }
            if (String.IsNullOrWhiteSpace(sneaker.category))
            {
                return(null);
            }
            if (sneaker.sizes == null)
            {
                return(null);
            }
            if (sneaker.sizes.Count == 0)
            {
                return(null);
            }

            Ad.Id = sneaker.sku;

            //DateBegin

            /* нужно все объявления размазать на месяц (ну пусть будет на 30 дней).
             * допустим если у меня есть 3000 объявлений то это значит что нужно постить по 100 в день
             * Постить будем допустим с 7.00 утра 23.59. Получается 17 часов. это 61200 секунд.
             * Получается объявление нужно постить каждые 612 секунд, начиная с 7 утра
             *
             * В сутках 24 часа, это 86400 секунд.
             * В 30 днях 2 592 000 секунд
             * То есть если у нас есть 3000 объявлений, значит начиная с текущего момента нужно постить объявление каждые 864 секунды
             */
            double delay    = 2592000 / count * position;
            var    intDelay = (int)delay;

            //Ad.DateBegin = startTime.AddSeconds(intDelay);
            Ad.DateBegin    = startTime;
            Ad.ManagerName  = "Евгений";
            Ad.ContactPhone = "88002001121";
            Ad.AllowEmail   = "Да";
            Ad.Region       = "Москва";


            //goods type
            if (sneaker.category == "men")
            {
                Ad.Category  = "Одежда, обувь, аксессуары";
                Ad.GoodsType = "Мужская одежда";
            }
            else if (sneaker.category == "women")
            {
                Ad.Category  = "Одежда, обувь, аксессуары";
                Ad.GoodsType = "Женская одежда";
            }
            else if (sneaker.category == "kids")
            {
                Ad.Category = "Детская одежда и обувь";
                var rnd = new Random().NextDouble();
                if (rnd > 0.5)
                {
                    Ad.GoodsType = "Для девочек";
                }
                else
                {
                    Ad.GoodsType = "Для мальчиков";
                }
            }

            Ad.Apparel = "Обувь";

            //size
            //буду брать случайный русский размер из списка размеров, нужно будет округлить до целого
            var rnd2              = new Random().Next(sneaker.sizes.Count - 1);
            var sizeUsAllStock    = sneaker.sizes[rnd2];
            var sizeAllStock      = new Size(sneaker.brand, sneaker.category, sizeUsAllStock.us, null, null, null, null);
            var sizeFromSizeChart = SizeChart.GetSizeStatic(sizeAllStock);

            if (sizeFromSizeChart == null)
            {
                Ad.Size = "Без размера";
            }
            else
            {
                var    ruSize       = sizeFromSizeChart.ru.Replace(".", ",");
                double doubleRuSize = 0;
                if (Double.TryParse(ruSize, out doubleRuSize))
                {
                    Ad.Size = Math.Round(doubleRuSize, 0).ToString();
                }
                else
                {
                    Ad.Size = "Без размера";
                }
            }
            if (Ad.Size == "Без размера")
            {
                if (sneaker.category == "men")
                {
                    Ad.Size = "42";
                }
                else if (sneaker.category == "women")
                {
                    Ad.Size = "37";
                }
                else if (sneaker.category == "kids")
                {
                    Ad.Size = "35";
                }
            }

            //title
            Ad.Title = "Новые оригинальные " + sneaker.title.ToUpper() + " " + sneaker.sku;
            if (Ad.Title.Length > 50)
            {
                Ad.Title = Ad.Title.Substring(0, 50);
            }
            //Ad.Title = Ad.Title.ToLower();

            //description
            var br   = "\n";
            var desc = "<![CDATA[" + br;

            if (fcSneaker.type == null)
            {
                fcSneaker.type = String.Empty;
            }
            desc += "<p>Новые оригинальные " + fcSneaker.type.ToLower() + " " + sneaker.title.ToUpper() + "</p>" + br;
            desc += "<p>Артикул: " + sneaker.sku + "</p>" + br;
            desc += "<p>В оригинальной упаковке Nike.</p>" + br;
            desc += "<p>БЕСПЛАТНАЯ доставка по Москве</p>" + br;
            desc += "<p>Доставка по России 3-5 дней компанией СДЭК.</p>" + br;
            desc += "<p>Стоимость доставки по РФ - 300 рублей.</p>" + br;
            desc += "<p>Доставка в регионы только по 100% предоплате, наложенным платежом не отправляем</p>" + br;
            desc += "<p>Работаем с 2012 года, более 4000 моделей в ассортименте. Можете перейти в магазин авито (страница Контакты), потом на сайт и в группу Вконтакте, чтобы убедиться в том, что мы продаем только оригинальную обувь. Никаких подделок и реплик!</p>" + br;
            desc += "<p>В нашей группе Вконтакте более 70 реальных отзывов от клиентов!</p>" + br;
            desc += "<p>Размеры в наличии:</p>" + br;
            desc += "<ul>" + br;
            foreach (var size in sneaker.sizes)
            {
                var scSize       = SizeChart.GetSizeStatic(new Size(sneaker.brand, sneaker.category, size.us, null, null, null, null));
                var priceSize    = size.offers[0].price_usd_with_delivery_to_usa_and_minus_vat;
                var priceSizeRub = (int)CurrencyRate.ConvertCurrency("USD", "RUB", priceSize) + MARGIN;
                if (scSize != null)
                {
                    desc += "<li>" + scSize.GetAllSizeString() + ". Цена:" + priceSizeRub + "</li>" + br;
                }
            }
            desc          += "</ul>" + br;
            desc          += "<p>Уточняйте наличие размеров.</p>" + br;
            desc          += "<p>Если размера нет в наличии, можем его привезти под заказ. Срок поставки товара под заказ: 7-10 дней. </p>" + br;
            desc          += "<p>Sneaker Icon - это большой выбор оригинальной брендовой обуви Nike и Jordan. Кроссовки, кеды, бутсы, футзалки, шиповки, сланцы, ботинки и другие типы обуви</p>" + br;
            desc          += "<p>Звоните или пишите в сообщения Авито по всем вопросам</p>" + br;
            desc          += "]]>";
            Ad.Description = desc;

            //price
            var priceUsd  = sneaker.GetMinPrice();
            var priceRub  = CurrencyRate.ConvertCurrency("USD", "RUB", priceUsd);
            var pricetest = (int)priceRub + MARGIN;

            Ad.Price = (int)Math.Round(priceRub, 0) + MARGIN;

            Ad.Images = fcSneaker.images;

            return(Ad);
        }
 public SizeConverter()
 {
     sizeChart = SizeConverter.ReadSizeChartJson();
 }
Exemplo n.º 11
0
        private static async void PostPrivateToTelegram(HotOffer offer)
        {
            var message = "Горячее предложение\n"
                          + "Название: " + offer.title + " \n"
                          + "Артикул: " + offer.sku + "\n";
            var regPriceRub = CurrencyRate.ConvertCurrency("USD", "RUB", offer.regular_price);

            message += "Цена в розницу: " + offer.regular_price + " USD = " + regPriceRub + " RUB\n";
            var ourPriceRub = CurrencyRate.ConvertCurrency("USD", "RUB", offer.our_price);

            message += "Наша цена со скидкой: " + offer.our_price + " USD = " + ourPriceRub + "RUB\n";
            var rusCategory = Helper.ConvertEngToRusCategory(offer.sizes[0].size.category);

            message += "Категория: " + rusCategory + "\n";
            //sizes
            message += "\nДоступные размеры:\n";
            var sizeChart = SizeChart.ReadSizeChartJson();
            var shops     = new List <string>();
            var sizesUS   = new List <string>();
            var ourPrices = new List <double>();

            foreach (var offerSize in offer.sizes)
            {
                var size = sizeChart.GetSize(offerSize.size);
                if (size != null)
                {
                    message += size.us + " US / " + size.eu + " EU / " + size.uk + " UK / " + size.cm + " CM \n";
                    ourPrices.Add(offerSize.price);
                    //message += offerSize.price + "USD (with ship and return vat) \n";
                    if (!shops.Contains(offerSize.url))
                    {
                        shops.Add(offerSize.url);
                    }
                    //message += offerSize.url + "\n";
                }
                else
                {
                    Program.Logger.Warn("Ошибка в размере " + offer.title + " " + offer.sku);
                }
            }

            //our prices
            message += "\nНаша цена (с доставкой до РФ и вычетом VAT если есть)\n";
            foreach (var offerSize in offer.sizes)
            {
                var rubPrice = CurrencyRate.ConvertCurrency("USD", "RUB", offerSize.price);
                message += offerSize.size.us + " US: " + offerSize.price + "USD = " + rubPrice + "RUB\n";
            }

            //shops
            message += "\nОткуда брать:\n";
            foreach (var url in shops)
            {
                message += url + "\n";
            }

            //images
            message += "\nИзображения:\n";
            foreach (var image in offer.images)
            {
                message += image + "\n";
            }

            var chatId = "-1001101919442";
            await Helper.TelegramPost(message, chatId);
        }
Exemplo n.º 12
0
        private static async void PostPublicToTelegram(HotOffer offer)
        {
            var message = "Горячее предложение\n"
                          + "Название: " + offer.title + " \n"
                          + "Артикул: " + offer.sku + "\n";
            var rusCategory = Helper.ConvertEngToRusCategory(offer.sizes[0].size.category);

            message += "Категория: " + rusCategory + "\n";

            message += "\nЦены: \n";
            var regPriceRub = CurrencyRate.ConvertCurrency("USD", "RUB", offer.regular_price);

            message += "Ритейл: " + offer.regular_price + " USD = " + regPriceRub + " RUB\n";
            var price       = offer.our_price + MARGIN_USD;
            var ourPriceRub = CurrencyRate.ConvertCurrency("USD", "RUB", price);

            message += "Наша: " + price + " USD = " + ourPriceRub + "RUB\n";

            //sizes
            message += "\nДоступные размеры:\n";
            var sizeChart = SizeChart.ReadSizeChartJson();
            var shops     = new List <string>();
            var sizesUS   = new List <string>();
            var ourPrices = new List <double>();

            foreach (var offerSize in offer.sizes)
            {
                var size = sizeChart.GetSize(offerSize.size);
                if (size != null)
                {
                    message += size.us + " US / " + size.eu + " EU / " + size.uk + " UK / " + size.cm + " CM \n";
                    ourPrices.Add(offerSize.price);
                    //message += offerSize.price + "USD (with ship and return vat) \n";
                    if (!shops.Contains(offerSize.url))
                    {
                        shops.Add(offerSize.url);
                    }
                    //message += offerSize.url + "\n";
                }
            }

            //
            message += "\nКак заказать:\n";
            message += "Звоните по телефону +78002001121 \n";
            message += "Пишите в WhatsApp, Viber: +79179549490 (Дмитрий)\n";
            message += "В Телеграм: @Sneaker_icon (Евгений)\n";
            //message += "Наша группа Вконтакте (отзывы о нашей работе с 2012 года): https://vk.com/sneaker_icon \n";


            message += "\nДоставка / Оплата \n";
            message += "Доставка по РФ и СНГ в течение 7-14 дней\n";
            message += "Работаем только по 100% предоплате\n";

            //images
            message += "\nИзображения:\n";
            foreach (var image in offer.images)
            {
                message += image + "\n";
            }

            var chatId = "@sneaker_icon_hot";
            await Helper.TelegramPost(message, chatId);
        }
Exemplo n.º 13
0
        private VkGoodsItem PostItemToVk(FullCatalogRoot fullCatalog, AllStockSneaker artikul, VkGoodsRoot oldVkGoodsRoot)
        {
            try
            {
                var task = new VkTask();

                var fcSneaker = fullCatalog.records.Find(x => x.sku == artikul.sku);
                if (fcSneaker.images == null)
                {
                    return(null);
                }
                if (fcSneaker.images.Count == 0)
                {
                    return(null);
                }
                if (string.IsNullOrWhiteSpace(artikul.category))
                {
                    return(null);
                }
                if (artikul.sizes == null)
                {
                    return(null);
                }
                if (artikul.sizes.Count == 0)
                {
                    return(null);
                }

                task.Header = artikul.title.ToUpper() + " " + fcSneaker.sku;

                var sizeBlock = "";

                foreach (var size in artikul.sizes)
                {
                    var scSize       = SizeChart.GetSizeStatic(new Size(artikul.brand, artikul.category, size.us, null, null, null, null));
                    var priceSize    = size.offers[0].price_usd_with_delivery_to_usa_and_minus_vat;
                    var priceSizeRub = (int)CurrencyRate.ConvertCurrency("USD", "RUB", priceSize) + Margin;
                    if (scSize != null)
                    {
                        sizeBlock += scSize.GetAllSizeString() + ". Цена:" + priceSizeRub + Environment.NewLine;
                    }
                }

                var start = fcSneaker.type.ToLower() + " " + artikul.title.ToUpper() + Environment.NewLine;
                task.Description  = start.Substring(0, 1).ToUpper() + start.Remove(0, 1);
                task.Description += "Артикул: " + artikul.sku + Environment.NewLine;
                task.Description += "В оригинальной упаковке Nike." + Environment.NewLine;
                task.Description += "БЕСПЛАТНАЯ доставка по Москве" + Environment.NewLine;
                task.Description += "Доставка по России 3-5 дней компанией СДЭК." + Environment.NewLine;
                task.Description += "Стоимость доставки по РФ - 300 рублей." + Environment.NewLine;
                task.Description += "Доставка в регионы только по 100% предоплате, наложенным платежом не отправляем" + Environment.NewLine;
                task.Description += "Работаем с 2012 года, более 4000 моделей в ассортименте. Можете перейти в группу Вконтакте, чтобы убедиться в том, что мы продаем только оригинальную обувь. Никаких подделок и реплик!" + Environment.NewLine;
                task.Description += "В нашей группе Вконтакте более 70 реальных отзывов от клиентов!" + Environment.NewLine;
                task.Description += "Размеры в наличии:" + Environment.NewLine;
                task.Description += sizeBlock;
                task.Description += "Уточняйте наличие размеров." + Environment.NewLine;
                task.Description += "Если размера нет в наличии, можем его привезти под заказ. Срок поставки товара под заказ: 7-10 дней." + Environment.NewLine;
                task.Description += "Sneaker Icon - это большой выбор оригинальной брендовой обуви Nike и Jordan. Кроссовки, кеды, бутсы, футзалки, шиповки, сланцы, ботинки и другие типы обуви" + Environment.NewLine;


                var priceUsd = artikul.GetMinPrice();
                var priceRub = (int)CurrencyRate.ConvertCurrency("USD", "RUB", priceUsd) + Margin;
                task.Price     = priceRub;
                task.ImageList = fcSneaker.images;

                task.CollectionList = GetCollectionsName(fcSneaker.sku);
                //todo пока так. Нормально удаление сделаю, как попросят.
                task.IsDeleted = false;
                task.SKU       = fcSneaker.sku;

                var oldItem = oldVkGoodsRoot.Records.Where(x => x.SKU != null).FirstOrDefault(x => x.SKU.Equals(fcSneaker.sku));

                var result = Posting.AddOrEditVkGoods(task, oldItem);
                if (result != null)
                {
                    //todo подумать над информативностью. Тут не только именно отправленные данные.
                    _logger.Debug($"В товары ВК отправлен SKU {fcSneaker.sku} ID {result.VkId}");
                }

                return(result);
            }
            catch (Exception e)
            {
                _logger.Error(e, "Ошибка при добавлении товара в ВК");
                _logger.Error(e.StackTrace);
                return(null);
            }
        }
Exemplo n.º 14
0
 public ShopValidator()
 {
     _sizeChart = SizeChart.ReadSizeChartJson();
 }