private void ZonaDePosicionamientoVista_Load(object sender, EventArgs e)
        {
            try
            {
                Bodegas                            = new List <Bodega>();
                ClasesAsociadas                    = new List <Clase>();
                ClasesDisponibles                  = new List <Clase>();
                ZonasDePosicionamientos            = new List <ZonaDePosicionamiento>();
                ZonasDePosicionamientoSeleccionado = new ZonaDePosicionamiento();
                VistaCargandosePorPrimeraVez?.Invoke(null, null);

                ImplementarSeleccionMultipleDeUnaLista(UiListaBodega, new ObjetoParaGuardarEnVista {
                    ListaDeCamposAMostrar = (new[] { "WAREHOUSE_ID" })
                });
                ImplementarSeleccionMultipleDeUnaLista(UiListaClasesDesponiblesZP, new ObjetoParaGuardarEnVista {
                    ListaDeCamposAMostrar = (new[] { "CLASS_ID", "CLASS_NAME" })
                });
                ImplementarSeleccionMultipleDeUnaVista(UiVistaClasesAsociadasZP);

                CargarOGuardarDisenios(UiVistaControlClasesAsociadasZP, false, InteraccionConUsuarioServicio.ObtenerUsuario(), GetType().Name);
                CargarOGuardarDisenios(UiVistaControlZonasDePosicionamiento, false, InteraccionConUsuarioServicio.ObtenerUsuario(), GetType().Name);
                ManejarFuncionDeSubFamilias(sender);
            }
            catch (Exception ex)
            {
                InteraccionConUsuarioServicio.Mensaje(ex.Message);
            }
        }
        private List <string> ObtenerListaDeClasesDesdeXlsx(IXLWorksheet hoja, out List <ZonaDePosicionamiento> listaZonaDePosicionamientos)
        {
            var listaDeErrores = new List <string>();

            listaZonaDePosicionamientos = new List <ZonaDePosicionamiento>();
            try
            {
                // Los indices siempre son 1, 2, 3 y 4 porque son las columnas del XLSX generado en la descarga de plantilla, la cual es la aceptada para la carga.
                const int indiceBodegas    = 1;
                const int indiceZona       = 2;
                const int indiceMandatorio = 3;
                const int indiceFamilia    = 4;

                // Almacena los registros de la plantilla en TablaIXL
                IXLTable tableClass = hoja.Table("Clases");

                var cantidadFilas = tableClass.RowCount();

                // Obtiene la fila de los encabezados
                var primeraFilaUsada = tableClass.FirstRowUsed();
                var fila             = primeraFilaUsada.RowUsed();

                // Baja una fila para leer la data
                fila = fila.RowBelow();
                var indice = 2;

                // Recorre las filas de la tabla sin contar el encabezado.
                for (int i = 1; i < cantidadFilas; i++)
                {
                    // Valida que las columnas tengan data

                    if (string.IsNullOrEmpty(fila.Cell(indiceBodegas).GetString()) || string.IsNullOrEmpty(fila.Cell(indiceZona).GetString()) || string.IsNullOrEmpty(fila.Cell(indiceMandatorio).GetString()) || string.IsNullOrEmpty(fila.Cell(indiceFamilia).GetString()))
                    {
                        var mensaje = $"La fila No.{indice} tiene campos vacios.";
                        listaDeErrores.Add(mensaje);
                    }
                    else
                    {
                        var zonaPosicionamiento = new ZonaDePosicionamiento
                        {
                            WAREHOUSE_CODE = fila.Cell(indiceBodegas).GetString()
                            ,
                            ZONE = fila.Cell(indiceZona).GetString()
                            ,
                            MANDATORY = (fila.Cell(indiceMandatorio).GetString().Equals("Si"))
                            ,
                            FAMILY = int.Parse(fila.Cell(indiceFamilia).GetString())
                        };
                        Console.WriteLine(zonaPosicionamiento);
                        // Agrega las clases encontradas en el XLSX a la lista de clases
                        listaZonaDePosicionamientos.Add(zonaPosicionamiento);
                    }

                    // Baja una fila para continuar leyendo el XLSX
                    fila = fila.RowBelow();
                    indice++;
                }
            }
            catch (Exception e)
            {
                InteraccionConUsuarioServicio.Alerta($"Error al leer la hoja de Familia: {e.Message}");
            }
            return(listaDeErrores);
        }