private void button1_Click(object sender, EventArgs e) { try { DialogResult resp = MessageBox.Show($"Esta seguro que desea realizar el abono por el MONTO: {txtAbono.Text} al CLIENTE: { txtIdCliente.Text}-{txtCliente.Text }", "Aplicar abono", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (resp == DialogResult.Yes) { docsModificados.Clear(); if (Utility.isNumeroDecimal(txtAbono.Text) && txtAbono.Text != string.Empty) { decimal montoAdeudado = decimal.Parse(txtAdeudado.Text); decimal montoAbono = decimal.Parse(txtAbono.Text); if ((montoAdeudado - montoAbono) >= 0) { foreach (tbDocumento doc in docsGlobal) { abonosModificados.Clear(); decimal abono = (decimal)doc.tbAbonos.Sum(x => x.monto); decimal totalFact = (decimal)doc.tbDetalleDocumento.Sum(x => x.totalLinea); decimal adeudadoFact = 0; //calculo el total adeudado actual adeudadoFact = totalFact - abono; tbAbonos abonoE = new tbAbonos(); abonoE.idDoc = doc.id; abonoE.tipoDoc = doc.tipoDocumento; abonoE.estado = true; abonoE.fecha_crea = Utility.getDate(); abonoE.fecha_ult_mod = Utility.getDate(); abonoE.usuario_crea = Global.Usuario.nombreUsuario.Trim().ToUpper(); // Global.Usuario.nombreUsuario; abonoE.usuario_ult_mod = Global.Usuario.nombreUsuario.Trim().ToUpper(); // Global.Usuario.nombreUsuario; //verifica si el abono es mayor a lo adeudado, para poner en 0 y cancelar la factura if (montoAbono >= adeudadoFact) { abonoE.monto = adeudadoFact; doc.estadoFactura = (int)Enums.EstadoFactura.Cancelada; doc.fecha_ult_mod = Utility.getDate(); doc.usuario_ult_mod = Global.Usuario.nombreUsuario.Trim().ToUpper(); // Global.Usuario.nombreUsuario; } else { //sino abona lo indicado abonoE.monto = montoAbono; } abonosModificados.Add(abonoE); doc.tbAbonos.Add(abonoE); docsModificados.Add(doc); montoAdeudado -= (decimal)abonoE.monto; montoAbono -= (decimal)abonoE.monto; if (montoAbono <= 0) { break; } } if (docsModificados.Count() != 0) { facturacionB.guadarFacturaAbonos(docsModificados); MessageBox.Show("Datos guardados correctamente.", "Guardar", MessageBoxButtons.OK, MessageBoxIcon.Information); txtAbono.Text = string.Empty; txtFacturado.Text = string.Empty; txtPendiente.Text = string.Empty; chkTodos.Checked = false; cargarDatosCliente(); if (chkImprimir.Checked) { clsImpresionFactura imprimir = new clsImpresionFactura(docsModificados, clienteGlobal, Global.Usuario.tbEmpresa, decimal.Parse(txtAdeudado.Text)); imprimir.print(); } } } else { MessageBox.Show("Se esta abonando más de lo adeudado", "Error de monto ", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } else { MessageBox.Show("El dato de abono es incorrecto, favor verifique.", "Error de datos", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } catch (Exception ex) { MessageBox.Show("Se produjo un error al realizar el abono, vuelva a intentarlo.", "Error al realizar el abono", MessageBoxButtons.OK, MessageBoxIcon.Error); } }