public async Task <StudentExtraHours> UpdateStudentExtraHours(StudentExtraHours data, IPrincipal currentUser) { var claims = ((ClaimsIdentity)currentUser.Identity).Claims; var oldRecord = await _db.StudentExtraHours.FirstOrDefaultAsync(x => x.Id == data.Id); if (oldRecord.UserCreatedUniqueId != data.UserCreatedUniqueId && Int32.Parse(claims.First(x => x.Type.Contains("level_id")).Value) >= 3) { throw new UnauthorizedAccessException("You can only edit the records you created."); } data.Version++; data.CreateDate = DateTime.Now; data.Reason = null; return(await CreateStudentExtraHours(data)); }
public async Task <StudentExtraHours> CreateStudentExtraHours(StudentExtraHours data) { var currentStudent = await _db.StudentHighestAbsenceCourseCount .Where(x => x.StudentUniqueId == data.StudentUniqueId).AsNoTracking().FirstOrDefaultAsync(); if (currentStudent == null) { throw new FormatException($"The Student Id: {data.StudentUniqueId} doesn't exist."); } data.FirstName = currentStudent.FirstName; data.LastSurname = currentStudent.LastSurname; data.SchoolYear = currentStudent.SchoolYear.Value; data.GradeLevel = currentStudent.GradeLevel; using (var transaction = _db.Database.BeginTransaction()) { if (data.StudentExtraHoursId != 0) { await _db.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT [student360].[StudentExtraHours] On"); } _db.StudentExtraHours.Add(data); await _db.SaveChangesAsync(); if (data.StudentExtraHoursId != 0) { await _db.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT [student360].[StudentExtraHours] Off"); } await transaction.CommitAsync(); } return(data); }