using System.Collections.Generic;
public static void Main()
DateTime contractStart = new DateTime(2017,07,01);
DateTime contractEnd = new DateTime(2025,07,01);
DateTime kpiStart = new DateTime(2030,07,01);
DateTime dateNow = DateTime.Now;
DateTime optionStartDate = contractEnd.AddDays(1);
System.TimeSpan contractDaysDiff = contractEnd - contractStart;
int contractDays = contractDaysDiff.Days;
DateTime contractStartLastDay = new DateTime(contractStart.Year, 12 , 31);
System.TimeSpan contractFirstYearDiff = (contractStartLastDay - contractStart);
double contractFirstYearDays = contractFirstYearDiff.Days;
List<double> rentResults = new List<double>();
List<double> optionResults = new List<double>();
DateTime loopDate = dateNow;
DateTime loopKPIDate = kpiStart;
while(loopDate.Year <= contractEnd.Year) {
if(kpiStart <= loopDate) {
tempRent = (tempRent * (1+kpiRate*kpiShare))*contractFirstYearDays/365;
rentResults.Add(tempRent);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
Console.WriteLine("First run without KPI");
tempRent = rent*((contractFirstYearDays)/365);
Console.WriteLine(contractFirstYearDays);
Console.WriteLine(contractFirstYearDays/365);
Console.WriteLine(tempRent);
rentResults.Add(tempRent);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
if(loopDate.Year == contractEnd.Year) {
if(kpiStart <= loopDate) {
tempRent = (tempRent * (1+kpiRate*kpiShare))*(365-contractFirstYearDays)/365;
rentResults.Add(tempRent);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
tempRent = rent*(365-contractFirstYearDays)/365;
rentResults.Add(tempRent);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
Console.WriteLine("Last run");
Console.WriteLine(tempRent);
if(kpiStart <= loopDate) {
tempRent = (tempRent * (1+kpiRate*kpiShare));
rentResults.Add(tempRent);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
rentResults.Add(tempRent);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
if(kpiStart <= loopDate) {
tempOption = (tempOption * (1+kpiRate*kpiShare))*contractFirstYearDays/365;
optionResults.Add(tempOption);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
tempOption = rent*((contractFirstYearDays)/365);
optionResults.Add(tempOption);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
if(kpiStart <= loopDate) {
tempOption = (tempOption * (1+kpiRate*kpiShare));
optionResults.Add(tempOption);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
optionResults.Add(tempOption);
loopKPIDate = loopKPIDate.AddYears(1);
loopDate = loopDate.AddYears(1);
Console.WriteLine("Rent results");
Console.WriteLine(rentResults.Count);
foreach (var temp in rentResults) {
if(i>=yearsToShow) {break;}
Console.WriteLine("Option results");
Console.WriteLine(optionResults.Count);
foreach (var temp in optionResults) {
if(i>=yearsToShow) {break;}