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