/// <summary>
        ///
        /// </summary>
        /// <param name="redemption"></param>
        /// <param name="currency"></param>
        /// <param name="paymentCalendar"></param>
        /// <returns></returns>
        public static PriceablePrincipalExchange CreatePriceableBondRedemption(PrincipalExchange redemption,
                                                                               string currency, IBusinessCalendar paymentCalendar)
        {
            var multiplier = 1;

            if (redemption != null)
            {
                var adjustedPaymentDate = redemption.adjustedPrincipalExchangeDate;
                var amount   = multiplier * redemption.principalExchangeAmount;
                var exchange = new PriceablePrincipalExchange("FinalRedemption", false, amount, currency,
                                                              adjustedPaymentDate, paymentCalendar);
                return(exchange);
            }

            return(null);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="payerIsBase"></param>
        /// <param name="exchanges"></param>
        /// <param name="currency"></param>
        /// <param name="paymentCalendar"></param>
        /// <returns></returns>
        public static List <PriceablePrincipalExchange> CreatePriceablePrincipalExchanges(bool payerIsBase, PrincipalExchange[] exchanges,
                                                                                          string currency, IBusinessCalendar paymentCalendar)
        {
            List <PriceablePrincipalExchange> priceableCashflows = null;
            var multiplier = payerIsBase ? -1 : 1;

            if (exchanges != null)
            {
                priceableCashflows = new List <PriceablePrincipalExchange>();
                var index = 0;
                foreach (var principalExchange in exchanges)
                {
                    var adjustedPaymentDate = principalExchange.adjustedPrincipalExchangeDate;
                    var amount   = multiplier * principalExchange.principalExchangeAmount;
                    var exchange = new PriceablePrincipalExchange("PrincipalExchange_" + index, payerIsBase, amount, currency, adjustedPaymentDate, paymentCalendar);
                    priceableCashflows.Add(exchange);
                    index++;
                }
            }
            return(priceableCashflows);
        }