Beispiel #1
0
            /// <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);
            }
Beispiel #2
0
            /// <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));
                }
            }