public static IList <OrderChangeViewModel> BuildChanges(OrderShippingInfoDTO shippingInfo)
        {
            var results = new List <OrderChangeViewModel>();

            if (!String.IsNullOrEmpty(shippingInfo.TrackingNumber))
            {
                var printLabel = new OrderChangeViewModel()
                {
                    ChangeType = OrderChangeTypes.PrintLabel,
                    Value      = shippingInfo.TrackingNumber,
                    ValueUrl   = MarketUrlHelper.GetTrackingUrl(shippingInfo.TrackingNumber, shippingInfo.ShippingMethod.CarrierName, shippingInfo.TrackingStateSource),

                    Message       = shippingInfo.ShippingMethod.CarrierName + " - " + shippingInfo.ShippingMethod.Name.ToString(),
                    ChangeDate    = shippingInfo.LabelPurchaseDate,
                    ChangedBy     = shippingInfo.LabelPurchaseBy,
                    ChangedByName = shippingInfo.LabelPurchaseByName,
                };
                results.Add(printLabel);
            }

            if (shippingInfo.ActualDeliveryDate.HasValue)
            {
                var deliveredEvent = new OrderChangeViewModel()
                {
                    ChangeType = OrderChangeTypes.Delivered,
                    Message    = shippingInfo.TrackingStateEvent,

                    ChangeDate = shippingInfo.ActualDeliveryDate.Value,
                    ChangedBy  = null
                };
                results.Add(deliveredEvent);
            }

            return(results);
        }
예제 #2
0
        public void GetLargeImage(string asin, MarketType market, string marketplaceId)
        {
            var  url                  = MarketUrlHelper.GetMarketUrl(asin, market, marketplaceId);
            var  imageService         = new ImageRequestingService(_log, _htmlScraper);
            var  webPageParserFactory = new WebPageParserFactory();
            var  pageParser           = webPageParserFactory.GetPageParser(market);
            long size                 = 0;
            var  image                = imageService.GetMainImageFromUrl(url, pageParser, out size);

            Console.WriteLine(image);
        }
예제 #3
0
        public static string GetMarketUrl(string asin, string sourceMarketId, MarketType market, string marketplaceId)
        {
            var itemId = asin;

            if (market == MarketType.Magento ||
                market == MarketType.Walmart ||
                market == MarketType.WalmartCA ||
                market == MarketType.Jet ||
                market == MarketType.eBay)
            {
                itemId = sourceMarketId;
            }
            if (!String.IsNullOrEmpty(itemId))
            {
                return(MarketUrlHelper.GetMarketUrl(itemId, market, marketplaceId));
            }
            return("");
        }
