using Newtonsoft.Json;
using OliviaAddInPro.View.Configuracion;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using Xceed.Wpf.Toolkit.PropertyGrid;
using Xceed.Wpf.Toolkit.PropertyGrid.Editors;
using Xceed.Wpf.Toolkit.PropertyGrid.Attributes;
using static OliviaAddInPro.Model.OliviaConf;

namespace OliviaAddInPro.Model
{


    [CategoryOrder("General", 1)]
    [CategoryOrder("Campos Limpieza", 2)]
    [CategoryOrder("Atributos Limpieza", 3)]
    [CategoryOrder("Campos Recogida", 4)]
    [CategoryOrder("Atributos recogida", 5)]
    [CategoryOrder("Campos Red Navegable", 6)]
    [CategoryOrder("Atributos Red Navegable", 7)]
    [CategoryOrder("Tiempos de la jornada - Avanzadas", 8)]
    [CategoryOrder("Anchos por defecto Limpieza (m) - Avanzadas", 9)]
    [CategoryOrder("Tiempos de Tratamiento Limpieza - Avanzadas", 10)]
    [CategoryOrder("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas", 11)]
    [CategoryOrder("Tiempos de Tratamiento Recogida (min) - Avanzadas", 12)]
    [CategoryOrder("Densidades Recogida (kg/m3) - Avanzadas", 13)]
    [CategoryOrder("Características Vehículo Recogida - Avanzadas", 14)]
    [CategoryOrder("General - Avanzadas", 15)]
    [CategoryOrder("Simbología Cartela - Avanzadas", 16)]

    [Serializable]    
    class OliviaConf
    {
        [TypeConverter(typeof(EnumToStringUsingDescription))]
        public enum OpsRecoCont
        {
            [Description("Contenedor lleno (usa capac. y densidad cont.)")]
            LlenoUsaDensidad,
            [Description("Lee campo 'Kg del Contenedor'")]
            LeeCampoTabla,
            [Description("Usa 'Kg por Defecto'")]
            UsaKgDef
        }
        [TypeConverter(typeof(EnumOpsNWToString))]
        public enum OpsNW
        {
            
            nw_0,           
            nw_1,           
            nw_2,
            nw_3,
            nw_4,

        }
        private string m2s(int min)
        {
            var val = min;
            int horas = val / 60;
            return string.Format("{0}:{1:D2}", horas, val - (horas * 60));
        }
        public OliviaConfNW GetOliviaConfNW()
        {
            int i = (int)Tipo_eje_via;
            if (ListaNw != null && ListaNw.Count() > i)
                return ListaNw[i];
            return null;
        }
        private int s2m(string str, int defec)
        {
            var match = Regex.Match(str, @"^([0-9]*):([0-9]*)");
            if (match.Success)
            {
                int res = 0;
                var horas = match.Groups[1].Value;
                var min = match.Groups[2].Value;
                if (!string.IsNullOrEmpty(horas))
                    res += Int32.Parse(horas) * 60;
                if (!string.IsNullOrEmpty(min))
                    res += Int32.Parse(min) * 60;
                return res;
            }
            return defec;
        }
        public OliviaConf()
        {
            Ip = "127.0.0.1";
            Puerto = 19995;
            TiempoOutSocket = 20;

        }
            #region PropiedadesOcultas
            #region parametrosConexion
        /**
         * IP donde va a realizar la conexión a OliviaTask, se inicializa al arrancar con la local
         */
        [Browsable(false)]
        public string Ip { get; set; }        
        
        /**
         * Time out de la conexión con OliviaTask, en seg
         */
        [Browsable(false)]
        public int TiempoOutSocket { get; set; }
        #endregion
        #region Paths
        [Browsable(false)]
        public string path_work { get; set; }

        [Browsable(false)]
        public string path_exe { get; set; }

        [Browsable(false)]
        public string path_manual { get; set; }

        [Browsable(false)]
        public string path_temp { get; set; }

        [Browsable(false)]
        public string path_data { get; set; }

        [Browsable(false)]
        public string path_cfg_aux { get; set; }

        #endregion
        #region FILTROS_LIMP
        [Browsable(false)]
        public string ejes { get; set; }
        [Browsable(false)]
        public string bord_libre_mec { get; set; }
        [Browsable(false)]
        public string bord_libre_no_mec { get; set; }
        [Browsable(false)]
        public string bord_aparc { get; set; }
        [Browsable(false)]
        public string bord_acera_mec { get; set; }
        [Browsable(false)]
        public string bord_acera_no_mec { get; set; }
        [Browsable(false)]
        public string calle_peat_mec { get; set; }
        [Browsable(false)]
        public string calle_peat_no_mec { get; set; }
        [Browsable(false)]
        public string caida_hoja_mec { get; set; }
        [Browsable(false)]
        public string caida_hoja_no_mec { get; set; }
        [Browsable(false)]
        public string contenedores { get; set; }
        [Browsable(false)]
        public string pape { get; set; }
        [Browsable(false)]
        public string zon_inf { get; set; }
        [Browsable(false)]
        public string pipican { get; set; }
        [Browsable(false)]
        public string sanecan { get; set; }


