Exferia/Exferia_KairosPro/Exferia_KairosPRO/4_Vistas/P_ArbolJerarquico.cs

1358 lines
63 KiB
C#

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<INTERNO_Permisos_Modelo> 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<INTERNO_ComboBox_Modelo>().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<INTERNO_ComboBox_Modelo>().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<INTERNO_ComboBox_Modelo>().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<INTERNO_ABS_Listado_ColumnasDatos_Modelo> 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<string, int> 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<INTERNO_ComboBox_Modelo>().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<DataGridViewRow> lst_Rows = new List<DataGridViewRow>();
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<long> lst_idEmpleadosPadres = new List<long>();
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<DataGridViewRow>)) != null)
{
List<DataGridViewRow> lst_Rows = (List<DataGridViewRow>)e.Data.GetData(typeof(List<DataGridViewRow>));
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<TreeNode> 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<TreeNode>();
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<long> lst_idEmpleadosPadres = new List<long>();
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<long> lst_idEmpleadosUtilizados = new List<long>();
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<long,List<TreeNode>> 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<long> lst_idEmpleados = new List<long>();
Nodos_Devolver_EmpleadosInferiores(ref lst_idEmpleados, ex_trv_P_ArbolJerarquico_Arbol.Nodes[0]);
List<long> 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<long> _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<long> lst_idEmpleadosSupervisores = new List<long>();
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<DataGridViewRow>().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<TreeNode> 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<DataGridViewRow>()
.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<long> _lst_idEmpleadosSupervisores, long _lng_idEmpleado)
{
List<TreeNode> 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<long> _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<long> _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
}
}