예제 #4
0
        private IList <ImageInfo> UpdateForItems(IList <ItemDTO> items)
        {
            var imageService = new ImageRequestingService(_log, _htmlScraper);
            var resultList   = new List <ImageInfo>();

            foreach (var item in items)
            {
                var url = String.Empty;
                if (item.Market == (int)MarketType.Amazon || item.Market == (int)MarketType.AmazonEU || item.Market == (int)MarketType.AmazonAU)
                {
                    url = MarketUrlHelper.GetMarketUrl(item.ASIN, (MarketType)item.Market, item.MarketplaceId);
                }
                if (item.Market == (int)MarketType.Walmart ||
                    item.Market == (int)MarketType.WalmartCA ||
                    item.Market == (int)MarketType.Jet ||
                    item.Market == (int)MarketType.Shopify ||
                    item.Market == (int)MarketType.eBay)
                {
                    url = MarketUrlHelper.GetMarketUrl(item.SourceMarketId, (MarketType)item.Market, item.MarketplaceId);
                }

                long downloadedSize = 0;
                CallResult <IList <ImageInfo> > result = null;
                var pageParser = new WebPageParserFactory().GetPageParser((MarketType)item.Market);
                result = imageService.GetMainImageFromUrl(url, pageParser, out downloadedSize);

                var imageInfoList = result?.Data ?? new List <ImageInfo>();
                imageInfoList.ForEach(i =>
                {
                    i.Tag       = item.Id;
                    i.ImageType = (int)ProductImageType.Large;
                });

                if (imageInfoList.Any())
                {
                    _log.Info("Image updated, page size=" + downloadedSize + " asin=" + item.ASIN + ", market=" + item.Market + ", marketplaceId=" +
                              item.MarketplaceId + ", image=" + String.Join("; ", imageInfoList.Select(i => i.Image).ToList()));
                }
                else
                {
                    var image = new ImageInfo();
                    image.Tag = item.Id;

                    if (result.Exception != null &&
                        result.Exception.Message.Contains("404") &&
                        result.Exception.Message.IndexOf("Not Found", StringComparison.OrdinalIgnoreCase) > 0)
                    {
                        image.UpdateFailAttempts = 100;
                    }
                    else
                    {
                        image.UpdateFailAttempts++;
                    }
                    _log.Info("Image update failed, page size=" + downloadedSize + ", asin=" + item.ASIN + ", market=" + item.Market + ", marketplaceId=" + item.MarketplaceId);

                    imageInfoList.Add(image);
                }

                resultList.AddRange(imageInfoList);


                Thread.Sleep(300);
            }

            return(resultList);
        }
        private bool UpdateOrder(IUnitOfWork db, ShippingDTO shipping)
        {
            _log.Info("Update order: id=" + shipping.OrderId + ", orderId=" + shipping.AmazonIdentifier + ", marketId=" + shipping.MarketOrderId);

            IList <OrderItemDTO> orderItems;

            if (shipping.IsFromMailPage)
            {
                orderItems = db.OrderItems.GetByOrderIdAsDto(shipping.OrderId)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }
            else
            {
                orderItems = db.OrderItems.GetByShippingInfoIdAsDto(shipping.Id)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }

            OrderHelper.PrepareSourceItemOrderId(orderItems);
            orderItems = OrderHelper.GroupBySourceItemOrderId(orderItems);

            DateTime?orderDate = null;

            if (shipping.OrderDate.HasValue)
            {
                orderDate = shipping.OrderDate.Value.ToUniversalTime();
            }
            var shippingDate = shipping.ShippingDate.ToUniversalTime();

            if (orderDate.HasValue && shippingDate < orderDate)
            {
                shippingDate = orderDate.Value.AddHours(2);
            }


            var result = _api.SubmitTrackingInfo(shipping.MarketOrderId,
                                                 shipping.TrackingNumber,
                                                 MarketUrlHelper.GetTrackingUrl(shipping.TrackingNumber, shipping.ShippingMethod.CarrierName),
                                                 shipping.ShippingMethod,
                                                 shipping.ShippingMethod.Name,
                                                 ShippingUtils.GetShippingType(shipping.ShippingMethodId),
                                                 ShippingUtils.FormattedToMarketCurrierName(shipping.ShippingMethod.CarrierName, shipping.ShippingMethod.IsInternational, _api.Market),
                                                 shippingDate,
                                                 orderItems,
                                                 shipping.MessageIdentifier.ToString());

            if (result.Status == CallStatus.Success)
            {
                _log.Info("Order was updated");
            }
            else
            {
                _log.Info("Order update errors: Message=" + result.Message);

                /*
                 * Walmart.Api.WalmartException: No response, statusCode=InternalServerError.
                 * Details: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns4:errors xmlns:ns2="http://walmart.com/mp/orders" xmlns:ns3="http://walmart.com/mp/v3/orders" xmlns:ns4="http://walmart.com/"><ns4:error><ns4:code>INVALID_REQUEST_CONTENT.GMP_ORDER_API</ns4:code><ns4:field>data</ns4:field><ns4:description>Unable to process this request. The Line: 4 of PO: 4576930294354 is in SHIPPED status</ns4:description><ns4:info>Request content is invalid.</ns4:info><ns4:severity>ERROR</ns4:severity><ns4:category>DATA</ns4:category><ns4:causes/><ns4:errorIdentifiers/></ns4:error></ns4:errors> ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
                 */
            }

            return(result.Status == CallStatus.Success);
        }
        private bool UpdateOrder(IUnitOfWork db, ShippingDTO shipping)
        {
            _log.Info("Update order: id=" + shipping.OrderId + ", orderId=" + shipping.AmazonIdentifier + ", marketId=" + shipping.MarketOrderId);

            IList <OrderItemDTO> orderItems;

            if (shipping.IsFromMailPage)
            {
                orderItems = db.OrderItems.GetByOrderIdAsDto(shipping.OrderId)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }
            else
            {
                orderItems = db.OrderItems.GetByShippingInfoIdAsDto(shipping.Id)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }

            OrderHelper.PrepareSourceItemOrderId(orderItems);
            orderItems = OrderHelper.GroupBySourceItemOrderId(orderItems);

            DateTime?orderDate = null;

            if (shipping.OrderDate.HasValue)
            {
                orderDate = shipping.OrderDate.Value.ToUniversalTime();
            }
            var shippingDate = shipping.ShippingDate.ToUniversalTime();

            if (orderDate.HasValue && shippingDate < orderDate)
            {
                shippingDate = orderDate.Value.AddHours(2);
            }

            var carrierName = shipping.ShippingMethod.CarrierName;

            if (!String.IsNullOrEmpty(shipping.CustomCurrier))
            {
                carrierName = shipping.CustomCurrier;
            }

            var result = _api.SubmitTrackingInfo(shipping.MarketOrderId,
                                                 shipping.TrackingNumber,
                                                 MarketUrlHelper.GetTrackingUrl(shipping.TrackingNumber, carrierName),
                                                 shipping.ShippingMethod.Name,
                                                 ShippingUtils.GetShippingType(shipping.ShippingMethodId),
                                                 ShippingUtils.FormattedToMarketCurrierName(carrierName, shipping.ShippingMethod.IsInternational, _api.Market),
                                                 shippingDate,
                                                 orderItems);

            if (result.Status == CallStatus.Success)
            {
                _log.Info("Order was updated");
            }
            else
            {
                _log.Fatal(_api.Market + ": Order update errors: Message=" + result.Message + ", Order=" + shipping.MarketOrderId);

                /*
                 * Walmart.Api.WalmartException: No response, statusCode=InternalServerError.
                 * Details: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns4:errors xmlns:ns2="http://walmart.com/mp/orders" xmlns:ns3="http://walmart.com/mp/v3/orders" xmlns:ns4="http://walmart.com/"><ns4:error><ns4:code>INVALID_REQUEST_CONTENT.GMP_ORDER_API</ns4:code><ns4:field>data</ns4:field><ns4:description>Unable to process this request. The Line: 4 of PO: 4576930294354 is in SHIPPED status</ns4:description><ns4:info>Request content is invalid.</ns4:info><ns4:severity>ERROR</ns4:severity><ns4:category>DATA</ns4:category><ns4:causes/><ns4:errorIdentifiers/></ns4:error></ns4:errors> ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
                 */

                if (StringHelper.ContainsNoCase(result.Exception?.Message, "doesn't have enough quantity to ship requested quantity"))
                {
                    var allUpdated = true;
                    //Send update by one items
                    foreach (var orderItem in orderItems)
                    {
                        var oneItemResult = _api.SubmitTrackingInfo(shipping.MarketOrderId,
                                                                    shipping.TrackingNumber,
                                                                    MarketUrlHelper.GetTrackingUrl(shipping.TrackingNumber, carrierName),
                                                                    shipping.ShippingMethod.Name,
                                                                    ShippingUtils.GetShippingType(shipping.ShippingMethodId),
                                                                    ShippingUtils.FormattedToMarketCurrierName(carrierName, shipping.ShippingMethod.IsInternational, _api.Market),
                                                                    shippingDate,
                                                                    new List <OrderItemDTO>()
                        {
                            orderItem
                        });

                        if (oneItemResult.Status == CallStatus.Success)
                        {
                            _log.Info("Order item " + orderItem.SKU + " was updated");
                        }
                        else
                        {
                            if (!StringHelper.ContainsNoCase(oneItemResult.Exception?.Message, "is in SHIPPED status") &&
                                !StringHelper.ContainsNoCase(oneItemResult.Exception?.Message, "qtyAvailableToShip :: 0"))
                            {
                                allUpdated = false;
                                _log.Fatal(_api.Market + ": Order item \"" + orderItem.SKU + "\" update errors: Message=" + oneItemResult.Message + ", Order=" + shipping.MarketOrderId);
                            }
                        }
                    }

                    if (allUpdated)
                    {
                        result = CallResult <DTOOrder> .Success(new DTOOrder());
                    }
                }
            }

            return(result.Status == CallStatus.Success);
        }
