Example #1
0
        public MP_AmazonOrder StoreAmazonOrdersData(IDatabaseCustomerMarketPlace databaseCustomerMarketPlace, List <AmazonOrderItem> ordersData, MP_CustomerMarketplaceUpdatingHistory historyRecord, MP_AmazonOrder amazonOrder)
        {
            MP_CustomerMarketPlace customerMarketPlace = GetCustomerMarketPlace(databaseCustomerMarketPlace.Id);

            if (ordersData == null)
            {
                return(amazonOrder);
            }

            if (amazonOrder == null)
            {
                amazonOrder = new MP_AmazonOrder {
                    CustomerMarketPlace = customerMarketPlace,
                    Created             = DateTime.UtcNow,
                    HistoryRecord       = historyRecord
                };
            }

            if (ordersData.Count > 0)
            {
                ordersData.ForEach(
                    dataItem => {
                    if (dataItem != null)
                    {
                        var mpOrderItem = new MP_AmazonOrderItem {
                            Order                  = amazonOrder,
                            OrderId                = dataItem.OrderId,
                            OrderStatus            = dataItem.OrderStatus.ToString(),
                            PurchaseDate           = dataItem.PurchaseDate,
                            LastUpdateDate         = dataItem.LastUpdateDate,
                            NumberOfItemsShipped   = dataItem.NumberOfItemsShipped,
                            NumberOfItemsUnshipped = dataItem.NumberOfItemsUnshipped,
                            OrderTotal             = _CurrencyConvertor.ConvertToBaseCurrency(dataItem.OrderTotal, dataItem.PurchaseDate),
                            SellerOrderId          = dataItem.SellerOrderId,
                        };

                        amazonOrder.OrderItems.Add(mpOrderItem);
                    }
                });
            }
            customerMarketPlace.AmazonOrders.Add(amazonOrder);
            _CustomerMarketplaceRepository.Update(customerMarketPlace);

            return(amazonOrder);
        }
Example #2
0
        private UpdateActionResultInfo CustomerMarketplaceUpdateAction(
            IDatabaseCustomerMarketPlace databaseCustomerMarketPlace,
            AmazonSecurityInfo securityInfo,
            ActionAccessType access,
            MP_CustomerMarketplaceUpdatingHistory historyRecord
            )
        {
            // save data to order table
            //var webServiceConfigurator = CreateServiceReportsConfigurator(connectionInfo);
            var elapsedTimeInfo = new ElapsedTimeInfo();

            DateTime?startDate = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.RetrieveDataFromDatabase,
                () => Helper.GetLastAmazonOrderDate(databaseCustomerMarketPlace)
                );

            var now = DateTime.UtcNow;

            if (!startDate.HasValue)
            {
                startDate = now.AddYears(-1);
                // We want data since the 1st of the month.
                startDate = startDate.Value.AddDays(-startDate.Value.Day).AddDays(1).Date;
            }             // if

            var fromDate = startDate.Value;
            var toDate   = now;

            var amazonOrdersRequestInfo = new AmazonOrdersRequestInfo {
                StartDate         = fromDate,
                EndDate           = toDate,
                MarketplaceId     = securityInfo.MarketplaceId,
                MerchantId        = securityInfo.MerchantId,
                ErrorRetryingInfo = this.amazonSettings,
                CustomerId        = databaseCustomerMarketPlace.Customer.Id,
                MWSAuthToken      = securityInfo.MWSAuthToken
            };

            DateTime submittedDate = now;

            log.InfoFormat(
                "Fetching Amazon orders for customer: {0} marketplace: {1}",
                databaseCustomerMarketPlace.Customer.Id,
                databaseCustomerMarketPlace.Id
                );

            MP_AmazonOrder amazonOrder = null;

            RequestsCounterData requestsCounter = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.RetrieveDataFromExternalService,
                () => AmazonServiceHelper.GetListOrders(this.connectionInfo, amazonOrdersRequestInfo, access, data => {
                amazonOrder = Helper.StoreAmazonOrdersData(databaseCustomerMarketPlace, data, historyRecord, amazonOrder);
                return(true);
            })
                );

            var allOrders = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                elapsedTimeInfo,
                databaseCustomerMarketPlace.Id,
                ElapsedDataMemberType.RetrieveDataFromDatabase,
                () => Helper.GetAllAmazonOrdersData(submittedDate, databaseCustomerMarketPlace)
                );

            allOrders.RequestsCounter = requestsCounter;

            if (allOrders.Count > 0)
            {
                var bestSaledOrderItemList = AnalyseOrder(allOrders).ToList();

                if (bestSaledOrderItemList.Any())
                {
                    foreach (var orderItem2 in bestSaledOrderItemList)
                    {
                        var orderItems = GetOrderItems(
                            securityInfo,
                            access,
                            orderItem2,
                            elapsedTimeInfo,
                            allOrders,
                            databaseCustomerMarketPlace.Id
                            );

                        orderItem2.OrderedItemsList = orderItems;

                        if (orderItems != null)
                        {
                            foreach (var orderItem in orderItems)
                            {
                                orderItem.Categories = GetAndSaveAmazonProcuctCategoryByProductSellerSku(
                                    databaseCustomerMarketPlace,
                                    securityInfo,
                                    orderItem.SellerSKU,
                                    access, allOrders.RequestsCounter,
                                    elapsedTimeInfo
                                    );
                            }     // for each
                        }         // if
                    }             // for each
                }                 // if

                ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds(
                    elapsedTimeInfo,
                    databaseCustomerMarketPlace.Id,
                    ElapsedDataMemberType.StoreDataToDatabase,
                    () => Helper.StoreAmazonOrdersDetailsData(databaseCustomerMarketPlace, bestSaledOrderItemList)
                    );
            }             // if

            return(new UpdateActionResultInfo {
                Name = UpdateActionResultType.OrdersCount,
                Value = (object)allOrders.Count,
                RequestsCounter = allOrders.RequestsCounter,
                ElapsedTime = elapsedTimeInfo
            });
        }