private decimal BeregnProduktantal(Abonnement abonnement, Varelinje varelinje, Abonnent abonnent, DateTime simuleringsdato) { decimal produktantal = varelinje.Antal; // Forholdsmæssig opkrævning if (abonnement.OpkraevesForholdsmaessigt()) { DateTime naesteIntervalStartdato = abonnement.LaegIntervalTilDato(simuleringsdato); double interval = (naesteIntervalStartdato - simuleringsdato).TotalDays; double dageStartSlut = interval; // Hvis startdato er senere end simuleringsdato if (abonnent.Startdato > simuleringsdato) { dageStartSlut = (naesteIntervalStartdato - abonnent.Startdato).TotalDays + 1; } // Hvis nuværende simuleringsinterval overskrider endegyldig slutdato for abonnent if (naesteIntervalStartdato > abonnent.EndegyldigSlutdato()) { // Hvis simuleringsdato er senere end abonnentens startdato if (abonnent.Startdato <= simuleringsdato) { dageStartSlut = (abonnent.EndegyldigSlutdato() - simuleringsdato).TotalDays + 1; } // Hvis simuleringsdatoen er tidligere end startdatoen else { dageStartSlut = (naesteIntervalStartdato - abonnent.Startdato).TotalDays + 1; } } Decimal forhold = (Decimal)(dageStartSlut / interval); produktantal = produktantal * forhold; //Console.WriteLine("Forhold: " + forhold); //Console.WriteLine("Forholdsmæssigt abonnement - Interval: {0}, Rest: {1}, Pris: {2}", interval, dageStartSlut, varepris); } if (abonnent.Antalsfaktor != null) { produktantal = produktantal * (decimal)abonnent.Antalsfaktor; } //Afrund til 2 decimaler produktantal = decimal.Round(produktantal, 2); return(produktantal); }
private bool AbonnentperiodeErAktiv(Abonnent abonnent, DateTime simuleringsdato) { // Er simulerings dato indenfor abonnentens start/s**t interval return((SaetTidligereFoerste(abonnent.Startdato) <= simuleringsdato) && (abonnent.EndegyldigSlutdato() >= simuleringsdato)); }