예제 #7
0
 public static string GetSellerCentralOrderUrl(MarketType market, string marketplaceId, string orderId)
 {
     return(MarketUrlHelper.GetSellarCentralOrderUrl(market, marketplaceId, orderId, null));
 }
예제 #8
0
 public static string GetSellarCentralInventoryUrl(string asin, MarketType market, string marketplaceId)
 {
     return(MarketUrlHelper.GetSellarCentralInventoryUrl(asin, market, marketplaceId));
 }
예제 #9
0
        private bool UpdateOrder(IUnitOfWork db, ShippingDTO shipping)
        {
            _log.Info("Update order: id=" + shipping.OrderId + ", orderId=" + shipping.AmazonIdentifier + ", marketId=" + shipping.MarketOrderId);

            IList <OrderItemDTO> orderItems;

            if (shipping.IsFromMailPage)
            {
                orderItems = db.OrderItems.GetWithListingInfo()
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 && m.Quantity > 0 && m.OrderId == shipping.OrderId)
                             .Select(oi => new OrderItemDTO()
                {
                    ItemPrice           = oi.ItemPrice,
                    QuantityOrdered     = oi.Quantity,
                    ItemOrderIdentifier = oi.ItemOrderId,
                    SKU = oi.SKU,     //Jet used SKU insted of ItemOrderId
                    SourceItemOrderIdentifier = oi.SourceItemOrderId,
                    ReplaceType = oi.ReplaceType,
                })
                             .ToList();
            }
            else
            {
                orderItems = db.OrderItems.GetWithListingInfoByShippingInfoIdAsDto(shipping.Id)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 && m.QuantityOrdered > 0)
                             .ToList();
            }

            OrderHelper.PrepareSourceItemOrderId(orderItems);
            orderItems = OrderHelper.GroupBySourceItemOrderId(orderItems);

            DateTime?orderDate = null;

            if (shipping.OrderDate.HasValue)
            {
                orderDate = shipping.OrderDate.Value.ToUniversalTime();
            }
            var shippingDate = shipping.ShippingDate.ToUniversalTime();

            if (orderDate.HasValue && shippingDate < orderDate)
            {
                shippingDate = orderDate.Value.AddHours(2);
            }


            var result = _api.SubmitTrackingInfo(shipping.MarketOrderId,
                                                 shipping.TrackingNumber,
                                                 MarketUrlHelper.GetTrackingUrl(shipping.TrackingNumber, shipping.ShippingMethod.CarrierName),
                                                 shipping.ShippingMethod.Id,
                                                 shipping.ShippingMethod.CarrierName,
                                                 shippingDate,
                                                 orderItems);

            if (result.Status == CallStatus.Success)
            {
                _log.Info("Order was updated");
            }
            else
            {
                _log.Info("Order update errors: Message=" + result.Message);
            }

            return(result.Status == CallStatus.Success);
        }