Exemplo n.º 1
0
        public OrderProductResult ManageOrderVendorProduct(MarketplaceOrderItem orderItem)
        {
            var orderProducts  = new List <orderproduct>();
            var vendorProducts = new List <vendorproduct>();
            var shadowProduct  = new shadow();
            OrderProductResult result;

            using (var context = new EisInventoryContext())
            {
                // let's get all its vendor products via its links
                vendorProducts = context.vendorproductlinks
                                 .Where(x => x.EisSKU == orderItem.SKU && x.IsActive)
                                 .Select(x => x.vendorproduct)
                                 .ToList();

                // let's determine if this product is a shadow sku; WHY NOT USE THE SKUType of product? O.o
                shadowProduct = context.shadows.FirstOrDefault(x => x.ShadowSKU == orderItem.SKU && x.IsConnected);
            }

            if (shadowProduct != null)
            {
                // let's take out the compatible vendor products that has available stock and sort by price asc
                var compatibleVendorProducts = vendorProducts
                                               .Where(x => x.Quantity > 0 && (shadowProduct.FactorQuantity % x.MinPack) == 0)
                                               .OrderBy(x => x.SupplierPrice)
                                               .ToList();

                // iterate and determine the qualified vendor products
                orderProducts = createOrderProducts(compatibleVendorProducts, orderItem.OrderItemId, orderItem.QtyOrdered, shadowProduct.FactorQuantity);
                result        = new OrderProductResult {
                    ItemPack = shadowProduct.FactorQuantity
                };
            }
            else
            {
                // let's take out the compatible vendor products that has available stock and sort by price asc
                var compatibleVendorProducts = vendorProducts
                                               .Where(x => x.Quantity > 0 && x.MinPack == 1)
                                               .OrderBy(x => x.SupplierPrice)
                                               .ToList();

                // iterate and determine the qualified vendor products
                orderProducts = createOrderProducts(compatibleVendorProducts, orderItem.OrderItemId, orderItem.QtyOrdered, 1);
                result        = new OrderProductResult {
                    ItemPack = 1
                };
            }

            // save the order products to the database
            addOrderProducts(orderProducts);

            // update the vendor product's quantity
            UpdateVendorProductInventory(orderProducts, false);

            result.OrderProducts = Mapper.Map <List <OrderProduct> >(orderProducts);
            result.OrderItem     = orderItem;
            return(result);
        }
        public bool ReturnVendorProductInventory(MarketplaceOrderItem orderItem)
        {
            var orderProducts = new List <orderproduct>();

            using (var context = new EisInventoryContext())
            {
                // get the order products assigned for this order item
                orderProducts = context.orderproducts
                                .Where(x => x.OrderItemId == orderItem.OrderItemId)
                                .ToList();
            }

            // return back the vendor product inventory
            return(_service.UpdateVendorProductInventory(orderProducts, true));
        }
        public void CreateOrderItemUpdateHistory(MarketplaceOrderItem orderItem, OrderStatus orderStatus, DateTime purchaseDate)
        {
            using (var context = new EisInventoryContext())
            {
                context.orderupdatehistories.Add(new orderupdatehistory
                {
                    OrderItemId  = orderItem.OrderItemId,
                    QtyOrdered   = orderItem.QtyOrdered,
                    OrderStatus  = orderStatus,
                    PurchaseDate = purchaseDate,
                    ResultDate   = DateTime.UtcNow
                });

                // save changes
                context.SaveChanges();
            }
        }
