public async Task <Models.Aktion> BezahlungBearbeiten(BenutzerID?benutzer, string kontokorrentId, string id, GeaenderteBezahlung request) { if (benutzer.HasValue && !await kontokorrentsService.HasAccess(benutzer.Value, kontokorrentId)) { return(null); } var payment = kontokorrentV2Context.Aktionen.Where(v => v.KontokorrentId == kontokorrentId && v.BezahlungId == id) .Select(v => v.Bezahlung) .SingleOrDefault(); if (null == payment) { return(null); } await CheckEditierbar(id); var personIds = request.BezahlendePersonId != null?request.EmpfaengerIds.Union(new[] { request.BezahlendePersonId }) : request.EmpfaengerIds; await CheckPersons(personIds, kontokorrentId); var aktion = new EFV2.Aktion() { KontokorrentId = kontokorrentId, BearbeiteteBezahlungId = id, Bezahlung = new EFV2.Bezahlung() { Id = Guid.NewGuid().ToString(), Beschreibung = request.Beschreibung, BezahlendePersonId = request.BezahlendePersonId != null ? request.BezahlendePersonId : payment.BezahlendePersonId, Emfpaenger = request.EmpfaengerIds.Select(p => new EmfpaengerInBezahlung() { EmpfaengerId = p }).ToList(), Wert = request.Wert, Zeitpunkt = request.Zeitpunkt.UtcDateTime, }, LaufendeNummer = await NeueLaufNummer(kontokorrentId) }; kontokorrentV2Context.Aktionen.Add(aktion); await kontokorrentV2Context.SaveChangesAsync(); var b = await kontokorrentV2Context.Bezahlung .Include(v => v.BezahlendePerson) .Include(v => v.Emfpaenger) .ThenInclude(v => v.Empfaenger) .Where(b => b.Id == aktion.Bezahlung.Id).SingleAsync(); return(new Models.Aktion() { GeloeschteBezahlungId = null, BearbeiteteBezahlungId = aktion.BearbeiteteBezahlungId, Bezahlung = MapBezahlung(b), LaufendeNummer = aktion.LaufendeNummer }); }
public async Task <Models.Aktion> BezahlungHinzufuegen(BenutzerID?benutzer, string kontokorrentId, NeueBezahlung bezahlung) { if (benutzer.HasValue && !await kontokorrentsService.HasAccess(benutzer.Value, kontokorrentId)) { return(null); } var personIds = bezahlung.EmpfaengerIds.Union(new[] { bezahlung.BezahlendePersonId }); await CheckPersons(personIds, kontokorrentId); var sem = locks.GetOrAdd(kontokorrentId, new SemaphoreSlim(1)); try { await sem.WaitAsync(); var a = new EFV2.Aktion() { KontokorrentId = kontokorrentId, LaufendeNummer = await NeueLaufNummer(kontokorrentId), Bezahlung = new EFV2.Bezahlung() { Beschreibung = bezahlung.Beschreibung, BezahlendePersonId = bezahlung.BezahlendePersonId, Emfpaenger = bezahlung.EmpfaengerIds.Select(p => new EmfpaengerInBezahlung() { EmpfaengerId = p }).ToList(), Id = bezahlung.Id ?? Guid.NewGuid().ToString(), Wert = bezahlung.Wert, Zeitpunkt = bezahlung.Zeitpunkt.UtcDateTime, } }; kontokorrentV2Context.Aktionen.Add(a); await kontokorrentV2Context.SaveChangesAsync(); var b = await kontokorrentV2Context.Bezahlung .Include(v => v.BezahlendePerson) .Include(v => v.Emfpaenger) .ThenInclude(v => v.Empfaenger) .Where(b => b.Id == a.Bezahlung.Id).SingleAsync(); return(new Models.Aktion() { GeloeschteBezahlungId = null, BearbeiteteBezahlungId = null, Bezahlung = MapBezahlung(b), LaufendeNummer = a.LaufendeNummer }); } finally { sem.Release(); } }
public async Task <Models.Aktion> BezahlungLoeschen(BenutzerID?benutzer, string kontokorrentId, string id) { if (benutzer.HasValue && !await kontokorrentsService.HasAccess(benutzer.Value, kontokorrentId)) { return(null); } var b = await kontokorrentV2Context.Aktionen.Where(p => p.KontokorrentId == kontokorrentId && p.BezahlungId == id).SingleOrDefaultAsync(); if (null == b) { return(null); } await CheckEditierbar(id); var sem = locks.GetOrAdd(b.KontokorrentId, new SemaphoreSlim(1)); try { await sem.WaitAsync(); var loeschung = new EFV2.Aktion() { KontokorrentId = kontokorrentId, GeloeschteBezahlungId = id, LaufendeNummer = await NeueLaufNummer(b.KontokorrentId) }; kontokorrentV2Context.Aktionen.Add(loeschung); await kontokorrentV2Context.SaveChangesAsync(); return(new Models.Aktion() { LaufendeNummer = loeschung.LaufendeNummer, GeloeschteBezahlungId = loeschung.GeloeschteBezahlungId }); } finally { sem.Release(); } }