private async Task <LimitsConditionsClause> GetAccessTermLimitsConditionsClause(Enrollee enrollee) { var lastNote = await _context.AccessAgreementNotes .Where(n => n.EnrolleeId == enrollee.Id) .OrderByDescending(n => n.CreatedTimeStamp) .FirstOrDefaultAsync(); var newClause = new LimitsConditionsClause { EnrolleeId = enrollee.Id, Clause = null, EffectiveDate = new DateTimeOffset() }; if (lastNote != null) { newClause = new LimitsConditionsClause { EnrolleeId = lastNote.EnrolleeId, Clause = lastNote.Note, EffectiveDate = new DateTimeOffset() }; _context.LimitsConditionsClauses.Add(newClause); await _context.SaveChangesAsync(); } return(newClause); }
public async Task CreateEnrolleeAgreementAsync(int enrolleeId) { var dto = await _context.Enrollees .AsNoTracking() .Where(e => e.Id == enrolleeId) .Select(e => new { NewestAssignedAgreement = e.Submissions .OrderByDescending(s => s.CreatedDate) .Select(s => s.AgreementType) .FirstOrDefault(), e.AccessAgreementNote }) .SingleAsync(); if (dto.NewestAssignedAgreement == null) { throw new InvalidOperationException("Agreement type is required to approve an enrollee"); } var agreement = new Agreement { EnrolleeId = enrolleeId, AgreementVersionId = await FetchNewestAgreementVersionIdOfType(dto.NewestAssignedAgreement.Value), LimitsConditionsClause = LimitsConditionsClause.FromAgreementNote(dto.AccessAgreementNote), CreatedDate = DateTimeOffset.Now }; _context.Add(agreement); await _context.SaveChangesAsync(); }