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