public async Task <IActionResult> AddNewCircularNoticeAsync([FromBody] CircularNoticeAc addedCircularNoticeAc) { ApplicationUser currentUser = await _userManager.FindByNameAsync(User.Identity.Name); int currentUserInstituteId = await GetUserCurrentSelectedInstituteIdAsync(); return(Ok(await _circularNoticeManagementRepository.AddNewCircularNoticeAsync(currentUserInstituteId, addedCircularNoticeAc, currentUser))); }
/// <summary> /// Method for fetching a particular circular/notice by id - RS /// </summary> /// <param name="currentUserInstituteId"></param> /// <param name="noticeId"></param> /// <returns></returns> public async Task <CircularNoticeAc> GetCircularNoticeByIdAsync(int currentUserInstituteId, int noticeId) { CircularNotice circularNotice = await _imsDbContext.CircularNotices .Include(x => x.CircularNoticeRecipients) .FirstOrDefaultAsync(x => x.InstituteId == currentUserInstituteId && x.Id == noticeId); CircularNoticeAc circularNoticeAc = new CircularNoticeAc { Id = circularNotice.Id, Description = circularNotice.Description, Message = circularNotice.Message, NoticeDate = circularNotice.NoticeDate, NoticeTo = circularNotice.NoticeTo, NoticeToString = EnumHelperService.GetDescription(circularNotice.NoticeTo), NoticeType = circularNotice.NoticeType, NoticeTypeString = EnumHelperService.GetDescription(circularNotice.NoticeType), CircularNoticeRecipientsList = new List <CircularNoticeRecipientAc>() }; List <ApplicationUser> circularNoticeRecipientsList = await _imsDbContext.CircularNoticeRecipients .Where(x => x.CircularNoticeId == noticeId) .Include(x => x.Recipient) .Select(x => x.Recipient) .ToListAsync(); foreach (CircularNoticeRecipient circularNoticeRecipient in circularNotice.CircularNoticeRecipients) { circularNoticeAc.CircularNoticeRecipientsList.Add(new CircularNoticeRecipientAc { RecipientId = circularNoticeRecipient.RecipientId, RecipientName = circularNoticeRecipientsList.FirstOrDefault(x => x.Id == circularNoticeRecipient.RecipientId)?.Name, CircularNoticeId = circularNotice.Id, RecipientType = circularNoticeRecipient.RecipientType, RecipientTypeString = EnumHelperService.GetDescription(circularNoticeRecipient.RecipientType) }); } return(circularNoticeAc); }
/// <summary> /// Method for creating notification - RS /// </summary> /// <param name="instituteId"></param> /// <param name="currentUser"></param> /// <param name="circularNotice"></param> /// <returns></returns> private async Task AddNotificationsAsync(int instituteId, ApplicationUser currentUser, CircularNoticeAc circularNotice) { NotificationAc notificationAc = new NotificationAc { NotificationDetails = circularNotice.Description, NotificationMessage = circularNotice.Message, NotificationUserMappingsList = new List <NotificationUserMappingAc>() }; if (circularNotice.NoticeTo == NoticeToEnum.AllStaffs) { notificationAc.NotificationTo = NoticeToEnum.AllStaffs; } else if (circularNotice.NoticeTo == NoticeToEnum.AllStudents) { notificationAc.NotificationTo = NoticeToEnum.AllStudents; } else { notificationAc.NotificationTo = null; foreach (CircularNoticeRecipientAc recipient in circularNotice.CircularNoticeRecipientsList) { notificationAc.NotificationUserMappingsList.Add(new NotificationUserMappingAc { UserId = recipient.RecipientId }); } } await _notificationManagementRepository.AddNotificationAsync(notificationAc, instituteId, currentUser); }
/// <summary> /// Method for updating an existing circular/notice - RS /// </summary> /// <param name="currentUserInstituteId"></param> /// <param name="updatedCircularNoticeAc"></param> /// <returns></returns> public async Task <dynamic> UpdateCircularNoticeAsync(int currentUserInstituteId, CircularNoticeAc updatedCircularNoticeAc, ApplicationUser currentUser) { CircularNotice existingNotice = await _imsDbContext.CircularNotices.FirstOrDefaultAsync(x => x.Id == updatedCircularNoticeAc.Id && x.InstituteId == currentUserInstituteId); if (existingNotice == null) { return(new { Message = "No notice exists with this id", HasError = true }); } else { // Update notice existingNotice.Message = updatedCircularNoticeAc.Message; existingNotice.Description = updatedCircularNoticeAc.Description; existingNotice.NoticeDate = updatedCircularNoticeAc.NoticeDate; existingNotice.NoticeType = updatedCircularNoticeAc.NoticeType; existingNotice.NoticeTo = updatedCircularNoticeAc.NoticeTo; existingNotice.UpdatedById = currentUser.Id; _imsDbContext.CircularNotices.Update(existingNotice); await _imsDbContext.SaveChangesAsync(); // Update notice recipients List <CircularNoticeRecipient> noticeRecipientMappingsList = await _imsDbContext.CircularNoticeRecipients .Where(x => x.CircularNoticeId == existingNotice.Id).ToListAsync(); _imsDbContext.CircularNoticeRecipients.RemoveRange(noticeRecipientMappingsList); await _imsDbContext.SaveChangesAsync(); await AddNoticeRecipientsAsync(existingNotice.Id, updatedCircularNoticeAc.CircularNoticeRecipientsList); noticeRecipientMappingsList = await _imsDbContext.CircularNoticeRecipients.Include(s => s.Recipient) .Where(x => x.CircularNoticeId == existingNotice.Id).ToListAsync(); if (updatedCircularNoticeAc.IsNotificationSendingEnabled) { #region Send Mail/Message var tos = new List <EmailAddress>(); var messageRecipients = new List <string>(); foreach (var user in noticeRecipientMappingsList) { if (!string.IsNullOrEmpty(user.Recipient.Email)) { tos.Add(new EmailAddress() { Name = user.Recipient.Name, Address = user.Recipient.Email }); } else { messageRecipients.Add(user.Recipient.UserName); } } var emailConfiguration = await _imsDbContext.AdministrationEmailConfigurations.Include(s => s.Institute) .FirstOrDefaultAsync(x => x.InstituteId == existingNotice.InstituteId); if (emailConfiguration != null) { var path = Path.Combine(Directory.GetCurrentDirectory(), "MailTemplates"); var engine = new RazorLightEngineBuilder().UseFilesystemProject(path).UseMemoryCachingProvider().Build(); string resultFromFile = await engine.CompileRenderAsync("NotificationMail.cshtml", new CircularNoticeAc() { InstituteName = updatedCircularNoticeAc.InstituteName, Message = existingNotice.Message }); // Send Email var email = new EmailMessage() { Content = resultFromFile, ToAddresses = tos, FromAddresses = new List <EmailAddress>() { new EmailAddress() { Name = emailConfiguration.Institute.Name, Address = emailConfiguration.MailUserName } }, Subject = "Notice" }; _emailService.SendMail(email); } var recipient = string.Empty; foreach (var user in messageRecipients) { recipient += user; recipient += ","; } // Send SMS await _smsService.SendSms(recipient, existingNotice.Message); #endregion #region Add events for report generation await _eventManagementRepository.AddEventReportInfoAsync(currentUserInstituteId, updatedCircularNoticeAc.Description, EnumHelperService.GetDescription(updatedCircularNoticeAc.NoticeType), EnumHelperService.GetDescription(updatedCircularNoticeAc.NoticeTo), TemplateFormatEnum.Email); await _eventManagementRepository.AddEventReportInfoAsync(currentUserInstituteId, updatedCircularNoticeAc.Description, EnumHelperService.GetDescription(updatedCircularNoticeAc.NoticeType), EnumHelperService.GetDescription(updatedCircularNoticeAc.NoticeTo), TemplateFormatEnum.Sms); #endregion } // Add notification await AddNotificationsAsync(currentUserInstituteId, currentUser, updatedCircularNoticeAc); return(new { Message = EnumHelperService.GetDescription(existingNotice.NoticeType) + " updated successfully" }); } }