public async Task PagaInteres(double pagoIntereses, bool print = true) { empeño = await _context.Empenos.FindAsync(empeñoId); if (pagoIntereses > 0) { var pago = new Pago { EmpenoId = empeño.EmpenoId, Consecutivo = GetConsecutivo(), Comentario = txtComentario.Text, EmpleadoId = Program.EmpleadoId, Fecha = DateTime.Now, Monto = pagoIntereses, TipoPago = TipoPago.Interes, }; _context.Pago.Add(pago); await _context.SaveChangesAsync(); await funciones.SaveBitacora(new ValorBitacora { Valor = JsonConvert.SerializeObject(pago), Modulo = "Pagos", Accion = "Crear" }); List <Intereses> intereses = new List <Intereses>(); var sobrante = pago.Monto; var listInteres = await _context.Intereses.Where(i => i.EmpenoId == pago.EmpenoId && i.Pagado < i.Monto).ToListAsync(); foreach (var item in listInteres) { if ((item.Monto - item.Pagado) > sobrante && sobrante > 0) { item.Pagado += sobrante; if (item.Pagado >= Math.Truncate(item.Monto)) { empeño.FechaVencimiento = empeño.FechaVencimiento.AddMonths(1); item.Monto = item.Pagado; item.FechaPago = DateTime.Now; } item.PagoId = pago.PagoId; _context.Entry(item).State = EntityState.Modified; await _context.SaveChangesAsync(); Intereses valorTemp = new Intereses { EmpenoId = item.EmpenoId, FechaCreacion = item.FechaCreacion, FechaVencimiento = item.FechaVencimiento, FechaPago = item.FechaPago, InteresesId = item.InteresesId, Monto = item.Monto, Pagado = sobrante, PagoId = item.PagoId }; intereses.Add(valorTemp); break; } else if (sobrante > 0) { double paga = (item.Monto - item.Pagado); item.Pagado += paga; if (item.Pagado >= Math.Truncate(item.Monto)) { empeño.FechaVencimiento = empeño.FechaVencimiento.AddMonths(1); item.Monto = item.Pagado; item.FechaPago = DateTime.Now; } item.PagoId = pago.PagoId; sobrante -= paga; _context.Entry(item).State = EntityState.Modified; await _context.SaveChangesAsync(); Intereses valorTemp = new Intereses { EmpenoId = item.EmpenoId, FechaCreacion = item.FechaCreacion, FechaVencimiento = item.FechaVencimiento, FechaPago = item.FechaPago, InteresesId = item.InteresesId, Monto = item.Monto, MontoBodega = item.MontoBodega, MontoInteres = item.MontoInteres, Pagado = paga, PagoId = item.PagoId }; intereses.Add(valorTemp); } } await funciones.SaveBitacora(new ValorBitacora { Valor = JsonConvert.SerializeObject(intereses), Modulo = "Intereses", Accion = "Crear" }); var id = empeño.EmpenoId; await funciones.ReviewEmpeño(id); empeño = null; using (DataContext contextTemp = new DataContext()) { empeño = await contextTemp.Empenos.FindAsync(id); if (print) { await PrintInteres(empeño, intereses, pago); } } } }