Example #1
0
            /// <summary>
            /// Gets the loyalty card status including the loyalty groups and the reward points status.
            /// </summary>
            /// <param name="request">The request containing the card number.</param>
            /// <returns>The response containing the loyalty card status.</returns>
            private static GetLoyaltyCardStatusServiceResponse GetLoyaltyCardStatus(GetLoyaltyCardStatusServiceRequest request)
            {
                // Get loyalty card basic information
                var         getLoyaltyCardDataRequest = new GetLoyaltyCardDataRequest(request.LoyaltyCardNumber);
                LoyaltyCard loyaltyCard = request.RequestContext.Execute <SingleEntityDataServiceResponse <LoyaltyCard> >(getLoyaltyCardDataRequest).Entity;

                if (loyaltyCard == null)
                {
                    return(new GetLoyaltyCardStatusServiceResponse());
                }

                var validateCustomerAccountRequest = new GetValidatedCustomerAccountNumberServiceRequest(loyaltyCard.CustomerAccount, throwOnValidationFailure: true);

                request.RequestContext.Execute <GetValidatedCustomerAccountNumberServiceResponse>(validateCustomerAccountRequest);

                // Get loyalty groups and loyalty tiers
                DateTimeOffset channelDateTime = request.RequestContext.GetNowInChannelTimeZone();
                var            getLoyaltyGroupsAndTiersDataRequest = new GetLoyaltyGroupsAndTiersDataRequest(request.LoyaltyCardNumber, request.RetrieveRewardPointStatus);

                getLoyaltyGroupsAndTiersDataRequest.QueryResultSettings = QueryResultSettings.AllRecords;
                loyaltyCard.LoyaltyGroups = request.RequestContext.Execute <EntityDataServiceResponse <LoyaltyGroup> >(getLoyaltyGroupsAndTiersDataRequest).PagedEntityCollection.Results;

                // Get reward points status
                if (request.RetrieveRewardPointStatus)
                {
                    var serviceRequest = new GetLoyaltyCardRewardPointsStatusRealtimeRequest(
                        channelDateTime,
                        request.LoyaltyCardNumber,
                        excludeBlocked: false,
                        excludeNoTender: false,
                        includeRelatedCardsForContactTender: false,
                        includeNonRedeemablePoints: false,
                        includeActivePointsOnly: false);

                    EntityDataServiceResponse <LoyaltyCard> serviceResponse = request.RequestContext.Execute <EntityDataServiceResponse <LoyaltyCard> >(serviceRequest);
                    LoyaltyCard loyaltyCardWithPoints = serviceResponse.PagedEntityCollection.FirstOrDefault();

                    if (loyaltyCardWithPoints != null)
                    {
                        loyaltyCard.RewardPoints = loyaltyCardWithPoints.RewardPoints;
                    }
                }

                var response = new GetLoyaltyCardStatusServiceResponse(loyaltyCard);

                return(response);
            }
            /// <summary>
            /// Executes the workflow to get the loyalty card transactions.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override GetLoyaltyCardTransactionsResponse Process(GetLoyaltyCardTransactionsRequest request)
            {
                ThrowIf.Null(request, "request");
                ThrowIf.NullOrWhiteSpace(request.LoyaltyCardNumber, "request.LoyaltyCardNumber");
                ThrowIf.NullOrWhiteSpace(request.RewardPointId, "request.RewardPointId");
                ThrowIf.Null(request.QueryResultSettings, "request.QueryResultSettings");
                ThrowIf.Null(request.QueryResultSettings.Paging, "request.QueryResultSettings.Paging");

                var getLoyaltyCardStatusRequest = new GetLoyaltyCardStatusServiceRequest(request.LoyaltyCardNumber);
                GetLoyaltyCardStatusServiceResponse getLoyaltyCardStatusResponse = this.Context.Execute <GetLoyaltyCardStatusServiceResponse>(getLoyaltyCardStatusRequest);

                var validateCustomerAccountRequest = new GetValidatedCustomerAccountNumberServiceRequest(getLoyaltyCardStatusResponse.LoyaltyCard.CustomerAccount, throwOnValidationFailure: true);

                request.RequestContext.Execute <GetValidatedCustomerAccountNumberServiceResponse>(validateCustomerAccountRequest);

                var realtimeRequest = new GetLoyaltyCardTransactionsRealtimeRequest(
                    request.LoyaltyCardNumber,
                    request.RewardPointId,
                    request.QueryResultSettings);

                GetLoyaltyCardTransactionsRealtimeResponse realtimeResponse = request.RequestContext.Execute <GetLoyaltyCardTransactionsRealtimeResponse>(realtimeRequest);

                return(new GetLoyaltyCardTransactionsResponse(realtimeResponse.LoyaltyCardTransactions));
            }