public async Task <IActionResult> Send(int id) { Usuario user = await _userManager.GetUserAsync(HttpContext.User); Informativo info = _context.Informativo .Include(q => q.Attachments) .Include(q => q.Doadores) .ThenInclude(q => q.Doador) .Include(q => q.Usuario) .Include(q => q.Usuarios) .ThenInclude(q => q.Usuario) .Include(q => q.Voluntarios) .ThenInclude(q => q.Voluntario) .SingleOrDefault(q => q.Id == id && q.IdUsuario == user.Id); if (info == null) { return(new BadRequestResult()); } //envia List <string> emails = (info.Doadores.Select(q => q.Doador.Email) .Union(info.Usuarios.Select(q => q.Usuario.Email)) .Union(info.Voluntarios.Select(q => q.Voluntario.Email))).ToList(); List <MimePart> attachments = new List <MimePart>(); foreach (var a in info.Attachments) { attachments.Add(a.GetMimePart(_environment.WebRootPath)); } _emailSender.SendEmailAsync(emails, info.Subject, info.Body, attachments); //apaga tudo try { foreach (var a in attachments) { a.ContentObject.Stream.Dispose(); } var attachmentsPath = Path.Combine(_environment.WebRootPath, "attachment", id.ToString()); System.IO.Directory.Delete(attachmentsPath, true); } catch { } _context.Informativo.Remove(info); _context.SaveChanges(); //cria um novo info = new Informativo() { Subject = "", Usuario = user, Body = "", Doadores = new List <InformativoDoador>(), Usuarios = new List <InformativoUsuario>(), Voluntarios = new List <InformativoVoluntario>() }; _context.Informativo.Add(info); _context.SaveChanges(); InformativoDTO infoDto = new InformativoDTO() { Id = info.Id, Subject = info.Subject, Body = info.Body, DoadoresFisicos = new List <DoadorDTO>(), DoadoresJuridicos = new List <DoadorDTO>(), Usuarios = new List <UsuarioDTO>(), Voluntarios = new List <VoluntarioDTO>() }; return(new ObjectResult(infoDto)); }
public async Task <InformativoDTO> Get() { Usuario user = await _userManager.GetUserAsync(HttpContext.User); Informativo info = _context.Informativo .Include(q => q.Attachments) .Include(q => q.Doadores) .ThenInclude(q => q.Doador) .Include(q => q.Usuario) .Include(q => q.Usuarios) .ThenInclude(q => q.Usuario) .Include(q => q.Voluntarios) .ThenInclude(q => q.Voluntario) .Where(q => q.IdUsuario == user.Id) .SingleOrDefault(); if (info == null) { info = new Informativo() { Subject = "", Usuario = user, Body = "", Doadores = new List <InformativoDoador>(), Usuarios = new List <InformativoUsuario>(), Voluntarios = new List <InformativoVoluntario>(), Attachments = new List <Attachment>() }; _context.Informativo.Add(info); _context.SaveChanges(); } InformativoDTO infoDto = new InformativoDTO() { Id = info.Id, Subject = info.Subject, Body = info.Body, DoadoresFisicos = new List <DoadorDTO>(), DoadoresJuridicos = new List <DoadorDTO>(), Usuarios = info.Usuarios.Select(q => new UsuarioDTO() { Id = q.Usuario.Id, Nome = q.Usuario.Nome, Email = q.Usuario.Email }).ToList(), Voluntarios = info.Voluntarios.Select(q => new VoluntarioDTO() { Id = q.Voluntario.Id, Nome = q.Voluntario.Nome, Email = q.Voluntario.Email }).ToList(), Attachments = info.Attachments.Select(q => new AttachmentDTO() { Id = q.Id, FileName = q.FileName }).ToList() }; foreach (var d in info.Doadores) { if (d.Doador.GetType() == typeof(PessoaFisica)) { infoDto.DoadoresFisicos.Add(new DoadorDTO() { Id = d.CodDoador, Email = d.Doador.Email, NomeRazaoSocial = ((PessoaFisica)d.Doador).Nome }); } else { infoDto.DoadoresJuridicos.Add(new DoadorDTO() { Id = d.CodDoador, Email = d.Doador.Email, NomeRazaoSocial = ((PessoaJuridica)d.Doador).RazaoSocial }); } } return(infoDto); }
public async Task <IActionResult> Put(int id, [FromBody] InformativoDTO infoDTO) { if (id != infoDTO.Id) { return(new StatusCodeResult(StatusCodes.Status400BadRequest)); } Usuario user = await _userManager.GetUserAsync(HttpContext.User); Informativo info = _context.Informativo .Include(q => q.Attachments) .Include(q => q.Doadores) .ThenInclude(q => q.Doador) .Include(q => q.Usuario) .Include(q => q.Usuarios) .ThenInclude(q => q.Usuario) .Include(q => q.Voluntarios) .ThenInclude(q => q.Voluntario) .Where(q => q.IdUsuario == user.Id && q.Id == id) .SingleOrDefault(); if (info == null) { return(new BadRequestResult()); } info.Subject = infoDTO.Subject; info.Body = infoDTO.Body; if (infoDTO.Usuarios == null) { infoDTO.Usuarios = new List <UsuarioDTO>(); } if (infoDTO.Voluntarios == null) { infoDTO.Voluntarios = new List <VoluntarioDTO>(); } if (infoDTO.DoadoresFisicos == null) { infoDTO.DoadoresFisicos = new List <DoadorDTO>(); } if (infoDTO.DoadoresJuridicos == null) { infoDTO.DoadoresJuridicos = new List <DoadorDTO>(); } if (info.Usuarios == null) { info.Usuarios = new List <InformativoUsuario>(); } if (info.Voluntarios == null) { info.Voluntarios = new List <InformativoVoluntario>(); } if (info.Doadores == null) { info.Doadores = new List <InformativoDoador>(); } var usersManter = from u in info.Usuarios join d in infoDTO.Usuarios on u.IdUsuario equals d.Id select u; //para remover foreach (var u in info.Usuarios.Except(usersManter).ToArray()) { info.Usuarios.Remove(u); } var usersAdd = infoDTO.Usuarios.Where(q => !info.Usuarios.Any(u => u.IdUsuario == q.Id)); //para adicionar foreach (var u in usersAdd) { InformativoUsuario iu = new InformativoUsuario() { IdInformativo = info.Id, IdUsuario = u.Id }; info.Usuarios.Add(iu); } var doadoresManter = (from u in info.Doadores join d in infoDTO.DoadoresFisicos on u.CodDoador equals d.Id select u).Union( from u in info.Doadores join d in infoDTO.DoadoresJuridicos on u.CodDoador equals d.Id select u); //para remover foreach (var u in info.Doadores.Except(doadoresManter).ToArray()) { info.Doadores.Remove(u); } var DoadoresAdd = infoDTO.DoadoresFisicos.Where(q => !info.Doadores.Any(u => u.CodDoador == q.Id)) .Union(infoDTO.DoadoresJuridicos.Where(q => !info.Doadores.Any(u => u.CodDoador == q.Id))); //para adicionar foreach (var u in DoadoresAdd) { InformativoDoador ind = new InformativoDoador() { IdInformativo = info.Id, CodDoador = u.Id }; info.Doadores.Add(ind); } var voluntariosManter = from u in info.Voluntarios join d in infoDTO.Voluntarios on u.IdVoluntario equals d.Id select u; //para remover foreach (var u in info.Voluntarios.Except(voluntariosManter).ToArray()) { info.Voluntarios.Remove(u); } //para adicionar var voluntarioAdd = infoDTO.Voluntarios.Where(q => !info.Voluntarios.Any(u => u.IdVoluntario == q.Id)); foreach (var u in voluntarioAdd) { InformativoVoluntario iv = new InformativoVoluntario() { IdInformativo = info.Id, IdVoluntario = u.Id }; info.Voluntarios.Add(iv); } try { _context.SaveChanges(); } catch { } return(new ObjectResult(infoDTO)); }