private void BtnCrearUsuario_Click(object sender, EventArgs e)
        {
            using (FrmUsuario FormCrearUsuario = new FrmUsuario())
            {
                FormCrearUsuario.ShowDialog();

                if (FormCrearUsuario.DialogResult == DialogResult.OK)
                {
                    string InformacionDelError = string.Empty;

                    ClsUsuarios Usuarios            = new ClsUsuarios();
                    Usuario     AgregarNuevoUsuario = new Usuario();

                    AgregarNuevoUsuario = Usuarios.LeerPorNumero(-1, ClsUsuarios.EUsuarioABuscar.UltimoAgregardo, ref InformacionDelError);

                    if (AgregarNuevoUsuario != null)
                    {
                        int NumeroDeFila = dgvDatosUsuarios.Rows.Add();

                        dgvDatosUsuarios.Rows[NumeroDeFila].Cells[(int)ENumColDGVUsuarios.ID_Usuario].Value  = AgregarNuevoUsuario.ID_Usuario;
                        dgvDatosUsuarios.Rows[NumeroDeFila].Cells[(int)ENumColDGVUsuarios.Nick].Value        = AgregarNuevoUsuario.Nick;
                        dgvDatosUsuarios.Rows[NumeroDeFila].Cells[(int)ENumColDGVUsuarios.Nombre].Value      = AgregarNuevoUsuario.Nombre;
                        dgvDatosUsuarios.Rows[NumeroDeFila].Cells[(int)ENumColDGVUsuarios.Apellido].Value    = AgregarNuevoUsuario.Apellido;
                        dgvDatosUsuarios.Rows[NumeroDeFila].Cells[(int)ENumColDGVUsuarios.Perfil].Value      = AgregarNuevoUsuario.Perfil.Nombre;
                        dgvDatosUsuarios.Rows[NumeroDeFila].Cells[(int)ENumColDGVUsuarios.Seleccionar].Value = false;

                        dgvDatosUsuarios.Sort(dgvDatosUsuarios.Columns[(int)ENumColDGVUsuarios.Perfil], ListSortDirection.Descending);
                    }
                }
            }
        }
        private void DgvDatosUsuarios_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            DataGridView DetectarTipoCasilla = (DataGridView)sender;

            if (e.RowIndex != -1 && !(DetectarTipoCasilla.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn))
            {
                using (FrmValidarUsuario VerificarDueñoUsuario = new FrmValidarUsuario((int)dgvDatosUsuarios.Rows[e.RowIndex].Cells[(int)ENumColDGVUsuarios.ID_Usuario].Value))
                {
                    if (FrmInicioSesion.ObtenerInstancia().G_ID_UsuarioInicioSesion != (int)ClsPerfiles.EPerfiles.Administrador)
                    {
                        VerificarDueñoUsuario.ShowDialog();
                    }
                    else
                    {
                        VerificarDueñoUsuario.DialogResult = DialogResult.OK;
                    }

                    if (VerificarDueñoUsuario.DialogResult == DialogResult.OK)
                    {
                        using (FrmUsuario FormCargarUsuario = new FrmUsuario((int)dgvDatosUsuarios.Rows[e.RowIndex].Cells[(int)ENumColDGVUsuarios.ID_Usuario].Value, rbnUsuariosActivos.Checked))
                        {
                            FormCargarUsuario.ShowDialog();

                            if (FormCargarUsuario.DialogResult == DialogResult.OK)
                            {
                                string InformacionDelError = string.Empty;

                                ClsUsuarios Usuarios          = new ClsUsuarios();
                                Usuario     ActualizarEdicion = new Usuario();

                                ActualizarEdicion = Usuarios.LeerPorNumero((int)dgvDatosUsuarios.Rows[e.RowIndex].Cells[(int)ENumColDGVUsuarios.ID_Usuario].Value, ClsUsuarios.EUsuarioABuscar.PorID, ref InformacionDelError);

                                if (ActualizarEdicion != null)
                                {
                                    dgvDatosUsuarios.Rows[e.RowIndex].Cells[(int)ENumColDGVUsuarios.ID_Usuario].Value = ActualizarEdicion.ID_Usuario;
                                    dgvDatosUsuarios.Rows[e.RowIndex].Cells[(int)ENumColDGVUsuarios.Nick].Value       = ActualizarEdicion.Nick;
                                    dgvDatosUsuarios.Rows[e.RowIndex].Cells[(int)ENumColDGVUsuarios.Nombre].Value     = ActualizarEdicion.Nombre;
                                    dgvDatosUsuarios.Rows[e.RowIndex].Cells[(int)ENumColDGVUsuarios.Apellido].Value   = ActualizarEdicion.Apellido;
                                    dgvDatosUsuarios.Rows[e.RowIndex].Cells[(int)ENumColDGVUsuarios.Perfil].Value     = ActualizarEdicion.Perfil.Nombre;

                                    dgvDatosUsuarios.Sort(dgvDatosUsuarios.Columns[(int)ENumColDGVUsuarios.Perfil], ListSortDirection.Descending);
                                }
                                else
                                {
                                    MessageBox.Show($"{InformacionDelError}", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                }

                                UltimaFilaSeleccionada = -1;
                            }
                        }
                    }
                }
            }
        }
        public void CargaDatosEditarUsuario()
        {
            btnAceptar.Visible        = false;
            btnGuardarCambios.Visible = true;

            Perfil PerfilSeleccionado = (Perfil)cmbPerfil.SelectedItem;

            string InformacionDelError = string.Empty;

            ClsUsuarios Usuarios       = new ClsUsuarios();
            Usuario     UsuarioAEditar = new Usuario();

            UsuarioAEditar = Usuarios.LeerPorNumero(ID_Usuario, ClsUsuarios.EUsuarioABuscar.PorID, ref InformacionDelError);

            if (UsuarioAEditar != null)
            {
                txtNick.Text            = UsuarioAEditar.Nick;
                txtNombre.Text          = UsuarioAEditar.Nombre;
                txtApellido.Text        = UsuarioAEditar.Apellido;
                txtContraseña.Text      = UsuarioAEditar.Contraseña;
                cmbPerfil.SelectedValue = UsuarioAEditar.ID_Perfil;

                if (UsuarioAEditar.ID_Perfil == (int)ClsPerfiles.EPerfiles.Gerente)
                {
                    cmbPerfil.Enabled = false;
                }
            }
            else if (InformacionDelError == string.Empty)
            {
                MessageBox.Show($"Error al intentar cargar el usuario a editar", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Close();
            }
            else
            {
                MessageBox.Show($"{InformacionDelError}", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Close();
            }
        }
        /// <summary>Actualiza el estado del usuario a activo/inactivo.</summary>
        /// <param name="_EstadoUsuario">Enum que contrendra el numero del tipo de estado.</param>
        private void ActualizarEstadoUsuario(ClsEstadosUsuarios.EEstadosUsuarios _EstadoUsuario)
        {
            ClsUsuarios Usuarios          = new ClsUsuarios();
            Usuario     ActualizarUsuario = new Usuario();

            int TotalDeFilas = dgvDatosUsuarios.Rows.Count;

            for (int Indice = 0; Indice < TotalDeFilas; Indice++)
            {
                //Pregunto si la celda es diferente a null
                if (dgvDatosUsuarios.Rows[Indice].Cells[(int)ENumColDGVUsuarios.Seleccionar].Value != null)
                {
                    //Casteo el check del objeto a booleano y pregunto si es true
                    if ((bool)dgvDatosUsuarios.Rows[Indice].Cells[(int)ENumColDGVUsuarios.Seleccionar].Value)
                    {
                        string InformacionDelError = string.Empty;

                        // Verificacion de que el usuario no este asignado a una mesa actualmente
                        bool UsuarioConMesaAsignada = false;

                        if (_EstadoUsuario == ClsEstadosUsuarios.EEstadosUsuarios.Inactivo)
                        {
                            UsuarioConMesaAsignada = BuscarUsuariosAtendiendoMesa(Indice);
                        }

                        ActualizarUsuario = Usuarios.LeerPorNumero((int)dgvDatosUsuarios.Rows[Indice].Cells[(int)ENumColDGVUsuarios.ID_Usuario].Value, ClsUsuarios.EUsuarioABuscar.PorID, ref InformacionDelError);
                        ActualizarUsuario.ID_EstadoUsuario = (int)_EstadoUsuario;

                        if (!UsuarioConMesaAsignada)
                        {
                            //impedir eliminar perfiles gerentes
                            if (ActualizarUsuario.ID_Perfil != (int)ClsPerfiles.EPerfiles.Gerente)
                            {
                                if (Usuarios.Actualizar(ActualizarUsuario, ref InformacionDelError) != 0)
                                {
                                    dgvDatosUsuarios.Rows.Remove(dgvDatosUsuarios.Rows[Indice]);
                                    Indice       -= 1;
                                    TotalDeFilas -= 1;
                                }
                                else if (InformacionDelError == string.Empty)
                                {
                                    MessageBox.Show($"Error al intentar eliminar el usuario", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                }
                                else
                                {
                                    MessageBox.Show($"{InformacionDelError}", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                }
                            }
                            else
                            {
                                using (FrmInformacion FormInformacion = new FrmInformacion($"El usuario '{ActualizarUsuario.Nombre}' no se puede eliminar ya que es un gerente.", ClsColores.Blanco, 150, 300))
                                {
                                    FormInformacion.ShowDialog();
                                }
                            }
                        }
                        else
                        {
                            using (FrmInformacion FormInformacion = new FrmInformacion($"El usuario '{ActualizarUsuario.Nombre} {ActualizarUsuario.Apellido}' no se puede eliminar ya que " +
                                                                                       $"se detecto que esta asignado a una mesa, cambie el usuario que desea eliminar por otro mozo en la " +
                                                                                       $"pantalla de mesas e intente nuevamente.", ClsColores.Blanco, 200, 350))
                            {
                                FormInformacion.ShowDialog();
                            }
                        }
                    }
                }
            }
        }