예제 #1
0
        //https://ebaydts.com/eBayKBDetails?KBid=1679
        public IEnumerable <MarketplaceOrder> GetMarketplaceOrders(DateTime createdAfter)
        {
            var orderResults = new List <MarketplaceOrder>();

            try
            {
                // create the API call for get orders, then execute
                var apiCall = createGetOrdersCall(createdAfter);
                apiCall.Execute();

                // check if the call is not success
                if (apiCall.ApiResponse.Ack != AckCodeType.Success)
                {
                    Console.WriteLine("Error in getting orders for {0}! Error message: {1}", ChannelName, apiCall.ApiResponse.Errors[0].LongMessage);
                    _logger.LogError(LogEntryType.eBayOrders,
                                     string.Format("Error in retrieving orders for eBay. Error message: {0}", apiCall.ApiResponse.Errors[0].LongMessage),
                                     apiCall.ApiResponse.Errors.ToString());
                    return(null);
                }

                // check if there are order items
                var orders = apiCall.ApiResponse.OrderArray;
                Console.WriteLine("{0} retrieved {1} orders.", ChannelName, orders.Count);
                if (orders.Count == 0)
                {
                    return(null);
                }

                // iterate and parse the order results
                foreach (OrderType item in orders)
                {
                    orderResults.Add(parsedMarketplaceOrder(item));
                }

                Console.WriteLine("{0} done fetching orders: {1} items", ChannelName, orders.Count);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in getting orders for {0}! Error message: {1}", ChannelName, ex.Message);
                _logger.LogError(LogEntryType.eBayOrders,
                                 string.Format("Error in retrieving orders for eBay. Error message: {0}", ex.Message),
                                 ex.StackTrace);

                _emailService.SendEmailAdminException(subject: "eBay - Get Marketplace Orders Error",
                                                      exParam: ex,
                                                      useDefaultTemplate: true,
                                                      url: "GetMarketplaceOrders Method",
                                                      userName: "******");
            }

            return(orderResults);
        }
예제 #2
0
 public IEnumerable <MarketplaceOrder> GetMarketplaceOrders(DateTime createdAfter)
 {
     try
     {
         return(_ordersService.GetMarketplaceOrders(createdAfter));
     }
     catch (Exception ex)
     {
         Console.Error.WriteLine("Error Message: " + EisHelper.GetExceptionMessage(ex) + "\n" + ex.StackTrace);
         _logger.LogError(LogEntryType.OrderService,
                          string.Format("Error occured in fetching order for {0} <br/>Error message: {1}",
                                        _ordersService.ChannelName, EisHelper.GetExceptionMessage(ex)),
                          ex.StackTrace);
         return(null);
     }
 }
        public void UpdateOrderVendorProductInventory(List <MarketplaceOrder> orders)
        {
            try
            {
                var results = new List <OrderProductResult>();

                // iterate to each order and also to its order item
                foreach (var order in orders)
                {
                    // then, to its order items
                    foreach (var orderItem in order.OrderItems)
                    {
                        // let's determine if this item has already record in order upate history
                        var hasHistory = _repository.HasOrderItemUpdateHistory(orderItem.OrderItemId, order.OrderStatus, order.PurchaseDate);
                        if (hasHistory)
                        {
                            continue;
                        }

                        // otherwise let's create order item update history
                        _repository.CreateOrderItemUpdateHistory(orderItem, order.OrderStatus, order.PurchaseDate);

                        // manage the vendor product inventory
                        if (order.OrderStatus != OrderStatus.Canceled)
                        {
                            var result = _service.ManageOrderVendorProduct(orderItem);
                            results.Add(result);
                        }
                        else
                        {
                            _repository.ReturnVendorProductInventory(orderItem);
                        }
                    }
                }

                // notify Admin if there are insufficient products for the orders
                _service.EvaluateForInsufficientVendorProducts(results);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("Error Message: " + EisHelper.GetExceptionMessage(ex) + "\n" + ex.StackTrace);
                _logger.LogError(LogEntryType.OrderService,
                                 string.Format("Error in updating vendor product inventory <br/>Error message: {0}",
                                               EisHelper.GetExceptionMessage(ex)),
                                 ex.StackTrace);
            }
        }
        public eBayCategoryResult GeteBaySuggestedCategories(string eisSku, string keyword)
        {
            try
            {
                // create the API call object and pass the keyword
                var apiCall    = new GetSuggestedCategoriesCall(_context);
                var categories = apiCall.GetSuggestedCategories(keyword);
                if (categories == null)
                {
                    Console.WriteLine("NO EBAY SUGGESSTED CATEGORIES FOUND FOR {0} - {1}", eisSku, keyword);
                    _logger.LogWarning(LogEntryType.eBaySuggestedCategoriesWorker, string.Format("No eBay categories found for EIS SKU: {0} - Keyword: {1}", eisSku, keyword));
                    return(null);
                }

                var results = new List <eBayCategory>();
                foreach (SuggestedCategoryType item in categories)
                {
                    results.Add(new eBayCategory
                    {
                        Id   = Convert.ToInt32(item.Category.CategoryID),
                        Name = string.Format("{0} > {1}", string.Join(" > ", item.Category.CategoryParentName.ToArray()),
                                             item.Category.CategoryName)
                    });
                }

                return(new eBayCategoryResult
                {
                    EisSKU = eisSku,
                    Categories = results
                });
            }
            catch (Exception ex)
            {
                _logger.LogError(LogEntryType.eBaySuggestedCategoriesWorker,
                                 string.Format("Unexpected error in getting suggested categories for \"{0}\". Err Message: {1}", keyword, EisHelper.GetExceptionMessage(ex)),
                                 ex.StackTrace);
                return(null);
            }
        }
