} // constructor public static IEnumerable <string> GetTopSealedProductItems(EbayDatabaseOrdersList orders, int countTopItems = 10) { return(orders.AsParallel().Where(o => o.TransactionData != null) .SelectMany(o => o.TransactionData) .GroupBy(tr => tr.ItemID, (key, group) => new { ItemId = key, Sum = group.Sum(t => t.QuantityPurchased) }) .OrderByDescending(x => x.Sum) .Take(countTopItems) .Where(a => a.ItemId != null).Select(a => a.ItemId).ToList()); } // GetTopSealedProductItems
public EbayDatabaseOrdersList GetAllEBayOrders(DateTime submittedDate, IDatabaseCustomerMarketPlace databaseCustomerMarketPlace) { var orders = new EbayDatabaseOrdersList(submittedDate); var dbOrders = _MP_EbayOrderRepository.GetOrdersItemsByMakretplaceId(databaseCustomerMarketPlace.Id); orders.AddRange(dbOrders.Select(o => { EBayOrderStatusCodeType orderStatus; Enum.TryParse(o.OrderStatus, out orderStatus); return(new EbayDatabaseOrderItem { PaymentMethod = o.PaymentMethod, AmountPaid = _CurrencyConvertor.ConvertToBaseCurrency(o.AmountPaid, o.CreatedTime), OrderStatus = orderStatus, PaymentHoldStatus = o.PaymentHoldStatus, ShippingAddressData = Convert(o.ShippingAddress), BuyerName = o.BuyerName, CheckoutStatus = o.CheckoutStatus, PaymentMethods = o.PaymentMethod, SubTotal = _CurrencyConvertor.ConvertToBaseCurrency(o.SubTotal, o.CreatedTime), Total = _CurrencyConvertor.ConvertToBaseCurrency(o.Total, o.CreatedTime), AdjustmentAmount = _CurrencyConvertor.ConvertToBaseCurrency(o.AdjustmentAmount, o.CreatedTime), PaymentTime = o.PaymentTime, TransactionData = new EbayDatabaseTransactionDataList(o.Transactions.Select(t => new EbayDatabaseTransactionDataItem { CreatedDate = t.CreatedDate, PaymentHoldStatus = t.PaymentHoldStatus, QuantityPurchased = t.QuantityPurchased, PaymentMethodUsed = t.PaymentMethodUsed, TransactionPrice = _CurrencyConvertor.ConvertToBaseCurrency(t.TransactionPrice, t.CreatedDate), ItemID = t.ItemID, ItemPrivateNotes = t.ItemPrivateNotes, ItemSKU = t.ItemSKU, ItemSellerInventoryID = t.ItemSellerInventoryID, eBayTransactionId = t.eBayTransactionId, OrderItemDetail = t.OrderItemDetail })), CreatedTime = o.CreatedTime, PaymentStatus = o.PaymentStatus, ShippedTime = o.ShippedTime, ExternalTransactionData = new EBayDatabaseExternalTransactionList(o.ExternalTransactions.Select(t => new EBayDatabaseExternalTransactionItem { FeeOrCreditAmount = t.FeeOrCreditAmount, PaymentOrRefundAmount = t.PaymentOrRefundAmount, TransactionID = t.TransactionID, TransactionTime = t.TransactionTime })) }); })); return(orders); }
} // FetchOnePeriodTransactions private EbayDatabaseOrdersList ParseOrdersInfo(ResultInfoOrders data) { var rez = new EbayDatabaseOrdersList(data.SubmittedDate) { RequestsCounter = data.RequestsCounter, }; foreach (OrderType o in data) { if (o == null) { continue; } var item = new EbayDatabaseOrderItem { CreatedTime = o.CreatedTimeSpecified ? o.CreatedTime.ToUniversalTime() : (DateTime?)null, ShippedTime = o.ShippedTimeSpecified ? o.ShippedTime.ToUniversalTime() : (DateTime?)null, PaymentTime = o.PaidTimeSpecified ? o.PaidTime.ToUniversalTime() : (DateTime?)null, BuyerName = o.BuyerUserID, AdjustmentAmount = ConvertToBaseCurrency(o.AdjustmentAmount, o.CreatedTime), AmountPaid = ConvertToBaseCurrency(o.AmountPaid, o.CreatedTime), SubTotal = ConvertToBaseCurrency(o.Subtotal, o.CreatedTime), Total = ConvertToBaseCurrency(o.Total, o.CreatedTime), OrderStatus = o.OrderStatusSpecified ? (EBayOrderStatusCodeType)Enum.Parse(typeof(EBayOrderStatusCodeType), o.OrderStatus.ToString()) : EBayOrderStatusCodeType.Default, PaymentHoldStatus = o.PaymentHoldStatusSpecified ? o.PaymentHoldStatus.ToString() : string.Empty, CheckoutStatus = o.CheckoutStatus != null && o.CheckoutStatus.StatusSpecified ? o.CheckoutStatus.Status.ToString() : string.Empty, PaymentMethod = o.CheckoutStatus != null && o.CheckoutStatus.PaymentMethodSpecified ? o.CheckoutStatus.PaymentMethod.ToString() : string.Empty, PaymentStatus = o.CheckoutStatus != null && o.CheckoutStatus.eBayPaymentStatusSpecified ? o.CheckoutStatus.eBayPaymentStatus.ToString() : string.Empty, PaymentMethods = o.PaymentMethods == null ? null : string.Join(",", o.PaymentMethods), ShippingAddressData = o.ShippingAddress == null ? null : o.ShippingAddress.ConvertToDatabaseType(), }; if (o.ExternalTransaction != null && o.ExternalTransaction.Length > 0) { item.ExternalTransactionData = new EBayDatabaseExternalTransactionList(); foreach (var et in o.ExternalTransaction) { if (et == null) { continue; } var exItem = new EBayDatabaseExternalTransactionItem(); exItem.TransactionID = et.ExternalTransactionID; exItem.TransactionTime = et.ExternalTransactionTimeSpecified ? et.ExternalTransactionTime : (DateTime?)null; exItem.FeeOrCreditAmount = ConvertToBaseCurrency(et.FeeOrCreditAmount, et.ExternalTransactionTime); exItem.PaymentOrRefundAmount = ConvertToBaseCurrency( et.PaymentOrRefundAmount, et.ExternalTransactionTime ); item.ExternalTransactionData.Add(exItem); } // for each } // if if (o.TransactionArray != null && o.TransactionArray.Length > 0) { item.TransactionData = new EbayDatabaseTransactionDataList(); foreach (var td in o.TransactionArray) { if (td == null || td.Item == null) { continue; } var itemType = td.Item; var trItem = new EbayDatabaseTransactionDataItem { CreatedDate = td.CreatedDate, QuantityPurchased = td.QuantityPurchased, PaymentHoldStatus = td.Status != null && td.Status.PaymentHoldStatusSpecified ? td.Status.PaymentHoldStatus.ToString() : string.Empty, PaymentMethodUsed = td.Status != null && td.Status.PaymentMethodUsedSpecified ? td.Status.PaymentMethodUsed.ToString() : string.Empty, TransactionPrice = ConvertToBaseCurrency(td.TransactionPrice, td.CreatedDate), ItemSKU = itemType.SKU, ItemID = itemType.ItemID, ItemPrivateNotes = itemType.PrivateNotes, ItemSellerInventoryID = itemType.SellerInventoryID, eBayTransactionId = td.TransactionID }; item.TransactionData.Add(trItem); } // for each } // if rez.Add(item); } // for each o in data return(rez); } // ParseOrdersInfo
} // class FetchResultCounters private FetchResultCounters FetchOnePeriodTransactions( int mpID, IDatabaseCustomerMarketPlace databaseCustomerMarketPlace, ElapsedTimeInfo elapsedTimeInfo, DataProviderCreationInfo info, MP_CustomerMarketplaceUpdatingHistory historyRecord, FetchPeriod period ) { this.log.Debug("Fetching eBay orders '{0}'@{1}...", mpID, period); ResultInfoOrders orders = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds( elapsedTimeInfo, mpID, ElapsedDataMemberType.RetrieveDataFromExternalService, () => DataProviderGetOrders.GetOrders( info, new ParamsDataInfoGetOrdersFromDateToDateCreated(period.From, period.To) ) ); EbayDatabaseOrdersList databaseOrdersList = ParseOrdersInfo(orders); DateTime?max = null; DateTime?min = null; foreach (EbayDatabaseOrderItem o in databaseOrdersList.Where(x => x.CreatedTime != null)) { DateTime c = o.CreatedTime.Value; if ((min == null) || (c < min.Value)) { min = c; } if ((max == null) || (c > max.Value)) { max = c; } } // for each this.log.Debug( "Fetching eBay orders '{0}'@{1}: {2} are ready to be stored; " + "min order date is '{3}', max order date is '{4}'.", mpID, period, Grammar.Number(databaseOrdersList.Count, "order"), (min == null) ? "N/A" : min.Value.ToString("d/MMM/yyyy H:mm:ss", CultureInfo.InvariantCulture), (max == null) ? "N/A" : max.Value.ToString("d/MMM/yyyy H:mm:ss", CultureInfo.InvariantCulture) ); ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds( elapsedTimeInfo, mpID, ElapsedDataMemberType.StoreDataToDatabase, () => Helper.AddEbayOrdersData(databaseCustomerMarketPlace, databaseOrdersList, historyRecord) ); this.log.Debug( "Fetching eBay orders '{0}'@{1}: {2} were stored.", mpID, period, Grammar.Number(databaseOrdersList.Count, "order") ); EbayDatabaseOrdersList allEBayOrders = ElapsedTimeHelper.CalculateAndStoreElapsedTimeForCallInSeconds( elapsedTimeInfo, mpID, ElapsedDataMemberType.RetrieveDataFromDatabase, () => Helper.GetAllEBayOrders(orders.SubmittedDate, databaseCustomerMarketPlace) ); this.log.Debug( "Fetching eBay orders '{0}'@{1}: {2} were loaded from DB.", mpID, period, Grammar.Number(allEBayOrders.Count, "order") ); if (this.settings.DownloadCategories) { IEnumerable <string> topSealedProductItems = GetTopSealedProductItems(allEBayOrders); if (topSealedProductItems != null) { List <MP_EBayOrderItemDetail> orderItemDetails = topSealedProductItems.Select( item => FindEBayOrderItemInfo( databaseCustomerMarketPlace, info, item, databaseOrdersList.RequestsCounter, elapsedTimeInfo ) ).Where(d => d != null) .ToList(); Helper.UpdateOrderItemsInfo(orderItemDetails, elapsedTimeInfo, mpID); } // if } // if var frc = new FetchResultCounters( databaseOrdersList.RequestsCounter, (orders.Orders == null) ? 0 : orders.Orders.Count ); this.log.Debug( "Done fetching eBay orders '{0}'@{1}: {2} fetched.", mpID, period, Grammar.Number(frc.OrderCount, "order") ); return(frc); } // FetchOnePeriodTransactions
public void AddEbayOrdersData(IDatabaseCustomerMarketPlace databaseCustomerMarketPlace, EbayDatabaseOrdersList data, MP_CustomerMarketplaceUpdatingHistory historyRecord) { MP_CustomerMarketPlace customerMarketPlace = GetCustomerMarketPlace(databaseCustomerMarketPlace.Id); LogData("Orders Data", customerMarketPlace, data); if (data == null) { return; } var mpOrder = new MP_EbayOrder { CustomerMarketPlace = customerMarketPlace, Created = data.SubmittedDate.ToUniversalTime(), HistoryRecord = historyRecord }; if (data.Count != 0) { data.ForEach( databaseOrder => { var mpOrderItem = new MP_EbayOrderItem { Order = mpOrder, CreatedTime = databaseOrder.CreatedTime, PaymentTime = databaseOrder.PaymentTime, ShippedTime = databaseOrder.ShippedTime, BuyerName = databaseOrder.BuyerName, AdjustmentAmount = databaseOrder.AdjustmentAmount, AmountPaid = databaseOrder.AmountPaid, SubTotal = databaseOrder.SubTotal, Total = databaseOrder.Total, CheckoutStatus = databaseOrder.CheckoutStatus, OrderStatus = databaseOrder.OrderStatus.ToString(), PaymentStatus = databaseOrder.PaymentStatus, PaymentHoldStatus = databaseOrder.PaymentHoldStatus, PaymentMethod = databaseOrder.PaymentMethod, PaymentMethodsList = databaseOrder.PaymentMethods, ShippingAddress = CreateAddressInDatabase(databaseOrder.ShippingAddressData), }; if (databaseOrder.TransactionData != null && databaseOrder.TransactionData.HasData) { mpOrderItem.Transactions.AddAll(databaseOrder.TransactionData.Select(t => { var tr = new MP_EbayTransaction { OrderItem = mpOrderItem, CreatedDate = t.CreatedDate, PaymentHoldStatus = t.PaymentHoldStatus, PaymentMethodUsed = t.PaymentMethodUsed, QuantityPurchased = t.QuantityPurchased, TransactionPrice = t.TransactionPrice, ItemID = t.ItemID, ItemPrivateNotes = t.ItemPrivateNotes, ItemSKU = t.ItemSKU, ItemSellerInventoryID = t.ItemSellerInventoryID, eBayTransactionId = t.eBayTransactionId, }; return(tr); }).ToArray()); } if (databaseOrder.ExternalTransactionData != null && databaseOrder.ExternalTransactionData.HasData) { mpOrderItem.ExternalTransactions.AddAll(databaseOrder.ExternalTransactionData.Select(t => new MP_EbayExternalTransaction { OrderItem = mpOrderItem, TransactionID = t.TransactionID, TransactionTime = t.TransactionTime, FeeOrCreditAmount = t.FeeOrCreditAmount, PaymentOrRefundAmount = t.PaymentOrRefundAmount }).ToArray()); } mpOrder.OrderItems.Add(mpOrderItem); } ); } customerMarketPlace.EbayOrders.Add(mpOrder); _CustomerMarketplaceRepository.Update(customerMarketPlace); }