Ejemplo n.º 1
0
            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;
            }
Ejemplo n.º 2
0
        public string EmailBody(string message)
        {
            EmailModel Model = new EmailModel();

            Model.Content = message;

            string content = _renderer.RenderViewToString(Model.EmailTemplate, Model);

            return(content);
        }
Ejemplo n.º 3
0
        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));
        }