Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }