/// <summary> /// Method for setting bell notification on creation of homeworks /// </summary> /// <param name="homeWork"></param> /// <param name="currentUser"></param> /// <param name="instituteId"></param> /// <returns></returns> private async Task SendBellNotificationOnHomewordCreation(AddHomeworkManagementAc homeWork, ApplicationUser currentUser, int instituteId) { StaffBasicPersonalInformation homeWorkCreatedByStaff = await _iMSDbContext.StaffBasicPersonalInformation .FirstOrDefaultAsync(x => x.UserId == currentUser.Id); List <StudentBasicInformation> recipientStudentsList = await _iMSDbContext.StudentBasicInformation .Where(x => x.CurrentClassId == homeWork.ClassId && x.SectionId == homeWork.SectionId && x.IsActive && !x.IsArchived) .ToListAsync(); NotificationAc notificationAc = new NotificationAc { NotificationMessage = "Homework", NotificationTo = null, NotificationUserMappingsList = new List <NotificationUserMappingAc>() }; // For students notificationAc.NotificationDetails = string.Format("Homework: Complete assignment dated {0}", homeWork.HomeworkDate.ToString("dd-MM-yyyy")); foreach (StudentBasicInformation recipientStudent in recipientStudentsList) { notificationAc.NotificationUserMappingsList.Add(new NotificationUserMappingAc { UserId = recipientStudent.UserId }); } await _notificationManagementRepository.AddNotificationAsync(notificationAc, instituteId, currentUser); notificationAc.NotificationUserMappingsList = new List <NotificationUserMappingAc>(); if (homeWorkCreatedByStaff != null) { InstituteClass instituteClass = await _iMSDbContext.InstituteClasses .Include(x => x.Institute) .FirstAsync(x => x.Id == homeWork.ClassId); // To self notificationAc.NotificationDetails = string.Format("You have added homework for {0}", instituteClass.Name); notificationAc.NotificationUserMappingsList.Add(new NotificationUserMappingAc { UserId = homeWorkCreatedByStaff.UserId }); await _notificationManagementRepository.AddNotificationAsync(notificationAc, instituteId, currentUser); notificationAc.NotificationUserMappingsList = new List <NotificationUserMappingAc>(); // To the admin notificationAc.NotificationDetails = string.Format("{0} has added homework for {1}", homeWorkCreatedByStaff.FirstName, instituteClass.Name); notificationAc.NotificationUserMappingsList.Add(new NotificationUserMappingAc { UserId = instituteClass.Institute.AdminId }); await _notificationManagementRepository.AddNotificationAsync(notificationAc, instituteId, currentUser); notificationAc.NotificationUserMappingsList = new List <NotificationUserMappingAc>(); } }
/// <summary> /// Method to add or update homework - SS /// </summary> /// <param name="homeWork">home work</param> /// <param name="loggedInUser">logged in user</param> /// <returns>response</returns> public async Task <HomeworkManagementResponse> AddOrUpdateHomeworkAsync(AddHomeworkManagementAc homeWork, ApplicationUser loggedInUser) { var instituteId = await _instituteUserMappingHelperService.GetUserCurrentSelectedInstituteIdAsync(loggedInUser.Id, true); if (!await _iMSDbContext.StaffBasicPersonalInformation.AnyAsync(x => x.Id == homeWork.StaffId && x.InstituteId == instituteId)) { return new HomeworkManagementResponse() { Message = "Staff not found", HasError = true, ErrorType = HomeworkManagementReponseType.StaffId } } ; else if (!await _iMSDbContext.InstituteClasses.AnyAsync(x => x.Id == homeWork.ClassId && x.InstituteId == instituteId)) { return new HomeworkManagementResponse() { Message = "Class not found", HasError = true, ErrorType = HomeworkManagementReponseType.ClassId } } ; else if (!await _iMSDbContext.Sections.AnyAsync(x => x.Id == homeWork.SectionId && x.InstituteId == instituteId)) { return new HomeworkManagementResponse() { Message = "Section not found", HasError = true, ErrorType = HomeworkManagementReponseType.SectionId } } ; else { var subjectIds = homeWork.HomeworkSubjectMappings.Select(x => x.SubjectId).Distinct().ToList(); var subjectCount = await _iMSDbContext.InstituteClassSubjectMappings.CountAsync(x => subjectIds.Contains(x.SubjectId) && x.ClassId == homeWork.ClassId && x.FacultyId == homeWork.StaffId || x.AlternateFacultyId == homeWork.StaffId); if (subjectIds.Count != subjectCount) { return new HomeworkManagementResponse() { Message = "Subject not found", HasError = true, ErrorType = HomeworkManagementReponseType.SubjectId } } ; else { var homeworkTexts = homeWork.HomeworkSubjectMappings.Select(x => x.HomeworkData).ToList(); if (homeworkTexts.Any(x => string.IsNullOrEmpty(x.Trim()))) { return new HomeworkManagementResponse() { Message = "Home can't be empty", HasError = true, ErrorType = HomeworkManagementReponseType.HomeworkData } } ; else { var homework = await _iMSDbContext.Homeworks.FirstOrDefaultAsync(x => x.ClassId == homeWork.ClassId && x.StaffId == homeWork.StaffId && x.SectionId == homeWork.SectionId && x.HomeworkDate == homeWork.HomeworkDate); if (homework == null) { homework = new Homework() { ClassId = homeWork.ClassId, CreatedOn = DateTime.UtcNow, HomeworkDate = homeWork.HomeworkDate, SectionId = homeWork.SectionId, StaffId = homeWork.StaffId, UpdatedById = loggedInUser.Id, UpdatedOn = DateTime.UtcNow }; _iMSDbContext.Homeworks.Add(homework); await _iMSDbContext.SaveChangesAsync(); } else { homework.UpdatedById = loggedInUser.Id; homework.UpdatedOn = DateTime.UtcNow; _iMSDbContext.Homeworks.Update(homework); await _iMSDbContext.SaveChangesAsync(); var previousHomeWorkSubjects = await _iMSDbContext.HomeworkSubjectMappings.Where(x => x.HomeworkId == homework.Id).ToListAsync(); if (previousHomeWorkSubjects.Count != 0) { using (var db = await _iMSDbContext.Database.BeginTransactionAsync()) { await _iMSDbContext.BulkDeleteAsync(previousHomeWorkSubjects); db.Commit(); } } } List <HomeworkSubjectMapping> homeworkSubjects = new List <HomeworkSubjectMapping>(); foreach (var homeworkSubject in homeWork.HomeworkSubjectMappings) { homeworkSubjects.Add(new HomeworkSubjectMapping() { CreatedOn = DateTime.UtcNow, HomeworkData = homeworkSubject.HomeworkData, HomeworkId = homework.Id, IsSelected = homeworkSubject.IsSelected, SubjectId = homeworkSubject.SubjectId }); } using (var db = await _iMSDbContext.Database.BeginTransactionAsync()) { await _iMSDbContext.BulkInsertAsync(homeworkSubjects); db.Commit(); } // Set bell notification await SendBellNotificationOnHomewordCreation(homeWork, loggedInUser, instituteId); return(new HomeworkManagementResponse() { HasError = false, Message = "Homework updated successfully", Data = new { Id = homework.Id } }); } } } }
public async Task <IActionResult> AddOrUpdateHomeworkAsync([FromBody] AddHomeworkManagementAc addHomework) { var user = await _userManager.FindByNameAsync(User.Identity.Name); return(Ok(await _homeworkManagementRepository.AddOrUpdateHomeworkAsync(addHomework, user))); }