Exemplo n.º 4
0
        public void Should_Get_ShadowProduct_In_ManageOrderVendorProduct()
        {
            // arrange
            var orderItem = new MarketplaceOrderItem
            {
                SKU         = "BS1001221_6",
                OrderItemId = "55981003740466",
                OrderId     = "01000012",
                Title       = "Scotchgard Scotch Gard Fabric Protector 14 Oz",
                QtyOrdered  = 1
            };
            var factorQty          = 6;
            var totalItemsRequired = orderItem.QtyOrdered * factorQty;
            var service            = new OrderService(new LogService());

            // act
            var result = service.ManageOrderVendorProduct(orderItem);

            // assert
            Assert.NotNull(result);
            Assert.Equal(totalItemsRequired, result.TotalAvailableItems);
        }
        /// <summary>
        /// Converts the response object into MarketplaceOrderItem object.
        /// </summary>
        /// <param name="orderorderItem">The given BigCommerce order product object.</param>
        /// <returns>A MarketplaceOrderItem object</returns>
        private MarketplaceOrderItem convertOrderItemResponseToMarketplaceOrderItem(BigCommerce4Net.Domain.OrdersProduct orderItem)
        {
            var marketplaceOrderItem = new MarketplaceOrderItem()
            {
                OrderId           = orderItem.OrderId.ToString(),
                MarketplaceItemId = orderItem.ProductId.ToString(),
                OrderItemId       = orderItem.Id.ToString(),
                SKU        = orderItem.Sku,
                Title      = orderItem.ProductName,
                QtyOrdered = Convert.ToInt32(orderItem.Quantity),
                QtyShipped = Convert.ToInt32(orderItem.QuantityShipped)
            };

            marketplaceOrderItem.Price         = orderItem.BasePrice;
            marketplaceOrderItem.ShippingPrice = orderItem.FixedShippingCost;
            marketplaceOrderItem.GiftWrapPrice = orderItem.BaseWrappingCost;
            marketplaceOrderItem.Tax           = orderItem.PriceTax;
            marketplaceOrderItem.GiftWrapTax   = orderItem.WrappingCostTax;
            //marketplaceOrderItem.ShippingDiscount = orderItem.;
            marketplaceOrderItem.PromotionDiscount = orderItem.DiscountAmount;

            return(marketplaceOrderItem);
        }
Exemplo n.º 6
0
        public void Should_Update_Vendor_Product_Inventory()
        {
            // prepare
            var orderItem = new MarketplaceOrderItem
            {
                SKU         = "MI65155370_4",
                OrderItemId = "00226200885258",
                QtyOrdered  = 2
            };
            var order = new MarketplaceOrder {
                OrderItems = new List <MarketplaceOrderItem> {
                    orderItem
                },
                OrderStatus  = OrderStatus.Canceled,
                PurchaseDate = new DateTime(2016, 12, 26, 5, 48, 36) // 2016-12-26 05:48:36
            };
            var manager = new ProductInventoryManager();

            // act
            manager.UpdateOrderVendorProductInventory(new List <MarketplaceOrder> {
                order
            });
        }
