/// <summary> /// Generates the unadjusted calculation dates. /// </summary> /// <param name="effectiveDate">The effective date.</param> /// <param name="terminationDate">The termination date.</param> /// <param name="regularPeriodStartDate">The regular period start date.</param> /// <param name="periodInterval">The period interval.</param> /// <param name="rollConvention">The roll convention.</param> /// <param name="stubPeriodType">Type of the stub period.</param> /// <returns></returns> static public List <CalculationPeriod> GenerateUnadjustedCalculationDates(DateTime effectiveDate, DateTime terminationDate, DateTime regularPeriodStartDate, Period periodInterval, RollConventionEnum rollConvention, StubPeriodTypeEnum?stubPeriodType) { DateTime startDate = effectiveDate; DateTime endDate = terminationDate; Boolean bContainsIrregularFinalPeriod; List <CalculationPeriod> forwardRegularPeriods = GetForwardRegularPeriods(regularPeriodStartDate, endDate, periodInterval, rollConvention, out bContainsIrregularFinalPeriod); if (bContainsIrregularFinalPeriod) { if (forwardRegularPeriods.Count == 0) { CalculationPeriod calculationPeriod = CreateUnadjustedCalculationPeriod(regularPeriodStartDate, endDate); forwardRegularPeriods.Add(calculationPeriod); } else { forwardRegularPeriods = SetFinalIrregularStubPeriod(forwardRegularPeriods, endDate, stubPeriodType ?? StubPeriodTypeEnum.LongFinal); } } var backwardRegularPeriods = new List <CalculationPeriod>(); if (regularPeriodStartDate > startDate) { StubPeriodTypeEnum irregularInitialStubType = StubPeriodTypeEnum.ShortInitial; Boolean bContainsIrregularInitialPeriod; backwardRegularPeriods = GetBackwardRegularPeriods(regularPeriodStartDate, startDate, periodInterval, rollConvention, out bContainsIrregularInitialPeriod); if ((bContainsIrregularInitialPeriod && stubPeriodType != null) && (stubPeriodType != StubPeriodTypeEnum.ShortInitial && stubPeriodType != StubPeriodTypeEnum.LongInitial)) { DateTime normalPeriodStart = AddPeriod(startDate, periodInterval, 1); if (regularPeriodStartDate > normalPeriodStart) { irregularInitialStubType = StubPeriodTypeEnum.LongInitial; } } else if ((bContainsIrregularInitialPeriod && stubPeriodType != null) && (stubPeriodType == StubPeriodTypeEnum.ShortInitial || stubPeriodType == StubPeriodTypeEnum.LongInitial)) { irregularInitialStubType = (StubPeriodTypeEnum)stubPeriodType; } if (bContainsIrregularInitialPeriod) { if (backwardRegularPeriods.Count == 0) { CalculationPeriod calculationPeriod = CreateUnadjustedCalculationPeriod(startDate, regularPeriodStartDate); backwardRegularPeriods.Add(calculationPeriod); } else { backwardRegularPeriods = SetInitialIrregularStubPeriod(backwardRegularPeriods, startDate, irregularInitialStubType); } } } return(MergeCalculationPeriods(backwardRegularPeriods, forwardRegularPeriods)); }
public CalculationPeriodDates(XmlNode xmlNode) { XmlNodeList effectiveDateNodeList = xmlNode.SelectNodes("effectiveDate"); if (effectiveDateNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in effectiveDateNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { effectiveDateIDRef = item.Attributes["id"].Name; AdjustableDate ob = AdjustableDate(); IDManager.SetID(effectiveDateIDRef, ob); } else if (item.Attributes.ToString() == "href") { effectiveDateIDRef = item.Attributes["href"].Name; } else { effectiveDate = new AdjustableDate(item); } } } XmlNodeList relativeEffectiveDateNodeList = xmlNode.SelectNodes("relativeEffectiveDate"); if (relativeEffectiveDateNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in relativeEffectiveDateNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { relativeEffectiveDateIDRef = item.Attributes["id"].Name; AdjustedRelativeDateOffset ob = AdjustedRelativeDateOffset(); IDManager.SetID(relativeEffectiveDateIDRef, ob); } else if (item.Attributes.ToString() == "href") { relativeEffectiveDateIDRef = item.Attributes["href"].Name; } else { relativeEffectiveDate = new AdjustedRelativeDateOffset(item); } } } XmlNodeList terminationDateNodeList = xmlNode.SelectNodes("terminationDate"); if (terminationDateNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in terminationDateNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { terminationDateIDRef = item.Attributes["id"].Name; AdjustableDate ob = AdjustableDate(); IDManager.SetID(terminationDateIDRef, ob); } else if (item.Attributes.ToString() == "href") { terminationDateIDRef = item.Attributes["href"].Name; } else { terminationDate = new AdjustableDate(item); } } } XmlNodeList relativeTerminationDateNodeList = xmlNode.SelectNodes("relativeTerminationDate"); if (relativeTerminationDateNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in relativeTerminationDateNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { relativeTerminationDateIDRef = item.Attributes["id"].Name; RelativeDateOffset ob = RelativeDateOffset(); IDManager.SetID(relativeTerminationDateIDRef, ob); } else if (item.Attributes.ToString() == "href") { relativeTerminationDateIDRef = item.Attributes["href"].Name; } else { relativeTerminationDate = new RelativeDateOffset(item); } } } XmlNodeList calculationPeriodDatesAdjustmentsNodeList = xmlNode.SelectNodes("calculationPeriodDatesAdjustments"); if (calculationPeriodDatesAdjustmentsNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in calculationPeriodDatesAdjustmentsNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { calculationPeriodDatesAdjustmentsIDRef = item.Attributes["id"].Name; BusinessDayAdjustments ob = BusinessDayAdjustments(); IDManager.SetID(calculationPeriodDatesAdjustmentsIDRef, ob); } else if (item.Attributes.ToString() == "href") { calculationPeriodDatesAdjustmentsIDRef = item.Attributes["href"].Name; } else { calculationPeriodDatesAdjustments = new BusinessDayAdjustments(item); } } } XmlNodeList firstPeriodStartDateNodeList = xmlNode.SelectNodes("firstPeriodStartDate"); if (firstPeriodStartDateNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in firstPeriodStartDateNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { firstPeriodStartDateIDRef = item.Attributes["id"].Name; AdjustableDate ob = AdjustableDate(); IDManager.SetID(firstPeriodStartDateIDRef, ob); } else if (item.Attributes.ToString() == "href") { firstPeriodStartDateIDRef = item.Attributes["href"].Name; } else { firstPeriodStartDate = new AdjustableDate(item); } } } XmlNodeList firstRegularPeriodStartDateNodeList = xmlNode.SelectNodes("firstRegularPeriodStartDate"); if (firstRegularPeriodStartDateNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in firstRegularPeriodStartDateNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { firstRegularPeriodStartDateIDRef = item.Attributes["id"].Name; XsdTypeDate ob = XsdTypeDate(); IDManager.SetID(firstRegularPeriodStartDateIDRef, ob); } else if (item.Attributes.ToString() == "href") { firstRegularPeriodStartDateIDRef = item.Attributes["href"].Name; } else { firstRegularPeriodStartDate = new XsdTypeDate(item); } } } XmlNodeList firstCompoundingPeriodEndDateNodeList = xmlNode.SelectNodes("firstCompoundingPeriodEndDate"); if (firstCompoundingPeriodEndDateNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in firstCompoundingPeriodEndDateNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { firstCompoundingPeriodEndDateIDRef = item.Attributes["id"].Name; XsdTypeDate ob = XsdTypeDate(); IDManager.SetID(firstCompoundingPeriodEndDateIDRef, ob); } else if (item.Attributes.ToString() == "href") { firstCompoundingPeriodEndDateIDRef = item.Attributes["href"].Name; } else { firstCompoundingPeriodEndDate = new XsdTypeDate(item); } } } XmlNodeList lastRegularPeriodEndDateNodeList = xmlNode.SelectNodes("lastRegularPeriodEndDate"); if (lastRegularPeriodEndDateNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in lastRegularPeriodEndDateNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { lastRegularPeriodEndDateIDRef = item.Attributes["id"].Name; XsdTypeDate ob = XsdTypeDate(); IDManager.SetID(lastRegularPeriodEndDateIDRef, ob); } else if (item.Attributes.ToString() == "href") { lastRegularPeriodEndDateIDRef = item.Attributes["href"].Name; } else { lastRegularPeriodEndDate = new XsdTypeDate(item); } } } XmlNodeList stubPeriodTypeNodeList = xmlNode.SelectNodes("stubPeriodType"); if (stubPeriodTypeNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in stubPeriodTypeNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { stubPeriodTypeIDRef = item.Attributes["id"].Name; StubPeriodTypeEnum ob = StubPeriodTypeEnum(); IDManager.SetID(stubPeriodTypeIDRef, ob); } else if (item.Attributes.ToString() == "href") { stubPeriodTypeIDRef = item.Attributes["href"].Name; } else { stubPeriodType = new StubPeriodTypeEnum(item); } } } XmlNodeList calculationPeriodFrequencyNodeList = xmlNode.SelectNodes("calculationPeriodFrequency"); if (calculationPeriodFrequencyNodeList.Count > 1 ) { throw new Exception(); } foreach (XmlNode item in calculationPeriodFrequencyNodeList) { if (item.Attributes["href"] != null || item.Attributes["id"] == null) { if (item.Attributes["id"] != null) { calculationPeriodFrequencyIDRef = item.Attributes["id"].Name; CalculationPeriodFrequency ob = CalculationPeriodFrequency(); IDManager.SetID(calculationPeriodFrequencyIDRef, ob); } else if (item.Attributes.ToString() == "href") { calculationPeriodFrequencyIDRef = item.Attributes["href"].Name; } else { calculationPeriodFrequency = new CalculationPeriodFrequency(item); } } } }