using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_Formularios;
using Exferia_Informes._3_Vistas.ListadosSeleccion;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Linq;
using Exferia_EntityFramework;
using Exferia_Informes._3_Vistas.Controladoras;
using Exferia_General;
using static Exferia_Aplicacion.General.Enumerados;
using Exferia_Aplicacion.ListadosSeleccion_Generales;
using Exferia_Aplicacion.Modelos_Maestros;
using System.Reflection;

namespace Exferia_Informes._3_Vistas
{
    public partial class P_MovimientosArticulos : Exferia_Formularios.P_Base_Mantenimientos
    {
        #region Variables Privadas      
        private P_MovimientosArticulos_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;

        private INTERNO_ConfiguracionPantalla_Modelo g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION = null;
        private INTERNO_ConfiguracionPantalla_Modelo g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN = null;
        private INTERNO_ConfiguracionPantalla_Modelo g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION = null;
        private INTERNO_ConfiguracionPantalla_Modelo g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO = null;

        private long g_lng_idArticulo = -1;

        #endregion

        #region Objetos en Pantalla

        //Exferia_DataGridView
        internal Exferia_DataGridView Exferia_DataGridView_PorUbicacion_Movimientos { get { return ex_dgv_P_MovimientosArticulos_PorUbicacion_Movimientos; } }
        internal Exferia_DataGridView Exferia_DataGridView_PorAlmacen_Movimientos { get { return ex_dgv_P_MovimientosArticulos_PorAlmacen_Movimientos; } }
        internal Exferia_DataGridView Exferia_DataGridView_PorDelegacion_Movimientos { get { return ex_dgv_P_MovimientosArticulos_PorDelegacion_Movimientos; } }
        internal Exferia_DataGridView Exferia_DataGridView_PorArticulo_Movimientos { get { return ex_dgv_P_MovimientosArticulos_PorArticulo_Movimientos; } }

        //Exferia_FechaSeleccion
        internal Exferia_FechaSeleccion Exferia_FechaSeleccion_FechaDesde { get { return ex_usc_P_MovimientosArticulos_FechaDesde; } }
        internal Exferia_FechaSeleccion Exferia_FechaSeleccion_FechaHasta { get { return ex_usc_P_MovimientosArticulos_FechaHasta; } }

        //Exferia_F3_SoloSeleccion
        internal Exferia_F3_SoloSeleccion Exferia_F3_SoloSeleccion_Articulo { get { return ex_usc_F3_P_MovimientosArticulos_Articulo; } }
        internal Exferia_F3_SoloSeleccion Exferia_F3_SoloSeleccion_Delegacion { get { return ex_usc_F3_P_MovimientosArticulos_Delegacion; } }
        internal Exferia_F3_SoloSeleccion Exferia_F3_SoloSeleccion_Almacen { get { return ex_usc_F3_P_MovimientosArticulos_Almacen; } }
        internal Exferia_F3_SoloSeleccion Exferia_F3_SoloSeleccion_Ubicacion { get { return ex_usc_F3_P_MovimientosArticulos_Ubicacion; } }

        //Exferia_F3_SoloSeleccion
        internal Exferia_Label_SinColor Exferia_Label_SinColor_Embalaje { get { return ex_lbl_P_MovimientosArticulos_Embalaje; } }

        #endregion

        #region Constructor
        public P_MovimientosArticulos(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo, DateTime _dtt_FechaTrabajo, PRV_OpcionesDetalle _mdl_PRV_OpcionesDetalle)
        {
            Constructor(_mdl_INTERNO_ValoresGenerales_Modelo, _dtt_FechaTrabajo, _mdl_PRV_OpcionesDetalle, -1);
        }
        public P_MovimientosArticulos(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo, DateTime _dtt_FechaTrabajo, PRV_OpcionesDetalle _mdl_PRV_OpcionesDetalle, long _lng_idArticulo)
        {
            Constructor(_mdl_INTERNO_ValoresGenerales_Modelo, _dtt_FechaTrabajo, _mdl_PRV_OpcionesDetalle, _lng_idArticulo);
        }
        public void Constructor(INTERNO_ValoresGenerales_Modelo _mdl_INTERNO_ValoresGenerales_Modelo, DateTime _dtt_FechaTrabajo, PRV_OpcionesDetalle _mdl_PRV_OpcionesDetalle,long _lng_idArticulo)
        {
            InitializeComponent();

            try
            {
                Repintar.Empezar(this);

                CheckForIllegalCrossThreadCalls = false;

                g_lng_idArticulo = _lng_idArticulo;

                //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_MovimientosArticulos_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;

                // 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_MovimientosArticulos) + "/" + nameof(P_MovimientosArticulos));
                    }
                }
                //....................................................................................................

