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(); } }
/// <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); }); }
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); }