예제 #1
0
        public HaushaltsbuchEinzeln Zahlung(Transaktion transaktion)
        {
            Locker locker   = new Locker();
            bool   isLocked = true;

            do
            {
                locker.Check_for_locked(
                    () => {
                    isLocked = false;
                    locker.Lock_starten();
                },
                    () => {
                    isLocked = true;
                    locker.Warten();
                }
                    );
            } while (isLocked);


            TransaktionenRepository transaktionenRepository = new TransaktionenRepository();
            KassenbestandRepository kassenbestandRepository = new KassenbestandRepository();
            HaushaltsbuchRechner    rechner = new HaushaltsbuchRechner();

            decimal kassenbestand = kassenbestandRepository.Lade();

            Transaktionstyp_pruefen(transaktion.Typ,
                                    onEinzahlung: () =>
            {
                kassenbestand = rechner.Kassenbestand_verringern(kassenbestand, transaktion.Wert);
            },
                                    onAuszahlung: () =>
            {
                kassenbestand = rechner.Kassenbestand_erhoehen(kassenbestand, transaktion.Wert);
            }
                                    );

            transaktionenRepository.Speichern(transaktion);
            kassenbestandRepository.Speichern(kassenbestand);
            locker.Lock_beenden();

            var transaktionen = transaktionenRepository.Transaktionen_laden_by_Datum_and_Kategorie(transaktion.Datum, transaktion.Kategorie);
            var gesamtbetrag  = rechner.Kategorie_Gesamtbetrag_berechnen(transaktionen);

            Kategorie            kategorie = new Kategorie(transaktion.Kategorie, gesamtbetrag);
            HaushaltsbuchEinzeln dtoModel  = new HaushaltsbuchEinzeln(kassenbestand, kategorie, transaktion.Typ);

            return(dtoModel);
        }