コード例 #1
0
            /// <summary>
            /// Executes the workflow associated with retrieving list of supported channel currencies.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override GetChannelCurrencyAmountResponse Process(GetChannelCurrencyAmountRequest request)
            {
                ThrowIf.Null(request, "request");
                ThrowIf.Null(request.CurrenciesToConvert, "request.CurrencyToConvert");

                if (!request.CurrenciesToConvert.Any())
                {
                    throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_CurrencyNotFound);
                }

                GetChannelCurrencyAmountResponse response;

                if (!request.IsTotalToBeCalculated)
                {
                    CurrencyRequest currencyToConvert = request.CurrenciesToConvert.Single();

                    // Set default store currency if the currency Iso code is not set.
                    if (string.IsNullOrWhiteSpace(currencyToConvert.CurrencyCode))
                    {
                        var channelConfiguration = this.Context.GetChannelConfiguration();

                        currencyToConvert.CurrencyCode = channelConfiguration.Currency;
                    }

                    var serviceRequest = new GetChannelCurrencyServiceRequest(currencyToConvert.CurrencyCode, currencyToConvert.AmountToConvert, request.QueryResultSettings);

                    var serviceResponse = this.Context.Execute <GetChannelCurrencyServiceResponse>(serviceRequest);

                    response = new GetChannelCurrencyAmountResponse(serviceResponse.ChannelCurrencies);
                }
                else
                {
                    var serviceRequest = new CalculateTotalAmountServiceRequest(request.CurrenciesToConvert);

                    var serviceResponse = this.Context.Execute <CalculateTotalAmountServiceResponse>(serviceRequest);

                    response = new GetChannelCurrencyAmountResponse(new ReadOnlyCollection <CurrencyAmount>(new[] { serviceResponse.TotalCurrencyAmount }).AsPagedResult());
                }

                return(response);
            }
コード例 #2
0
            /// <summary>
            /// Gets all supported channel currency value and exchange rate for the given amount.
            /// </summary>
            /// <param name="request">Request contains the amount to be converted.</param>
            /// <returns>The converted amount with exchange rates.</returns>
            private static GetChannelCurrencyServiceResponse GetSupportedChannelCurrencies(GetChannelCurrencyServiceRequest request)
            {
                string fromCurrencyCode = request.CurrencyCode;

                GetChannelCurrenciesDataRequest     dataRequest            = new GetChannelCurrenciesDataRequest(request.QueryResultSettings ?? QueryResultSettings.AllRecords);
                PagedResult <CurrencyAmount>        pagedChannelCurrencies = request.RequestContext.Execute <EntityDataServiceResponse <CurrencyAmount> >(dataRequest).PagedEntityCollection;
                ReadOnlyCollection <CurrencyAmount> channelCurrencies      = pagedChannelCurrencies.Results;

                if (channelCurrencies == null || !channelCurrencies.Any())
                {
                    NetTracer.Warning("Cannot find channel currencies");
                    return(new GetChannelCurrencyServiceResponse());
                }

                var currencyList = channelCurrencies.ToList();

                foreach (var toCurrency in currencyList)
                {
                    var getCurrencyValueRequest = new GetCurrencyValueServiceRequest(fromCurrencyCode, toCurrency.CurrencyCode, request.Amount);
                    GetCurrencyValueServiceResponse serviceResponse = GetCurrencyConversion(request.RequestContext, getCurrencyValueRequest);
                    toCurrency.ExchangeRate           = serviceResponse.ExchangeRate;
                    toCurrency.ConvertedAmount        = serviceResponse.ConvertedAmount;
                    toCurrency.RoundedConvertedAmount = serviceResponse.RoundedConvertedAmount;
                }

                var storeCurrencyList = currencyList.Where(currency => currency.ExchangeRate > 0M).ToList();

                // If the from currency does not exists add to the list.
                if (storeCurrencyList.All(currency => string.CompareOrdinal(currency.CurrencyCode, fromCurrencyCode) != 0))
                {
                    CurrencyAmount conversionResult = GetFromCurrencyAmount(request.RequestContext, request.Amount, fromCurrencyCode);
                    storeCurrencyList.Add(conversionResult);
                }

                pagedChannelCurrencies.Results = storeCurrencyList.AsReadOnly();

                return(new GetChannelCurrencyServiceResponse(pagedChannelCurrencies));
            }