public String CreaLineaPersonaResponsable(PersonaResponsable persona)
        {
            var linea = new StringBuilder();

            linea.Append("\"");
            linea.Append(persona.Fecha.ToString("yyyy-MM-dd"));
            linea.Append("\",\"");
            linea.Append(persona.Entidad);
            linea.Append("\",\"");
            if (!String.IsNullOrEmpty(persona.TipoPersonaResponsable))
            {
                linea.Append(persona.TipoPersonaResponsable);
            }
            else
            {
                linea.Append(persona.IdTipoPersonaResponsable);
            }
            linea.Append("\",\"");
            linea.Append(DepuraCadena(persona.Institucion));
            linea.Append("\",\"");
            linea.Append(DepuraCadena(persona.Cargo));
            linea.Append("\",\"");
            linea.Append(DepuraCadena(persona.Nombre));
            linea.Append("\"\n");
            return(linea.ToString());
        }
        public void ConsultaPersonasResponsables()
        {
            var AbaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

            AbaxXBRLCellStoreMongo.ConnectionString = ConectionString;
            AbaxXBRLCellStoreMongo.DataBaseName     = DatabaseName;
            AbaxXBRLCellStoreMongo.JSONOutDirectory = JsonErrorDirectory;
            AbaxXBRLCellStoreMongo.Init();
            var listaElementos = AbaxXBRLCellStoreMongo.ConsultaElementos <MapaPersonasResponsables>("PersonasResponsablesReducido", "{}");
            var diccionarioElementosInstitucion = new Dictionary <String, IList <MapaPersonasResponsables> >();
            var diccionarioInstituciones        = new Dictionary <String, MapaPersonasResponsables>();
            var diccionarioPorPersona           = new Dictionary <String, PersonaResponsable>();

            foreach (var elemento in listaElementos)
            {
                elemento.HashInstitucion = CreaHashInstitucion(elemento);
                if (elemento.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitution"))
                {
                    if (!diccionarioInstituciones.ContainsKey(elemento.HashInstitucion))
                    {
                        diccionarioInstituciones.Add(elemento.HashInstitucion, elemento);
                    }
                }
                else if (!String.IsNullOrEmpty(elemento.IdSecuenciaPersona))
                {
                    elemento.HashPersona = UtilAbax.CalcularHash(elemento.HashInstitucion + elemento.IdSecuenciaPersona);
                    IList <MapaPersonasResponsables> listaPersonasMap;
                    if (!diccionarioElementosInstitucion.TryGetValue(elemento.HashInstitucion, out listaPersonasMap))
                    {
                        listaPersonasMap = new List <MapaPersonasResponsables>();
                        diccionarioElementosInstitucion.Add(elemento.HashInstitucion, listaPersonasMap);
                    }
                    listaPersonasMap.Add(elemento);
                }
            }

            foreach (var hashInstitucion in diccionarioElementosInstitucion.Keys)
            {
                MapaPersonasResponsables         elementoInstitucion;
                IList <MapaPersonasResponsables> listaElementosIterar;
                if (!diccionarioInstituciones.TryGetValue(hashInstitucion, out elementoInstitucion) ||
                    !diccionarioElementosInstitucion.TryGetValue(hashInstitucion, out listaElementosIterar))
                {
                    continue;
                }

                foreach (var elemento in listaElementosIterar)
                {
                    PersonaResponsable personaResponsable;
                    if (!diccionarioPorPersona.TryGetValue(elemento.HashPersona, out personaResponsable))
                    {
                        personaResponsable         = new PersonaResponsable();
                        personaResponsable.Entidad = elementoInstitucion.Entidad;
                        personaResponsable.Fecha   = elementoInstitucion.Fecha;
                        personaResponsable.TipoPersonaResponsable   = elementoInstitucion.TipoPersonaResponsable;
                        personaResponsable.Institucion              = elementoInstitucion.Valor;
                        personaResponsable.IdTipoPersonaResponsable = elementoInstitucion.IdTipoPersonaResponsable;
                        diccionarioPorPersona.Add(elemento.HashPersona, personaResponsable);
                        if (String.IsNullOrEmpty(personaResponsable.TipoPersonaResponsable))
                        {
                            personaResponsable.TipoPersonaResponsable = DeterminaEtiquetaTipoPersonaResponsable(elementoInstitucion.IdTipoPersonaResponsable);
                        }
                    }
                    if (elemento.IdConcepto.Equals("ar_pros_ResponsiblePersonPosition"))
                    {
                        personaResponsable.Cargo = elemento.Valor;
                    }
                    else if (elemento.IdConcepto.Equals("ar_pros_ResponsiblePersonName"))
                    {
                        personaResponsable.Nombre = elemento.Valor;
                    }
                }
            }
            //if (File.Exists(PathArchivoPersonasResponsables))
            //{
            //    File.Delete(PathArchivoPersonasResponsables);
            //}
            //File.Create(PathArchivoPersonasResponsables);
            using (StreamWriter w = File.AppendText(PathArchivoPersonasResponsables))
            {
                foreach (var hashPersona in diccionarioPorPersona.Keys)
                {
                    var persona = diccionarioPorPersona[hashPersona];
                    var linea   = CreaLineaPersonaResponsable(persona);
                    w.Write(linea);
                    //File.AppendAllText(PathArchivoPersonasResponsables, "text content" + Environment.NewLine);
                }
                w.Close();
            }
        }
Пример #3
0
        /// <summary>
        /// Método asíncrono que genera documentos en la collection PersonaResponsable de envios actuales no procesados.
        /// </summary>
        /// <returns></returns>
        async Task GeneraColeccionPersonaResponsable()
        {
            await Task.Run(() =>
            {
                List <PersonaResponsable> listaPersonasResponsables = new List <PersonaResponsable>();

                #region Eliminación de Documentos de la coleccion PersonaResponsable donde sus envíos no son actuales.
                var listaIdEnviosAEliminarEnPersonaResponsable = AbaxXBRLCellStoreMongo.ConsultaElementos <Envio>("Envio", "{EsVersionActual: false}").ToList();

                List <String> listaIdEnviosAEliminarEnPersonaResponsableCadena = new List <string>();

                if (listaIdEnviosAEliminarEnPersonaResponsable.Count > 0)
                {
                    listaIdEnviosAEliminarEnPersonaResponsableCadena = listaIdEnviosAEliminarEnPersonaResponsable.Select(envio => "'" + envio.IdEnvio + "',").ToList();
                }

                var filtros = "{IdEnvio: {$in : [" + String.Join(" ", listaIdEnviosAEliminarEnPersonaResponsableCadena.ToArray()).TrimEnd(',') + "]}}";

                AbaxXBRLCellStoreMongo.EliminarAsync("PersonaResponsable", filtros);
                #endregion

                #region Obtención de Envios Actuales a procesar.
                var listaEnvios = AbaxXBRLCellStoreMongo.ConsultaElementos <Envio>("Envio", "{EsVersionActual: true}");

                List <PersonaResponsable> listaPersonasResponsablesEnMongo = AbaxXBRLCellStoreMongo.ConsultaElementos <PersonaResponsable>("PersonaResponsable", "{}").ToList();

                foreach (var personaResponsableAux3 in listaPersonasResponsablesEnMongo)
                {
                    if (listaEnvios.ToList().Find(envio => envio.IdEnvio.Equals(personaResponsableAux3.IdEnvio)) != null)
                    {
                        var envio = listaEnvios.ToList().Find(envioAux => envioAux.IdEnvio.Equals(personaResponsableAux3.IdEnvio));
                        listaEnvios.Remove(envio);
                    }
                }
                #endregion

                List <Hecho> listaHechos = new List <Hecho>();

                #region Obtención de hechos que interesan, creación del listado de Personas Responsables a agregar a la colección PersonaResponsable.
                listaHechos = AbaxXBRLCellStoreMongo.ConsultaElementos <Hecho>("Hecho", ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, PersonaResponsable.universoIdHechos)).ToList();

                var hechosAgrupadosPorEnvio = listaHechos.GroupBy(hecho => hecho.IdEnvio).Select(grp => grp.ToList()).ToList();

                List <PersonaResponsable> listaPersonaResponsable = new List <PersonaResponsable>();

                foreach (var grupoHechosPorEnvio in hechosAgrupadosPorEnvio)
                {
                    var listaHechosPorSecuenciaInstitucion = grupoHechosPorEnvio.ToList().Where(hecho => hecho.MiembrosDimensionales.Count > 0).GroupBy(hecho => hecho.MiembrosDimensionales[0].MiembroTipificado).Select(grp => grp.ToList()).ToList();
                    var numeroFideicomiso = (grupoHechosPorEnvio.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_NumberOfTrust")) != null) ? grupoHechosPorEnvio.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_NumberOfTrust")).Valor : "";

                    foreach (var elementoListaSecuenciaInstitucion in listaHechosPorSecuenciaInstitucion)
                    {
                        var listaHechosPorSecuenciaPersona = (from hecho in elementoListaSecuenciaInstitucion from miembro in hecho.MiembrosDimensionales where miembro.IdDimension.Equals("ar_pros_ResponsiblePersonsSequenceTypedAxis") group hecho by miembro.MiembroTipificado into grupo select grupo.ToList()).ToList();

                        foreach (var lista in listaHechosPorSecuenciaPersona)
                        {
                            PersonaResponsable personaResponsable = new PersonaResponsable();
                            var hechoInstitucion = elementoListaSecuenciaInstitucion.Find(hechoInstitucionAux => hechoInstitucionAux.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonName"));

                            personaResponsable.IdEnvio         = (hechoInstitucion != null && hechoInstitucion.IdEnvio != null) ? hechoInstitucion.IdEnvio : "";
                            personaResponsable.Taxonomia       = (hechoInstitucion != null && hechoInstitucion.Taxonomia != null) ? hechoInstitucion.Taxonomia : "";
                            personaResponsable.ClaveCotizacion = (hechoInstitucion != null && hechoInstitucion.Entidad != null) ? hechoInstitucion.Entidad.Nombre : "";
                            personaResponsable.Fecha           = (hechoInstitucion != null && hechoInstitucion.Periodo != null) ? hechoInstitucion.Periodo.FechaInstante.GetValueOrDefault().ToString("dd/MM/yyyy") : "";
                            var miembro = hechoInstitucion.MiembrosDimensionales.ToList().Find(elemento => elemento.IdDimension.Equals("ar_pros_TypeOfResponsibleFigureAxis"));

                            if (miembro != null)
                            {
                                var etiquetaMiembroDimension = miembro.EtiquetasMiembroDimension.ToList().Find(elemento => (elemento.Idioma.Equals("es") && elemento.Rol.Equals("http://www.xbrl.org/2003/role/label")));
                                var valorEtiqueta            = (etiquetaMiembroDimension != null) ? etiquetaMiembroDimension.Valor : "";
                                personaResponsable.TipoPersonaResponsable = (valorEtiqueta != null) ? valorEtiqueta : "";
                            }

                            var hechoInstitucionAux2 = elementoListaSecuenciaInstitucion.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitution"));

                            personaResponsable.Institucion       = (hechoInstitucionAux2 != null && hechoInstitucionAux2.Valor != null) ? hechoInstitucionAux2.Valor : "";
                            personaResponsable.Cargo             = (lista.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonPosition")) != null) ? lista.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonPosition")).Valor : "";
                            personaResponsable.Nombre            = (lista.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonName")) != null) ? lista.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonName")).Valor : "";
                            personaResponsable.NumeroFideicomiso = numeroFideicomiso;

                            listaPersonaResponsable.Add(personaResponsable);
                        }
                    }
                }
                #endregion

                AbaxXBRLCellStoreMongo.UpsertCollectionReportes("PersonaResponsable", listaPersonaResponsable);
            });
        }
