/// <summary> /// Method for deleting a notice - RS /// </summary> /// <param name="noticeId"></param> /// <param name="instituteId"></param> /// <returns></returns> public async Task <dynamic> DeleteCircularNoticeAsync(int noticeId, int instituteId) { CircularNotice circularNotice = await _imsDbContext.CircularNotices.FirstOrDefaultAsync(x => x.Id == noticeId && x.InstituteId == instituteId); if (circularNotice == null) { return(new { Message = "No notice exist with this id", HasError = true }); } else { // Delete recipients List <CircularNoticeRecipient> circularNoticeRecipientsList = await _imsDbContext.CircularNoticeRecipients .Where(x => x.CircularNoticeId == circularNotice.Id) .ToListAsync(); _imsDbContext.CircularNoticeRecipients.RemoveRange(circularNoticeRecipientsList); await _imsDbContext.SaveChangesAsync(); // Delete notice _imsDbContext.CircularNotices.Remove(circularNotice); await _imsDbContext.SaveChangesAsync(); return(new { Message = "Notice deleted successfully", HasError = false }); } }
/// <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 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" }); } }