                //ARTICULO
                ex_usc_F3_P_MovimientosArticulos_Articulo.Exferia_F3_SoloSeleccion_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_MAE_ARTICULO;
                ex_usc_F3_P_MovimientosArticulos_Articulo.Exferia_F3_SoloSeleccion_PantallaContenedora = this;
                ex_usc_F3_P_MovimientosArticulos_Articulo.Exferia_F3_SoloSeleccion_PRINCIPAL_BUSCARTITULO = false;

                //DELEGACION
                ex_usc_F3_P_MovimientosArticulos_Delegacion.Exferia_F3_SoloSeleccion_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_GEN_DELEGACION;
                ex_usc_F3_P_MovimientosArticulos_Delegacion.Exferia_F3_SoloSeleccion_PantallaContenedora = this;
                ex_usc_F3_P_MovimientosArticulos_Delegacion.Exferia_F3_SoloSeleccion_PRINCIPAL_BUSCARTITULO = false;

                //ALMACEN
                ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_GEN_ALMACEN;
                ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_PantallaContenedora = this;
                ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_PRINCIPAL_BUSCARTITULO = false;

                //UBICACION
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_PRINCIPAL_Opcion_BuscarDatos = Variables.G_STR_OPCION_MAE_UBICACION;
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_PantallaContenedora = this;
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_PRINCIPAL_BUSCARTITULO = false;

