public List <Models.Filter> SearchNameFilter(string NameReport, List <string> ValuesLog, Dictionary <string, string> DicValuesFilterWS)
        {
            List <string>        Filters         = new List <string>();
            List <Models.Filter> ValuesFilters   = new List <Models.Filter>();
            ValuesInitials       getNameFilter   = new ValuesInitials();
            Singleton            PatronSingleton = Singleton.Instance;

            try
            {
                List <List <string> > ListListFilterValueWSI = new List <List <string> >();
                //For each para armar la lista que se va a enviar al método de búsqueda de los Filtros
                //Esto con el fin de agregar a la clase dichos valores.
                foreach (var item in DicValuesFilterWS)
                {
                    List <string> ListFilterValueWSI = new List <string>();
                    string        ValueFilterColumn  = item.Value.ToString();
                    string        caracterBuscado    = "-";
                    char[]        caracter           = new char[] { caracterBuscado.ToCharArray()[0] };

                    if (ValueFilterColumn.IndexOf(caracterBuscado) != -1)
                    {
                        string[] arrayCadena    = ValueFilterColumn.Split(caracter);
                        int      longitudCadena = arrayCadena.Length;
                        for (int i = 0; i < longitudCadena; i++)
                        {
                            ListFilterValueWSI.Add(arrayCadena[i].ToString());
                        }
                        ListListFilterValueWSI.Add(ListFilterValueWSI);
                    }
                    else
                    {
                        ListFilterValueWSI.Add(ValueFilterColumn);
                        ListListFilterValueWSI.Add(ListFilterValueWSI);
                    }
                }

                //Metodo de búsqueda de los Filtros
                ValuesFilters = getNameFilter.getValuesNameFilter(NameReport, DicValuesFilterWS);

                //Agregar a la Tabla Log información
                ValuesLog.RemoveAt(4);
                ValuesLog.RemoveAt(4);
                ValuesLog.Add("Inicio Home Controller. Función SearchNameFilter");
                ValuesLog.Add("INFO");
                PatronSingleton.AddValuesTableLog(ValuesLog);
                return(ValuesFilters);
            }
            catch (Exception e)
            {
                ValuesLog.Add("Inicio Home Controller. Función SearchNameFilter." + e.Message);
                ValuesLog.Add("ERROR");
                PatronSingleton.AddValuesTableLog(ValuesLog);
                throw e;
            }
        }
        public async Task <ActionResult> Index(string p)
        {
            string    NameReport      = String.Empty;
            Singleton PatronSingleton = Singleton.Instance;
            string    data            = String.Empty;

            try
            {
                List <string> ListLogs  = new List <string>();
                string        strmaresa = ConfigurationManager.AppSettings["compilamaresa"].ToString();

                if (Convert.ToInt32(strmaresa) == 1)
                {
                    NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(Request.UrlReferrer?.Query ?? @"");
                    string keyword = nameValueCollection["dt"];
                    data = keyword.Replace(' ', '+');
                }
                else
                {
                    data = ConfigurationManager.AppSettings["Token"];
                }

                usu = getUsuario(data);
                Session["usuario"] = usu.user;
                Session["empresa"] = usu.idEmpresa;
                Session["sistema"] = usu.idSistema;


                ListLogs.Add(usu.user);
                ListLogs.Add(usu.compania);
                ListLogs.Add(usu.idSistema);
                ListLogs.Add(Convert.ToString(DateTime.Now));


                Dictionary <string, string> DicValuesFilter = new Dictionary <string, string>();
                using (var client = new HttpClient(new HttpClientHandler {
                    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
                }))
                {
                    client.BaseAddress = new Uri(ApiUrlMaresa);
                    HttpResponseMessage response = client.GetAsync("Seguridades?id_usuario=" + usu.user + "&id_empresa=" + usu.idEmpresa + " &id_sistema=" + usu.idSistema + "").Result;
                    response.EnsureSuccessStatusCode();
                    string result = response.Content.ReadAsStringAsync().Result;
                    Newtonsoft.Json.Linq.JArray jsonObject = JArray.Parse(result);
                    //Aquí trataría el Método de búsqueda de los Filtros, que proporciona el WebServices de Maresa
                    NameReport      = GetValueNameResource(jsonObject);
                    DicValuesFilter = GetValueFromWebService(jsonObject, NameReport, ListLogs);
                }


                ListLogs.Add("Inicio Home Controller");
                ListLogs.Add("INFO");
                PatronSingleton.AddValuesTableLog(ListLogs);

                Filters = SearchNameFilter(NameReport, ListLogs, DicValuesFilter);


                if ((Filters == null) || (Filters.Count == 0))
                {
                    ViewBag.Error = "No existe(n) Filtro(s) para el reporte: " + NameReport;
                    return(View("Error"));
                }

                TempData["User"]         = usu.user;
                TempData["sessionUser"]  = ListLogs;
                TempData["ValuesFilter"] = Filters;
                TempData["NameReport"]   = NameReport;
                TempData.Keep();

                ListLogs.RemoveAt(4);
                ListLogs.RemoveAt(4);
                ListLogs.Add("Inicio Home Controller. OK");
                ListLogs.Add("INFO");
                PatronSingleton.AddValuesTableLog(ListLogs);

                return(RedirectToAction("Index", "EmbeddedReport"));


                ViewBag.Error = "Aplicación no esta configurada";
                return(View("Error"));
            }
            catch (Exception e)
            {
                ViewBag.Error = e.Message;
                return(View("Error"));
            }
        }
        public Dictionary <string, string> GetValueFromWebService(JArray jsonObject, string NameReport, List <string> ValuesLog)
        {
            Dictionary <string, string> DicValuesFilterColumn = new Dictionary <string, string>();
            Singleton PatronSingleton = Singleton.Instance;

            try
            {
                //Al final el dictionario debe quedar así, EMPRESA es el valor FiltroColumna de la Tabla FiltroReporte,
                //y el valor ó dato de ese FiltroColumna.  Casualmente el nombre del FiltroTabla es Empresa, pero difiere
                //en cuanto mayúsculas. Cuando el campo FiltroColumna, tenga varios valores, se dividirá con el símbolo -
                var NameFiltro = jsonObject[0]["NOMBREFILTRO"];
                var DatoFiltro = jsonObject[0]["DATOFILTRO"];


                string Item = String.Empty;

                Dictionary <string, string> DicNameFiltro = new Dictionary <string, string>();
                Dictionary <string, string> DicDatoFiltro = new Dictionary <string, string>();
                List <string> LstNameFiltro       = new List <string>();
                List <string> LstNameFiltroDupli  = new List <string>();
                List <string> LstValueFiltro      = new List <string>();
                List <string> LstValueFiltroDupli = new List <string>();
                Newtonsoft.Json.Linq.JArray jsonObjectDetalles = null;

                List <List <string> > LstLstDatoFiltro = new List <List <string> >();

                foreach (var valor in NameFiltro)
                {
                    string NameFilter = (string)valor["NOMBREFILTRO"];
                    LstNameFiltro.Add(NameFilter);
                    LstNameFiltroDupli.Add(NameFilter);
                }

                foreach (var valor in DatoFiltro)
                {
                    string NameFilter = (string)valor["datoFil"];
                    LstValueFiltro.Add(NameFilter);
                    LstValueFiltroDupli.Add(NameFilter);
                }

                //Guardo en una Lista los datos, por cada Filtro.
                //Aquí debo hacer un math con el campo WebServiceConnect,
                //Sí DATOFILTRO, no tiene campos de descripción, sino solo datos, se tomara ese dato.
                //Busco por medio del Nombre del Reporte, los valores que tiene el campo WebServiceConnect
                //Para hacer Math con el campo WebServiceConnect
                List <Models.Filter> ValuesFieldConnect = GetValueFieldConnect(NameReport);


                int                  i              = 0;
                Models.Filter        ItemFilter     = new  Models.Filter();
                List <Models.Filter> Items          = new List <Models.Filter>();
                int                  cantidadFiltro = LstNameFiltro.Count();
                int                  m              = 0;

                for (int l = 0; l < cantidadFiltro; l++)
                {
                    string  NameFilter = LstNameFiltroDupli[l];
                    string  DatoFilter = LstValueFiltroDupli[l];
                    dynamic Resultado  = ValuesFieldConnect.Where(p => p.NombreFiltro == NameFilter).FirstOrDefault();
                    ItemFilter = ValuesFieldConnect.Where(p => p.NombreFiltro == NameFilter).FirstOrDefault();
                    if (ItemFilter != null)
                    {
                        Items.Add(ItemFilter);
                    }
                    else
                    {
                        //Guarda Log
                        ValuesLog.Add("Configuración de Filtros: Filtro Ausente: " + NameFilter);
                        ValuesLog.Add("INFO");
                        PatronSingleton.AddValuesTableLog(ValuesLog);

                        LstNameFiltro.Remove(NameFilter);
                        LstValueFiltro.RemoveAt(m);
                        DatoFiltro[m].Remove();
                        m--;
                    }
                    m++;
                }



                foreach (var detallesField in Items)
                {
                    List <string> LstDatoFiltro = new List <string>();
                    Item = detallesField.WebServiceConnect;
                    for (int j = 0; j < DatoFiltro.Count(); j++)
                    {
                        dynamic DetallesRegistros = DatoFiltro[j];
                        var     itemValorDetalle  = String.Empty;
                        string  DataFilter1       = (string)DetallesRegistros["datoFil"];


                        jsonObjectDetalles = JArray.Parse(DataFilter1);
                        if (jsonObjectDetalles.Count() == 1)
                        {
                            string valoresFiltro = DetallesRegistros.GetValue("datoFil");
                            itemValorDetalle = (string)jsonObjectDetalles[0][Item];
                            if (itemValorDetalle != null)
                            {
                                LstDatoFiltro.Add(itemValorDetalle);
                                string cadenaAplanada = String.Join("-", LstDatoFiltro);
                                LstDatoFiltro = new List <string>();
                                LstDatoFiltro.Add(cadenaAplanada);
                                LstLstDatoFiltro.Add(LstDatoFiltro);
                                break;
                            }
                        }
                        else
                        {
                            for (int k = 0; k < jsonObjectDetalles.Count(); k++)
                            {
                                itemValorDetalle = (string)jsonObjectDetalles[k][Item];
                                if (itemValorDetalle != null)
                                {
                                    LstDatoFiltro.Add(itemValorDetalle);
                                    string cadenaAplanada = String.Join("-", LstDatoFiltro);
                                    LstDatoFiltro = new List <string>();
                                    LstDatoFiltro.Add(cadenaAplanada);
                                }
                                else
                                {
                                    break;
                                }
                            }
                            if (LstDatoFiltro.Count > 0)
                            {
                                LstLstDatoFiltro.Add(LstDatoFiltro);
                                LstDatoFiltro = new List <string>();
                            }
                        }
                    }
                }

                //Este for, es para dividir la lista,
                //si tiene mas de un valor, este se separa con el símbolo del guión medio

                for (int j = 0; j < LstNameFiltro.Count(); j++)
                {
                    DicValuesFilterColumn.Add(LstNameFiltro[j].ToString(), LstLstDatoFiltro[j][0].ToString());
                }


                //DicValuesFilterColumn.Add("EMPRESA", "01");
                //DicValuesFilterColumn.Add("BAJO", "0,05-0,06");
                //DicValuesFilterColumn.Add("FECHA_APERTURA", "2019/11/30");
                return(DicValuesFilterColumn);
            }
            catch (Exception e)
            {
                throw e;
            }
        }