    #endregion
        #region PARAM_LIMP_Ocult
        [Browsable(false)]
        public int t_tratamiento_max { get; set; }
        [Browsable(false)]
        public int t_tratamiento_min { get; set; }
        [Browsable(false)]
        public int v_desplaz_max { get; set; }
        [Browsable(false)]
        public int v_desplaz_min { get; set; }
        [Browsable(false)]
        public int t_carga_desc_max { get; set; }
        [Browsable(false)]
        public int t_carga_desc_min { get; set; }
        [Browsable(false)]
        public int t_desplaz_max { get; set; }
        [Browsable(false)]
        public int t_desplaz_min { get; set; }
        [Browsable(false)]
        public int t_convenio_max { get; set; }
        [Browsable(false)]
        public int t_convenio_min { get; set; }
        [Browsable(false)]
        public int t_descanso_max { get; set; }
        [Browsable(false)]
        public int t_descanso_min { get; set; }
        [Browsable(false)]
        public int ancho_via_max { get; set; }
        [Browsable(false)]
        public int ancho_via_min { get; set; }

        #endregion
        #region ParametrosReco_Ocultos
        [Browsable(false)]
        public List<OliviaConfNW> ListaNw { get; set; }
        [Browsable(false)]
        public int t_vaciado_max { get; set; }
        [Browsable(false)]
        public int t_vaciado_min { get; set; }
        [Browsable(false)]
        public int t_llega_sale_max { get; set; }
        [Browsable(false)]
        public int t_llega_sale_min { get; set; }
        [Browsable(false)]
        public int t_descarga_max { get; set; }
        [Browsable(false)]
        public int t_descarga_min { get; set; }
        [Browsable(false)]
        public int R_t_convenio_max { get; set; }
        [Browsable(false)]
        public int R_t_convenio_min { get; set; }
        [Browsable(false)]
        public int R_t_descanso_max { get; set; }
        [Browsable(false)]
        public int R_t_descanso_min { get; set; }
        #endregion
        #region OtrasConfiguraciones
        [Browsable(false)]
        public string PathGdbGen { get; set; }

        [Browsable(false)]
        public string PathCartela { get; set; }

        [Browsable(false)]
        public string PathSimbVSM { get; set; }

        [Browsable(false)]
        public string PathSimbESRI { get; set; }
        #endregion
        #endregion

        #region 01General
        [Category("General")]
        [DisplayName("Red de carreteras")]
        [PropertyOrder(1)]
        [Description("Red de carreteras que se usa para la navegación")]
        [Editor(typeof(PropertyGridFilePickerLine), typeof(PropertyGridFilePickerLine))]
        public string Path_Eje_via { get; set; }

        [Category("General")]
        [DisplayName("Tipo Red de carreteras")]
        [PropertyOrder(1)]
        [Description("Tipo de Red de carreteras que se usa para la navegación")]
        [RefreshProperties(System.ComponentModel.RefreshProperties.All)]
        //[Editor(typeof(PropertyGridFilePickerLine), typeof(PropertyGridFilePickerLine))]
        public OpsNW Tipo_eje_via { get; set; }

        [Category("General")]
        [PropertyOrder(2)]
        [DisplayName("Buffer de exportación (m)")]
        [Description("Buuffer extra, en metros, que se va a exportar de la red de carreteras")]
        public int buffer_export { get; set; }

        [Category("General")]
        [PropertyOrder(3)]
        [DisplayName("Campo Sector")]
        [Description("Nombre del campo Sector donde se indica el sector al que pertenece el ámbito")]
        public string consulta_sector { get; set; }

        [Category("General")]
        [PropertyOrder(4)]
        [DisplayName("Campo Secuencia")]
        [Description("Nombre del campo Secuencia donde se indica el orden en que se trata el ámbito dentro de su sector")]
        public string consulta_secuen { get; set; }

        [Category("General")]
        [PropertyOrder(5)]
        [DisplayName("GDB para Resultados")]
        [Description("Gdb en la que se importarán los resultados de la ejecución")]
        [Editor(typeof(PropertyGridFilePickerGDB), typeof(PropertyGridFilePickerGDB))]
        public string Path_Gdb_Import { get; set; }

        [Category("General")]
        [PropertyOrder(6)]
        [DisplayName("Dataset para Resultados")]
        [Description("Dataset, dentro de la GDB, en la que se importarán los resultados de la ejecución")]
        [Editor(typeof(PropertyGridFilePickerDataset), typeof(PropertyGridFilePickerDataset))]
        public string Path_Dataset_Import { get; set; }

        [Category("General")]
        [PropertyOrder(7)]
        [DisplayName("Carpeta para listados (CSV)")]
        [Description("Carpeta en la que se guardarán los listados en CSV de la planificación")]
        [Editor(typeof(PropertyGridFilePickerFolder), typeof(PropertyGridFilePickerFolder))]
        public string Path_Guarda_Csv { get; set; }

        [Category("General")]
        [PropertyOrder(8)]
        [DisplayName("Ignorar aislados")]
        [Description("Indica si por defecto se van a ignorar elementos aislados")]
        public bool Igno_ais { get; set; }

        [Category("General")]
        [PropertyOrder(9)]
        [DisplayName("Campo para exportar ID")]
        [Description("Nombre del campo que indica el ID del ámbito")]
        public string id { get; set; }
        #endregion

        #region 02CamposLimp
        [Category("Campos Limpieza")]
        [PropertyOrder(1)]
        [DisplayName("Tipo de entidad")]
        [Description("Nombre del campo que indica el tipo de entidad")]
        public string cons_tip_ent { get; set; }

        [Category("Campos Limpieza")]
        [PropertyOrder(2)]
        [DisplayName("Mecanizable")]
        [Description("Nombre del campo que indica si es Mecanizable")]
        public string cons_mecaniz { get; set; }