                //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;

                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientosArticulos) + "/" + nameof(P_MovimientosArticulos));
            }
            finally
            {
                //Bloquear pantalla hasta que termine la carga por defecto .....
                Enabled = true;
                //.............................................................
            }
        }
        #endregion

        #region Inicio pantalla
        private void P_MovimientosArticulos_Load(object sender, EventArgs e)
        {
            try
            { }
            catch (Exception ex)
            {
                //No se muestra mensaje pero se guarda en el log
                Control_Errores.Errores_Log("", ex, nameof(P_MovimientosArticulos) + "/" + nameof(P_MovimientosArticulos_Load));

                g_bol_ConstructorPantalla_Terminado_Correctamente = false;
            }
        }
        private void P_MovimientosArticulos_Shown(object sender, EventArgs e)
        {
            try
            {
                if (g_bol_ConstructorPantalla_Terminado_Correctamente)
                {
                    //Fechas por Defecto
                    ex_usc_P_MovimientosArticulos_FechaDesde.Exferia_FechaSeleccion_Fecha = P_Base_ValoresGenerales.EjercicioActivo.temporadaFechaInicio.ToString("dd/MM/yyyy");
                    ex_usc_P_MovimientosArticulos_FechaHasta.Exferia_FechaSeleccion_Fecha = P_Base_ValoresGenerales.EjercicioActivo.temporadaFechaFin.ToString("dd/MM/yyyy");

                    //Articulo
                    if (g_lng_idArticulo>-1)
                    {
                        try
                        {
                            //Cargamos el ensamblado
                            Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_MAESTROS + ".dll");
                            //Obtenemos el tipo de la clase
                            Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_MAESTROS + "." + Variables.G_STR_LIBRERIA_DATOSMAESTROS);
                            //creamos la instancia
                            var obj_Clase = Activator.CreateInstance(m_type);
                            //Cargamos el metodo solicitado
                            MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSMAESTROS_PROCEDIMIENTO_MAEARTICULOS_OBTENER_MODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                            //Obtener valores
                            object[] arr_Parametros = { g_lng_idArticulo };
                            //Pasamos los parametros al metodo y lo ejecutamos
                            MAE_Articulos mdl_MAE_Articulos = (MAE_Articulos)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
                            if (mdl_MAE_Articulos!=null)
                            {
                                ex_usc_F3_P_MovimientosArticulos_Articulo.Exferia_F3_SoloSeleccion_Id = mdl_MAE_Articulos.id;
                                ex_usc_F3_P_MovimientosArticulos_Articulo.Exferia_F3_SoloSeleccion_Codigo = mdl_MAE_Articulos.codigo;
                                ex_usc_F3_P_MovimientosArticulos_Articulo.Exferia_F3_SoloSeleccion_Descripcion = mdl_MAE_Articulos.descripcion;
                                ex_usc_F3_P_MovimientosArticulos_Articulo.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_MAE_Articulos.fechaBorrado;

                                Cargar_Embalajes_Articulo(mdl_MAE_Articulos.id);

                                g_obj_Controladora.Rellenar_DataGriView_Movimientos();

                            }
                        }
                        catch (Control_Errores)
                        { }

                    }
                }
                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_MovimientosArticulos) + "/" + nameof(P_MovimientosArticulos_Shown));

                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());
                Salir_P_Base();
            }
        }
        #endregion

        #region Articulo
        private void ex_usc_F3_P_MovimientosArticulos_Articulo_Exferia_F3_SoloSeleccion_Evento_TerminoBusqueda(object sender, EventArgs e)
        {
            try
            {
                Cargar_Embalajes_Articulo(ex_usc_F3_P_MovimientosArticulos_Articulo.Exferia_F3_SoloSeleccion_Id);
            }
            catch (Exception)
            { }
        }
        private void Cargar_Embalajes_Articulo(long _lng_id)
        {
            try
            {
                ex_lbl_P_MovimientosArticulos_Embalaje.Text = "";
                g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes = null;

                //Tiene un Articulo Seleccionado correcto
                if (_lng_id > -1)
                {
                    g_obj_Controladora.Cargar_DatosEmbalaje_Por_IdArticulo(_lng_id);
                }

                //Vaciar el listado y las crear de neuvo las columnas
                CrearColumnas_Movimientos_PorUbicacion(g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes != null && g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes.idEmbalajeRelacional != null ? true : false);
                //Vaciar el listado y las crear de neuvo las columnas
                CrearColumnas_Movimientos_PorAlmacen(g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes != null && g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes.idEmbalajeRelacional != null ? true : false);
                //Vaciar el listado y las crear de neuvo las columnas
                CrearColumnas_Movimientos_PorDelegacion(g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes != null && g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes.idEmbalajeRelacional != null ? true : false);
                //Vaciar el listado y las crear de neuvo las columnas
                CrearColumnas_Movimientos_PorArticulo(g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes != null && g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes.idEmbalajeRelacional != null ? true : false);
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Delegacion
        private void ex_usc_F3_P_MovimientosArticulos_Delegacion_Exferia_F3_SoloSeleccion_Evento_TerminoBusqueda(object sender, EventArgs e)
        {
            try
            {
                //Almacen
                ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_Id = -1;
                ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_Codigo = "";
                ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_Descripcion = "";
                ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_RELACIONADOS = null;
               
                //Ubicacion
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_Id = -1;
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_Codigo = "";
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_Descripcion = "";
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_RELACIONADOS = null;

                //Tiene una Delegacion Seleccionada correcto
                if (ex_usc_F3_P_MovimientosArticulos_Delegacion.Exferia_F3_SoloSeleccion_Id > -1)
                {
                    //Almacen
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo_Almacen = new List<INTERNO_Filtro_OpcionPadre_Modelo>();
                    lst_INTERNO_Filtro_OpcionPadre_Modelo_Almacen.Add(new INTERNO_Filtro_OpcionPadre_Modelo((Variables.G_STR_OPCION_GEN_DELEGACION), ex_usc_F3_P_MovimientosArticulos_Delegacion.Exferia_F3_SoloSeleccion_Id));
                    ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo_Almacen;

                    //Ubicacion
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo_Ubicacion = new List<INTERNO_Filtro_OpcionPadre_Modelo>();
                    lst_INTERNO_Filtro_OpcionPadre_Modelo_Ubicacion.Add(new INTERNO_Filtro_OpcionPadre_Modelo((Variables.G_STR_OPCION_GEN_DELEGACION), ex_usc_F3_P_MovimientosArticulos_Delegacion.Exferia_F3_SoloSeleccion_Id));
                    ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo_Ubicacion;
                }
            }
            catch (Exception)
            {}
        }
        #endregion

        #region Almacen
        private void ex_usc_F3_P_MovimientosArticulos_Almacen_Exferia_F3_SoloSeleccion_Evento_TerminoBusqueda(object sender, EventArgs e)
        {
            try
            {
                //Ubicacion
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_Id = -1;
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_Codigo = "";
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_Descripcion = "";
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_FechaBorrado = null;
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_RELACIONADOS = null;

                //Tiene un Almacen Seleccionado correcto
                if (ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_Id > -1)
                {
                    g_obj_Controladora.Cargar_DatosDelegacion_Por_IdAlmacen(ex_usc_F3_P_MovimientosArticulos_Almacen.Exferia_F3_SoloSeleccion_Id);
                }
            }
            catch (Exception)
            {}
        }
        #endregion

        #region Ubicacion
        private void ex_usc_F3_P_MovimientosArticulos_Ubicacion_Exferia_F3_SoloSeleccion_Evento_TerminoBusqueda(object sender, EventArgs e)
        {
            try
            {
                ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_RELACIONADOS = null;

                //Tiene una Ubicaccion Seleccionado correcto
                if (ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_Id > -1)
                {
                    g_obj_Controladora.Cargar_DatosAlmacen_Por_IdUbicacion(ex_usc_F3_P_MovimientosArticulos_Ubicacion.Exferia_F3_SoloSeleccion_Id);
                }
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Movimientos Por Ubicacion
        private void CrearColumnas_Movimientos_PorUbicacion(bool _bol_Cantidad_Relacional)
        {
            try
            {
                //Borrar todas las filas
                ex_dgv_P_MovimientosArticulos_PorUbicacion_Movimientos.Rows.Clear();

                //Borrar todas las columnas
                ex_dgv_P_MovimientosArticulos_PorUbicacion_Movimientos.AutoGenerateColumns = false;
                ex_dgv_P_MovimientosArticulos_PorUbicacion_Movimientos.Columns.Clear();

                g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorUbicacion.Clear();

                if (_bol_Cantidad_Relacional)
                {
                    g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorUbicacion_Columnas = g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorUbicacion_ConCantidadRelacional.LISTADO_COLUMNAS().Values.ToList();
                }
                else
                {
                    g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorUbicacion_Columnas = g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorUbicacion.LISTADO_COLUMNAS().Values.ToList();
                }

                foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorUbicacion_Columnas)
                {
                    dynamic dgv_Columna;

                    //Si fuera de tipo Seleccionar se pone la celda con un check
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.SELECCIONAR))
                    {
                        dgv_Columna = new DataGridViewCheckBoxColumn();
                        dgv_Columna.ReadOnly = false;
                    }
                    else
                    {
                        dgv_Columna = new DataGridViewTextBoxColumn();
                        dgv_Columna.ReadOnly = true;
                    }

                    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_MOVIMIENTOS_PORUBICACION != null &&
                             g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.LISTADO_COLUMNASAMOSTRAR != null &&
                             g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.LISTADO_COLUMNASAMOSTRAR.Count > 0)
                    {
                        if (!g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.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_Movimientos_PorUbicacion.Add(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna);
                    }
                    //.....................................................................................................

                    //Tipo de Formateo si fuera Fecha
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                    {
                        dgv_Columna.DefaultCellStyle.Format = "d";
                    }


                    //Poner Ancho Columna ................................................................................
                    if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION != null &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.LISTADO_COLUMNAS_ANCHO != null &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.LISTADO_COLUMNAS_ANCHO.Count > 0 &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.LISTADO_COLUMNAS_ANCHO.ContainsKey(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna))
                    {
                        dgv_Columna.Width = g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.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;
                        }
                    }
                    //................................................................................................................

                    //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.LONG_TEXT) ||
                        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_MovimientosArticulos_PorUbicacion_Movimientos.Columns.Add(dgv_Columna);
                }

                //Cambiar el orden de las columnas ........
                if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.LISTADO_COLUMNAS_ORDEN != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.LISTADO_COLUMNAS_ORDEN.Count > 0)
                {
                    foreach (KeyValuePair<string, int> kvp_Valores in g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORUBICACION.LISTADO_COLUMNAS_ORDEN)
                    {
                        ex_dgv_P_MovimientosArticulos_PorUbicacion_Movimientos.Columns[kvp_Valores.Key].DisplayIndex = kvp_Valores.Value;
                    }
                }
                //.........................................
            }
            catch (Exception)
            { }
        }

        private void ex_btn_P_MovimientosArticulos_VerCampos_PorUbicacion_Click(object sender, EventArgs e)
        {
            try
            {
                PE_Listados_Filtros frm_PE_Listados_Filtros = new PE_Listados_Filtros((g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes != null && g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes.idEmbalajeRelacional != null) ? g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorUbicacion_ConCantidadRelacional : g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorUbicacion, ex_dgv_P_MovimientosArticulos_PorUbicacion_Movimientos.Columns, g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorUbicacion, false);
                frm_PE_Listados_Filtros.ShowDialog();

                if (frm_PE_Listados_Filtros.g_bol_BotonAceptar)
                {
                    //Mostrar/Ocultar las Columnas que no esten en el Listado
                    g_obj_Controladora.g_lst_ColumnasAMostrar_Movimientos_PorUbicacion = frm_PE_Listados_Filtros.g_lst_ColumnasAMostrar;

                    foreach (DataGridViewColumn dgvc_ColumnasActuales in ex_dgv_P_MovimientosArticulos_PorUbicacion_Movimientos.Columns)
                    {
                        //Mostrar
                        if (g_obj_Controladora.g_lst_ColumnasAMostrar_Movimientos_PorUbicacion.Contains(dgvc_ColumnasActuales.Name))
                        {
                            dgvc_ColumnasActuales.Visible = true;
                        }
                        //Ocultar
                        else
                        {
                            dgvc_ColumnasActuales.Visible = false;
                        }
                    }

                    //Rellenar los nuevos filtros
                    g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorUbicacion = frm_PE_Listados_Filtros.g_dct_ListadoFiltros.ToDictionary(entry => entry.Key, entry => entry.Value);
                }
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Movimientos Por Almacen
        private void CrearColumnas_Movimientos_PorAlmacen(bool _bol_Cantidad_Relacional)
        {
            try
            {
                //Borrar todas las filas
                ex_dgv_P_MovimientosArticulos_PorAlmacen_Movimientos.Rows.Clear();

                //Borrar todas las columnas
                ex_dgv_P_MovimientosArticulos_PorAlmacen_Movimientos.AutoGenerateColumns = false;
                ex_dgv_P_MovimientosArticulos_PorAlmacen_Movimientos.Columns.Clear();

                g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorAlmacen.Clear();

                if (_bol_Cantidad_Relacional)
                {
                    g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorAlmacen_Columnas = g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorAlmacen_ConCantidadRelacional.LISTADO_COLUMNAS().Values.ToList();
                }
                else
                {
                    g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorAlmacen_Columnas = g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorAlmacen.LISTADO_COLUMNAS().Values.ToList();
                }
               
                foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorAlmacen_Columnas)
                {
                    dynamic dgv_Columna;

                    //Si fuera de tipo Seleccionar se pone la celda con un check
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.SELECCIONAR))
                    {
                        dgv_Columna = new DataGridViewCheckBoxColumn();
                        dgv_Columna.ReadOnly = false;
                    }
                    else
                    {
                        dgv_Columna = new DataGridViewTextBoxColumn();
                        dgv_Columna.ReadOnly = true;
                    }

                    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_MOVIMIENTOS_PORALMACEN != null &&
                             g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.LISTADO_COLUMNASAMOSTRAR != null &&
                             g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.LISTADO_COLUMNASAMOSTRAR.Count > 0)
                    {
                        if (!g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.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_Movimientos_PorAlmacen.Add(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna);
                    }
                    //.....................................................................................................

                    //Tipo de Formateo si fuera Fecha
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                    {
                        dgv_Columna.DefaultCellStyle.Format = "d";
                    }


                    //Poner Ancho Columna ................................................................................
                    if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN != null &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.LISTADO_COLUMNAS_ANCHO != null &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.LISTADO_COLUMNAS_ANCHO.Count > 0 &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.LISTADO_COLUMNAS_ANCHO.ContainsKey(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna))
                    {
                        dgv_Columna.Width = g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.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;
                        }
                    }
                    //................................................................................................................

                    //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.LONG_TEXT) ||
                        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_MovimientosArticulos_PorAlmacen_Movimientos.Columns.Add(dgv_Columna);
                }

                //Cambiar el orden de las columnas ........
                if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.LISTADO_COLUMNAS_ORDEN != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.LISTADO_COLUMNAS_ORDEN.Count > 0)
                {
                    foreach (KeyValuePair<string, int> kvp_Valores in g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORALMACEN.LISTADO_COLUMNAS_ORDEN)
                    {
                        ex_dgv_P_MovimientosArticulos_PorAlmacen_Movimientos.Columns[kvp_Valores.Key].DisplayIndex = kvp_Valores.Value;
                    }
                }
                //.........................................
            }
            catch (Exception)
            {}
        }

        private void ex_btn_P_MovimientosArticulos_VerCampos_PorAlmacen_Click(object sender, EventArgs e)
        {
            try
            {
                PE_Listados_Filtros frm_PE_Listados_Filtros = new PE_Listados_Filtros((g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes != null && g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes.idEmbalajeRelacional != null) ? g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorAlmacen_ConCantidadRelacional : g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorAlmacen, ex_dgv_P_MovimientosArticulos_PorAlmacen_Movimientos.Columns, g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorAlmacen, false);
                frm_PE_Listados_Filtros.ShowDialog();

                if (frm_PE_Listados_Filtros.g_bol_BotonAceptar)
                {
                    //Mostrar/Ocultar las Columnas que no esten en el Listado
                    g_obj_Controladora.g_lst_ColumnasAMostrar_Movimientos_PorAlmacen = frm_PE_Listados_Filtros.g_lst_ColumnasAMostrar;

                    foreach (DataGridViewColumn dgvc_ColumnasActuales in ex_dgv_P_MovimientosArticulos_PorAlmacen_Movimientos.Columns)
                    {
                        //Mostrar
                        if (g_obj_Controladora.g_lst_ColumnasAMostrar_Movimientos_PorAlmacen.Contains(dgvc_ColumnasActuales.Name))
                        {
                            dgvc_ColumnasActuales.Visible = true;
                        }
                        //Ocultar
                        else
                        {
                            dgvc_ColumnasActuales.Visible = false;
                        }
                    }

                    //Rellenar los nuevos filtros
                    g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorAlmacen = frm_PE_Listados_Filtros.g_dct_ListadoFiltros.ToDictionary(entry => entry.Key, entry => entry.Value);
                }
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Movimientos Por Delegacion
        private void CrearColumnas_Movimientos_PorDelegacion(bool _bol_Cantidad_Relacional)
        {
            try
            {
                //Borrar todas las filas
                ex_dgv_P_MovimientosArticulos_PorDelegacion_Movimientos.Rows.Clear();

                //Borrar todas las columnas
                ex_dgv_P_MovimientosArticulos_PorDelegacion_Movimientos.AutoGenerateColumns = false;
                ex_dgv_P_MovimientosArticulos_PorDelegacion_Movimientos.Columns.Clear();

                g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorDelegacion.Clear();

                if (_bol_Cantidad_Relacional)
                {
                    g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorDelegacion_Columnas = g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorDelegacion_ConCantidadRelacional.LISTADO_COLUMNAS().Values.ToList();
                }
                else
                {
                    g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorDelegacion_Columnas = g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorDelegacion.LISTADO_COLUMNAS().Values.ToList();
                }

                foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorDelegacion_Columnas)
                {
                    dynamic dgv_Columna;

                    //Si fuera de tipo Seleccionar se pone la celda con un check
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.SELECCIONAR))
                    {
                        dgv_Columna = new DataGridViewCheckBoxColumn();
                        dgv_Columna.ReadOnly = false;
                    }
                    else
                    {
                        dgv_Columna = new DataGridViewTextBoxColumn();
                        dgv_Columna.ReadOnly = true;
                    }

                    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_MOVIMIENTOS_PORDELEGACION != null &&
                             g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.LISTADO_COLUMNASAMOSTRAR != null &&
                             g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.LISTADO_COLUMNASAMOSTRAR.Count > 0)
                    {
                        if (!g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.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_Movimientos_PorDelegacion.Add(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna);
                    }
                    //.....................................................................................................

                    //Tipo de Formateo si fuera Fecha
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                    {
                        dgv_Columna.DefaultCellStyle.Format = "d";
                    }
                   
                    dgv_Columna.SortMode = DataGridViewColumnSortMode.NotSortable;

                    //Poner Ancho Columna ................................................................................
                    if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION != null &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.LISTADO_COLUMNAS_ANCHO != null &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.LISTADO_COLUMNAS_ANCHO.Count > 0 &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.LISTADO_COLUMNAS_ANCHO.ContainsKey(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna))
                    {
                        dgv_Columna.Width = g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.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;
                        }
                    }
                    //................................................................................................................

                    //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.LONG_TEXT) ||
                        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_MovimientosArticulos_PorDelegacion_Movimientos.Columns.Add(dgv_Columna);
                }

                //Cambiar el orden de las columnas ........
                if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.LISTADO_COLUMNAS_ORDEN != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.LISTADO_COLUMNAS_ORDEN.Count > 0)
                {
                    foreach (KeyValuePair<string, int> kvp_Valores in g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORDELEGACION.LISTADO_COLUMNAS_ORDEN)
                    {
                        ex_dgv_P_MovimientosArticulos_PorDelegacion_Movimientos.Columns[kvp_Valores.Key].DisplayIndex = kvp_Valores.Value;
                    }
                }
                //.........................................
            }
            catch (Exception)
            { }
        }

        private void ex_btn_P_MovimientosArticulos_VerCampos_PorDelegacion_Click(object sender, EventArgs e)
        {
            try
            {
                PE_Listados_Filtros frm_PE_Listados_Filtros = new PE_Listados_Filtros((g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes != null && g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes.idEmbalajeRelacional != null) ? g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorDelegacion_ConCantidadRelacional : g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorDelegacion, ex_dgv_P_MovimientosArticulos_PorDelegacion_Movimientos.Columns, g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorDelegacion, false);
                frm_PE_Listados_Filtros.ShowDialog();

                if (frm_PE_Listados_Filtros.g_bol_BotonAceptar)
                {
                    //Mostrar/Ocultar las Columnas que no esten en el Listado
                    g_obj_Controladora.g_lst_ColumnasAMostrar_Movimientos_PorDelegacion = frm_PE_Listados_Filtros.g_lst_ColumnasAMostrar;

                    foreach (DataGridViewColumn dgvc_ColumnasActuales in ex_dgv_P_MovimientosArticulos_PorDelegacion_Movimientos.Columns)
                    {
                        //Mostrar
                        if (g_obj_Controladora.g_lst_ColumnasAMostrar_Movimientos_PorDelegacion.Contains(dgvc_ColumnasActuales.Name))
                        {
                            dgvc_ColumnasActuales.Visible = true;
                        }
                        //Ocultar
                        else
                        {
                            dgvc_ColumnasActuales.Visible = false;
                        }
                    }

                    //Rellenar los nuevos filtros
                    g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorDelegacion = frm_PE_Listados_Filtros.g_dct_ListadoFiltros.ToDictionary(entry => entry.Key, entry => entry.Value);
                }
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Movimientos Por Articulo
        private void CrearColumnas_Movimientos_PorArticulo(bool _bol_Cantidad_Relacional)
        {
            try
            {
                //Borrar todas las filas
                ex_dgv_P_MovimientosArticulos_PorArticulo_Movimientos.Rows.Clear();

                //Borrar todas las columnas
                ex_dgv_P_MovimientosArticulos_PorArticulo_Movimientos.AutoGenerateColumns = false;
                ex_dgv_P_MovimientosArticulos_PorArticulo_Movimientos.Columns.Clear();

                g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorArticulo.Clear();

                if (_bol_Cantidad_Relacional)
                {
                    g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorArticulo_Columnas = g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorArticulo_ConCantidadRelacional.LISTADO_COLUMNAS().Values.ToList();
                }
                else
                {
                    g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorArticulo_Columnas = g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorArticulo.LISTADO_COLUMNAS().Values.ToList();
                }

                foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_obj_Controladora.g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Movimientos_PorArticulo_Columnas)
                {
                    dynamic dgv_Columna;

                    //Si fuera de tipo Seleccionar se pone la celda con un check
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.SELECCIONAR))
                    {
                        dgv_Columna = new DataGridViewCheckBoxColumn();
                        dgv_Columna.ReadOnly = false;
                    }
                    else
                    {
                        dgv_Columna = new DataGridViewTextBoxColumn();
                        dgv_Columna.ReadOnly = true;
                    }

                    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_MOVIMIENTOS_PORARTICULO != null &&
                             g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.LISTADO_COLUMNASAMOSTRAR != null &&
                             g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.LISTADO_COLUMNASAMOSTRAR.Count > 0)
                    {
                        if (!g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.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_Movimientos_PorArticulo.Add(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna);
                    }
                    //.....................................................................................................

                    //Tipo de Formateo si fuera Fecha
                    if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                    {
                        dgv_Columna.DefaultCellStyle.Format = "d";
                    }


                    //Poner Ancho Columna ................................................................................
                    if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO != null &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.LISTADO_COLUMNAS_ANCHO != null &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.LISTADO_COLUMNAS_ANCHO.Count > 0 &&
                        g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.LISTADO_COLUMNAS_ANCHO.ContainsKey(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna))
                    {
                        dgv_Columna.Width = g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.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;
                        }
                    }
                    //................................................................................................................

                    //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.LONG_TEXT) ||
                        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_MovimientosArticulos_PorArticulo_Movimientos.Columns.Add(dgv_Columna);
                }

                //Cambiar el orden de las columnas ........
                if (g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.LISTADO_COLUMNAS_ORDEN != null && g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.LISTADO_COLUMNAS_ORDEN.Count > 0)
                {
                    foreach (KeyValuePair<string, int> kvp_Valores in g_mdl_INTERNO_ConfiguracionPantalla_Modelo_MOVIMIENTOS_PORARTICULO.LISTADO_COLUMNAS_ORDEN)
                    {
                        ex_dgv_P_MovimientosArticulos_PorArticulo_Movimientos.Columns[kvp_Valores.Key].DisplayIndex = kvp_Valores.Value;
                    }
                }
                //.........................................
            }
            catch (Exception)
            { }
        }

        private void ex_btn_P_MovimientosArticulos_VerCampos_PorArticulo_Click(object sender, EventArgs e)
        {
            try
            {
                PE_Listados_Filtros frm_PE_Listados_Filtros = new PE_Listados_Filtros((g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes != null && g_obj_Controladora.g_mdl_MAE_Articulos_Embalajes.idEmbalajeRelacional != null) ? g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorArticulo_ConCantidadRelacional : g_obj_Controladora.g_obj_ABS_Listado_Movimientos_PorArticulo, ex_dgv_P_MovimientosArticulos_PorArticulo_Movimientos.Columns, g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorArticulo, false);
                frm_PE_Listados_Filtros.ShowDialog();

                if (frm_PE_Listados_Filtros.g_bol_BotonAceptar)
                {
                    //Mostrar/Ocultar las Columnas que no esten en el Listado
                    g_obj_Controladora.g_lst_ColumnasAMostrar_Movimientos_PorArticulo = frm_PE_Listados_Filtros.g_lst_ColumnasAMostrar;

                    foreach (DataGridViewColumn dgvc_ColumnasActuales in ex_dgv_P_MovimientosArticulos_PorArticulo_Movimientos.Columns)
                    {
                        //Mostrar
                        if (g_obj_Controladora.g_lst_ColumnasAMostrar_Movimientos_PorArticulo.Contains(dgvc_ColumnasActuales.Name))
                        {
                            dgvc_ColumnasActuales.Visible = true;
                        }
                        //Ocultar
                        else
                        {
                            dgvc_ColumnasActuales.Visible = false;
                        }
                    }

                    //Rellenar los nuevos filtros
                    g_obj_Controladora.g_dct_ListadoFiltros_Movimientos_PorArticulo = frm_PE_Listados_Filtros.g_dct_ListadoFiltros.ToDictionary(entry => entry.Key, entry => entry.Value);
                }
            }
            catch (Exception)
            { }
        }
        #endregion

        #region Generar
        private void ex_btn_P_MovimientosArticulos_Generar_Click(object sender, EventArgs e)
        {
            g_obj_Controladora.Rellenar_DataGriView_Movimientos();
        }
        #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;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }



        #endregion

       
    }
}