예제 #5
0
        public IEnumerable <MarketplaceOrder> GetMarketplaceOrders(DateTime createdAfter)
        {
            var marketplaceOrders = new List <MarketplaceOrder>();

            try
            {
                // init the Amazon web service
                var config = new MarketplaceWebServiceOrdersConfig {
                    ServiceURL = "https://mws.amazonservices.com"
                };
                config.SetUserAgent(_ApplicationName, _Version);
                _ordersClient = new MarketplaceWebServiceOrdersClient(_credential.AccessKeyId, _credential.SecretKey, config);

                Console.WriteLine("{0} fetching orders for {1}...", ChannelName, createdAfter);

                // create ListOrdersRequest object
                var listOrdersRequest = new ListOrdersRequest
                {
                    SellerId      = _credential.MerchantId,
                    MarketplaceId = new List <string> {
                        { _credential.MarketplaceId }
                    },
                    LastUpdatedAfter = createdAfter.Date
                };
                var listOrdersResponse = _ordersClient.ListOrders(listOrdersRequest);
                var ordersResult       = listOrdersResponse.ListOrdersResult.Orders;
                var nextToken          = listOrdersResponse.ListOrdersResult.NextToken;
                ListOrdersByNextTokenResponse nextOrderResponse = null;

                Console.WriteLine("{0} retrieved {1} orders and {2} next results page.", ChannelName, listOrdersResponse.ListOrdersResult.Orders.Count, !string.IsNullOrWhiteSpace(nextToken) ? "HAS" : "NO");

                do
                {
                    if (nextOrderResponse != null)
                    {
                        ordersResult = nextOrderResponse.ListOrdersByNextTokenResult.Orders;
                        nextToken    = nextOrderResponse.ListOrdersByNextTokenResult.NextToken;
                        Console.WriteLine("{0} retrieved {1} next orders and {2} next results page.", ChannelName, ordersResult.Count, !string.IsNullOrWhiteSpace(nextToken) ? "HAS" : "NO");
                    }

                    // Convert the orders to the marketplace contracts and get the items.
                    for (int i = 0; i < ordersResult.Count; ++i)
                    {
                        // The maximum request quota for ListOrderItems is 30 after that it restores at 2 per second.
                        // So if the order's that are being pulled exceed 30, then sleep for 2 seconds each one.
                        if (i > 30)
                        {
                            Thread.Sleep(2000);
                        }

                        marketplaceOrders.Add(convertOrderResponseToMarketplaceOrder(ordersResult[i]));
                    }

                    // do a rquest for the next page result of orders if next token is not null
                    if (!string.IsNullOrWhiteSpace(nextToken))
                    {
                        // pause at least 1 minute, this is the restore rate for ListOrdersByNextToken for every 6 quota
                        Thread.Sleep(61000);

                        var nextTokenRequest = new ListOrdersByNextTokenRequest {
                            SellerId = _credential.MerchantId, NextToken = nextToken
                        };
                        nextOrderResponse = _ordersClient.ListOrdersByNextToken(nextTokenRequest);
                    }
                } while (!string.IsNullOrWhiteSpace(nextToken));

                Console.WriteLine("{0} done fetching orders: {1} items", ChannelName, marketplaceOrders.Count);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in getting orders for {0}! Error message: {1}", ChannelName, ex.Message);
                _logger.LogError(LogEntryType.AmazonOrdersProvider,
                                 string.Format("Error in retrieving orders for Amazon. Error message: {0}", ex.Message),
                                 ex.StackTrace);

                _emailService.SendEmailAdminException(subject: "Amazon - Get Marketplace Orders Error",
                                                      exParam: ex,
                                                      useDefaultTemplate: true,
                                                      url: "GetMarketplaceOrders Method",
                                                      userName: "******");
            }

            return(marketplaceOrders);
        }
        public bool ConfirmOrdersShipment()
        {
            // get the unshipped orders with tracking number for confirming its shipment
            var unshippedOrderFeeds   = _orderRepository.GetUnshippedOrdersForShipment(ChannelName);
            var bigCommerceOrdersList = new List <BigCommerce4Net.Domain.Order>();
            var successConfirms       = 0;

            if (!unshippedOrderFeeds.Any())
            {
                Console.WriteLine("No unshipped orders found from {0} for shipment confirmation.", ChannelName);
                return(true);
            }

            try
            {
                Console.WriteLine("Sending {0} orders for shipment confirmation...", unshippedOrderFeeds.Count);

                foreach (var marketplaceOrder in unshippedOrderFeeds)
                {
                    if (!marketplaceOrder.OrderItems.Any())
                    {
                        return(false);
                    }

                    var orderid         = Convert.ToInt32(marketplaceOrder.OrderId);
                    var bcOrderResponse = _client.Orders.Get(orderid);
                    var bcOrder         = bcOrderResponse.Data;

                    var updatedata = new
                    {
                        status_id = OrderStatusEnum.Shipped
                    };

                    // Create BC Order Shipment
                    var shipmentItems = new List <OrdersShipmentItem>();

                    foreach (var orderitems in marketplaceOrder.OrderItems)
                    {
                        var orderItemId = Convert.ToInt32(orderitems.OrderItemId);

                        shipmentItems.Add(new OrdersShipmentItem {
                            OrderProductId = orderItemId, Quantity = orderitems.Quantity
                        });
                    }

                    var orderAddressID    = 0;
                    var shippingAddresses = GetShippingAddresses(bcOrder.Id);

                    if (shippingAddresses.Count > 0)
                    {
                        orderAddressID = shippingAddresses.First().Id;
                    }

                    var shipmentdata = new
                    {
                        order_address_id  = orderAddressID,
                        items             = shipmentItems,
                        tracking_number   = marketplaceOrder.ShipperTrackingNumber,
                        shipping_method   = marketplaceOrder.ShippingMethod,
                        shipping_provider = marketplaceOrder.CarrierCode != null ? marketplaceOrder.CarrierCode : "",
                    };

                    // API Create Shipment based on Order
                    var responseShipment = _client.OrdersShipments.Create(orderid, shipmentdata);

                    if (responseShipment.RestResponse.StatusCode == System.Net.HttpStatusCode.Created)
                    {
                        // API Update on the Order
                        var responseOrder = _client.Orders.Update(orderid, updatedata);

                        if (responseOrder.RestResponse.StatusCode == System.Net.HttpStatusCode.OK)
                        {
                            successConfirms++;

                            var tempList = new List <MarketplaceOrderFulfillment>();
                            tempList.Add(marketplaceOrder);

                            // let's add these orders to the shipment history
                            addOrderShipmentHistoryAsync(tempList);
                        }
                    }
                }

                _logger.LogInfo(LogEntryType.BigCommerceOrders,
                                string.Format("Successfully sent confirming order shipment for {0} order items: <br/>Shipment confirmation was done by {1}", successConfirms, Constants.APP_NAME));
                Console.WriteLine("Successfully sent confirming order shipment for {0} order items: ", successConfirms);

                return(true);
            }
            catch (Exception ex)
            {
                _logger.LogError(LogEntryType.BigCommerceOrders,
                                 string.Format("{4} Error in confirming order shipment for {0} - Number of Orders: {3}. <br/>Error Message: {1} <br/> Access Key: {2}", ChannelName,
                                               (ex.InnerException != null ? string.Format("{0} <br/>Inner Message: {1}",
                                                                                          ex.Message, ex.InnerException.Message) : ex.Message),
                                               _credential.Username,
                                               bigCommerceOrdersList.Count,
                                               _ApplicationName),
                                 ex.StackTrace);

                Console.WriteLine("Error in sending shipment confirmation! Error Message: {0} \nStackTrace: {1} ", ex.Message, ex.StackTrace);

                // let's delete the order confirmation
                deleteOrderShipmentHistoryAsync(unshippedOrderFeeds);

                return(false);
            }
        }