        [Category("Campos Limpieza")]
        [PropertyOrder(3)]
        [DisplayName("Observaciones")]
        [Description("Nombre del campo de Observaciones")]
        public string cons_obser { get; set; }

        [Category("Campos Limpieza")]
        [PropertyOrder(4)]
        [DisplayName("Ancho aceras")]
        [Description("Nombre del campo que indica el Ancho de las aceras")]
        public string cons_anch_tip { get; set; }
        
        [Category("Campos Limpieza")]
        [PropertyOrder(5)]
        [DisplayName("Tipo de aparcamiento")]
        [Description("Nombre del campo que indica el Tipo de aparcamiento")]
        public string cons_tipolo { get; set; }
        #endregion

        #region 03AtrLimp
        [Category("Atributos Limpieza")]
        [PropertyOrder(1)]
        [DisplayName("Acera")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Acera'")]
        public string atr_acera { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(2)]
        [DisplayName("Banda Aparcamiento")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Banda de aparcamiento'")]
        public string atr_aparc { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(3)]
        [DisplayName("Bordillo libre")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Bordillo libre'")]
        public string atr_bord { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(4)]
        [DisplayName("Caída de hoja")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Caída de hoja'")]
        public string atr_hoja { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(5)]
        [DisplayName("Peatonales")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Calle peatonal'")]
        public string atr_peat { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(12)]
        [DisplayName("Mecanizable (MECANIZABLE=Sí)")]
        [Description("Valor del campo 'Mecanizable' para el atributo 'Sí Mecanizable'")]
        public string atr_mec_s { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(13)]
        [DisplayName("No mecanizable (MECANIZABLE=No)")]
        [Description("Valor del campo 'Mecanizable' para el atributo 'No mecanizable'")]
        public string atr_mec_n { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(6)]
        [DisplayName("Juegos infantiles")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Juegos infantiles'")]
        public string atr_infan { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(7)]
        [DisplayName("Papelera")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Papelera'")]
        public string atr_pape { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(8)]
        [DisplayName("Pipican")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Pipican'")]
        public string atr_pipi { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(9)]
        [DisplayName("Sanecan")]
        [Description("Valor del campo 'Tipo de entidad' para el atributo 'Saneacan'")]
        public string atr_sane { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(10)]
        [DisplayName("Aparcamiento en linea")]
        [Description("Valor del campo 'Tipo de aparcamiento' para el atributo 'Aparcamiento en linea'")]
        public string atr_ap_lin { get; set; }

        [Category("Atributos Limpieza")]
        [PropertyOrder(11)]
        [DisplayName("Aparacamiento en bateria")]
        [Description("Valor del campo 'Tipo de aparcamiento' para el atributo 'Aparcamiento en bateria'")]
        public string atr_ap_bat { get; set; }
        #endregion

        #region 04CamposRecogida
        [Category("Campos Recogida")]
        [DisplayName("Tipo de carga")]
        [Description("Nombre del campo que indica el tipo de carga")]
        public string nomrec { get; set; }

        [Category("Campos Recogida")]
        [DisplayName("Lateralidad")]
        [Description("Nombre del campo que indica la lateralidad")]
        public string lateralidad { get; set; }

        [Category("Campos Recogida")]
        [DisplayName("Fracción")]
        [Description("Nombre del campo que indica la fracción")]
        public string frac { get; set; }

        [Category("Campos Recogida")]
        [DisplayName("Capacidad")]
        [Description("Nombre del campo que indica la capacidad del contenedor, en m3")]
        public string capac { get; set; }

        [Category("Campos Recogida")]
        [DisplayName("Unidades")]
        [Description("Nombre del campo que indica el número de contenedores en una ubicación")]
        public string uds { get; set; }

        [Category("Campos Recogida")]
        [PropertyOrder(8)]
        [ReadOnly(false)]
        [DisplayName("Campo 'Kg del contenedor'")]
        [Description("Nombre del campo que indica los kg del contenedor")]
        public string kgrec { get; set; }

        [Category("Campos Recogida")]
        [PropertyOrder(9)]
        [ReadOnly(false)]
        [DisplayName("Kg por defecto")]
        [Description("Esta propiedad indica los kg a utilizar para todos los contenedores por defecto en caso de no leer el campo")]
        public int kgrec_val { get; set; }

        [Category("Campos Recogida")]
        [PropertyOrder(7)]
        [DisplayName("Kg a recoger")]
        [JsonIgnore]
        [Description("Esta propiedad indica si se usa contenedor lleno, en cuyo caso se emplea la densidad de la " +
            "fracción en contenedor y su capacidad, o bien si se debe usar el valor por defecto  'Kg defecto' o bien se deben leer los kg de cada contenedor del campo 'Kg del contenedor'")]
        [RefreshProperties(System.ComponentModel.RefreshProperties.All)]
        public OpsRecoCont opsRecoCont
        {
            get
            {
                OpsRecoCont val;
                if (is_lleno)
                {
                    val=OpsRecoCont.LlenoUsaDensidad;
                }
                else if (is_campo)
                {

                    val= OpsRecoCont.LeeCampoTabla;
                }
                else
                {
                    val= OpsRecoCont.UsaKgDef;
                }
                return val;
            }
            set
            {
                switch (value)
                {
                    case OpsRecoCont.LlenoUsaDensidad:
                        is_lleno = true;
                        is_campo = false;
                        break;
                    case OpsRecoCont.LeeCampoTabla:
                        is_lleno = false;
                        is_campo = true;
                        break;
                    case OpsRecoCont.UsaKgDef:
                        is_lleno = false;
                        is_campo = false;
                        break;
                }
                check(value);
            }
        }
        //falta hacer que al iniciar ya se pinten bien, al seleccionar lo hace bien
        void check(OpsRecoCont val)
        {
            PropertyDescriptor propDescrKgDef = TypeDescriptor.GetProperties(this.GetType())["kgrec_val"];
            PropertyDescriptor propDescrKgTabla = TypeDescriptor.GetProperties(this.GetType())["kgrec"];
            ReadOnlyAttribute attrKgDef = propDescrKgDef.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
            ReadOnlyAttribute attrKgTabla = propDescrKgTabla.Attributes[typeof(ReadOnlyAttribute)] as ReadOnlyAttribute;
            if (attrKgDef != null && attrKgTabla != null)
            {
                System.Reflection.FieldInfo aFieldKgDef = attrKgDef.GetType().GetField("isReadOnly", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                System.Reflection.FieldInfo aFieldKgTabla = attrKgTabla.GetType().GetField("isReadOnly", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                aFieldKgDef.SetValue(attrKgDef, val!= OpsRecoCont.UsaKgDef);
                aFieldKgDef.SetValue(attrKgTabla, val != OpsRecoCont.LeeCampoTabla);
            }
        }
        

        [Category("Campos Recogida")]
        [Browsable(false)]
        [DisplayName("¿Lleno?")]
        [Description("Indica si se debe considerar que todos los contenedores están llenos")]
        public bool is_lleno { get; set; }

        [Category("Campos Recogida")]
        [Browsable(false)]
        [DisplayName("¿Lee el campo de kg?")]
        [Description("Indica si se deben leer los kg de cada contenedor del campo 'Kg a recoger'")]
        public bool is_campo { get; set; }


        #endregion

        #region 05AtributosRecogida
        [Category("Atributos recogida")]
        [PropertyOrder(1)]
        [DisplayName("Fracción Organica")]
        [Description("Valor del campo 'Fracción' para el atributo 'Orgánica'")]
        public string organica { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(2)]
        [DisplayName("Fracción Resto")]
        [Description("Valor del campo 'Fracción' para el atributo 'Resto'")]
        public string resto { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(3)]
        [DisplayName("Fracción Envases")]
        [Description("Valor del campo 'Fracción' para el atributo 'Envases'")]
        public string envase { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(4)]
        [DisplayName("Fracción Papel")]
        [Description("Valor del campo 'Fracción' para el atributo 'Papel'")]
        public string papel { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(5)]
        [DisplayName("Fracción Vidrio")]
        [Description("Valor del campo 'Fracción' para el atributo 'Vidrio'")]
        public string vidrio { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(6)]
        [DisplayName("Carga trasera")]
        [Description("Valor del campo 'Tipo de carga' para el atributo 'Trasera'")]
        public string trasera { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(7)]
        [DisplayName("Carga lateral")]
        [Description("Valor del campo 'Tipo de carga' para el atributo 'Lateral'")]
        public string lateral { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(8)]
        [DisplayName("Carga superior")]
        [Description("Valor del campo 'Tipo de carga' para el atributo 'Superior'")]
        public string superior { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(9)]
        [DisplayName("Carga Bilateral")]
        [Description("Valor del campo 'Tipo de carga' para el atributo 'Bilateral'")]
        public string bilat { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(10)]
        [DisplayName("Bolseo")]
        [Description("Valor del campo 'Tipo de carga' para el atributo 'Bolseo'")]
        public string bolseo { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(11)]
        [DisplayName("Lavado")]
        [Description("Valor del campo 'Tipo de carga' para el atributo 'Lavado'")]
        public string lavado { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(14)]
        [DisplayName("Carga lat. - Ambos")]
        [Description("Valor del campo 'Lateralidad' para el atributo 'Ambos'")]
        public string ambos { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(12)]
        [DisplayName("Carga lat. - Derecha")]
        [Description("Valor del campo 'Lateralidad' para el atributo 'Derecha'")]
        public string derecha { get; set; }

        [Category("Atributos recogida")]
        [PropertyOrder(13)]
        [DisplayName("Carga lat. - Izquierda")]
        [Description("Valor del campo 'Lateralidad' para el atributo 'Izquierda'")]
        public string izquierda { get; set; }
        #endregion

        #region 06CambosNW
        [Category("Campos Red Navegable")]
        [DisplayName("Sentido de la vía")]
        [Description("Nombre del campo que indica si la vía es de doble sentido o no")]
        public string cons_onew { get; set; }

        [Category("Campos Red Navegable")]
        [DisplayName("Velocidad de la vía")]
        [Description("Nombre del campo que indica la velociad máxima permitida de la vía")]
        public string cons_kph { get; set; }

        [Category("Campos Red Navegable")]
        [DisplayName("Tipo de vía")]
        [Description("Nombre del campo que indica el tipo de la vía (usado para ver si es vía peatonal).")]
        public string cons_fow { get; set; }

        [Category("Campos Red Navegable")]
        [DisplayName("Nombre de la vía")]
        [Description("Nombre del campo que indica el nombre de la vía")]
        public string cons_name { get; set; }
        #endregion

        #region 07AtrNw
        [Category("Atributos Red Navegable")]
        [PropertyOrder(1)]
        [DisplayName("To-From")]
        [Description("Valor del campo 'Sentido de la vía' que indica sentido de la vía To-From")]
        public string atr_TF { get; set; }

        [Category("Atributos Red Navegable")]
        [PropertyOrder(2)]
        [DisplayName("From-To")]
        [Description("Valor del campo 'Sentido de la vía' que indica sentido de la vía From-To")]
        public string atr_FT { get; set; }

        [Category("Atributos Red Navegable")]
        [PropertyOrder(3)]
        [DisplayName("Sin circulación")]
        [Description("Valor del campo 'Sentido de la vía' que indica no circulación")]
        public string atr_N { get; set; }

        [Category("Atributos Red Navegable")]
        [PropertyOrder(4)]
        [DisplayName("Peatonal")]
        [Description("Valor del campo 'Tipo de vía' que indica que es calle peatonal")]
        public string atr_pedes { get; set; }

        #endregion

        #region 08TiemposJornAvanz  
        [Category("Tiempos de la jornada - Avanzadas")] //OCULTAR
        [DisplayName("Desplazamientos (min)")]
        [Description("Tiempo de desplazamiento desde la instalación al punto de partida de la ruta en horas:minutos, " +
            "cuando no hay definida instalación")]
        /*[JsonIgnore]
        public string timeDesplazamiento
        {
            get
            {
                return m2s(t_desplaz);
            }
            set
            {
                t_desplaz = s2m(value, t_desplaz);
            }
        }
        [Browsable(false)]*/
        public int t_desplaz { get; set; }

        [Category("Tiempos de la jornada - Avanzadas")] //OCULTAR
        [DisplayName("Carga/descarga (min)")]
        [Description("Tiempo de descarga en planta o bien carga/descarga en instalación, en horas:minutos")]
        /*[JsonIgnore]
        public string timeDescarga
        {
            get
            {
                return m2s(t_carga_desc);
            }
            set
            {
                t_carga_desc = s2m(value, t_carga_desc);
            }
        }
        [Browsable(false)]*/
        public int t_carga_desc { get; set; }

        [Category("Tiempos de la jornada - Avanzadas")] //OCULTAR
        [DisplayName("Descanso (min)")]
        [Description("Tiempo de descanso del personal según convenion, en minutos")]
        /*[JsonIgnore]
        public string timeDescanso
        {
            get
            {
                return m2s(t_descanso);
            }
            set
            {
                t_descanso = s2m(value, t_descanso);
            }
        }
        [Browsable(false)]*/
        public int t_descanso { get; set; }

        [Category("Tiempos de la jornada - Avanzadas")] //OCULTAR
        [PropertyOrder(1)]
        [DisplayName("Jornada (convenio)")]
        [Description("Tiempo de la jornada según convenio en formato horas:minutos")]
        [JsonIgnore]
        /*public string timeConvenio
        {
            get
            {
                return m2s(t_convenio);
            }
            set
            {
                t_convenio = s2m(value, t_convenio);
            }
        }*/
        [Editor(typeof(DateTimePickerEditor), typeof(DateTimePickerEditor))]
        public DateTime timeConvenio
        {
            get { return PanelGlobal.Hm_int2DateTime(t_convenio); }
            set
            {
                t_convenio = PanelGlobal.Hm_DateTime2int(value);
            }
        }
        [Browsable(false)]
        public int t_convenio { get; set; }


        [Category("Tiempos de la jornada - Avanzadas")] //OCULTAR
        [PropertyOrder(2)]
        [DisplayName("Hora de inicio")]
        [Description("Hora de inicio de la jornada, en horas:minutos")]
        [JsonIgnore]
        /*public string horaInicio
        {
            get
            {
                return m2s(hora_inicio);
            }
            set
            {
                hora_inicio = s2m(value, hora_inicio);
            }
        }*/
        [Editor(typeof(DateTimePickerEditor), typeof(DateTimePickerEditor))]
        public DateTime horaInicio
        {
            get { return PanelGlobal.Hm_int2DateTime(hora_inicio); }
            set
            {
                hora_inicio = PanelGlobal.Hm_DateTime2int(value);
            }
        }
        [Browsable(false)]
        public int hora_inicio { get; set; }    //ES UNA HORA, SON LOS MINUTOS DESDE LAS 00, PERO TIENE QUE APARECER CON FORMATO DE TIME 07:30, POR EJEMPLO

        [Category("Tiempos de la jornada - Avanzadas")]
        [DisplayName("Salida/llegada, en recogida (min)")]
        [Description("")]
        public int t_llega_sale { get; set; }

        [Category("Tiempos de la jornada - Avanzadas")]
        [DisplayName("Descarga en planta, en recogida (min)")]
        [Description("")]
        public int t_descarga { get; set; }

        [Category("Tiempos de la jornada - Avanzadas")] 
        [DisplayName("Reducción por tráfico %")]
        [Description("Reducción de la velocidad por tráfico, %")]
        public int reduc_traf { get; set; }
        #endregion

        #region 09AnchosLimpAvanz
        [Category("Anchos por defecto Limpieza (m) - Avanzadas")] //OCULTAR
        [DisplayName("Ancho de la vía")]
        [Description("Ancho vía cuando se usa eje de vía como ámbitos. En metros")]
        public int ancho_via { get; set; }

        [Category("Anchos por defecto Limpieza (m) - Avanzadas")] //OCULTAR
        [DisplayName("Calle peatonal")]
        [Description("Ancho por defecto calle peatonal. En metros")]
        public double Ancho_peat_def { get; set; }

        [Category("Anchos por defecto Limpieza (m) - Avanzadas")] //OCULTAR
        [DisplayName("Acera")]
        [Description("Ancho de acera por defecto. En metros")]
        public double Ancho_acera_def { get; set; }

        [Category("Anchos por defecto Limpieza (m) - Avanzadas")] //OCULTAR
        [DisplayName("Aparcamiento linea")]
        [Description("Ancho por defecto del aparcamiento en linea. En metros")]
        public double Ancho_ap_lin_def { get; set; }

        [Category("Anchos por defecto Limpieza (m) - Avanzadas")] //OCULTAR
        [DisplayName("Aparcamiento bateria")]
        [Description("Ancho por defecto del aparcamiento en bateria. En metros")]
        public double Ancho_ap_bat_def { get; set; }

        [Category("Anchos por defecto Limpieza (m) - Avanzadas")] //OCULTAR
        [DisplayName("Bordillo libre")]
        [Description("Ancho por defecto del bordillo libre. En metros")]
        public double Ancho_bord_lib_def { get; set; }

        #endregion

        #region 10TiemposLimpAvanz     
        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Barrido manual (m2/h)")]
        [Description("")]
        public int t_tratamiento_BarMan { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Barrido manual de mantenimiento (m2/h)")]
        [Description("")]
        public int t_tratamiento_BarManMant { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Barrido manual motorizado (m2/h)")]
        [Description("")]
        public int t_tratamiento_BarMMot { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Barrido mecánico de calzadas (m/h)")]
        [Description("")]
        public int t_tratamiento_BarMC { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Barrido mecánico de aceras y peatonales (m2/h)")]
        [Description("")]
        public int t_tratamiento_BarMAP { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Barrido mixto (m2/h)")]
        [Description("")]
        public int t_tratamiento_BarMix { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Baldeo manual (m2/h)")]
        [Description("")]
        public int t_tratamiento_BalMan { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Baldeo mecánico de calzadas (m/h)")]
        [Description("")]
        public int t_tratamiento_BalMC { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Baldeo mecánico de aceras y calles peatonales (m2/h)")]
        [Description("")]
        public int t_tratamiento_BalMAP { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Baldeo mixto (m2/h)")]
        [Description("")]
        public int t_tratamiento_BalMix { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Brigada de Limpieza (m2/h)")]
        [Description("")]
        public int t_tratamiento_BL { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Caída hoja (m2/h)")]
        [Description("")]
        public int t_tratamiento_CH { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Vaciado de Papeleras (min)")]
        [Description("")]
        /*[JsonIgnore]
        public string str_t_tratamiento_VPap
        {
            get
            {
                return m2s(t_tratamiento_VPap);
            }
            set
            {
                t_tratamiento_VPap = s2m(value, t_tratamiento_VPap);
            }
        }
        [Browsable(false)]*/
        public int t_tratamiento_VPap { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Limpieza de Papeleras (min)")]
        [Description("")]
        /*[JsonIgnore]
        public string Tiempo_tratamiento_LPap
        {
            get
            {
                return m2s(t_tratamiento_LPap);
            }
            set
            {
                t_tratamiento_LPap = s2m(value, t_tratamiento_LPap);
            }
        }
        [Browsable(false)]*/
        public int t_tratamiento_LPap { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Limpieza de contenedores (min)")]
        [Description("")]
        /*[JsonIgnore]
        public string str_t_tratamiento_LC
        {
            get
            {
                return m2s(t_tratamiento_LC);
            }
            set
            {
                t_tratamiento_LC = s2m(value, t_tratamiento_LC);
            }
        }
        [Browsable(false)]*/
        public int t_tratamiento_LC { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Limpieza de zonas infantiles (min)")]
        [Description("")]
        /*[JsonIgnore]
        public string str_t_tratamiento_LZI
        {
            get
            {
                return m2s(t_tratamiento_LZI);
            }
            set
            {
                t_tratamiento_LZI = s2m(value, t_tratamiento_LZI);
            }
        }
        [Browsable(false)]*/
        public int t_tratamiento_LZI { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Limpieza de pipicanes (min)")]
        [Description("")]
        /*[JsonIgnore]
        public string str_t_tratamiento_LPip
        {
            get
            {
                return m2s(t_tratamiento_LPip);
            }
            set
            {
                t_tratamiento_LPip = s2m(value, t_tratamiento_LPip);
            }
        }
        [Browsable(false)]*/
        public int t_tratamiento_LPip { get; set; }

        [Category("Tiempos de Tratamiento Limpieza - Avanzadas")] //OCULTAR
        [DisplayName("Limpieza de saneacanes (min)")]
        [Description("")]
        /*[JsonIgnore]
        public string str_t_tratamiento_LS
        {
            get
            {
                return m2s(t_tratamiento_LS);
            }
            set
            {
                t_tratamiento_LS = s2m(value, t_tratamiento_LS);
            }
        }
        [Browsable(false)]*/
        public int t_tratamiento_LS { get; set; }
        #endregion

        #region 11VeloDesplLimpAvanz
        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Barrido manual")]
        [Description("Velocidad de desplazamiento de barrido Manual")]
        public int v_desp_BarMan { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Barrido mantenimiento manual")]
        [Description("Velocidad de desplazamiento de barrido mantenimiento manual")]
        public int v_desp_BarManMant { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Barrido manual motorizado")]
        [Description("Velocidad de desplazamiento de Barrido manual motorizado")]
        public int v_desp_BarMMot { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Barrido mecánico calzadas")]
        [Description("Velocidad de desplazamiento de barrido mecánico de calzadas")]
        public int v_desp_BarMC { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Barrido aceras peatonales")]
        [Description("Velocidad de desplazamiento de barrido mecánico aceras peatonales")]
        public int v_desp_BarMAP { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Barrido mixto")]
        [Description("Velocidad de desplazamiento de barrido mixto")]
        public int v_desp_BarMix { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Baldeo manual")]
        [Description("Velocidad de desplazamiento de baldeo manual")]
        public int v_desp_BalMan { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Baldeo aceras peatonales")]
        [Description("Velocidad de desplazamiento de Baldeo_mecanico_aceras_peatonales")]
        public int v_desp_BalMAP { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Baldeo mixto")]
        [Description("Velocidad de desplazamiento de baldeo mixto")]
        public int v_desp_BalMix { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Brigada limpieza")]
        [Description("Velocidad de desplazamiento de brigada de limpieza")]
        public int v_desp_BL { get; set; }

        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Caída hoja")]
        [Description("Velocidad de desplazamiento de Caída de hoja")]
        public int v_desp_CH { get; set; }

        [Browsable(false)]//Es 0 porque va según la vía
        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Baldeo mecánico calzadas")]
        [Description("Velocidad de desplazamiento de baldeo mecánico de calzadas")]
        public int v_desp_BalMC { get; set; }

        [Browsable(false)] //Es 0 porque va según la vía
        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Vaciado papeleras")]
        [Description("Velocidad de desplazamiento de vaciado de papeleras")]
        public int v_desp_VPap { get; set; }

        [Browsable(false)] //Es 0 porque va según la vía
        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Limpieza papeleras")]
        [Description("Velocidad de desplazamiento de limpieza de papeleras")]
        public int v_desp_LPap { get; set; }

        [Browsable(false)] //Es 0 porque va según la vía
        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Limpieza contenedores")]
        [Description("Velocidad de desplazamiento de Limpieza de contenedores")]
        public int v_desp_LC { get; set; }

        [Browsable(false)] //Es 0 porque va según la vía
        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Limpieza zonas infantiles")]
        [Description("Velocidad de desplazamiento de Limpieza de zonas infantiles")]
        public int v_desp_LZI { get; set; }

        [Browsable(false)] //Es 0 porque va según la vía
        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Limpieza pipicanes")]
        [Description("Velocidad de desplazamiento de Limpieza de pipicanes")]
        public int v_desp_LPip { get; set; }

        [Browsable(false)] //Es 0 porque va según la vía
        [Category("Velocidades de Desplazamiento Limpieza (km/h) - Avanzadas")] //OCULTAR  
        [DisplayName("Limpieza saneacanes")]
        [Description("Velocidad de desplazamiento de Limpieza de sanecanes")]
        public int v_desp_LS { get; set; }

        #endregion

        #region 12TiemposRecoAvanz
        [Category("Tiempos de Tratamiento Recogida (seg) - Avanzadas")]//OCULTAR
        [DisplayName("Carga Trasera")]
        [Description("")]
        public int t_vaci_trasera { get; set; }

        [Category("Tiempos de Tratamiento Recogida (seg) - Avanzadas")]//OCULTAR
        [DisplayName("Carga Lateral")]
        [Description("")]
        public int t_vaci_lateral { get; set; }

        [Category("Tiempos de Tratamiento Recogida (seg) - Avanzadas")]//OCULTAR
        [DisplayName("Carga superior")]
        [Description("")]
        public int t_vaci_superior { get; set; }

        [Category("Tiempos de Tratamiento Recogida (seg) - Avanzadas")]//OCULTAR
        [DisplayName("Carga Bilateral")]
        [Description("")]
        public int t_vaci_bilateral { get; set; }

        [Category("Tiempos de Tratamiento Recogida (seg) - Avanzadas")]//OCULTAR
        [DisplayName("Bolseo")]
        [Description("")]
        public int t_vaci_bolseo { get; set; }

        [Category("Tiempos de Tratamiento Recogida (seg) - Avanzadas")]//OCULTAR
        [DisplayName("Lavado")]
        [Description("")]
        public int t_vaci_lavado { get; set; }

        [Category("Tiempos de Tratamiento Recogida (seg) - Avanzadas")]//OCULTAR
        [DisplayName("Otro tipo de carga")]
        [Description("")]
        public int t_vaci_otra { get; set; }
        #endregion

        #region 13DensRecoAvanz
        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Orgánica en Vehículo")]
        [Description("")]
        public int dens_vehi_org { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Resto en Vehículo")]
        [Description("")]
        public int dens_vehi_res { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Envases en Vehículo")]
        [Description("")]
        public int dens_vehi_env { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Papel en Vehículo")]
        [Description("")]
        public int dens_vehi_pap { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Vidrio en Vehículo")]
        [Description("")]
        public int dens_vehi_vid { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Otra fracción en Vehículo")]
        [Description("")]
        public int dens_vehi_otr { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Orgánica en Contenedor")]
        [Description("")]
        public int dens_cont_org { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Resto en Contenedor")]
        [Description("")]
        public int dens_cont_res { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Envases en Contenedor")]
        [Description("")]
        public int dens_cont_env { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Papel en Contenedor")]
        [Description("")]
        public int dens_cont_pap { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Vidrio en Contenedor")]
        [Description("")]
        public int dens_cont_vid { get; set; }

        [Category("Densidades Recogida (kg/m3) - Avanzadas")] //OCULTAR
        [DisplayName("Otra fracción en Contenedor")]
        [Description("")]
        public int dens_cont_otr { get; set; }
        #endregion

        #region 14CaractRecoAvanz
        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("Radio de giro máximo vehículo (º)")]
        [Description("")]
        public double Giro_max_vehiculo { get; set; }

        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("Ancho vehículo 3 ejes (m)")]
        [Description("")]
        public double anch_vehi_3 { get; set; }

        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("Ancho vehículo 2 ejes (m)")]
        [Description("")]
        public double anch_vehi_2 { get; set; }

        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("Ancho vehículo satélite (m)")]
        [Description("")]
        public double anch_vehi_s { get; set; }

        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("Radio de giro vehículo 3 ejes (º)")]
        [Description("")]
        public double radio_giro_3 { get; set; }

        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("Radio de giro vehículo 2 ejes (º)")]
        [Description("")]
        public double radio_giro_2 { get; set; }

        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("Radio de giro vehículo satélite (º)")]
        [Description("")]
        public double radio_giro_s { get; set; }

        [Browsable(false)]
        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("")]
        [Description("")]
        public int kgmax_max { get; set; }
        [Browsable(false)]
        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("")]
        [Description("")]
        public int kgmax_min { get; set; }
        [Browsable(false)]
        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("")]
        [Description("")]
        public int carga_max_max { get; set; }
        [Browsable(false)]
        [Category("Características Vehículo Recogida - Avanzadas")]//OCULTAR
        [DisplayName("")]
        [Description("")]
        public int carga_max_min { get; set; }

        #endregion

        #region 15GenAvanz
        /**
        * Puerto local donde va a realizar la conexión a OliviaTask, se inicializa al arrancar
        */
        [Category("General - Avanzadas")] //OCULTAR
        [DisplayName("Puerto de conexión")]
        [Description("Puerto de conexión con el proceso olivia")]
        public int Puerto { get; set; }

        [Category("General - Avanzadas")] //OCULTAR
        [DisplayName("Desviación máxima relativa")]
        [Description("Desviacion maxima relativa permitida entre los tiempos de los sectores, en tanto por 1")]
        public double Desv_max { get; set; }

        [Category("General - Avanzadas")] //OCULTAR
        [DisplayName("Desviación maxima absoluta")]
        [Description("Desviacion maxima absoluta permitida entre los tiempos de los sectores. en segundos")]
        public double Desv_max_abs { get; set; }
        #endregion

        #region 16SimbVSMAvanz
        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Escaleras")]
        [Description("Valor para el atributo escaleras")]
        public string atr_esca { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Fuentes")]
        [Description("Valor para el atributo fuentes")]
        public string atr_fuent { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Paso a nivel")]
        [Description("Valor para el atributo papelera para el atributo paso a nivel")]
        public string atr_paso_niv { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Areas Terrizas")]
        [Description("Valor para el atributo areas terrizas")]
        public string atr_terri { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Ocio")]
        [Description("Valor para el atributo Ocio")]
        public string atr_ocio { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Organismos oficiales")]
        [Description("Valor para el atributo organismos oficiales")]
        public string atr_org_ofi { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Organismos oficiales")]
        [Description("Valor para el atributo parques")]
        public string atr_parq { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Parking")]
        [Description("Valor para el atributo parking")]
        public string atr_park { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Playa")]
        [Description("Valor para el atributo playa")]
        public string atr_play { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Polideportivo")]
        [Description("Valor para el atributo polideportivo")]
        public string atr_polid { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("P. interes turistico")]
        [Description("Valor para el atributo los puntos de interes turistico")]
        public string atr_turis { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Solares")]
        [Description("Valor para el atributo solares")]
        public string atr_solar { get; set; }

        [Browsable(false)]//Estas creo que hay que quitarlas
        [Category("Simbología Cartela - Avanzadas")] //OCULTAR
        [DisplayName("Suelo")]
        [Description("Valor para el atributo uso del suelo")]
        public string atr_suelo { get; set; }
        #endregion  

    }
    public class EnumOpsNWToString : TypeConverter
    {
        public static List<OliviaConfNW> ListaNw { get; set; }
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            return (sourceType.Equals(typeof(OpsNW)));
        }

        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            return (destinationType.Equals(typeof(String)));
        }

        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            return base.ConvertFrom(context, culture, value);
        }

        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            if (!destinationType.Equals(typeof(String)))
            {
                throw new ArgumentException("Can only convert to string.", "destinationType");
            }

            if (!value.GetType().Equals(typeof(OpsNW)))
            {
                throw new ArgumentException("Can only convert an instance of enum.", "value");
            }
            int i = 0;
            
            if (int.TryParse(value.ToString().Substring(3), out i) && ListaNw != null && i < ListaNw.Count())
            {
                var aux = ListaNw[i];
                if (aux == null)

                   return "";
                else
                    return aux.nombre;

            }
            return "";
        }
          
    }
    public class EnumToStringUsingDescription : TypeConverter
    {
        
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            return (sourceType.Equals(typeof(Enum)));
        }

        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            return (destinationType.Equals(typeof(String)));
        }

        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            return base.ConvertFrom(context, culture, value);
        }

        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            if (!destinationType.Equals(typeof(String)))
            {
                throw new ArgumentException("Can only convert to string.", "destinationType");
            }

            if (!value.GetType().BaseType.Equals(typeof(Enum)))
            {
                throw new ArgumentException("Can only convert an instance of enum.", "value");
            }

            string name = value.ToString();
            object[] attrs =
                value.GetType().GetField(name).GetCustomAttributes(typeof(DescriptionAttribute), false);
            return (attrs.Length > 0) ? ((DescriptionAttribute)attrs[0]).Description : name;
        }
    }
}
