public async Task Guardar() { if (!funciones.ValidatePIN("Empeño")) { return; } double pagoIntereses = double.Parse(txtPagaInteres.Text); double pagoMonto = double.Parse(txtPagaMonto.Text); double montoPendiente = double.Parse(txtMontoAPagar.Text); if (pagoMonto < montoPendiente) { if ((pagoMonto > 0) && (empeño.Intereses.Sum(i => i.Monto) > (empeño.Intereses.Sum(i => i.Pagado) + pagoIntereses))) { MessageBox.Show("Para abonar a la prenda debe pagar todos los intereses pendientes de " + montoMinimo.ToString("N2"), "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } var empleadoId = await funciones.GetEmpleadoIdByUser(Program.Usuario.Usuario); double montoIntereses = double.Parse(txtInteresAPagar.Text); if (pagoMonto > montoPendiente) { txtPagaMonto.Text = txtMontoAPagar.Text; pagoMonto = double.Parse(txtPagaMonto.Text); } if (pagoIntereses > montoIntereses) { txtPagaInteres.Text = txtInteresAPagar.Text; pagoIntereses = double.Parse(txtPagaInteres.Text); } empeño = null; var empeñoTemp = _context.Empenos.Find(empeñoId); if ((pagoMonto > 0 && pagoMonto < montoPendiente) && (pagoIntereses < montoMinimo - 1)) { MessageBox.Show("Para abonar a la prenda debe pagar todos los intereses pendientes de " + montoMinimo.ToString("N2"), "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (pagoMonto > 0) { var pago = new Pago { EmpenoId = empeñoTemp.EmpenoId, Consecutivo = GetConsecutivo(), Comentario = txtComentario.Text == "Comentario" ? string.Empty : txtComentario.Text, EmpleadoId = Program.EmpleadoId, Fecha = DateTime.Now, Monto = pagoMonto, TipoPago = TipoPago.Principal, }; _context.Pago.Add(pago); await _context.SaveChangesAsync(); await funciones.SaveBitacora(new ValorBitacora { Valor = JsonConvert.SerializeObject(pago), Modulo = "Pagos", Accion = "Crear" }); empeñoTemp.MontoPendiente -= pago.Monto; if (empeñoTemp.MontoPendiente < 1) { var pagoInteres = await SetPagaInteres(pagoIntereses, false); empeñoTemp.Estado = Estado.Cancelado; empeñoTemp.Retirado = true; empeñoTemp.FechaRetiro = DateTime.Today; _context.Intereses.RemoveRange(_context.Intereses.Where(i => i.EmpenoId == empleadoId && i.Pagado == 0)); _context.Entry(empeñoTemp).State = EntityState.Modified; await _context.SaveChangesAsync(); if (pagoInteres == null) { await PrintRetiro(empeñoTemp, pago); } else { await PrintRetiro(empeñoTemp, pago, pagoInteres); } } else { empeñoTemp.Estado = Estado.Vigente; _context.Entry(empeñoTemp).State = EntityState.Modified; await _context.SaveChangesAsync(); await PagaInteres(pagoIntereses, true); await PrintAbono(empeñoTemp, pago); } } else { await PagaInteres(pagoIntereses, true); } await _context.SaveChangesAsync(); this.Close(); }