Exemplo n.º 7
0
        private MarketplaceOrder parsedMarketplaceOrder(OrderType orderType)
        {
            var order = new MarketplaceOrder();

            order.SellerOrderId     = orderType.OrderID; // eBay OrderId is the SalesRecordNumber
            order.Marketplace       = ChannelName;
            order.OrderTotal        = (decimal)orderType.Total.Value;
            order.NumOfItemsShipped = 0; // let's init to 0 and reevaluate the actual value in transaction
                                         //NumOfItemsUnshipped =1,
            order.OrderStatus    = parseOrderStatus(orderType.OrderStatus);
            order.PurchaseDate   = orderType.CreatedTime;
            order.LastUpdateDate = orderType.PaidTime;

            // get the shipping details
            var address = orderType.ShippingAddress;

            if (address != null)
            {
                order.ShippingAddressPhone  = address.Phone;
                order.ShippingAddressName   = address.Name;
                order.ShippingAddressLine1  = address.Street1;
                order.ShippingAddressLine2  = address.Street2;
                order.ShippingAddressLine3  = address.Street; // this is correct
                order.ShippingCity          = address.CityName;
                order.ShippingStateOrRegion = address.StateOrProvince;
                order.ShippingPostalCode    = address.PostalCode;
            }

            // get th min and max of shipping date and shipping details
            if (orderType.ShippingDetails != null && orderType.ShippingDetails.ShippingServiceOptions != null)
            {
                // get the sales record number which is the OrderId in our database for eBay
                order.OrderId = orderType.ShippingDetails.SellingManagerSalesRecordNumber.ToString();

                var shippingOption = orderType.ShippingDetails.ShippingServiceOptions;
                var createdDate    = orderType.CreatedTime;
                order.EarliestShipDate = createdDate.AddDays(shippingOption[0].ShippingTimeMin);
                order.LatestShipDate   = createdDate.AddDays(shippingOption[0].ShippingTimeMax);

                // set the order shipping service
                order.ShipServiceLevel        = shippingOption[0].ShippingService;
                order.ShipmentServiceCategory = shippingOption[0].ShippingServicePriority.ToString();
            }

            // set the order's payment method used
            if (orderType.CheckoutStatus.PaymentMethodSpecified)
            {
                order.PaymentMethod = orderType.CheckoutStatus.PaymentMethod.ToString();
            }

            // get the order transactions
            var orderItems        = new List <MarketplaceOrderItem>();
            var orderTransactions = orderType.TransactionArray;

            foreach (TransactionType tran in orderTransactions)
            {
                var orderItem = new MarketplaceOrderItem
                {
                    OrderId           = order.OrderId,
                    MarketplaceItemId = tran.Item.ItemID,
                    OrderItemId       = tran.TransactionID,
                    SKU           = tran.Item.SKU,
                    Title         = tran.Item.Title,
                    QtyOrdered    = tran.QuantityPurchased,
                    ConditionNote = tran.Item.ConditionDisplayName
                };

                // if the shipped time specified means it's already shipped?
                if (orderType.ShippedTimeSpecified)
                {
                    orderItem.QtyShipped     = tran.QuantityPurchased;
                    order.NumOfItemsShipped += orderItem.QtyShipped;
                }

                orderItem.Price         = (decimal)tran.TransactionPrice.Value;
                orderItem.ShippingPrice = (decimal)tran.ActualShippingCost.Value;
                orderItem.GiftWrapPrice = (decimal)tran.ActualHandlingCost.Value;
                orderItem.Tax           = (decimal)tran.Taxes.TotalTaxAmount.Value;
                //orderItem.ShippingTax = orderItem.IsSetShippingTax() ? decimal.Parse(orderItem.ShippingTax.Amount) : 0;
                //orderItem.GiftWrapTax = orderItem.IsSetGiftWrapTax() ? decimal.Parse(orderItem.GiftWrapTax.Amount) : 0;
                //orderItem.ShippingDiscount = orderItem.IsSetShippingDiscount() ? decimal.Parse(orderItem.ShippingDiscount.Amount) : 0;
                //orderItem.PromotionDiscount = orderItem.IsSetPromotionDiscount() ? decimal.Parse(orderItem.PromotionDiscount.Amount) : 0;

                orderItems.Add(orderItem);

                // set the order's buyer information
                order.BuyerName     = string.Format("{0} {1}", tran.Buyer.UserFirstName, tran.Buyer.UserLastName);
                order.BuyerEmail    = tran.Buyer.Email;
                order.MarketplaceId = tran.TransactionSiteID.ToString();
                order.SalesChannel  = tran.Platform.ToString();
            }

            // get the adjustment and also the payment or refund payment
            order.AmountPaid       = (decimal)orderType.AmountPaid.Value;
            order.AdjustmentAmount = (decimal)orderType.AdjustmentAmount.Value;
            foreach (ExternalTransactionType extTran in orderType.ExternalTransaction)
            {
                order.PaymentOrRefundAmount += (decimal)extTran.PaymentOrRefundAmount.Value;
            }

            // set the order items for this order
            order.OrderItems = orderItems;

            return(order);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Converts the response object into MarketplaceOrder object.
        /// Also makes the call to get the items for the order.
        /// </summary>
        /// <param name="order">The given Amazon order objecdt.</param>
        /// <returns>A MarketplaceOrder object</returns>
        private MarketplaceOrder convertOrderResponseToMarketplaceOrder(MarketplaceWebServiceOrders.Model.Order order)
        {
            var orderStatus = (Inventory.Shared.Models.OrderStatus)Enum.Parse(typeof(Inventory.Shared.Models.OrderStatus), order.OrderStatus, true);

            var marketplaceOrder = new MarketplaceOrder()
            {
                BuyerEmail              = order.BuyerEmail,
                BuyerName               = order.BuyerName,
                OrderTotal              = order.IsSetOrderTotal() ? decimal.Parse(order.OrderTotal.Amount) : 0,
                OrderId                 = order.AmazonOrderId,
                Marketplace             = ChannelName,
                ShipServiceLevel        = order.ShipServiceLevel,
                ShipmentServiceCategory = order.ShipmentServiceLevelCategory,
                NumOfItemsShipped       = order.NumberOfItemsShipped,
                NumOfItemsUnshipped     = order.NumberOfItemsUnshipped,
                PurchaseDate            = order.PurchaseDate,
                LastUpdateDate          = order.LastUpdateDate,
                PaymentMethod           = order.PaymentMethod,
                OrderStatus             = orderStatus,
                OrderType               = order.OrderType,
                EarliestShipDate        = order.EarliestShipDate,
                LatestShipDate          = order.LatestShipDate,
                EarliestDeliveryDate    = order.EarliestDeliveryDate,
                LatestDeliveryDate      = order.LatestDeliveryDate,
                MarketplaceId           = order.MarketplaceId,
                PurchaseOrderNumber     = order.PurchaseOrderNumber,
                SalesChannel            = order.SalesChannel,
                SellerOrderId           = order.SellerOrderId,
            };

            if (order.IsSetShippingAddress())
            {
                marketplaceOrder.ShippingAddressLine1  = order.ShippingAddress.AddressLine1;
                marketplaceOrder.ShippingAddressLine2  = order.ShippingAddress.AddressLine2;
                marketplaceOrder.ShippingAddressLine3  = order.ShippingAddress.AddressLine3;
                marketplaceOrder.ShippingCity          = order.ShippingAddress.City;
                marketplaceOrder.ShippingStateOrRegion = order.ShippingAddress.StateOrRegion;
                marketplaceOrder.ShippingPostalCode    = order.ShippingAddress.PostalCode;
                marketplaceOrder.ShippingAddressName   = order.ShippingAddress.Name;
                marketplaceOrder.ShippingAddressPhone  = order.ShippingAddress.Phone;
            }

            // do the request for the list of items for this order
            var listOrderRequest = new ListOrderItemsRequest {
                SellerId = _credential.MerchantId, AmazonOrderId = order.AmazonOrderId
            };
            var listItemsResponse = _ordersClient.ListOrderItems(listOrderRequest);
            var nextToken         = listItemsResponse.ListOrderItemsResult.NextToken;
            var items             = new List <MarketplaceOrderItem>();
            ListOrderItemsByNextTokenResponse nextTokenResponse = null;

            // convert the item responses to marketplace order item objects.
            var orderItems = listItemsResponse.ListOrderItemsResult.OrderItems;

            do
            {
                if (nextTokenResponse != null)
                {
                    orderItems = nextTokenResponse.ListOrderItemsByNextTokenResult.OrderItems;
                    nextToken  = nextTokenResponse.ListOrderItemsByNextTokenResult.NextToken;
                }

                // iterate and convert the marketplace order item into local object
                for (var i = 0; i < orderItems.Count; i++)
                {
                    var orderItem = orderItems[i];
                    var item      = new MarketplaceOrderItem
                    {
                        OrderId           = order.AmazonOrderId,
                        MarketplaceItemId = orderItem.ASIN,
                        OrderItemId       = orderItem.OrderItemId,
                        SKU           = orderItem.SellerSKU,
                        Title         = orderItem.Title,
                        QtyOrdered    = Convert.ToInt32(orderItem.QuantityOrdered),
                        QtyShipped    = Convert.ToInt32(orderItem.QuantityShipped),
                        ConditionNote = orderItem.ConditionNote
                    };

                    item.Price             = orderItem.IsSetItemPrice() ? decimal.Parse(orderItem.ItemPrice.Amount) : 0;
                    item.ShippingPrice     = orderItem.IsSetShippingPrice() ? decimal.Parse(orderItem.ShippingPrice.Amount) : 0;
                    item.GiftWrapPrice     = orderItem.IsSetGiftWrapPrice() ? decimal.Parse(orderItem.GiftWrapPrice.Amount) : 0;
                    item.Tax               = orderItem.IsSetItemTax() ? decimal.Parse(orderItem.ItemTax.Amount) : 0;
                    item.ShippingTax       = orderItem.IsSetShippingTax() ? decimal.Parse(orderItem.ShippingTax.Amount) : 0;
                    item.GiftWrapTax       = orderItem.IsSetGiftWrapTax() ? decimal.Parse(orderItem.GiftWrapTax.Amount) : 0;
                    item.ShippingDiscount  = orderItem.IsSetShippingDiscount() ? decimal.Parse(orderItem.ShippingDiscount.Amount) : 0;
                    item.PromotionDiscount = orderItem.IsSetPromotionDiscount() ? decimal.Parse(orderItem.PromotionDiscount.Amount) : 0;

                    items.Add(item);
                }

                // get the page order items if the next token not null
                if (!string.IsNullOrWhiteSpace(nextToken))
                {
                    // pause for 2 seconds, this is the restore reate for the ListOrderItemsByNextToken for every 30 quota
                    Thread.Sleep(2000);

                    var nextRequest = new ListOrderItemsByNextTokenRequest {
                        SellerId = _credential.MerchantId, NextToken = nextToken
                    };
                    nextTokenResponse = _ordersClient.ListOrderItemsByNextToken(nextRequest);
                }
            } while (!string.IsNullOrWhiteSpace(nextToken));

            // set the order items to the local object
            marketplaceOrder.OrderItems = items;

            return(marketplaceOrder);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Insert new record or update for order item into database
        /// </summary>
        /// <param name="item">The record of order item to save to database</param>
        public void DoInsertOrUpdateOrderItem(MarketplaceOrderItem item)
        {
            try
            {
                using (var context = new EisInventoryContext())
                {
                    // check if there is existing order item
                    var orderItem = context.orderitems
                                    .FirstOrDefault(x => x.OrderItemId == item.OrderItemId && x.OrderId == item.OrderId);

                    if (orderItem == null)
                    {
                        context.orderitems.Add(new orderitem
                        {
                            OrderItemId       = item.OrderItemId,
                            OrderId           = item.OrderId,
                            ItemId            = item.MarketplaceItemId,
                            SKU               = item.SKU,
                            Title             = item.Title,
                            QtyOrdered        = item.QtyOrdered,
                            QtyShipped        = item.QtyShipped,
                            Price             = item.Price,
                            ShippingPrice     = item.ShippingPrice,
                            GiftWrapPrice     = item.GiftWrapPrice,
                            ItemTax           = item.Tax,
                            ShippingTax       = item.ShippingTax,
                            GiftWrapTax       = item.GiftWrapTax,
                            ShippingDiscount  = item.ShippingDiscount,
                            PromotionDiscount = item.PromotionDiscount,
                            ConditionNote     = item.ConditionNote,
                        });
                    }
                    else
                    {
                        orderItem.ItemId            = item.MarketplaceItemId;
                        orderItem.SKU               = item.SKU;
                        orderItem.Title             = item.Title;
                        orderItem.QtyOrdered        = item.QtyOrdered;
                        orderItem.QtyShipped        = item.QtyShipped;
                        orderItem.Price             = item.Price;
                        orderItem.ShippingPrice     = item.ShippingPrice;
                        orderItem.GiftWrapPrice     = item.GiftWrapPrice;
                        orderItem.ItemTax           = item.Tax;
                        orderItem.ShippingTax       = item.ShippingTax;
                        orderItem.GiftWrapTax       = item.GiftWrapTax;
                        orderItem.ShippingDiscount  = item.ShippingDiscount;
                        orderItem.PromotionDiscount = item.PromotionDiscount;
                        orderItem.ConditionNote     = item.ConditionNote;
                    }

                    // save the changes
                    context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("Error occured on order item id: {0} \nError Message: {1} \n{2} ", item.OrderItemId, ex.Message, ex.StackTrace);
                _logger.LogError(LogEntryType.OrderService,
                                 string.Format("Error occured in inserting or creating order item {0} and order id {1} to DB <br/>Error message: {2}",
                                               item.OrderItemId,
                                               item.OrderId,
                                               EisHelper.GetExceptionMessage(ex)),
                                 ex.StackTrace);
            }
        }