using System; using System.Collections.Specialized; using System.Globalization; using Telerik.Sitefinity.Ecommerce.Payment.Model; using Telerik.Sitefinity.Modules.Ecommerce.ExchangeRates.Implementations; using Telerik.Sitefinity.Modules.Ecommerce.Orders; using Telerik.Sitefinity.Modules.Ecommerce.Payment.Processors; namespace SitefinityWebApp { public class MultiCurrencyPayPalStandardProvider : PayPalStandardProvider { protected override NameValueCollection GetPostValues(IPaymentRequest data) { var baseValues = base.GetPostValues(data); PriceConverterHelper.SetPostValues("amount_", baseValues, data); return baseValues; } } public class MultiCurrencyWorldPayProvider : WorldPayProvider { protected override NameValueCollection GetPostValues(IPaymentRequest data) { var baseValues = base.GetPostValues(data); PriceConverterHelper.SetPostValues("cost", baseValues, data); return baseValues; } } internal class PriceConverterHelper { internal static void SetPostValues(string key, NameValueCollection baseValues, IPaymentRequest data) { NumberFormatInfo nfi = new CultureInfo("en-US", false).NumberFormat; nfi.NumberGroupSeparator = ""; var order = OrdersManager.GetManager().GetOrder(data.OrderID); if (order != null) { int itemNumber = 0; for (int i = 0; i < order.Details.Count; i++) { itemNumber = i + 1; if (order.DefaultCurrency != order.Currency) { var exchangedPrice = ConvertAndRoundPrice(order.Details[i].Price); baseValues[key + itemNumber] = exchangedPrice.ToString("N2", nfi); } } } } private static decimal ConvertAndRoundPrice(decimal amount) { return Math.Round(new EcommerceExchangeRateConverter().ConvertPrice(amount), 2, MidpointRounding.AwayFromZero); } } }