using Exferia_Aplicacion.General; using Exferia_Aplicacion.Visualizacion; using Exferia_Controles; using Exferia_EntityFramework; using Exferia_General; using Exferia_KairosPRO._4_Vistas.Controladoras; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using static Exferia_Aplicacion.General.Enumerados; using System.Linq; using Exferia_KairosPRO._1_Modelos; using Exferia_KairosPRO._4_Vistas.ListadosSeleccion; using Exferia_Formularios; using System.Threading; namespace Exferia_KairosPRO._4_Vistas { public partial class P_ArbolJerarquico : Exferia_Formularios.P_Base_Mantenimientos { #region Variables General private P_ArbolJerarquico_Controladora g_obj_Controladora; private bool g_bol_ConstructorPantalla_Terminado_Correctamente = true; public PRV_OpcionesDetalle g_mdl_PRV_OpcionesDetalle = null; internal List g_lst_INTERNO_Permisos_Modelo = null; public bool g_bol_BloquearPorCargaInicial_Empleados = false; private INTERNO_ConfiguracionPantalla_Modelo g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS = null; #endregion #region Objetos en Pantalla //Exferia_BarraProgreso internal Exferia_BarraProgreso Exferia_BarraProgreso_Empleados { get { return ex_pgb_P_ArbolJerarquico_Empleados; } } //Exferia_Button internal Exferia_Button Exferia_Button_Empleados_OrdenListado { get { return ex_btn_P_ArbolJerarquico_Empleados_OrdenListado; } } //Exferia_ComboBox internal Exferia_ComboBox Exferia_ComboBox_Empleados_OrdenListado { get { return ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado; } } //Exferia_DataGridView internal Exferia_DataGridView Exferia_DataGridView_Empleados { get { return ex_dgv_P_ArbolJerarquico_Empleados; } } //Exferia_TabControl internal Exferia_TabControl Exferia_TabControl_AusenciasProgramadasTipos { get { return ex_tbc_P_ArbolJerarquico_AusenciasProgramadasTipos; } } //Exferia_TreeView internal Exferia_TreeView Exferia_TreeView_Arbol { get { return ex_trv_P_ArbolJerarquico_Arbol; } } #endregion #region Constructor public P_ArbolJerarquico(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo, DateTime _dtt_FechaTrabajo, PRV_OpcionesDetalle _mdl_PRV_OpcionesDetalle) { InitializeComponent(); try { Repintar.Empezar(this); CheckForIllegalCrossThreadCalls = false; g_bol_BloquearPorCargaInicial_Empleados = true; //Comprobamos que el codigo cliente exista y este bien if (Variables.G_LNG_IDCLIENTE_LICENCIAVALIDADO.Equals(-1)) { //Tendriamos que avisar y no dejar abrir la pantalla Mensajes.MostrarMensaje(Mensajes.G_STR_LICENCIA_VALIDACIONES_LICENCIANOESTAACTIVA); Salir_P_Base(); } //Empresa seleccionada y fecha de trabajo .................................................... P_Base_ValoresGenerales = _mdl_INTERNO_ValoresGenerales_Modelo; P_Base_FechaTrabajo = _dtt_FechaTrabajo; //Instanciar Controladora g_obj_Controladora = new P_ArbolJerarquico_Controladora(this); //Datos de Opciones detalle g_mdl_PRV_OpcionesDetalle = _mdl_PRV_OpcionesDetalle; //Buscar los Permisos //g_lst_INTERNO_Permisos_Modelo = Datos_Generales.Permisos_Buscar(g_mdl_PRV_OpcionesDetalle.opcion); //Mirar si hay que bloquear los controles, si solo puede ver los datos if ((P_Base_TipoAperturaPantalla != 0 && Datos_Generales.Permisos_Comprobar(g_mdl_PRV_OpcionesDetalle.opcion, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Modificar, false)) == false) { //Bloqueo los Controles SoloLectura.Empezar(this, true); } //Titulo de la Pantalla ............................................................................ P_Base_TituloPantalla = _mdl_PRV_OpcionesDetalle.descripcion_TituloMantenimiento; if (Variables.G_DCT_CONFIGURACIONPANTALLA != null && Variables.G_DCT_CONFIGURACIONPANTALLA.Count > 0) { //Empleados if (Variables.G_DCT_CONFIGURACIONPANTALLA.ContainsKey(g_obj_Controladora.g_obj_ABS_Listado_KRS_Empleados_P_ArbolJerarquico.NOMBRELISTADO_ALMACENARCONFIGURACION())) { g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS = Variables.G_DCT_CONFIGURACIONPANTALLA[g_obj_Controladora.g_obj_ABS_Listado_KRS_Empleados_P_ArbolJerarquico.NOMBRELISTADO_ALMACENARCONFIGURACION()]; } } //Label con Empresa Seleccionada if (P_Base_ValoresGenerales != null) { try { P_Base_Mantenimientos_InformacionEmpresaSeleccionada = P_Base_ValoresGenerales.str_Empresa_Descripcion + " - " + "(" + P_Base_FechaTrabajo.ToString("dd/MM/yyyy") + ")"; } catch (Exception ex) { //No se muestra mensaje pero se guarda en el log Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(P_ArbolJerarquico)); } } //.................................................................................................................................. //Bloquear pantalla hasta que termine la carga por defecto..... Enabled = false; //............................................................. } catch (Control_Errores) { g_bol_ConstructorPantalla_Terminado_Correctamente = false; } catch (Exception ex) { g_bol_ConstructorPantalla_Terminado_Correctamente = false; Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(P_ArbolJerarquico)); } finally { //Bloquear pantalla hasta que termine la carga por defecto ..... Enabled = true; //............................................................. } } #endregion #region Inicio de pantalla private void P_ArbolJerarquico_Load(object sender, EventArgs e) { try { #region EMPELADOS //Crear Columnas Listado CrearColumnas_Listado_Empleados(); //Poner el tipo de orden si lo hubiera por defecto ###################################### if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_ORDEN_DIRECCION_PORDEFECTO != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_ORDEN_DIRECCION_PORDEFECTO.Trim().Length > 0) { //Descendente if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_ORDEN_DIRECCION_PORDEFECTO.Equals("1")) { Funciones.Cambiar_Imagen_Boton_Orden(0, ex_btn_P_ArbolJerarquico_Empleados_OrdenListado); ex_btn_P_ArbolJerarquico_Empleados_OrdenListado.Tag = "1"; } //Ascendente else { Funciones.Cambiar_Imagen_Boton_Orden(1, ex_btn_P_ArbolJerarquico_Empleados_OrdenListado); ex_btn_P_ArbolJerarquico_Empleados_OrdenListado.Tag = "0"; } } else { if (g_obj_Controladora.g_obj_ABS_Listado_KRS_Empleados_P_ArbolJerarquico.ORDENACION_TIPO_PORDEFECTO().Trim().Length > 0) { //Descendente if (g_obj_Controladora.g_obj_ABS_Listado_KRS_Empleados_P_ArbolJerarquico.ORDENACION_TIPO_PORDEFECTO().Equals("1")) { Funciones.Cambiar_Imagen_Boton_Orden(0, ex_btn_P_ArbolJerarquico_Empleados_OrdenListado); ex_btn_P_ArbolJerarquico_Empleados_OrdenListado.Tag = "1"; } //Ascendente else { Funciones.Cambiar_Imagen_Boton_Orden(1, ex_btn_P_ArbolJerarquico_Empleados_OrdenListado); ex_btn_P_ArbolJerarquico_Empleados_OrdenListado.Tag = "0"; } } } //######################################################################################## //Seleccionar Orden por Defecto en Combo ################################################# if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_ORDEN_COLUMNA_PORDEFECTO != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_ORDEN_COLUMNA_PORDEFECTO.Trim().Length > 0) { ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem = ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.Items.Cast().Where(m => m.Descripcion.Equals(g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_ORDEN_COLUMNA_PORDEFECTO)).FirstOrDefault(); } else { if (g_obj_Controladora.g_obj_ABS_Listado_KRS_Empleados_P_ArbolJerarquico.ORDENACION_NOMBRECOLUMNA_PORDEFECTO().Trim().Length > 0) { ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem = ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.Items.Cast().Where(m => m.Identificador.Equals(g_obj_Controladora.g_obj_ABS_Listado_KRS_Empleados_P_ArbolJerarquico.ORDENACION_NOMBRECOLUMNA_PORDEFECTO())).FirstOrDefault(); } else { ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem = ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.Items.Cast().FirstOrDefault(); } } g_bol_BloquearPorCargaInicial_Empleados = false; #endregion } catch (Exception ex) { //No se muestra mensaje pero se guarda en el log Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(P_ArbolJerarquico_Load)); g_bol_ConstructorPantalla_Terminado_Correctamente = false; } } private void P_ArbolJerarquico_Shown(object sender, EventArgs e) { try { if (g_bol_ConstructorPantalla_Terminado_Correctamente) { //Agraga Rama principal g_obj_Controladora.Agregar_Rama_Inicial(); //rellenar Asientos g_obj_Controladora.CargaInicial(); } else { Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA()); Salir_P_Base(); } } catch (Control_Errores) { Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA()); Salir_P_Base(); } catch (Exception ex) { //No se muestra mensaje pero se guarda en el log Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(P_ArbolJerarquico_Shown)); Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA()); Salir_P_Base(); } } #endregion #region Empleados private void CrearColumnas_Listado_Empleados() { ex_dgv_P_ArbolJerarquico_Empleados.AutoGenerateColumns = false; List lst_ListadoCampos = g_obj_Controladora.g_obj_ABS_Listado_KRS_Empleados_P_ArbolJerarquico.LISTADO_COLUMNAS().Values.ToList(); foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in lst_ListadoCampos) { dynamic dgv_Columna = null; if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOTON) || mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.EsBoton == 1) { dgv_Columna = new DataGridViewButtonColumn(); } else { dgv_Columna = new DataGridViewTextBoxColumn(); } dgv_Columna.DataPropertyName = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna; dgv_Columna.Name = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna; dgv_Columna.HeaderText = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_AMostrar; //Poner visible o no ......................................................................... bool bol_Visible = true; if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Oculto) { bol_Visible = false; } else if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNASAMOSTRAR != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNASAMOSTRAR.Count > 0) { if (!g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNASAMOSTRAR.Contains(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna)) { bol_Visible = false; } } else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Mostrado_PorDefecto == false) { bol_Visible = false; } dgv_Columna.Visible = bol_Visible; if (bol_Visible) { g_obj_Controladora.g_lst_ColumnasAMostrar_EMPLEADOS.Add(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna); } //..................................................................................................... //Poner Ancho Columna ................................................................................ if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNAS_ANCHO != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNAS_ANCHO.Count > 0 && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNAS_ANCHO.ContainsKey(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna)) { dgv_Columna.Width = g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNAS_ANCHO[mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna]; } else { if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Ancho > 0) { dgv_Columna.Width = mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Ancho; } } //................................................................................................................ dgv_Columna.ReadOnly = true; //Poner alineado segun tipo de datos ...................................................................................... if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL) || mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG) || mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT)) { dgv_Columna.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; } else { dgv_Columna.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; } //.............................................................................................................................. ex_dgv_P_ArbolJerarquico_Empleados.Columns.Add(dgv_Columna); //RELLENAR EL ORDEN EN COMBO if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Oculto == false) { ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.Items.Add(new INTERNO_ComboBox_Modelo(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna, mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_AMostrar, null)); } } //Cambiar el orden de las columnas ........ if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNAS_ORDEN != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNAS_ORDEN.Count > 0) { foreach (KeyValuePair kvp_Valores in g_mdl_INTERNO_ConfiguracionPantalla_Modelo_EMPLEADOS.LISTADO_COLUMNAS_ORDEN) { ex_dgv_P_ArbolJerarquico_Empleados.Columns[kvp_Valores.Key].DisplayIndex = kvp_Valores.Value; } } //......................................... } #region Ordenar private void ex_btn_P_ArbolJerarquico_Empleados_OrdenListado_Click(object sender, EventArgs e) { //Esta Descedente if (ex_btn_P_ArbolJerarquico_Empleados_OrdenListado.Tag.ToString().Equals("1")) { Funciones.Cambiar_Imagen_Boton_Orden(1, ex_btn_P_ArbolJerarquico_Empleados_OrdenListado); } //Esta Ascendente else { Funciones.Cambiar_Imagen_Boton_Orden(0, ex_btn_P_ArbolJerarquico_Empleados_OrdenListado); } Listado_Empleados_Ordenar_DataGridView(); } private void ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado_SelectedIndexChanged(object sender, EventArgs e) { if (g_bol_BloquearPorCargaInicial_Empleados == false) { //Saber el Tipo de Ordenacion ................................. ListSortDirection obj_ListSortDirection = ListSortDirection.Ascending; if (ex_btn_P_ArbolJerarquico_Empleados_OrdenListado.Tag.ToString().Equals("1")) { obj_ListSortDirection = ListSortDirection.Descending; } //.............................................................. //Cambiar el tipo Orden en Listado ex_dgv_P_ArbolJerarquico_Empleados.Sort(ex_dgv_P_ArbolJerarquico_Empleados.Columns[((INTERNO_ComboBox_Modelo)ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem).Identificador], obj_ListSortDirection); Listado_Empleados_Ordenar_DataGridView(); } } private void ex_dgv_P_ArbolJerarquico_Empleados_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { try { //Mostrar u Ocultar las columnas if (e.Button == MouseButtons.Left) { string str_CambioOrdenAnterior = ""; if (ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem != null) { str_CambioOrdenAnterior = ((INTERNO_ComboBox_Modelo)ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem).Identificador; } //Seleccionar la columna en el Combo de orden ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem = ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.Items.Cast().Where(m => m.Identificador.Equals(ex_dgv_P_ArbolJerarquico_Empleados.Columns[e.ColumnIndex].Name)).FirstOrDefault(); if (str_CambioOrdenAnterior.Equals(((INTERNO_ComboBox_Modelo)ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem).Identificador)) { //Si estaba Ascendente lo pongo descendente if (ex_dgv_P_ArbolJerarquico_Empleados.SortOrder == SortOrder.Ascending) { Funciones.Cambiar_Imagen_Boton_Orden(1, ex_btn_P_ArbolJerarquico_Empleados_OrdenListado); } //Si estaba descendente lo pongo Ascendente else { Funciones.Cambiar_Imagen_Boton_Orden(0, ex_btn_P_ArbolJerarquico_Empleados_OrdenListado); } } Listado_Empleados_Ordenar_DataGridView(); } } catch { } } public void Listado_Empleados_Ordenar_DataGridView() { try { if (ex_dgv_P_ArbolJerarquico_Empleados.Rows.Count > 0) { //Saber el Tipo de Ordenacion ................................. ListSortDirection obj_ListSortDirection = ListSortDirection.Ascending; if (ex_btn_P_ArbolJerarquico_Empleados_OrdenListado.Tag.ToString().Equals("1")) { obj_ListSortDirection = ListSortDirection.Descending; } //.............................................................. if (ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem != null && ((INTERNO_ComboBox_Modelo)ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem).Identificador.Trim().Length > 0) { ex_dgv_P_ArbolJerarquico_Empleados.Sort(ex_dgv_P_ArbolJerarquico_Empleados.Columns[((INTERNO_ComboBox_Modelo)ex_cbo_P_ArbolJerarquico_Empleados_OrdenListado.SelectedItem).Identificador], obj_ListSortDirection); } else { ex_dgv_P_ArbolJerarquico_Empleados.Sort(ex_dgv_P_ArbolJerarquico_Empleados.Columns[g_obj_Controladora.g_obj_ABS_Listado_KRS_Empleados_P_ArbolJerarquico.ORDENACION_NOMBRECOLUMNA_PORDEFECTO()], obj_ListSortDirection); } } } catch (Exception) { } } #endregion #region Mover Opciones private bool g_bol_TieneSeleccion = false; private void ex_dgv_P_ArbolJerarquico_Empleados_MouseDown(object sender, MouseEventArgs e) { g_bol_TieneSeleccion = false; if (e.Button != MouseButtons.Left) return; ex_dgv_P_ArbolJerarquico_Empleados.MouseMove += ex_dgv_P_ArbolJerarquico_Empleados_MouseMove; } private void ex_dgv_P_ArbolJerarquico_Empleados_MouseMove(object sender, MouseEventArgs e) { if (g_bol_TieneSeleccion == false) { g_bol_TieneSeleccion = true; ex_dgv_P_ArbolJerarquico_Empleados.MouseMove -= ex_dgv_P_ArbolJerarquico_Empleados_MouseMove; if (e.Button != MouseButtons.Left) return; List lst_Rows = new List(); foreach (DataGridViewRow dgvr_Opcion in ex_dgv_P_ArbolJerarquico_Empleados.SelectedRows) { lst_Rows.Add(dgvr_Opcion); } ex_dgv_P_ArbolJerarquico_Empleados.DoDragDrop(lst_Rows, DragDropEffects.Move); } } #endregion private void ex_dgv_P_ArbolJerarquico_Empleados_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.ColumnIndex == 2) { if (e.Value != null && e.Value.ToString().Length > 0 && e.Value.ToString()=="X") { //Color Fondo ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.BackColor = Colores.G_COLOR_FONDO_TREEVIEW_ARBOLJERARQUICO_SELECCIONADO_PADRE; ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.SelectionBackColor = Colores.G_COLOR_FONDO_TREEVIEW_ARBOLJERARQUICO_SELECCIONADO_PADRE; //Color Letra ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.ForeColor = Colores.G_COLOR_LETRA_TREEVIEW_ARBOLJERARQUICO_SELECCIONADO_PADRE; ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.SelectionForeColor = Colores.G_COLOR_LETRA_TREEVIEW_ARBOLJERARQUICO_SELECCIONADO_PADRE; } else { if (e.RowIndex % 2 == 0) { //Color celda ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.BackColor = Colores.G_COLOR_LISTADO_FILANORMAL_FONDO; ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.ForeColor = Colores.G_COLOR_LISTADO_FILANORMAL_LETRA; } else { //Color celda ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.BackColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_FONDO; ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.ForeColor = Colores.G_COLOR_LISTADO_FILAALTERNATIVA_LETRA; } //Color celda Seleccion ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.SelectionBackColor = Colores.G_COLOR_FONDO_SELECCION; ex_dgv_P_ArbolJerarquico_Empleados[e.ColumnIndex, e.RowIndex].Style.SelectionForeColor = Colores.G_COLOR_LETRA_SELECCION; } } } #endregion #region Arbol private void ex_trv_P_ArbolJerarquico_Arbol_ItemDrag(object sender, ItemDragEventArgs e) { //Mueve el nodo usando el click izquierdo del raton. if (e.Button == MouseButtons.Left) { DoDragDrop(e.Item, DragDropEffects.Move); } //Copia el nodo usando mel click derecho del raton else if (e.Button == MouseButtons.Right) { DoDragDrop(e.Item, DragDropEffects.Copy); } } private void ex_trv_P_ArbolJerarquico_Arbol_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } private void ex_trv_P_ArbolJerarquico_Arbol_DragOver(object sender, DragEventArgs e) { try { // Recupera las coordenadas de la posicion del raton Point Posicion = ex_trv_P_ArbolJerarquico_Arbol.PointToClient(new Point(e.X, e.Y)); // Seleciona el nodo en la posicion del ratón ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = ex_trv_P_ArbolJerarquico_Arbol.GetNodeAt(Posicion); } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_trv_P_ArbolJerarquico_Arbol_DragOver)); } } private void ex_trv_P_ArbolJerarquico_Arbol_DragDrop(object sender, DragEventArgs e) { try { // Recupera las coordenadas de la posicion del raton Point Posicion = ex_trv_P_ArbolJerarquico_Arbol.PointToClient(new Point(e.X, e.Y)); // Recupera la posicion de colocacion del nodo TreeNode trn_Nodo_Objetivo = ex_trv_P_ArbolJerarquico_Arbol.GetNodeAt(Posicion); string str_MensajeError = ""; if (e.Data.GetData(typeof(TreeNode)) != null) { // Recupera el nodo que fue arrastrado TreeNode trn_Nodo_En_Movimiento = (TreeNode)e.Data.GetData(typeof(TreeNode)); if (trn_Nodo_Objetivo != null) { //Confirma si el nodo esta en la posicion de colocacion y si es un nodo o un descendiente de nodo if (!trn_Nodo_En_Movimiento.Equals(trn_Nodo_Objetivo)) { long lng_idEmpleado = long.Parse(trn_Nodo_En_Movimiento.Tag.ToString()); long lng_idEmpleadoPadre = -1; string str_NombreEmpleado = trn_Nodo_Objetivo.Text; if (trn_Nodo_Objetivo.Tag.ToString().Trim().Length>0) { lng_idEmpleadoPadre = long.Parse(trn_Nodo_Objetivo.Tag.ToString()); } if (trn_Nodo_Objetivo.Tag.ToString().Trim().Length == 0 || Nodos_HijoYPadreALaVez_Descendente(trn_Nodo_En_Movimiento, lng_idEmpleadoPadre) == false) { //Si se trata de un movimiento, elimina el nodo y lo agrega al nodo de colocacion if (e.Effect == DragDropEffects.Move) { trn_Nodo_En_Movimiento.Remove(); trn_Nodo_Objetivo.Nodes.Add(trn_Nodo_En_Movimiento); //Quitar los empleados (Supereriores) que no sean padres List lst_idEmpleadosPadres = new List(); Nodos_Devolver_EmpleadosSupervisores(ref lst_idEmpleadosPadres, lng_idEmpleado); //Grupos g_obj_Controladora.AusenciasProgramadasTipos_EmpleadosBorrarQueNoSonSupervisores(lng_idEmpleado, lst_idEmpleadosPadres); } } else { str_MensajeError += str_NombreEmpleado + " ya ha sido introducido en este grupo, no se puede mover." + System.Environment.NewLine; } //Selccionar Nodos Nodos_Seleccionar(trn_Nodo_En_Movimiento); ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = trn_Nodo_En_Movimiento; ex_trv_P_ArbolJerarquico_Arbol.Select(); //Expande el nodo trn_Nodo_Objetivo.Expand(); } } } //Listado de Opciones Seleccionadas else if (e.Data.GetData(typeof(List)) != null) { List lst_Rows = (List)e.Data.GetData(typeof(List)); if (lst_Rows != null && lst_Rows.Count > 0) { if (trn_Nodo_Objetivo != null) { //Si se trata de un movimiento, elimina el nodo y lo agrega al nodo de colocacion if (e.Effect == DragDropEffects.Move) { TreeNode trn_NodoNuevo = null; TreeNode trn_NodoUltimoIntroducido = null; long lng_idEmpleado = -1; string str_NombreEmpleado= ""; //Añadimos tantos nodos como filas haya foreach (DataGridViewRow dgvr_Filas in lst_Rows) { //Datos del Empleado lng_idEmpleado = long.Parse(dgvr_Filas.Cells[nameof(INTERNO_KRS_Empleados_Modelo.id)].Value.ToString()); str_NombreEmpleado = dgvr_Filas.Cells[nameof(INTERNO_KRS_Empleados_Modelo.nombre)].Value.ToString(); if (Nodos_HijoYPadreALaVez_Ascedente(trn_Nodo_Objetivo, lng_idEmpleado) ==false) { //Creacion del nodo trn_NodoNuevo = new TreeNode(str_NombreEmpleado); trn_NodoNuevo.Name = g_obj_Controladora.g_lng_idArbol_NuevosNodos.ToString(); trn_NodoNuevo.Text = str_NombreEmpleado; trn_NodoNuevo.Tag = lng_idEmpleado; //Agregar Nodo trn_Nodo_Objetivo.Nodes.Add(trn_NodoNuevo); trn_NodoUltimoIntroducido = trn_NodoNuevo; //Agregar al Diccionario List lst_TreeNode = null; if (g_obj_Controladora.g_dct_NodosArbolEmpleados.ContainsKey(lng_idEmpleado)) { lst_TreeNode = g_obj_Controladora.g_dct_NodosArbolEmpleados[lng_idEmpleado]; lst_TreeNode.Add(trn_NodoNuevo); g_obj_Controladora.g_dct_NodosArbolEmpleados[lng_idEmpleado] = lst_TreeNode; } else { lst_TreeNode = new List(); lst_TreeNode.Add(trn_NodoNuevo); g_obj_Controladora.g_dct_NodosArbolEmpleados.Add(lng_idEmpleado, lst_TreeNode); } //Selccionar Nodos Nodos_Seleccionar(trn_NodoNuevo); //Sumar -1 g_obj_Controladora.g_lng_idArbol_NuevosNodos += -1; } else { str_MensajeError += str_NombreEmpleado + " ya ha sido introducido en este grupo." + System.Environment.NewLine; } } //Seleccionar el ultimo introducido if (trn_NodoUltimoIntroducido != null) { ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = trn_NodoUltimoIntroducido; ex_trv_P_ArbolJerarquico_Arbol.Select(); } //Expande el nodo trn_Nodo_Objetivo.Expand(); } } } } if (str_MensajeError.Trim().Length > 0) { Mensajes.MostrarMensaje(str_MensajeError); } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_trv_P_ArbolJerarquico_Arbol_DragDrop)); } } private void ex_trv_P_ArbolJerarquico_Arbol_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { Nodos_Seleccionar(e.Node); } #region Mover private void ex_btn_P_ArbolJerarquico_IzquierdaNodo_Click(object sender, EventArgs e) { try { TreeNode trn_NodoSeleccionado = ex_trv_P_ArbolJerarquico_Arbol.SelectedNode; if (trn_NodoSeleccionado != null) { //No puede ser el prinicipal if (trn_NodoSeleccionado.Tag.ToString().Trim().Length>0) { //Tiene que tener un padre if (trn_NodoSeleccionado.Parent != null) { //Tiene que un Abuelo apra poder moverlo if (trn_NodoSeleccionado.Parent.Parent != null) { TreeNode trn_NodoAbuelo = trn_NodoSeleccionado.Parent.Parent; long lng_idEmpleadoAbuelo = -1; if (trn_NodoAbuelo.Tag.ToString().Trim().Length > 0) { lng_idEmpleadoAbuelo = long.Parse(trn_NodoAbuelo.Tag.ToString()); } long lng_idEmpleado = long.Parse(trn_NodoSeleccionado.Tag.ToString()); string str_EmpleadoNombre = trn_NodoSeleccionado.Text; if (Nodos_HijoYPadreALaVez_Descendente(trn_NodoSeleccionado, lng_idEmpleadoAbuelo) == false) { trn_NodoSeleccionado.Remove(); trn_NodoAbuelo.Nodes.Add(trn_NodoSeleccionado); //Expande el nodo trn_NodoAbuelo.Expand(); //Quitar los empleados (Supereriores) que no sean padres List lst_idEmpleadosPadres = new List(); Nodos_Devolver_EmpleadosSupervisores(ref lst_idEmpleadosPadres, lng_idEmpleado); //Grupos g_obj_Controladora.AusenciasProgramadasTipos_EmpleadosBorrarQueNoSonSupervisores(lng_idEmpleado, lst_idEmpleadosPadres); } else { Mensajes.MostrarMensaje(str_EmpleadoNombre + " ya ha sido introducido en este grupo, no se puede mover."); } } //Seleccionar Nodo Nodos_Seleccionar(trn_NodoSeleccionado); ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = trn_NodoSeleccionado; ex_trv_P_ArbolJerarquico_Arbol.Select(); } } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_btn_P_ArbolJerarquico_IzquierdaNodo_Click)); } } private void ex_btn_P_ArbolJerarquico_DerechaNodo_Click(object sender, EventArgs e) { try { TreeNode trn_NodoSeleccionado = ex_trv_P_ArbolJerarquico_Arbol.SelectedNode; if (trn_NodoSeleccionado != null) { //No puede ser el prinicipal if (trn_NodoSeleccionado.Tag.ToString().Trim().Length > 0) { //Tiene que existir un nodo a la derecha debajo if (trn_NodoSeleccionado.NextNode != null) { string str_Empleado_Siguiente = trn_NodoSeleccionado.NextNode.Text; long lng_idEmpleado_Siguiente = long.Parse(trn_NodoSeleccionado.NextNode.Tag.ToString()); if (Nodos_HijoYPadreALaVez_Descendente(trn_NodoSeleccionado, lng_idEmpleado_Siguiente) == false) { TreeNode trn_NodoSiguiente = trn_NodoSeleccionado.NextNode; trn_NodoSeleccionado.Remove(); trn_NodoSiguiente.Nodes.Add(trn_NodoSeleccionado); //Expande el nodo trn_NodoSiguiente.Expand(); } else { Mensajes.MostrarMensaje(str_Empleado_Siguiente + " ya ha sido introducido en este grupo."); } } //Seleccionar Nodo Nodos_Seleccionar(trn_NodoSeleccionado); ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = trn_NodoSeleccionado; ex_trv_P_ArbolJerarquico_Arbol.Select(); } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_btn_P_ArbolJerarquico_DerechaNodo_Click)); } } private void ex_btn_P_ArbolJerarquico_PrimeroNodo_Click(object sender, EventArgs e) { try { int int_Posicion; TreeNode trn_NodoSeleccionado = ex_trv_P_ArbolJerarquico_Arbol.SelectedNode; if (trn_NodoSeleccionado != null) { //No puede ser el prinicipal if (trn_NodoSeleccionado.Tag.ToString().Trim().Length > 0) { if (trn_NodoSeleccionado.Parent != null) { TreeNode trn_nodoPadre = trn_NodoSeleccionado.Parent; int_Posicion = trn_nodoPadre.Nodes[0].Index; trn_NodoSeleccionado.Remove(); trn_nodoPadre.Nodes.Insert(int_Posicion - 1, trn_NodoSeleccionado); } //Seleccionar Nodo Nodos_Seleccionar(trn_NodoSeleccionado); ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = trn_NodoSeleccionado; ex_trv_P_ArbolJerarquico_Arbol.Select(); } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_btn_P_ArbolJerarquico_PrimeroNodo_Click)); } } private void ex_btn_P_ArbolJerarquico_SubirNodo_Click(object sender, EventArgs e) { try { int int_Posicion; TreeNode trn_NodoSeleccionado = ex_trv_P_ArbolJerarquico_Arbol.SelectedNode; if (trn_NodoSeleccionado != null) { //No puede ser el prinicipal if (trn_NodoSeleccionado.Tag.ToString().Trim().Length > 0) { if (trn_NodoSeleccionado.Parent != null) { TreeNode trn_nodoPadre = trn_NodoSeleccionado.Parent; int_Posicion = trn_nodoPadre.Nodes.IndexOf(trn_NodoSeleccionado); trn_NodoSeleccionado.Remove(); trn_nodoPadre.Nodes.Insert(int_Posicion - 1, trn_NodoSeleccionado); } //Seleccionar Nodo Nodos_Seleccionar(trn_NodoSeleccionado); ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = trn_NodoSeleccionado; ex_trv_P_ArbolJerarquico_Arbol.Select(); } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_btn_P_ArbolJerarquico_SubirNodo_Click)); } } private void ex_btn_P_ArbolJerarquico_BajarNodo_Click(object sender, EventArgs e) { try { int int_Posicion; TreeNode trn_NodoSeleccionado = ex_trv_P_ArbolJerarquico_Arbol.SelectedNode; if (trn_NodoSeleccionado != null) { //No puede ser el prinicipal if (trn_NodoSeleccionado.Tag.ToString().Trim().Length > 0) { if (trn_NodoSeleccionado.Parent != null) { TreeNode trn_NodoPadre = trn_NodoSeleccionado.Parent; int_Posicion = trn_NodoPadre.Nodes.IndexOf(trn_NodoSeleccionado); trn_NodoSeleccionado.Remove(); trn_NodoPadre.Nodes.Insert(int_Posicion + 1, trn_NodoSeleccionado); } //Seleccionar Nodo Nodos_Seleccionar(trn_NodoSeleccionado); ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = trn_NodoSeleccionado; ex_trv_P_ArbolJerarquico_Arbol.Select(); } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_btn_P_ArbolJerarquico_BajarNodo_Click)); } } private void ex_btn_P_ArbolJerarquico_UltimoNodo_Click(object sender, EventArgs e) { try { int int_Posicion; TreeNode trn_NodoSeleccionado = ex_trv_P_ArbolJerarquico_Arbol.SelectedNode; if (trn_NodoSeleccionado != null) { //No puede ser el prinicipal if (trn_NodoSeleccionado.Tag.ToString().Trim().Length > 0) { if (trn_NodoSeleccionado.Parent != null) { TreeNode trn_nodoPadre = trn_NodoSeleccionado.Parent; int_Posicion = trn_nodoPadre.Nodes[trn_nodoPadre.Nodes.Count - 1].Index; trn_NodoSeleccionado.Remove(); trn_nodoPadre.Nodes.Insert(int_Posicion + 1, trn_NodoSeleccionado); ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = trn_NodoSeleccionado; ex_trv_P_ArbolJerarquico_Arbol.Select(); } } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_btn_P_ArbolJerarquico_UltimoNodo_Click)); } } #endregion #region Borrar private void ex_btn_P_ArbolJerarquico_EliminarRama_Click(object sender, EventArgs e) { try { TreeNode trn_NodoSeleccionado = ex_trv_P_ArbolJerarquico_Arbol.SelectedNode; if (trn_NodoSeleccionado != null) { //No puede ser el prinicipal if (trn_NodoSeleccionado.Tag.ToString().Trim().Length > 0) { //Borrar del listado de nodos que esta en el diccionario Borrar_Nodo_EnDiccionario_Recursivo(trn_NodoSeleccionado); //Borrar nodo trn_NodoSeleccionado.Remove(); //Borrar diccinario Borrar_Diccionario(); //Restructurar grupos, quitando los supervisores que faltan List lst_idEmpleadosUtilizados = new List(); Restructurar_Grupos(ex_trv_P_ArbolJerarquico_Arbol.Nodes[0],ref lst_idEmpleadosUtilizados); } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(ex_btn_P_ArbolJerarquico_EliminarRama_Click)); } } private void Borrar_Nodo_EnDiccionario_Recursivo(TreeNode _trn_NodoSeleccionado) { try { //Si no es la principal if (_trn_NodoSeleccionado.Tag.ToString().Trim().Length > 0) { foreach (KeyValuePair> kvp_PorEmpleados in g_obj_Controladora.g_dct_NodosArbolEmpleados) { kvp_PorEmpleados.Value.RemoveAll(m => m.Name.Equals(_trn_NodoSeleccionado.Name)); } } //Hijos if (_trn_NodoSeleccionado.Nodes != null && _trn_NodoSeleccionado.Nodes.Count > 0) { foreach (TreeNode trn_NodoSeleccionado in _trn_NodoSeleccionado.Nodes) { Borrar_Nodo_EnDiccionario_Recursivo(trn_NodoSeleccionado); } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(Borrar_Nodo_EnDiccionario_Recursivo)); } } private void Borrar_Diccionario() { try { List lst_idEmpleados = new List(); Nodos_Devolver_EmpleadosInferiores(ref lst_idEmpleados, ex_trv_P_ArbolJerarquico_Arbol.Nodes[0]); List lst_EmpleadosEnDiccionario = g_obj_Controladora.g_dct_NodosArbolEmpleados.Keys.ToList(); if (lst_EmpleadosEnDiccionario != null && lst_EmpleadosEnDiccionario.Count>0) { foreach (long lng_idEmpleado in lst_EmpleadosEnDiccionario) { if (lst_idEmpleados==null || lst_idEmpleados.Count==0 || !lst_idEmpleados.Contains(lng_idEmpleado)) { g_obj_Controladora.g_dct_NodosArbolEmpleados.Remove(lng_idEmpleado); } } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(Borrar_Diccionario)); } } private void Restructurar_Grupos(TreeNode _trn_Rama,ref List _lst_idEmpleadosUtilizados) { try { if (_trn_Rama.Nodes != null && _trn_Rama.Nodes.Count > 0) { foreach (TreeNode trn_Rama_Interna in _trn_Rama.Nodes) { //idEmpleado de la rama long lng_idEmpleado = long.Parse(trn_Rama_Interna.Tag.ToString()); if (!_lst_idEmpleadosUtilizados.Contains(lng_idEmpleado)) { //Obtener los Supervisores List lst_idEmpleadosSupervisores = new List(); Nodos_Devolver_EmpleadosSupervisores(ref lst_idEmpleadosSupervisores, lng_idEmpleado); //Borrar los que no son Supervisores g_obj_Controladora.AusenciasProgramadasTipos_EmpleadosBorrarQueNoSonSupervisores(lng_idEmpleado,lst_idEmpleadosSupervisores); //Añadirlo al listado para que no se vuelva a utilizar mas _lst_idEmpleadosUtilizados.Add(lng_idEmpleado); } Restructurar_Grupos(trn_Rama_Interna, ref _lst_idEmpleadosUtilizados); } } } catch(Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(Restructurar_Grupos)); } } #endregion private void Nodos_Seleccionar(TreeNode _trn_Nodo) { try { #region Vaciar Seleccion anterior g_obj_Controladora.AusenciasProgramadasTipos_ActualizarEmpleadoSeleccionadoArbol(null); if (ex_trv_P_ArbolJerarquico_Arbol.Nodes != null && ex_trv_P_ArbolJerarquico_Arbol.Nodes.Count > 0) { Nodos_VaciarSeleccion(ex_trv_P_ArbolJerarquico_Arbol.Nodes); } #endregion #region DataGridView Poner todos como hijos foreach (DataGridViewRow dgvr_Empleado in ex_dgv_P_ArbolJerarquico_Empleados.Rows.Cast().ToList()) { dgvr_Empleado.Cells[nameof(INTERNO_KRS_Empleados_Modelo.EsPadre_AUX)].Value = ""; } ex_dgv_P_ArbolJerarquico_Empleados.Refresh(); #endregion #region Vaciar grupos g_obj_Controladora.AusenciasProgramadasTipos_Vaciar(); #endregion //Seleccion de todos los nodos que sena del mismo empleado if (_trn_Nodo.Tag.ToString().Trim().Length > 0) { if (g_obj_Controladora.g_dct_NodosArbolEmpleados.Count > 0) { long lng_idEmpleado = long.Parse(_trn_Nodo.Tag.ToString()); if (g_obj_Controladora.g_dct_NodosArbolEmpleados.ContainsKey(lng_idEmpleado)) { //Empleado seleccionado en arbol g_obj_Controladora.AusenciasProgramadasTipos_ActualizarEmpleadoSeleccionadoArbol(g_obj_Controladora.g_lst_INTERNO_KRS_Empleados_Modelo.Where(m => m.id.Equals(lng_idEmpleado)).FirstOrDefault()); List lst_Nodos = g_obj_Controladora.g_dct_NodosArbolEmpleados[lng_idEmpleado]; if (lst_Nodos != null && lst_Nodos.Count > 0) { foreach (TreeNode trn_NodoSeleccionado in lst_Nodos) { trn_NodoSeleccionado.BackColor = Colores.G_COLOR_FONDO_TREEVIEW_ARBOLJERARQUICO_SELECCIONADO; trn_NodoSeleccionado.ForeColor = Colores.G_COLOR_LETRA_TREEVIEW_ARBOLJERARQUICO_SELECCIONADO; //Seleccionar nodos padre de los nodos selccionados if (trn_NodoSeleccionado.Parent!=null) { Nodos_Seleccionar_Padre(trn_NodoSeleccionado.Parent); } } } } } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(Nodos_Seleccionar)); } } private void Nodos_Seleccionar_Padre(TreeNode _trn_Nodo) { try { if (_trn_Nodo.Tag.ToString().Trim().Length > 0) { long lng_idEmpleado = long.Parse(_trn_Nodo.Tag.ToString()); _trn_Nodo.BackColor = Colores.G_COLOR_FONDO_TREEVIEW_ARBOLJERARQUICO_SELECCIONADO_PADRE; _trn_Nodo.ForeColor = Colores.G_COLOR_LETRA_TREEVIEW_ARBOLJERARQUICO_SELECCIONADO_PADRE; #region DataGridView Poner como Padre DataGridViewRow dgvr_Seleccionada= ex_dgv_P_ArbolJerarquico_Empleados.Rows .Cast() .Where(r => r.Cells[0].Value.Equals(lng_idEmpleado)).FirstOrDefault(); if (dgvr_Seleccionada!=null) { dgvr_Seleccionada.Cells[nameof(INTERNO_KRS_Empleados_Modelo.EsPadre_AUX)].Value = "X"; } ex_dgv_P_ArbolJerarquico_Empleados.Refresh(); #endregion if (_trn_Nodo.Parent != null) { Nodos_Seleccionar_Padre(_trn_Nodo.Parent); } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(Nodos_Seleccionar_Padre)); } } #region Nodos Devolver Empleados Supervisores private void Nodos_Devolver_EmpleadosSupervisores(ref List _lst_idEmpleadosSupervisores, long _lng_idEmpleado) { List lst_Nodos = g_obj_Controladora.g_dct_NodosArbolEmpleados[_lng_idEmpleado]; if (lst_Nodos != null && lst_Nodos.Count > 0) { foreach (TreeNode trn_NodoSeleccionado in lst_Nodos) { Nodos_Devolver_EmpleadosSupervisores_Recursivo(ref _lst_idEmpleadosSupervisores, trn_NodoSeleccionado.Parent); } } } private void Nodos_Devolver_EmpleadosSupervisores_Recursivo(ref List _lst_idEmpleadosSupervisores, TreeNode _trn_Nodo) { try { if (_trn_Nodo.Tag.ToString().Trim().Length > 0) { _lst_idEmpleadosSupervisores.Add(long.Parse(_trn_Nodo.Tag.ToString())); if (_trn_Nodo.Parent != null) { Nodos_Devolver_EmpleadosSupervisores_Recursivo(ref _lst_idEmpleadosSupervisores, _trn_Nodo.Parent); } } } catch (Exception ex) { Control_Errores.Errores_Log("", ex, nameof(P_ArbolJerarquico) + "/" + nameof(Nodos_Devolver_EmpleadosSupervisores)); } } #endregion #region Nodos Devolver Empleados Inferiores private void Nodos_Devolver_EmpleadosInferiores(ref List _lst_idEmpleadosInferiores, TreeNode _trn_Rama) { //Si no es la principal if (_trn_Rama.Tag.ToString().Trim().Length>0) { if (!_lst_idEmpleadosInferiores.Exists(m=>m==long.Parse(_trn_Rama.Tag.ToString()))) { _lst_idEmpleadosInferiores.Add(long.Parse(_trn_Rama.Tag.ToString())); } } //Hijos if (_trn_Rama.Nodes != null && _trn_Rama.Nodes.Count > 0) { foreach (TreeNode trn_NodoSeleccionado in _trn_Rama.Nodes) { Nodos_Devolver_EmpleadosInferiores(ref _lst_idEmpleadosInferiores, trn_NodoSeleccionado); } } } #endregion private void Nodos_VaciarSeleccion(TreeNodeCollection _lst_trn_Nodos) { ex_trv_P_ArbolJerarquico_Arbol.SelectedNode = null; ex_trv_P_ArbolJerarquico_Arbol.Select(); foreach (TreeNode trn_Nodo in _lst_trn_Nodos) { if (trn_Nodo.Tag.ToString().Trim().Length > 0) { trn_Nodo.BackColor = Color.White; trn_Nodo.ForeColor = Color.Black; } //Tiene hijos if (trn_Nodo.Nodes != null && trn_Nodo.Nodes.Count > 0) { Nodos_VaciarSeleccion(trn_Nodo.Nodes); } } } private bool Nodos_HijoYPadreALaVez_Ascedente(TreeNode _trn_Nodo_Padre,long _lng_idEmpleado) { bool bol_ValorDevuelto = false; if (_trn_Nodo_Padre.Tag.ToString().Trim().Length>0) { long lng_idEmpleado_Padre = long.Parse(_trn_Nodo_Padre.Tag.ToString()); if (lng_idEmpleado_Padre== _lng_idEmpleado) { bol_ValorDevuelto= true; } } //Tiene Padre if (bol_ValorDevuelto==false && _trn_Nodo_Padre.Parent!=null) { bol_ValorDevuelto= Nodos_HijoYPadreALaVez_Ascedente(_trn_Nodo_Padre.Parent,_lng_idEmpleado); } return bol_ValorDevuelto; } private bool Nodos_HijoYPadreALaVez_Descendente(TreeNode _trn_Nodo, long _lng_idEmpleado) { bool bol_ValorDevuelto = false; if (_trn_Nodo.Tag.ToString().Trim().Length > 0) { long lng_idEmpleado = long.Parse(_trn_Nodo.Tag.ToString()); if (lng_idEmpleado == _lng_idEmpleado) { bol_ValorDevuelto = true; } } //Tiene Hijos if (bol_ValorDevuelto == false && _trn_Nodo.Nodes != null) { foreach(TreeNode trn_Nodo in _trn_Nodo.Nodes) { bol_ValorDevuelto = Nodos_HijoYPadreALaVez_Descendente(trn_Nodo, _lng_idEmpleado); if (bol_ValorDevuelto==true) { break; } } } return bol_ValorDevuelto; } #endregion #region Grabar private void ex_btn_P_ArbolJerarquico_Grabar_Click(object sender, EventArgs e) { Grabar(); } private void Grabar() { if (//Modificar (Datos_Generales.Permisos_Comprobar(g_mdl_PRV_OpcionesDetalle.opcion, g_lst_INTERNO_Permisos_Modelo, (int)G_ENUM_PERMISOS.Modificar, true))) { g_obj_Controladora.GrabarDatos(); } } #endregion #region Teclas de acceso rapido protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { // Salir sin Seleccionar if (keyData == Keys.F10) { Salir_P_Base(); return true; } // Grabar else if (keyData == Keys.F2) { Grabar(); return true; } return base.ProcessCmdKey(ref msg, keyData); } #endregion } }