private void btnAbonar_Click(object sender, EventArgs e) { try { if (Convert.ToDouble(txtDevuelta.Text) >= 0 && txtAbonar.Text != "0") //comprueba que devuelta sea mayor o igual a cero y que se haya introducido un monto a pagar { using (TransactionScope transact = new TransactionScope()) //uso de una transaccion por si algo falla { PagoDeudaTableAdapter adapterDeu = new PagoDeudaTableAdapter(); //objeto para usar los querys de tblPagoDeuda int idCliente = Convert.ToInt32(txtId.Text); //se almacena el id del cliente en una variable int decimal abono = Convert.ToDecimal(txtAbonar.Text); //se almacena la cantidad a abonar en una variable decimal adapterDeu.InsertarPD(idCliente, usuario.Id, DateTime.Now, MontoDebe, abono); //se inserta en tblPagoDeuda el cliente que realizó el pago, el usuario que lo atendió, la fecha, el monto que debía y el monto abonado adapterCli.ActualizarMontoC(idCliente, MontoDebe - abono); //se actualiza el monto que debe el cliente foreach (DataGridViewRow fila in dgvFacturas.Rows) //recorre cada fila del datagridview facturas { if (abono > 0) //si la cantidad a abonar es mayor a 0 { decimal deuda = Convert.ToDecimal(fila.Cells["clmAPagar"].Value.ToString()); //se almacena el valor de la deuda de la factura decimal pagado = Convert.ToDecimal(fila.Cells["clmPagado"].Value.ToString()); //se almacena el valor que se ha pagado de la factura int idFactura = Convert.ToInt32(fila.Cells["IdFactura"].Value.ToString()); //se almacena el id de la factura if (abono >= deuda) //si la cantidad a abonar es mayor o igual a la cantidad que se tiene de deuda de la factura { adapterFac.ActualizarPagoDeFac(deuda + pagado, idFactura, idCliente); //se actualiza el pago de la factura a lo mismo que se tenia que pagar abono -= deuda; //resta la cantidad que se pagó de esa factura a la cantidad a abonar } else//si abono es menor a la deuda { adapterFac.ActualizarPagoDeFac(pagado + abono, idFactura, idCliente); //se actualiza el pago de la factura agregando la cantidad a abonar restante abono = 0; //cantidad a abonar se queda en 0 } } else//si no hay mas que abonar { break;//se sale del recorrido de filass } } MessageBox.Show($"Abonado: RD$ {txtAbonar.Text} al cliente {cboNombre.Text}", "Pago de deuda", MessageBoxButtons.OK, MessageBoxIcon.Information); //notifica al usuario que se abonó al cliente por un mensaje log.Info($"El cliente con el id {idCliente} pagó un monto de {txtAbonar.Text} de una deuda total de {MontoDebe} atendido por el usuario {usuario.Nombre} {usuario.Apellidos}"); //registra que se realizó un pago de deuda al cliente _menu.CargarDashboard(); LimpiarTodo(); //se limpia todo transact.Complete(); //indica que se completó la transaccion } } else//si el dinero ingresado para pagar no es el suficiente { MessageBox.Show("Dinero pagado insuficiente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);//notifica al usuario que la cantidad que ingresó para pagar no es la suficiente txtPagado.Focus();//hace focus en el textbox pagado } } catch (Exception error) { log.Error($"Error: {error.Message}", error); MessageBox.Show($"Error: {error.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void btnFacturar_Click(object sender, EventArgs e) { try { bool estadoCliente = false; if (cboNombreCliente.Text == "" && cbxCliente.Checked == false) { estadoCliente = true; } else if ((cboNombreCliente.Text != "" && cbxCliente.Checked == true) && idCliente != 0) { estadoCliente = true; } if (estadoCliente && dgvProductos.Rows.Count > 0 && txtPago.Text != "") { decimal devuelta = Convert.ToDecimal(txtPago.Text) - Convert.ToDecimal(txtTotal.Text); txtDevuelta.Text = devuelta.ToString(); if (devuelta < 0 && cbxCliente.Checked == false) { auxBtnFactura = true; DialogResult resultado = MessageBox.Show("Debe introducir un cliente para procesar la factura que genera deuda\n¿Desea agregar un cliente?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (resultado == DialogResult.Yes) { cbxCliente.Checked = true; BloquearControles(); } else { btnFacturar.Enabled = false; txtPago.Focus(); } } else { using (TransactionScope transaction = new TransactionScope()) { if (devuelta < 0) { devuelta -= clienteDebe; adapterCli.ActualizarMontoC(idCliente, devuelta * -1); } FacturaTableAdapter adapterFac = new FacturaTableAdapter(); DetallesTableAdapter adapterDet = new DetallesTableAdapter(); adapterFac.InsertarF(DateTime.Now, idCliente, usuario.Id, Convert.ToDecimal(txtPago.Text), totalITBIS, Convert.ToDecimal(txtDescuento.Text), Convert.ToDecimal(txtTotal.Text)); int idFactura = Convert.ToInt32(adapterFac.IdMasGrandeF()); foreach (DataGridViewRow item in dgvProductos.Rows) { decimal numExis = Convert.ToDecimal(item.Cells[7].Value.ToString()) - Convert.ToDecimal(item.Cells[2].Value.ToString()); decimal descuento = Convert.ToDecimal(item.Cells[4].Value.ToString()); adapterPro.ActualizarExistenciasP(Convert.ToInt32(item.Cells[6].Value.ToString()), numExis); adapterDet.InsertarFD(idFactura, Convert.ToInt32(item.Cells[6].Value.ToString()), Convert.ToDecimal(item.Cells[1].Value.ToString()), Convert.ToInt32(item.Cells[2].Value.ToString()), Convert.ToDecimal(item.Cells[3].Value.ToString()), descuento); log.Info($"Se facturó una cantidad de {Convert.ToInt32(item.Cells[2].Value.ToString())} para el producto con el ID {Convert.ToInt32(item.Cells[6].Value.ToString())} con un precio de {Convert.ToDecimal(item.Cells[1].Value.ToString())} por el usuario {usuario.Nombre} {usuario.Apellidos} para la factura {idFactura}"); } log.Info($"{usuario.Nombre} {usuario.Apellidos} realizó la factura con el ID: {idFactura} para el cliente {idCliente}"); MessageBox.Show("Factura realizada correctamente", "Facturación"); _menu.CargarDashboard(); LimpiarTodo(); cboNombreCliente.Focus(); transaction.Complete(); } } } else { string mensaje = null; if (!estadoCliente) { mensaje = "Debe chequear el cliente\n"; } if (dgvProductos.Rows.Count <= 0) { mensaje += "Debe agregar productos\n"; } if (txtPago.Text == "") { mensaje += "Debe ingresar el monto a pagar"; } MessageBox.Show(mensaje, "Error al facturar"); } } catch (Exception error) { log.Error($"Error: {error.Message}", error); MessageBox.Show($"Error: {error.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }