private List<planneddisbursement> GetPlannedDisbursments(iatiactivity activity)
{
List<planneddisbursement> planneddisbursements = new List<planneddisbursement>();
if (activity.planneddisbursement != null)
{
//get planned disbursements
planneddisbursements.AddRange(activity.planneddisbursement);
}
if (activity.budget != null)
{
budget[] budgets = activity.budget;
//get planned from budget
var originalBudgets = budgets.Where(w => w.type == "1").ToList();
var revisedBudgets = budgets.Where(w => w.type == "2").ToList();
foreach (var revisedBudget in revisedBudgets)
{
originalBudgets.RemoveAll(r =>
(
r.periodstart?.isodate >= revisedBudget.periodstart?.isodate && r.periodstart?.isodate <= revisedBudget.periodend?.isodate
)
|| (r.periodend?.isodate >= revisedBudget.periodstart?.isodate && r.periodend?.isodate <= revisedBudget.periodend?.isodate
)
||
(revisedBudget.periodstart?.isodate >= r.periodstart?.isodate && revisedBudget.periodend?.isodate <= r.periodstart?.isodate
)
|| (revisedBudget.periodstart?.isodate >= r.periodend?.isodate && revisedBudget.periodend?.isodate <= r.periodend?.isodate
)
);
}
var margedBudgets = new List<budget>();
margedBudgets.AddRange(originalBudgets);
margedBudgets.AddRange(revisedBudgets);
foreach (var item in margedBudgets)
{
planneddisbursements.Add(new planneddisbursement
{
periodstart = new planneddisbursementPeriodstart { isodate = item.periodstart?.isodate ?? default(DateTime) },
periodend = new planneddisbursementPeriodend { isodate = item.periodend?.isodate ?? default(DateTime) },
value = item.value
});
}
}
return planneddisbursements;
}