public async Task SendEmailAsync(BookShare.Models.EmailTemplate email) { try { var testContent = ""; switch (email.Switch) { case "request": testContent = _renderer.RenderViewToString("BookRequest", email).GetAwaiter().GetResult(); break; case "forgotPassword": testContent = _renderer.RenderViewToString("PasswordRequest", email).GetAwaiter().GetResult(); break; } var message = new MimeMessage(); message.To.Add(new MailboxAddress(_smtpSettings.SenderName, _smtpSettings.SenderEmail)); message.From.Add(new MailboxAddress(email.Username, email.Email)); message.Subject = "New Book Request"; var builder = new BodyBuilder(); builder.HtmlBody = testContent; message.Body = builder.ToMessageBody(); using (var client = new SmtpClient()) { client.ServerCertificateValidationCallback = (s, c, h, e) => true; if (_env.IsDevelopment()) { await client.ConnectAsync(_smtpSettings.Server, _smtpSettings.Port, SecureSocketOptions.Auto); } else { await client.ConnectAsync(_smtpSettings.Server); } await client.AuthenticateAsync(_smtpSettings.Username, _smtpSettings.Password); await client.SendAsync(message); await client.DisconnectAsync(true); } } catch (Exception e) { throw new InvalidOperationException(e.Message); } await Task.CompletedTask; }
public string EmailBody(string message) { EmailModel Model = new EmailModel(); Model.Content = message; string content = _renderer.RenderViewToString(Model.EmailTemplate, Model); return(content); }
public async Task <IActionResult> Create([Bind("Fecha,ValeId,Medio,Monto,FechaTransferencia,RUT,ClienteId,Saldo,OficinaId")] PagoViewModel pago) { if (ModelState.IsValid && !String.IsNullOrEmpty(pago.Monto)) { var user = await _userManager.GetUserAsync(User); var plata = Convert.ToInt32(Regex.Replace(pago.Monto, "[^0-9]", "")); var cliente = _context.Cliente .Include(c => c.Vales) .ThenInclude(v => v.Cobros) .Single(c => c.Id == pago.ClienteId); var pagado = new Pago { Date = DateTime.Parse(pago.Fecha).Date, ApplicationUserId = user.Id, ClienteId = pago.ClienteId, Medio = pago.Medio, Monto = plata, Cliente = cliente, OficinaId = pago.OficinaId, Oficina = await _context.Oficina.SingleOrDefaultAsync(o => o.Id == pago.OficinaId) }; if (pago.Medio == Medio.Transferencia) { pagado.FechaTransferencia = DateTime.Parse(pago.FechaTransferencia).Date; pagado.RutTransferencia = Convert.ToInt32(String.Format(new InterceptProvider(), "{0:I}", pago.RUT)); } _context.Pago.Add(pagado); var vales = cliente.Vales.Where(v => v.State == State.Activo || v.State == State.Pendiente).OrderBy(v => v.Date); foreach (var v in vales) { var valePago = new ValePago { PagoId = pagado.Id, ValeId = v.Id }; _context.ValePagos.Add(valePago); var remanente = v.SubTotal - v.Pagado; if (plata > remanente) { plata -= remanente; v.Pagado = v.SubTotal; v.State = State.Pagado; _context.Vale.Update(v); } else if (plata == remanente) { v.Pagado = v.SubTotal; v.State = State.Pagado; _context.Vale.Update(v); break; } else if (plata < remanente) { v.Pagado += plata; v.State = State.Pendiente; _context.Vale.Update(v); break; } } var saldo = Convert.ToDouble(Regex.Replace(pago.Saldo, "[^0-9-]", "")); var vale = _context.Vale.Single(v => v.Id == pago.ValeId); _context.Vale.Update(vale); if (saldo == cliente.SaldosPendientes - pagado.Monto) { cliente.SaldosPendientes = Convert.ToInt32(Regex.Replace(pago.Saldo, "[^0-9-]", "")); _context.Cliente.Update(cliente); await _context.SaveChangesAsync(); var cobros = vales .SelectMany(v => v.Cobros) .Select(c => $@"<tr><td>{typeof(Honorario) .GetMember(c.Honorario.ToString()) .FirstOrDefault() .GetCustomAttribute<DisplayAttribute>(false) .Name}</td><td><i class=""fas fa-dollar-sign""></i></td><td style=""text-align:right"">" + c.Monto.ToString("C", CultureInfo.GetCultureInfo("es-CL")) + "</td></tr>"); //var cobrosList = new List<string> { }; //foreach(var c in cobros) //{ // cobrosList.Add($@"<tr><td>{typeof(Honorario) // .GetMember(c.Honorario.ToString()) // .FirstOrDefault() // .GetCustomAttribute<DisplayAttribute>(false) // .Name}</td><td><i class=""fas fa-dollar-sign""></i></td><td style=""text-align:right"">" + // c.Monto.ToString("C", CultureInfo.GetCultureInfo("es-CL")) + "</td></tr>"); //} var dlEmail = new BoletaEmail { Id = pagado.Id, Fecha = pagado.Date.ToString("dd-MM-yyyy"), Cobros = String.Join("", cobros), Emitidos = "", Saldos = "", Total = pagado.Monto.ToString("C", CultureInfo.GetCultureInfo("es-CL")), }; var renderer = new RazorViewToStringRenderer(_viewEngine, _tempDataProvider, _serviceProvider); var result = renderer.RenderViewToString("_BoletaEmail", dlEmail).GetAwaiter().GetResult(); await _emailSender.SendEmailAsync(user.Email, $@"BOLETA {pagado.Id}", result); return(RedirectToAction(nameof(Index))); } return(NotFound()); } var model = new PagoViewModel { }; model.Fecha = DateTime.Today.Date.ToString("dd-MM-yyyy"); model.FechaTransferencia = model.Fecha; model.MediosList = new SelectList(from Medio m in Enum.GetValues(typeof(Medio)) select new { Id = m, Name = m.ToString() }, "Id", "Name"); model.AvailableDates = String.Format("'{0}'", String.Join("','", _context.Vale .Where(v => v.State == State.Activo || v.State == State.Pendiente) .Select(v => v.Date.Date.ToString("yyyy-M-d")).Distinct().ToList())); return(View(model)); }