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); }
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 }); }