/// <summary> /// Gets the transactions for a loyalty card. /// </summary> /// <param name="request">The request.</param> /// <returns>The response containing the loyalty card transactions.</returns> private static IssueLoyaltyCardServiceResponse IssueLoyaltyCard(IssueLoyaltyCardServiceRequest request) { var serviceRequest = new IssueLoyaltyCardRealtimeRequest( request.LoyaltyCardNumber, request.LoyaltyCardTenderType, request.PartyRecordId, request.ChannelId); IssueLoyaltyCardRealtimeResponse serviceResponse = request.RequestContext.Execute <IssueLoyaltyCardRealtimeResponse>(serviceRequest); LoyaltyCard loyaltyCard = serviceResponse.LoyaltyCard; if (loyaltyCard != null && loyaltyCard.PartyRecordId != 0) { loyaltyCard.CustomerAccount = request.CustomerAccountNumber; } // Insert the issue loyalty card into the channel database var insertLoyaltyCardDataRequest = new InsertLoyaltyCardDataRequest(loyaltyCard); request.RequestContext.Execute <NullResponse>(insertLoyaltyCardDataRequest); return(new IssueLoyaltyCardServiceResponse(loyaltyCard)); }
/// <summary> /// Executes the workflow to issue a loyalty card. /// </summary> /// <param name="request">The request.</param> /// <returns>The response.</returns> protected override IssueLoyaltyCardResponse Process(IssueLoyaltyCardRequest request) { ThrowIf.Null(request, "request"); var validateCustomerAccountRequest = new GetValidatedCustomerAccountNumberServiceRequest(request.CustomerAccountNumber, throwOnValidationFailure: true); request.RequestContext.Execute <GetValidatedCustomerAccountNumberServiceResponse>(validateCustomerAccountRequest); // If the request contains a customer account number, find the party recid of the customer. long partyRecordId = 0; if (!string.IsNullOrWhiteSpace(request.CustomerAccountNumber)) { var getCustomerServiceRequest = new GetCustomersServiceRequest(QueryResultSettings.SingleRecord, request.CustomerAccountNumber); var getCustomerServiceResponse = this.Context.Execute <GetCustomersServiceResponse>(getCustomerServiceRequest); var customer = getCustomerServiceResponse.Customers.SingleOrDefault(); if (customer == null || customer.DirectoryPartyRecordId == 0) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerOrDirectoryPartyNotFound); } partyRecordId = customer.DirectoryPartyRecordId; } var issueLoyaltyCardRequest = new IssueLoyaltyCardServiceRequest( request.LoyaltyCardNumber, request.CardTenderType, request.CustomerAccountNumber, partyRecordId, this.Context.GetPrincipal().ChannelId); // Issue the loyalty card in HQ var serviceResponse = this.Context.Execute <IssueLoyaltyCardServiceResponse>(issueLoyaltyCardRequest); return(new IssueLoyaltyCardResponse(serviceResponse.LoyaltyCard)); }