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 Entfernen(string kontokorrentId, BenutzerID benutzerID)
        {
            var eintraege = await _kontokorrentContext.BenutzerKontokorrent.Where(v => v.BenutzerId == benutzerID.Id && v.KontokorrentId == kontokorrentId)
                            .ToArrayAsync();

            foreach (var eintrag in eintraege)
            {
                _kontokorrentContext.BenutzerKontokorrent.Remove(eintrag);
            }
            await _kontokorrentContext.SaveChangesAsync();
        }
示例#3
0
        public async Task <Models.Person> PersonHinzufuegen(string name, string kontokorrentId, BenutzerID?benutzer)
        {
            var p = new EFV2.Person()
            {
                Name           = name,
                KontokorrentId = kontokorrentId,
                Id             = Guid.NewGuid().ToString()
            };

            kontokorrentContext.Person.Add(p);
            try
            {
                await kontokorrentContext.SaveChangesAsync();
            }
            catch (DbUpdateException e)
            {
                var inner = e.InnerException as SqliteException;
                if (null != inner && 19 == inner.SqliteErrorCode)
                {
                    throw new NameExistsException();
                }
            }
            return(new Models.Person()
            {
                Name = name,
                Id = p.Id
            });
        }
        public async Task Create(NeuerBenutzerRequest request)
        {
            if (!string.IsNullOrEmpty(request.OeffentlicherName))
            {
                if (!await _kontokorrentContext.Kontokorrent.AnyAsync(v => v.OeffentlicherName == request.OeffentlicherName))
                {
                    throw new KontokorrentNotFoundException();
                }
            }
            if (!string.IsNullOrEmpty(request.EinladungsCode))
            {
                if (!await _kontokorrentContext.EinladungsCode.AnyAsync(v => v.Id == request.EinladungsCode))
                {
                    throw new KontokorrentNotFoundException();
                }
            }
            string hashedSecret;

            using (SHA256 sha256Hash = SHA256.Create())
            {
                byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(request.Secret));
                hashedSecret = Convert.ToBase64String(bytes);
            }
            await _kontokorrentContext.BenutzerSecret.AddAsync(new BenutzerSecret()
            {
                BenutzerId   = request.Id,
                HashedSecret = hashedSecret
            });

            await _kontokorrentContext.SaveChangesAsync();

            var benutzerId = new Models.BenutzerID(request.Id);

            if (!string.IsNullOrEmpty(request.OeffentlicherName))
            {
                await _kontokorrentsService.HinzufuegenPerOeffentlicherName(request.OeffentlicherName, benutzerId);
            }
            else if (!string.IsNullOrEmpty(request.EinladungsCode))
            {
                await _kontokorrentsService.HinzufuegenPerCode(request.EinladungsCode, benutzerId);
            }
        }