Пример #4
0
        public void GeneraColeccionPersonasResponsables()
        {
            var AbaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

            AbaxXBRLCellStoreMongo.ConnectionString = ConectionString;
            AbaxXBRLCellStoreMongo.DataBaseName     = DatabaseName;
            AbaxXBRLCellStoreMongo.Init();

            List <PersonaResponsable> listaAdministradores = new List <PersonaResponsable>();

            var listaEnvios = AbaxXBRLCellStoreMongo.ConsultaElementos <Envio>("Envio", "{}");

            List <Hecho> listaHechos = new List <Hecho>();

            //            long cantidadHechosAProcesar = 0;

            //            if (listaEnvios.Count > 0)
            //            {
            ////                cantidadHechosAProcesar = AbaxXBRLCellStoreMongo.CuentaElementosColeccion("Hecho", "{ 'Concepto.IdConcepto':  { $in: [ 'ar_pros_ResponsiblePersonInstitution','ar_pros_ResponsiblePersonName', 'ar_pros_ResponsiblePersonPosition'  ]} , IdEnvio: { $in: [ '97238FE67F4C496B8FEC7A17B86A733A']}}");

            //                cantidadHechosAProcesar = AbaxXBRLCellStoreMongo.CuentaElementosColeccion("Hecho", ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, PersonaResponsable.universoIdHechos));
            //            }

            //            if (cantidadHechosAProcesar == 0)
            //            {
            //                return;
            //            }

            //            var cantidad = 2000;
            //            decimal cantidadVecesAEjecutar = (decimal)cantidadHechosAProcesar / 2000;
            //            int cantidadVecesAEjecutarEntero = (int)cantidadVecesAEjecutar;
            //            long cantidadRegistrosUltimaPagina = cantidadHechosAProcesar - (cantidadVecesAEjecutarEntero * cantidad);

            //            if (cantidadVecesAEjecutar > cantidadVecesAEjecutarEntero)
            //            {
            //                cantidadVecesAEjecutarEntero = cantidadVecesAEjecutarEntero + 1;
            //            }

            //            if (listaEnvios.Count > 0)
            //            {

            //                for (var i = 1; i <= cantidadVecesAEjecutarEntero; i++)
            //                {
            //                    if (listaHechos.Count == 0)
            //                    {
            //                        if (i == (cantidadVecesAEjecutarEntero))
            //                        {
            //                            listaHechos = AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>(ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, PersonaResponsable.universoIdHechos), null, (int)cantidadRegistrosUltimaPagina, i).ToList();
            //                            //listaHechos = AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>("{ 'Concepto.IdConcepto':  { $in: [ 'ar_pros_ResponsiblePersonInstitution','ar_pros_ResponsiblePersonName', 'ar_pros_ResponsiblePersonPosition'  ]} , IdEnvio: { $in: [ '97238FE67F4C496B8FEC7A17B86A733A']}}", null, (int)cantidadRegistrosUltimaPagina, i).ToList();
            //                        }
            //                        else
            //                        {
            //                            listaHechos = AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>(ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, PersonaResponsable.universoIdHechos), null, cantidad, i).ToList();
            //                            //listaHechos = AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>("{ 'Concepto.IdConcepto':  { $in: [ 'ar_pros_ResponsiblePersonInstitution','ar_pros_ResponsiblePersonName', 'ar_pros_ResponsiblePersonPosition'  ]} , IdEnvio: { $in: [ '97238FE67F4C496B8FEC7A17B86A733A']}}", null, cantidad, i).ToList();
            //                        }

            //                    }
            //                    else
            //                    {
            //                        if (i == (cantidadVecesAEjecutarEntero))
            //                        {
            //                            listaHechos.AddRange(AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>(ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, PersonaResponsable.universoIdHechos), null, (int)cantidadRegistrosUltimaPagina, i).ToList());
            //                            //listaHechos.AddRange(AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>("{ 'Concepto.IdConcepto':  { $in: [ 'ar_pros_ResponsiblePersonInstitution','ar_pros_ResponsiblePersonName', 'ar_pros_ResponsiblePersonPosition'  ]} , IdEnvio: { $in: [ '97238FE67F4C496B8FEC7A17B86A733A']}}", null, (int)cantidadRegistrosUltimaPagina, i).ToList());
            //                        }
            //                        else
            //                        {
            //                            listaHechos.AddRange(AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>(ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, PersonaResponsable.universoIdHechos), null, cantidad, i).ToList());
            //                            //listaHechos.AddRange(AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>("{ 'Concepto.IdConcepto':  { $in: [ 'ar_pros_ResponsiblePersonInstitution','ar_pros_ResponsiblePersonName', 'ar_pros_ResponsiblePersonPosition'  ]} , IdEnvio: { $in: [ '97238FE67F4C496B8FEC7A17B86A733A']}}", null, cantidad, i).ToList());
            //                        }

            //                    }
            //                }

            //            }

            listaHechos = AbaxXBRLCellStoreMongo.ConsultaElementos <Hecho>("Hecho", ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, PersonaResponsable.universoIdHechos)).ToList();

            var hechosAgrupadosPorEnvio = listaHechos.GroupBy(hecho => hecho.IdEnvio).Select(grp => grp.ToList()).ToList();

            List <PersonaResponsable> listaPersonaResponsable = new List <PersonaResponsable>();

            foreach (var grupoHechosPorEnvio in hechosAgrupadosPorEnvio)
            {
                var listaHechosPorSecuenciaInstitucion = grupoHechosPorEnvio.ToList().GroupBy(hecho => hecho.MiembrosDimensionales[0].MiembroTipificado).Select(grp => grp.ToList()).ToList();

                foreach (var elementoListaSecuenciaInstitucion in listaHechosPorSecuenciaInstitucion)
                {
                    var listaHechosPorSecuenciaPersona = (from hecho in elementoListaSecuenciaInstitucion from miembro in hecho.MiembrosDimensionales where miembro.IdDimension.Equals("ar_pros_ResponsiblePersonsSequenceTypedAxis") group hecho by miembro.MiembroTipificado into grupo select grupo.ToList()).ToList();

                    foreach (var lista in listaHechosPorSecuenciaPersona)
                    {
                        PersonaResponsable personaResponsable = new PersonaResponsable();
                        var hechoInstitucion = elementoListaSecuenciaInstitucion.Find(hechoInstitucionAux => hechoInstitucionAux.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonName"));

                        personaResponsable.IdEnvio         = (hechoInstitucion != null && hechoInstitucion.IdEnvio != null) ? hechoInstitucion.IdEnvio : "";
                        personaResponsable.Taxonomia       = (hechoInstitucion != null && hechoInstitucion.Taxonomia != null) ? hechoInstitucion.Taxonomia : "";
                        personaResponsable.ClaveCotizacion = (hechoInstitucion != null && hechoInstitucion.Entidad != null) ? hechoInstitucion.Entidad.Nombre : "";
                        personaResponsable.Fecha           = (hechoInstitucion != null && hechoInstitucion.Periodo != null) ? hechoInstitucion.Periodo.FechaInstante.GetValueOrDefault().ToString("dd/MM/yyyy") : "";
                        var miembro = hechoInstitucion.MiembrosDimensionales.ToList().Find(elemento => elemento.IdDimension.Equals("ar_pros_TypeOfResponsibleFigureAxis"));

                        if (miembro != null)
                        {
                            var etiquetaMiembroDimension = miembro.EtiquetasMiembroDimension.ToList().Find(elemento => (elemento.Idioma.Equals("es") && elemento.Rol.Equals("http://www.xbrl.org/2003/role/label")));
                            var valorEtiqueta            = (etiquetaMiembroDimension != null) ? etiquetaMiembroDimension.Valor : "";
                            personaResponsable.TipoPersonaResponsable = (valorEtiqueta != null) ? valorEtiqueta : "";
                        }

                        var hechoInstitucionAux2 = elementoListaSecuenciaInstitucion.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitution"));

                        personaResponsable.Institucion = (hechoInstitucionAux2 != null && hechoInstitucionAux2.Valor != null) ? hechoInstitucionAux2.Valor : "";

                        personaResponsable.Cargo  = (lista.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonPosition")) != null) ? lista.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonPosition")).Valor : "";
                        personaResponsable.Nombre = (lista.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonName")) != null) ? lista.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_ResponsiblePersonName")).Valor : "";

                        listaPersonaResponsable.Add(personaResponsable);
                    }
                }
            }

            AbaxXBRLCellStoreMongo.UpsertCollectionReportes("PersonaResponsable", listaPersonaResponsable);
        }