private static void EinfacherKredit() { Darlehen kredit = new Darlehen(); double zinssatz = 0.0155; kredit.Auszahlungstag = new LocalDateTime(2016, 1, 1, 12, 0); kredit.Faelligkeitstag = new LocalDateTime(2045, 12, 31, 0, 0); kredit.Summe = 100000; kredit.Zinszeitraeume.Add( new Zinsfestschreibung(kredit.Auszahlungstag, kredit.Faelligkeitstag, zinssatz)); kredit.Anfangstilgung = 0.05; kredit.Zahlungsperiode = Period.FromMonths(1); kredit.BeginnTilgung = kredit.Auszahlungstag + kredit.Zahlungsperiode; kredit.BeginnZinsZahlung = kredit.Auszahlungstag + kredit.Zahlungsperiode; kredit.Tilgungen.Add(new Tilgungszahlung(2000, new LocalDateTime(2016, 2, 18, 12, 0))); Tilgungsplan plan = Tilgungsplan.BerechnePlanFesteAnnuitaet(kredit); Console.WriteLine(String.Format("Tilgungsplan Darlehen Summe {0}EUR, feste Annuitaet {1}EUR", kredit.Summe.ToString("F2"), plan.FesteAnnuitaet.ToString("F2"))); foreach (Annuitaet ann in kredit.Annuitaeten) { Console.WriteLine(String.Format( "{0} Darlehen: {1} EUR Tilgung: {2} EUR Zinsen: {3} EUR Annuität: {4} EUR" , ann.Zahlungsdatum.ToString() , ann.DarlehenssumeVorZahlung.ToString("F2").PadLeft(10) , ann.Gesamttilgung.ToString("F2").PadLeft(10) , ann.Zins.Zins.ToString("F2").PadLeft(10) , (ann.Gesamttilgung + ann.Zins.Zins).ToString("F2").PadLeft(10))); } Console.ReadKey(); }
public EigenschaftenDarlehenViewModel(Darlehen kredit) : this() { this.Kredit = kredit; //if(this.Kredit.IsCalculated) //{ this.CurrentPlot = new DarlehenPlotModel(this.Kredit); //} }
private static void KombinierterKredit2() { Darlehen kredit = new Darlehen(); double zinssatz = 0.0155; kredit.Auszahlungstag = new LocalDateTime(2016, 1, 1, 12, 0); kredit.Faelligkeitstag = new LocalDateTime(2045, 12, 31, 0, 0); kredit.Summe = 100000; kredit.Zinszeitraeume.Add( new Zinsfestschreibung(kredit.Auszahlungstag, kredit.Faelligkeitstag, zinssatz)); kredit.Anfangstilgung = 0.05; kredit.Zahlungsperiode = Period.FromMonths(1); kredit.BeginnTilgung = kredit.Auszahlungstag + kredit.Zahlungsperiode; kredit.BeginnZinsZahlung = kredit.Auszahlungstag + kredit.Zahlungsperiode; kredit.Tilgungen.Add(new Tilgungszahlung(2000, new LocalDateTime(2016, 2, 18, 12, 0))); kredit.Prioritaet = 1; Darlehen kredit2 = new Darlehen(); kredit2.Auszahlungstag = new LocalDateTime(2016, 1, 1, 12, 0); kredit2.Faelligkeitstag = new LocalDateTime(2045, 12, 31, 0, 0); kredit2.Summe = 50000; kredit2.Zinszeitraeume.Add( new Zinsfestschreibung(kredit2.Auszahlungstag, kredit2.Faelligkeitstag, zinssatz)); kredit2.Anfangstilgung = 0.05; kredit2.Zahlungsperiode = Period.FromMonths(1); kredit2.BeginnTilgung = kredit2.Auszahlungstag + kredit2.Zahlungsperiode; kredit2.BeginnZinsZahlung = kredit2.Auszahlungstag + kredit2.Zahlungsperiode; kredit2.Tilgungen.Add(new Tilgungszahlung(2000, new LocalDateTime(2016, 2, 18, 12, 0))); kredit2.Prioritaet = 0; Finanzierung fina = new Finanzierung(); fina.Quellen.Add(kredit); fina.Quellen.Add(kredit2); Tilgungsplan.BerechneTilgungsplanFesteAnnuitaet(fina); foreach (Darlehen dar in fina.Quellen) { Console.WriteLine(String.Format("Tilgungsplan Darlehen Summe {0}EUR", dar.Summe.ToString("F2"))); foreach (Annuitaet ann in dar.Annuitaeten) { Console.WriteLine(String.Format( "{0} Darlehen: {1} EUR Tilgung: {2} EUR Zinsen: {3} EUR Annuität: {4} EUR" , ann.Zahlungsdatum.ToString() , ann.DarlehenssumeVorZahlung.ToString("F2").PadLeft(10) , ann.Gesamttilgung.ToString("F2").PadLeft(10) , ann.Zins.Zins.ToString("F2").PadLeft(10) , (ann.Gesamttilgung + ann.Zins.Zins).ToString("F2").PadLeft(10))); } } Console.ReadKey(); }
public override object Clone() { Darlehen klon = new Darlehen(); klon.Initialisiere(this); return klon; }
public DarlehenPlotModel(Core.Darlehen darlehen) { // TODO: Complete member initialization this.darlehen = darlehen; var timeAxis = new DateTimeAxis { StringFormat = "yyyy-MM-dd" }; timeAxis.Title = UIStrings.Datum; var linearAxis = new LinearAxis(); linearAxis.StringFormat = "C1"; linearAxis.Title = UIStrings.Gesamtbetrag; linearAxis.Unit = System.Globalization.RegionInfo.CurrentRegion.CurrencySymbol; var linearAxis2 = new LinearAxis(); linearAxis2.StringFormat = "C1"; linearAxis2.Title = UIStrings.Gesamtbetrag; linearAxis2.Unit = System.Globalization.RegionInfo.CurrentRegion.CurrencySymbol; linearAxis2.Position = AxisPosition.Right; linearAxis2.Key = "Secondary"; linearAxis2.Minimum = 0.0; this.Axes.Add(timeAxis); this.Axes.Add(linearAxis); this.Axes.Add(linearAxis2); List<ValuePoint> pointsAnnuitaet = new List<ValuePoint>(); List<ValuePoint> pointsZinsen = new List<ValuePoint>(); List<ValuePoint> pointsRegelm = new List<ValuePoint>(); foreach(Annuitaet ann in this.darlehen.Annuitaeten) { if (ann.AnnuitaetGesamt > 0.0) { pointsAnnuitaet.Add(new ValuePoint { Date = ann.Zahlungsdatum.ToDateTimeUnspecified() , Value = ann.AnnuitaetGesamt , TrackerValue = ann.AnnuitaetGesamt , DateString = ann.Zahlungsdatum.ToDateTimeUnspecified().ToString("yyyy-MM-dd") }); } if (ann.Zins.Zins > 0.0) { pointsZinsen.Add(new ValuePoint { Date = ann.Zahlungsdatum.ToDateTimeUnspecified(), Value = ann.Zins.Zins, TrackerValue = ann.Zins.Zins, DateString = ann.Zahlungsdatum.ToDateTimeUnspecified().ToString("yyyy-MM-dd") }); } if (ann.GesamtRegelmTilgung > 0.0) { pointsRegelm.Add(new ValuePoint { Date = ann.Zahlungsdatum.ToDateTimeUnspecified(), Value = ann.GesamtRegelmTilgung, TrackerValue = ann.GesamtRegelmTilgung, DateString = ann.Zahlungsdatum.ToDateTimeUnspecified().ToString("yyyy-MM-dd") }); } } LineSeries seriesAnnuitaet = new LineSeries() { ItemsSource = pointsAnnuitaet, Title = UIStrings.Annuitaet, CanTrackerInterpolatePoints = false, DataFieldX = "Date", DataFieldY = "Value", YAxisKey = "Secondary" }; LineSeries seriesZinsen = new LineSeries() { ItemsSource = pointsZinsen, Title = UIStrings.Zinsen, CanTrackerInterpolatePoints = false, DataFieldX = "Date", DataFieldY = "Value" }; LineSeries seriesRegelm = new LineSeries() { ItemsSource = pointsRegelm, Title = UIStrings.regelmTilgung, CanTrackerInterpolatePoints = false, DataFieldX = "Date", DataFieldY = "Value" }; this.Series.Add(seriesAnnuitaet); this.Series.Add(seriesZinsen); this.Series.Add(seriesRegelm); }
public static Tilgungsplan BerechnePlanFesteAnnuitaet(Darlehen kredit) { Tilgungsplan plan = new Tilgungsplan(); plan.Kredit = kredit; ////Annuität aus Anfangstilgung berechnen bool weiterRechnen = true; Annuitaet aktuelleAnnuitaet = null; Annuitaet letzteAnnuitaet = null; ////Erste Annuitaet besetzen var tilgungVorBeginn = kredit.Tilgungen.Where(an => an.Zeitpunkt <= kredit.BeginnTilgung); if (aktuelleAnnuitaet == null) { aktuelleAnnuitaet = new Annuitaet(); } aktuelleAnnuitaet.Zahlungsdatum = kredit.BeginnTilgung; aktuelleAnnuitaet.DarlehenssumeVorZahlung = kredit.Summe; double effZins = kredit.Zinszeitraeume[0].GetZinssatzProPeriode(kredit.Auszahlungstag, aktuelleAnnuitaet.Zahlungsdatum); aktuelleAnnuitaet.Zins = new Zinszahlung(effZins, kredit.Summe, aktuelleAnnuitaet.Zahlungsdatum); plan.FesteAnnuitaet = aktuelleAnnuitaet.Zins.Zins + (kredit.Summe * kredit.Anfangstilgung) / 12.0; aktuelleAnnuitaet.Tilgungen.Add(new Tilgungszahlung(plan.FesteAnnuitaet - aktuelleAnnuitaet.Zins.Zins, aktuelleAnnuitaet.Zahlungsdatum)); foreach (Tilgungszahlung tilg in tilgungVorBeginn) { ////Sondertilgungen werden mit der Annuität gemeinsam verrechnet tilg.Zeitpunkt = aktuelleAnnuitaet.Zahlungsdatum; aktuelleAnnuitaet.Tilgungen.Add(tilg); } kredit.Annuitaeten.Add(aktuelleAnnuitaet); LocalDateTime zahlungLetzteAnnuitaet = aktuelleAnnuitaet.Zahlungsdatum; letzteAnnuitaet = aktuelleAnnuitaet; while (weiterRechnen) { LocalDateTime zahlungsDatumDieseAnnuitaet = zahlungLetzteAnnuitaet + kredit.Zahlungsperiode; Zinsfestschreibung aktuelleFestschreibung = kredit.Zinszeitraeume.FirstOrDefault(an => an.ZeitpunktFestschreibung <= zahlungsDatumDieseAnnuitaet && an.ZeitpunktAuslauf >= zahlungsDatumDieseAnnuitaet); if (aktuelleFestschreibung == null) { throw new ArgumentOutOfRangeException("Keine Zinsfestschreibung für Annuität vom " + zahlungsDatumDieseAnnuitaet.ToString() + " gefunden!"); } ////Sondertilgungen seit letzter Annuitaet ermitteln tilgungVorBeginn = kredit.Tilgungen.Where(an => an.Zeitpunkt <= zahlungsDatumDieseAnnuitaet && an.Zeitpunkt > zahlungLetzteAnnuitaet); aktuelleAnnuitaet = new Annuitaet(); aktuelleAnnuitaet.Zahlungsdatum = zahlungsDatumDieseAnnuitaet; aktuelleAnnuitaet.DarlehenssumeVorZahlung = letzteAnnuitaet.DarlehenssummeNachZahlung; aktuelleAnnuitaet.Zins = new Zinszahlung(aktuelleFestschreibung.GetZinssatzProPeriode(zahlungLetzteAnnuitaet, aktuelleAnnuitaet.Zahlungsdatum), aktuelleAnnuitaet.DarlehenssumeVorZahlung, aktuelleAnnuitaet.Zahlungsdatum); Tilgungszahlung annuitaetsTilgung = new Tilgungszahlung(plan.FesteAnnuitaet - aktuelleAnnuitaet.Zins.Zins, aktuelleAnnuitaet.Zahlungsdatum); aktuelleAnnuitaet.Tilgungen.Add(annuitaetsTilgung); double betragSondertilgungen = 0; foreach (Tilgungszahlung tilg in tilgungVorBeginn) { ////Sondertilgungen werden mit der Annuität gemeinsam verrechnet tilg.Zeitpunkt = aktuelleAnnuitaet.Zahlungsdatum; aktuelleAnnuitaet.Tilgungen.Add(tilg); betragSondertilgungen += tilg.Betrag; } kredit.Annuitaeten.Add(aktuelleAnnuitaet); if (aktuelleAnnuitaet.DarlehenssummeNachZahlung < 0) { annuitaetsTilgung.Betrag = letzteAnnuitaet.DarlehenssummeNachZahlung - betragSondertilgungen; weiterRechnen = false; } else if (aktuelleAnnuitaet.DarlehenssummeNachZahlung == 0) { weiterRechnen = false; } letzteAnnuitaet = aktuelleAnnuitaet; zahlungLetzteAnnuitaet = letzteAnnuitaet.Zahlungsdatum; } return plan; }
private void MoveFinaQuelleUp(Darlehen dar) { Finanzierung.PrioritaetErhoehen(this.Fina, dar); this.QuellenVS.SortDescriptions.Add(new SortDescription("Prioritaet", ListSortDirection.Ascending)); this.QuellenVS.View.Refresh(); }
public void AddFinaQuelle(Finanzierung fina, double finanzierungsluecke) { Darlehen dar = new Darlehen(); dar.Summe = finanzierungsluecke; int naechstePrio = 0; ////Nächst höhere Priorität ermitteln if (fina.Quellen.Count > 0) { naechstePrio = fina.Quellen.Max(da => da.Prioritaet); naechstePrio++; dar.Prioritaet = naechstePrio; } var viewModel = new EigenschaftenDarlehenViewModel(dar); var window = new EigenschaftenDarlehenView(); window.Owner = App.window; window.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; EventHandler handler = null; handler = delegate { viewModel.RequestClose -= handler; window.Close(); }; viewModel.RequestClose += handler; window.DataContext = viewModel; window.ShowDialog(); if (viewModel.DialogResult == true) { fina.Quellen.Add(dar); } }
public static void PrioritaetErhoehen(Finanzierung fina, Darlehen dar) { int aktuellePrio = dar.Prioritaet; int naechstHoeherPrio = int.MaxValue; Darlehen naechsthoeheresDarlehen = null; int aktuelleDiff = int.MaxValue; foreach (Darlehen da in fina.Quellen) { if (da.Prioritaet < aktuellePrio && (aktuellePrio - da.Prioritaet <= aktuelleDiff)) { aktuelleDiff = aktuellePrio - da.Prioritaet; naechstHoeherPrio = da.Prioritaet; naechsthoeheresDarlehen = da; } } if (naechsthoeheresDarlehen != null) { naechsthoeheresDarlehen.Prioritaet = aktuellePrio; dar.Prioritaet = naechstHoeherPrio; } fina.Quellen.OrderBy(da => da.Prioritaet); }
public static Finanzierung GetKombinierterKredit3(Finanzierung fina) { int prioritaet = 0; Darlehen kreditA = new Darlehen(); kreditA.Bezeichnung = "Kredit A"; LocalDateTime auszahlungstag = new LocalDateTime(2016, 1, 1, 12, 0); LocalDateTime faelligkeitsTag = new LocalDateTime(2045, 1, 1, 0, 0); kreditA.Auszahlungstag = auszahlungstag; kreditA.Faelligkeitstag = faelligkeitsTag; kreditA.Summe = 170000.0; kreditA.Zinszeitraeume.Add( new Zinsfestschreibung(kreditA.Auszahlungstag, kreditA.Faelligkeitstag, 0.002)); kreditA.Anfangstilgung = 0.0198; kreditA.Zahlungsperiode = Period.FromMonths(1); kreditA.BeginnTilgung = kreditA.Auszahlungstag + kreditA.Zahlungsperiode; kreditA.BeginnZinsZahlung = kreditA.Auszahlungstag + kreditA.Zahlungsperiode; kreditA.Tilgungen.Add(new Tilgungszahlung(20000, kreditA.BeginnTilgung + kreditA.Zahlungsperiode)); for (int i = 16; i <= 40; i++) { kreditA.Tilgungen.Add(new Tilgungszahlung(3000, new LocalDateTime(2000 + i, 12, 1, 12, 0))); } kreditA.Prioritaet = prioritaet; fina.Quellen.Add(kreditA); prioritaet++; Darlehen kreditBank = new Darlehen(); kreditBank.Bezeichnung = "Bankdarlehen"; kreditBank.Auszahlungstag = auszahlungstag; kreditBank.Faelligkeitstag = faelligkeitsTag; kreditBank.Summe = 203240.85; kreditBank.Zinszeitraeume.Add( new Zinsfestschreibung(kreditBank.Auszahlungstag, kreditBank.Faelligkeitstag, 0.0116)); kreditBank.Anfangstilgung = 0.03; kreditBank.Zahlungsperiode = Period.FromMonths(1); kreditBank.BeginnTilgung = kreditBank.Auszahlungstag + kreditBank.Zahlungsperiode; kreditBank.BeginnZinsZahlung = kreditBank.Auszahlungstag + kreditBank.Zahlungsperiode; kreditBank.Prioritaet = prioritaet; fina.Quellen.Add(kreditBank); prioritaet++; //Darlehen kreditKfW124 = new Darlehen(); //kreditKfW124.Bezeichnung = "KfW 124"; //kreditKfW124.Auszahlungstag = auszahlungstag; //kreditKfW124.Faelligkeitstag = faelligkeitsTag; //kreditKfW124.Summe = 50000; //kreditKfW124.Zinszeitraeume.Add( // new Zinsfestschreibung(kreditKfW124.Auszahlungstag, kreditKfW124.Faelligkeitstag, 0.0146)); //kreditKfW124.Anfangstilgung = 0.0242; //kreditKfW124.Zahlungsperiode = Period.FromMonths(1); //kreditKfW124.BeginnTilgung = kreditKfW124.Auszahlungstag + kreditKfW124.Zahlungsperiode; //kreditKfW124.BeginnZinsZahlung = kreditKfW124.Auszahlungstag + kreditKfW124.Zahlungsperiode; //kreditKfW124.Prioritaet = prioritaet; //fina.Quellen.Add(kreditKfW124); //prioritaet++; Darlehen kreditKfW153 = new Darlehen(); kreditKfW153.Bezeichnung = "KfW 153"; kreditKfW153.Auszahlungstag = auszahlungstag; kreditKfW153.Faelligkeitstag = faelligkeitsTag; kreditKfW153.Summe = 50000; kreditKfW153.Zinszeitraeume.Add( new Zinsfestschreibung(kreditKfW153.Auszahlungstag, kreditKfW153.Faelligkeitstag, 0.01)); kreditKfW153.Anfangstilgung = 0.0297; kreditKfW153.Zahlungsperiode = Period.FromMonths(1); kreditKfW153.BeginnTilgung = kreditKfW153.Auszahlungstag + kreditKfW153.Zahlungsperiode; kreditKfW153.BeginnZinsZahlung = kreditKfW153.Auszahlungstag + kreditKfW153.Zahlungsperiode; kreditKfW153.Prioritaet = prioritaet; prioritaet++; fina.Quellen.Add(kreditKfW153); Tilgungsplan.BerechneTilgungsplanFesteAnnuitaet(fina); return fina; }