예제 #1
0
        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);
        }
예제 #2
0
 private bool AbonnentperiodeErAktiv(Abonnent abonnent, DateTime simuleringsdato)
 {
     // Er simulerings dato indenfor abonnentens start/s**t interval
     return((SaetTidligereFoerste(abonnent.Startdato) <= simuleringsdato) && (abonnent.EndegyldigSlutdato() >= simuleringsdato));
 }