Ejemplo n.º 1
0
        public static List <Abonnement> GenererTestAbonnement(string vareNummer, decimal vareSalgsPris, decimal vareAntal, string debitorNummer, decimal?abonnentPrisIndex, decimal?abonnentSpecialPris, decimal?abonnentRabat, DateTime?abonnentRabatUdloeb, DateTime abonnentStart, DateTime abonnentSlut, DateTime?abonnentUloeb, string abonnementInterval, string abonnementOpkraevning, bool abonnementKalenderAar)
        {
            List <Abonnement> abonnementer = new List <Abonnement>();

            Vare       produkt    = new Vare(0, null, vareNummer, vareSalgsPris, 0, null);
            Varelinje  varelinje  = new Varelinje(0, 0, vareAntal, null, produkt, null);
            Debitor    debitor    = new Debitor(null, 0, null, null, null, null, null, null, null, debitorNummer, null, null);
            Abonnent   abonnent   = new Abonnent(0, debitor, abonnentRabat, abonnentRabatUdloeb, abonnentSlut, abonnentUloeb, null, abonnentPrisIndex, DateTime.MinValue, abonnentSpecialPris, abonnentStart);
            Abonnement abonnement = new Abonnement(0, null, 0, abonnementKalenderAar, abonnementInterval, abonnementOpkraevning);

            abonnement.Varelinjer.Add(varelinje);
            abonnement.Abonnenter.Add(abonnent);
            abonnementer.Add(abonnement);

            return(abonnementer);
        }
Ejemplo n.º 2
0
        private decimal BeregnProduktpris(Varelinje varelinje, Abonnent abonnent, bool rabatErUdloebet, decimal brugerIndex)
        {
            // Fuld opkrævning
            decimal varepris = varelinje.Produkt.Salgpris;

            // Særlig varelinje produktpris
            if (varelinje.Saerpris != null)
            {
                varepris = Convert.ToDecimal(varelinje.Saerpris);
            }

            // Særlig abonnent produktpris
            if (abonnent.Saerpris != null)
            {
                varepris = Convert.ToDecimal(abonnent.Saerpris);
            }

            // Eventuel rabat
            if (abonnent.RabatSomProcent != null && !rabatErUdloebet)
            {
                varepris = varepris * (100 - Convert.ToDecimal(abonnent.RabatSomProcent)) / 100;
            }

            // Brugerdefineret index på pris
            decimal abonnentPrisindex = 1;

            if (abonnent.Prisindex != null && abonnent.Prisindex != 0)
            {
                abonnentPrisindex = (decimal)abonnent.Prisindex;
            }

            varepris = varepris * brugerIndex / abonnentPrisindex;

            //Afrunding til 2 decimaler
            varepris = Decimal.Round(varepris, 2);

            return(varepris);
        }
Ejemplo n.º 3
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));
 }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Forbinder dataudtræk fra e-conomic. Returnerer en liste af abonnementer med linkede varelinjer og abonnenter.
        /// </summary>
        /// <returns></returns>
        private List <Abonnement> ForbindData(EconomicUdtraek economicDataudtraek)
        {
            // Konverter e-conomic dataobjekter til "egne" dataobjekter. Alt data lægges i opslag og køres kun igennem een gang ved konvertering.
            Dictionary <int, Abonnement> abonnementopslag = new Dictionary <int, Abonnement>();
            Dictionary <int, Abonnent>   abonnentopslag   = new Dictionary <int, Abonnent>();
            Dictionary <int, Afdeling>   afdelingsopslag  = new Dictionary <int, Afdeling>();
            Dictionary <string, Debitor> debitoropslag    = new Dictionary <string, Debitor>();
            Dictionary <string, Vare>    produktopslag    = new Dictionary <string, Vare>();
            Dictionary <int, Varelinje>  varelinjeopslag  = new Dictionary <int, Varelinje>();

            foreach (var abonnementData in economicDataudtraek.Abonnementer)
            {
                abonnementopslag.Add(abonnementData.Id, new Abonnement(abonnementData.Id, abonnementData.Name, abonnementData.Number, abonnementData.CalendarYearBasis, abonnementData.SubscriptionInterval.ToString(), abonnementData.Collection.ToString()));
            }

            foreach (var afdelingsData in economicDataudtraek.Afdelinger)
            {
                afdelingsopslag.Add(afdelingsData.Number, new Afdeling(afdelingsData.Number, afdelingsData.Name));
            }

            foreach (var debitorData in economicDataudtraek.Debitorer)
            {
                if (!debitoropslag.ContainsKey(debitorData.Number))
                {
                    debitoropslag.Add(debitorData.Number, new Debitor(debitorData.Address, debitorData.Balance, debitorData.CINumber, debitorData.City, debitorData.Country, debitorData.CreditMaximum, debitorData.Ean, debitorData.Email, debitorData.Name, debitorData.Number, debitorData.PostalCode, debitorData.TelephoneAndFaxNumber));
                }
            }

            foreach (var abonnentData in economicDataudtraek.Abonnenter)
            {
                Abonnent abonnent = new Abonnent(abonnentData.SubscriberId, debitoropslag[abonnentData.DebtorHandle.Number], abonnentData.DiscountAsPercent, abonnentData.DiscountExpiryDate, abonnentData.EndDate, abonnentData.ExpiryDate, abonnentData.QuantityFactor, abonnentData.PriceIndex, abonnentData.RegisteredDate, abonnentData.SpecialPrice, abonnentData.StartDate);
                abonnentopslag.Add(abonnentData.SubscriberId, abonnent);
                abonnementopslag[abonnentData.SubscriptionHandle.Id].Abonnenter.Add(abonnent);
            }

            foreach (var produktData in economicDataudtraek.Produkter)
            {
                // Evt. afdeling
                Afdeling afdeling = null;
                if (produktData.DepartmentHandle != null)
                {
                    afdeling = afdelingsopslag[produktData.DepartmentHandle.Number];
                }

                if (!produktopslag.ContainsKey(produktData.Handle.Number))
                {
                    produktopslag.Add(produktData.Handle.Number, new Vare(produktData.CostPrice, produktData.Name, produktData.Number, produktData.SalesPrice, produktData.Volume, afdeling));
                }
            }

            foreach (var varelinjeData in economicDataudtraek.Varelinjer)
            {
                //Evt. afdeling
                Afdeling afdeling = null;
                if (varelinjeData.DepartmentHandle != null)
                {
                    afdeling = afdelingsopslag[varelinjeData.DepartmentHandle.Number];
                }

                if (varelinjeData.ProductHandle != null)
                {
                    Varelinje varelinje = new Varelinje(varelinjeData.Id, varelinjeData.Number, (decimal)varelinjeData.Quantity, varelinjeData.SpecialPrice, produktopslag[varelinjeData.ProductHandle.Number], afdeling);
                    abonnementopslag[varelinjeData.Id].Varelinjer.Add(varelinje);

                    if (!varelinjeopslag.ContainsKey(varelinjeData.Id))
                    {
                        varelinjeopslag.Add(varelinjeData.Id, varelinje);
                    }
                }
            }

            return(abonnementopslag.Values.ToList());
        }