/// <summary> /// Merges two collections of transaction records. /// </summary> /// <param name="remoteResults">The remote transaction collection.</param> /// <param name="localResults">The local transaction collection.</param> /// <returns>A merged transaction collection.</returns> internal static IEnumerable <Transaction> MergeTransactionRecords(IEnumerable <Transaction> remoteResults, IEnumerable <Transaction> localResults) { IEnumerable <Transaction> mergedTransactions = MultiDataSourcesPagingHelper.MergeResults( remoteResults, localResults, GetTransactionMergingKey); return(mergedTransactions); }
/// <summary> /// Get transactions using the request criteria. /// </summary> /// <param name="request">Request containing the criteria used to retrieve transactions.</param> /// <returns>SearchJournalTransactionsServiceResponse object.</returns> private static SearchJournalTransactionsServiceResponse SearchJournalTransactions(SearchJournalTransactionsServiceRequest request) { ThrowIf.Null(request, "request"); ThrowIf.Null(request.QueryResultSettings, "request.QueryResultSettings"); NetTracer.Information("TransactionService.SearchJournalTransactions()"); if (request.QueryResultSettings.Sorting == null) { request.QueryResultSettings.Sorting = new SortingInfo(); } if (!request.QueryResultSettings.Sorting.IsSpecified) { request.QueryResultSettings.Sorting.Add(new SortColumn(RetailTransactionTableSchema.CreatedDateTimeColumn, isDescending: true)); request.QueryResultSettings.Sorting.Add(new SortColumn(RetailTransactionTableSchema.BeginDateTimeColumn, isDescending: true)); } if (request.Criteria.SearchLocationType == SearchLocation.Local) { // Search local only. PagedResult <Transaction> results = SearchJournalTransactionsLocally(request.Criteria, request.QueryResultSettings, request.RequestContext); return(new SearchJournalTransactionsServiceResponse(results)); } else if (request.Criteria.SearchLocationType == SearchLocation.Remote) { // Search remote only. PagedResult <Transaction> results = SearchJournalTransactionsRemotely(request.Criteria, request.QueryResultSettings, request.RequestContext); return(new SearchJournalTransactionsServiceResponse(results)); } else { // Search all. // Adjust the paging. QueryResultSettings settings = request.QueryResultSettings; PagingInfo adjustedPaging = MultiDataSourcesPagingHelper.GetAdjustedPaging(settings.Paging); QueryResultSettings adjustedQueryResultSettings = new QueryResultSettings(settings.ColumnSet, adjustedPaging, settings.Sorting, settings.ChangeTracking); // Get local results. IEnumerable <Transaction> localTransactions = SearchJournalTransactionsLocally(request.Criteria, adjustedQueryResultSettings, request.RequestContext).Results; // Getremote results. IEnumerable <Transaction> remoteTransactions = Enumerable.Empty <Transaction>(); try { remoteTransactions = SearchJournalTransactionsRemotely(request.Criteria, adjustedQueryResultSettings, request.RequestContext).Results; } catch (Exception e) { // Eats the exception since search remote is optional and log the error details as a warning. RetailLogger.Log.CrtServicesStoreOperationServiceServiceRemoteTransactionSearchFailed(e); } // Merge results. IEnumerable <Transaction> mergedTransactions = MultiDataSourcesPagingHelper.MergeResults( remoteTransactions, localTransactions, GetTransactionMergingKey); // Sorts merged transactions. PagedResult <Transaction> mergedResults = MultiDataSourcesPagingHelper.GetPagedResult(mergedTransactions, settings.Paging, settings.Sorting); return(new SearchJournalTransactionsServiceResponse(mergedResults)); } }