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