public void TakeBook(BookTakeDTO bookDTO) { MobileBookOfficeLogsDTO officeBookWithLogs; lock (takeBookLock) { officeBookWithLogs = _bookOfficesDbSet .Include(b => b.Book) .Include(b => b.BookLogs) .Where(b => b.OrganizationId == bookDTO.OrganizationId && b.Id == bookDTO.BookOfficeId) .Select(MapOfficebookWithLogsToDTO()) .FirstOrDefault(); ValidateTakeBook(bookDTO, officeBookWithLogs); BorrowBook(officeBookWithLogs, bookDTO); } var book = new TakenBookDTO { UserId = bookDTO.ApplicationUserId, OrganizationId = bookDTO.OrganizationId, BookOfficeId = bookDTO.BookOfficeId, OfficeId = officeBookWithLogs.OfficeId, Author = officeBookWithLogs.Author, Title = officeBookWithLogs.Title }; _asyncRunner.Run <IBooksNotificationService>(n => n.SendEmail(book), _uow.ConnectionName); }
public void SendEmail(TakenBookDTO takenBook) { var organizationName = _organizationsDbSet .Where(organization => organization.Id == takenBook.OrganizationId) .Select(organization => organization.ShortName) .FirstOrDefault(); var userEmail = _usersDbSet .Where(u => u.Id == takenBook.UserId) .Select(u => u.Email) .First(); var subject = Resources.Models.Books.Books.EmailSubject; var userNotificationSettingsUrl = _appSettings.UserNotificationSettingsUrl(organizationName); var bookUrl = _appSettings.BookUrl(organizationName, takenBook.BookOfficeId, takenBook.OfficeId); var emailTemplateViewModel = new BookTakenEmailTemplateViewModel(userNotificationSettingsUrl, takenBook.Title, takenBook.Author, bookUrl); var body = _mailTemplate.Generate(emailTemplateViewModel, EmailTemplateCacheKeys.BookTaken); _mailingService.SendEmail(new EmailDto(userEmail, subject, body)); }