Example #1
0
        /// <summary>
        /// Checks if the send exists in the data base.
        /// </summary>
        /// <param name="reportId">Identifier of the send.</param>
        /// <param name="abaxXBRLCellStoreMongo">Data access object.</param>
        /// <returns>If the send exists.</returns>
        public static BsonDocument GetRecentlyReportSend(string reportId, AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
        {
            var db         = abaxXBRLCellStoreMongo.GetMongoDB();
            var collection = db.GetCollection <BsonDocument>(COLLECTION_NAME);
            var match      = new BsonDocument {
                { "reportId", reportId }, { "isReplaced", false }
            };
            var groupDistinctDates = new BsonDocument {
                { "_id", "$registrationDate" }
            };
            var groupMaxDate = new BsonDocument
            {
                { "_id", "_id" },
                { "maxDate", new BsonDocument {
                      { "$max", "$_id" }
                  } }
            };
            var projectAsStrig = new BsonDocument
            {
                { "_id", 0 },
                { "maxDate", new BsonDocument
                  {
                      { "$dateToString", new BsonDocument {
                            { "date", "$maxDate" }, { "format", "%Y-%m-%dT%H:%M:%S.%LZ" }
                        } }
                  } }
            };
            var aggregate = collection.Aggregate().Match(match).
                            Group(groupDistinctDates).Group(groupMaxDate).Project(projectAsStrig);

            return(aggregate.FirstOrDefault());
        }
Example #2
0
        /// <summary>
        /// Obtiene las opciones para el combo Año del reporte Eventos Relevantes y Principales cuentas del sector (Descripcioón por sectores).
        /// </summary>
        /// <param name="clavesCotizacionEmisoras"></param>
        /// <returns></returns>
        public ResultadoOperacionDto ObtenerAniosEnvioIFRS(string[] clavesCotizacionEmisoras)
        {
            var cadenaClavesCotizacion = "'" + String.Join("','", clavesCotizacionEmisoras) + "'";

            StringBuilder parametros = new StringBuilder();

            parametros.Append("{ ");
            parametros.Append("Taxonomia: {$regex: 'full_ifrs'}, ");
            parametros.Append("'Entidad.Nombre': { $in: [ " + cadenaClavesCotizacion + "]}");
            parametros.Append("}");

            IList <Envio>        envios    = AbaxXBRLCellStoreMongo.ConsultaElementos <Envio>("Envio", parametros.ToString());
            List <LlaveValorDto> listaAnos = new List <LlaveValorDto>();

            foreach (var envio in envios)
            {
                Object ano = "";
                envio.Parametros.TryGetValue("Ano", out ano);
                LlaveValorDto llaveValorDto = new LlaveValorDto(ano.ToString(), ano.ToString());

                if (listaAnos.Find(elemento => elemento.Llave.Equals(llaveValorDto.Llave) && elemento.Valor.Equals(llaveValorDto.Valor)) == null)
                {
                    listaAnos.Add(new LlaveValorDto(ano.ToString(), ano.ToString()));
                }
            }

            listaAnos.Sort((x, y) => Convert.ToInt32(x.Llave).CompareTo(Convert.ToInt32(y.Llave)));

            ResultadoOperacionDto resultadoOperacionDto = new ResultadoOperacionDto();

            resultadoOperacionDto.InformacionExtra = listaAnos;
            resultadoOperacionDto.Resultado        = true;
            return(resultadoOperacionDto);
        }
 public ActualizaNombreAdministradorTest()
 {
     abaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();
     abaxXBRLCellStoreMongo.JSONOutDirectory = @"..\..\TestOutput\";
     //abaxXBRLCellStoreMongo.ConnectionString = "mongodb://localhost/test";
     abaxXBRLCellStoreMongo.ConnectionString = "mongodb+srv://oscarloyola:[email protected]/test";
     abaxXBRLCellStoreMongo.DataBaseName     = "xbrlcellstore";
     abaxXBRLCellStoreMongo.Init();
 }
Example #4
0
        public void ConsultaNBis1()
        {
            var AbaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

            AbaxXBRLCellStoreMongo.ConnectionString = ConectionString;
            AbaxXBRLCellStoreMongo.DataBaseName     = DatabaseName;
            AbaxXBRLCellStoreMongo.JSONOutDirectory = JsonErrorDirectory;
            AbaxXBRLCellStoreMongo.Init();
            var listaElementos            = AbaxXBRLCellStoreMongo.ConsultaElementos <Nbis1Raw>("NbisUnoFideicomisoReducido", "{}");
            var diccionarioElementosNBis1 = new Dictionary <String, NBis1TableElement>();

            foreach (var elemento in listaElementos)
            {
                NBis1TableElement elementoTabla = null;
                if (!diccionarioElementosNBis1.TryGetValue(elemento.IdEnvio, out elementoTabla))
                {
                    elementoTabla         = new NBis1TableElement();
                    elementoTabla.Fecha   = elemento.Fecha;
                    elementoTabla.Entidad = elemento.Entidad;
                    elementoTabla.IdEnvio = elemento.IdEnvio;
                    diccionarioElementosNBis1.Add(elemento.IdEnvio, elementoTabla);
                }
                var idConcepto = elemento.IdConcepto;
                if (idConcepto.Equals("ar_pros_NumberOfTrust"))
                {
                    elementoTabla.NumeroFideicomiso = elemento.Valor;
                }
                else if (idConcepto.Equals("ar_pros_NameOfTheIssuer"))
                {
                    elementoTabla.Fiduciario = elemento.Valor;
                }
                else if (idConcepto.Equals("ar_pros_Settlor"))
                {
                    elementoTabla.Fideicomitente = elemento.Valor;
                }
                else if (idConcepto.Equals("ar_pros_GuaranteesOnAssets"))
                {
                    elementoTabla.Garantia = elemento.Valor;
                }
                else if (idConcepto.Equals("ar_pros_OtherThirdPartiesObligatedWithTheTrust"))
                {
                    elementoTabla.Otros = elemento.Valor;
                }
            }

            using (StreamWriter w = File.AppendText(PathArchivoNBis1Csv))
            {
                foreach (var idEnvio in diccionarioElementosNBis1.Keys)
                {
                    var elementoTabla = diccionarioElementosNBis1[idEnvio];
                    var linea         = CreaLineaCsv(elementoTabla);
                    w.Write(linea);
                }
                w.Close();
            }
        }
Example #5
0
        /// <summary>
        /// Obtiene la conexión a la base de datos.
        /// </summary>
        /// <returns>Base de datos con la conexión.</returns>
        public AbaxXBRLCellStoreMongo GetCellStoreMongo()
        {
            AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

            abaxXBRLCellStoreMongo.JSONOutDirectory = @"..\..\TestOutput\";
            abaxXBRLCellStoreMongo.ConnectionString = "mongodb://localhost/jbrl";
            abaxXBRLCellStoreMongo.DataBaseName     = "jbrl";
            abaxXBRLCellStoreMongo.Init();
            return(abaxXBRLCellStoreMongo);
        }
Example #6
0
 public CargaHechosXBRLaJBRLdeRSSTest()
 {
     abaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();
     abaxXBRLCellStoreMongo.JSONOutDirectory = @"..\..\TestOutput\";
     //abaxXBRLCellStoreMongo.ConnectionString = "mongodb://localhost/test";
     abaxXBRLCellStoreMongo.ConnectionString = "mongodb+srv://oscarloyola:[email protected]/test";
     abaxXBRLCellStoreMongo.DataBaseName     = "xbrlcellstore";
     //abaxXBRLCellStoreMongo.Init2();
     taskList = new List <Task>();
 }
 /// <summary>
 /// Evalua la taxonomía y llena los elementos necearios para su persistencia.
 /// </summary>
 /// <param name="taxonomia">TAxonomía que se evalua.</param>
 /// <param name="roles">Lista de roles de presentación.</param>
 /// <param name="dimensiones">Lista de dimensiónes.</param>
 /// <param name="concepotsRol">Posición de los roles de presentación por concepto.</param>
 private void ObtenElementosTaxonomia(
     AbaxXBRLCellStoreMongo cellStoreMongo,
     TaxonomiaDto taxonomia, out IList <String> roles, out IList <String> dimensiones, out IDictionary <String, IDictionary <String, int> > concepotsRol)
 {
     roles        = cellStoreMongo.RolesSpotfire;
     dimensiones  = cellStoreMongo.DimensionesSpotfire;
     concepotsRol = new Dictionary <String, IDictionary <String, int> >();
     foreach (var rolPresentacion in taxonomia.RolesPresentacion)
     {
         var aliasRol = ObtenAliasRol(rolPresentacion.Uri);
         EvaluaEstructuras(taxonomia, rolPresentacion.Estructuras, aliasRol, roles, dimensiones, concepotsRol, 0);
     }
 }
Example #8
0
        public void TestProcesarDistribucionDocumentosXBRL()
        {
            LogUtil.LogDirPath = @"..\..\TestOutput\";
            LogUtil.Inicializa();
            var DirectorioProcesar = @"..\..\TestInput\XBRL\JBRL\Auxiliar";
            var xpe = XPEServiceImpl.GetInstance(true);
            var abaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

            abaxXBRLCellStoreMongo.JSONOutDirectory = @"..\..\TestOutput\";
            abaxXBRLCellStoreMongo.ConnectionString = "mongodb://localhost/jbrl";
            abaxXBRLCellStoreMongo.DataBaseName     = "jbrl";

            //abaxXBRLCellStoreMongo.ConnectionString = "mongodb+srv://oscarloyola:[email protected]/xbrl?retryWrites=true";
            //abaxXBRLCellStoreMongo.DataBaseName = "xbrl";
            abaxXBRLCellStoreMongo.Init();
            var mongoDB = abaxXBRLCellStoreMongo.GetMongoDB();

            XPEService xpeService = XPEServiceImpl.GetInstance();

            string[] fileEntries = Directory.GetFiles(DirectorioProcesar);
            var      taskList    = new List <Task>();

            foreach (string rutaArchivo in fileEntries)
            {
                var registrationDate = System.IO.File.GetLastWriteTime(rutaArchivo);
                var fileName         = Path.GetFileName(rutaArchivo);
                using (var reader = File.OpenRead(rutaArchivo))
                {
                    var reportParams = new Dictionary <String, String>();
                    var factsList    = new List <FactJBRL>();
                    DocumentoInstanciaXbrlDto documentoInstanciXbrlDto = xpeService.CargaInstanciaXBRLStreamFile(reader, fileName);
                    if (documentoInstanciXbrlDto.Taxonomia == null)
                    {
                        JBRLUtils.ObtenerTaxonomia(documentoInstanciXbrlDto);
                    }
                    JBRLUtils.InsertFacts(
                        documentoInstanciXbrlDto,
                        reportParams,
                        factsList,
                        taskList,
                        registrationDate,
                        abaxXBRLCellStoreMongo);
                }
                System.GC.Collect();
            }
            Task.WaitAll(taskList.ToArray());
        }
Example #9
0
        public void GeneraHechosCreditos()
        {
            LogUtil.LogDirPath = @"..\..\TestOutput\";
            LogUtil.Inicializa();
            var AbaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

            AbaxXBRLCellStoreMongo.ConnectionString = ConectionString;
            AbaxXBRLCellStoreMongo.DataBaseName     = DatabaseName;
            AbaxXBRLCellStoreMongo.JSONOutDirectory = JsonErrorDirectory;
            AbaxXBRLCellStoreMongo.Init();
            var listaElementos = AbaxXBRLCellStoreMongo.ConsultaElementos <IDictionary <string, object> >(ColeccionOrigen, "{}");

            foreach (var elemento in listaElementos)
            {
                LogUtil.Info(elemento);
            }
        }
Example #10
0
        public void Consulta4D()
        {
            LogUtil.LogDirPath = @"..\..\TestOutput\";
            LogUtil.Inicializa();

            var AbaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

            AbaxXBRLCellStoreMongo.ConnectionString = ConectionString;
            AbaxXBRLCellStoreMongo.DataBaseName     = DatabaseName;
            AbaxXBRLCellStoreMongo.JSONOutDirectory = JsonErrorDirectory;
            AbaxXBRLCellStoreMongo.Init();
            var listaElementos       = AbaxXBRLCellStoreMongo.ConsultaElementos <HechoReducido>(ColeccionOrigen, "{}");
            var diccionarioElementos = new Dictionary <String, ElementoConsulta4D>();

            File.Delete(PathArchivoCSV);
            LlenaElementosBase(listaElementos, diccionarioElementos, AbaxXBRLCellStoreMongo);
            LlenaInformacionFinanciera(listaElementos, diccionarioElementos);
            AjusteAdicionalPorInconsistencia(listaElementos, diccionarioElementos);
            using (StreamWriter w = File.AppendText(PathArchivoCSV))
            {
                foreach (var idEnvio in diccionarioElementos.Keys)
                {
                    var elementoTabla = diccionarioElementos[idEnvio];
                    if (String.IsNullOrEmpty(elementoTabla.NumeroTrimestre))
                    {
                        LogUtil.Error(new Dictionary <String, object>()
                        {
                            { "Error", " Inconsistencia de datos" },
                            { "Elemento", elementoTabla }
                        });
                        continue;
                    }
                    if (elementoTabla.NumeroTrimestre.Contains("4D"))
                    {
                        var linea = CreaLineaCsv(elementoTabla);
                        w.Write(linea);
                    }
                }
                w.Close();
            }
        }
Example #11
0
        /// <summary>
        /// Insert the facts of a document into the mongo database.
        /// </summary>
        /// <param name="documentoInstanciXbrlDto">Documento to evaluate.</param>
        /// <param name="reportParams">Extra params to include.</param>
        /// <param name="factsList">Extra facts to include.</param>
        /// <param name="taskList">List of task to wait befor ends.</param>
        /// <param name="registrationDate">Registration date of the document.</param>
        /// <param name="abaxXBRLCellStoreMongo">Data access object of mongo.</param>
        public static void InsertFacts(
            DocumentoInstanciaXbrlDto documentoInstanciXbrlDto,
            IDictionary <String, String> reportParams,
            IList <FactJBRL> factsList,
            IList <Task> taskList,
            DateTime registrationDate,
            AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
        {
            var mongoDB = abaxXBRLCellStoreMongo.GetMongoDB();

            JBRLUtils.SetReportParams(documentoInstanciXbrlDto, reportParams);
            var reportId       = JBRLUtils.CreateReportId(reportParams);
            var reportRecordId = JBRLUtils.CreateReportRecordId(reportId, registrationDate);

            if (JBRLUtils.ExistsReportRecord(reportRecordId, abaxXBRLCellStoreMongo))
            {
                return;
            }
            var replacementId =
                JBRLUtils.SarchReplacementId(reportId, reportRecordId, registrationDate, abaxXBRLCellStoreMongo);

            if (replacementId == null)
            {
                var taskVersion =
                    JBRLUtils.UpdateReportsReplacementVersionAsync(reportId, reportRecordId, abaxXBRLCellStoreMongo);
                taskList.Add(taskVersion);
            }
            foreach (var hechoId in documentoInstanciXbrlDto.HechosPorId.Keys)
            {
                var hecho = documentoInstanciXbrlDto.HechosPorId[hechoId];
                if (hecho.TipoDatoXbrl.Contains("64"))
                {
                    continue;
                }
                var hechoJbrl = FactJBRL.Parse(
                    hecho, documentoInstanciXbrlDto, reportId, reportRecordId,
                    registrationDate, reportParams, replacementId);
                if (hechoJbrl != null)
                {
                    factsList.Add(hechoJbrl);
                }
                else
                {
                    LogUtil.Error(new Dictionary <string, object>()
                    {
                        { "Error", "No fué posible convertir el hecho a JBRL" },
                        { "HechoId", hecho.Id ?? "null" },
                        { "Concepto", hecho.IdConcepto ?? "null" },
                        { "Hecho", hecho }
                    });
                }
            }
            var modeloBaseList = new List <IModeloBase>();

            modeloBaseList.AddRange(factsList);
            abaxXBRLCellStoreMongo.InserttChunksCollection(mongoDB, JBRLUtils.COLLECTION_NAME, modeloBaseList);
            var taskFactsEvaluation = JBRLUtils.
                                      UpdatePreviousFactsReplacementVersionAsync(factsList, abaxXBRLCellStoreMongo);

            taskList.Add(taskFactsEvaluation);
        }
Example #12
0
        /// <summary>
        /// Get a list of string dates less that the given date.
        /// </summary>
        /// <param name="taxonomyId">Taxonomy identifier.</param>
        /// <param name="entityId">Entity identifier.</param>
        /// <param name="maxDate">Date to compare.</param>
        /// <param name="abaxXBRLCellStoreMongo">Data access object</param>
        /// <returns>List with the string dates.</returns>
        public static async Task <IList <string> > FindLowestDatesAsync(string taxonomyId, string entityId, DateTime maxDate, AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
        {
            var db         = abaxXBRLCellStoreMongo.GetMongoDB();
            var collection = db.GetCollection <BsonDocument>(COLLECTION_NAME);
            var match      = new BsonDocument
            {
                { "dimensionMap.taxonomyId", taxonomyId },
                { "dimensionMap.instanceDocmentEntity", entityId }
            };
            var groupDistinctDates = new BsonDocument {
                { "_id", "$dimensionMap.instanceDocmentReportedDate" }
            };
            var projectParseDate = new BsonDocument
            {
                { "_id", "$_id" },
                { "date", new BsonDocument
                  {
                      { "$dateFromString", new BsonDocument {
                            { "dateString", "$_id" }
                        } }
                  } }
            };
            FilterDefinition <BsonDocument> matchLessDate = "{\"date\":{\"$lt\":" + ModeloBase.ParseJson(maxDate) + "}}";
            var aggregate = collection.Aggregate().
                            Match(match).Group(groupDistinctDates).Project(projectParseDate).Match(matchLessDate);
            var documentsList = await aggregate.ToListAsync();

            var listDates = new List <string>();

            foreach (var document in documentsList)
            {
                listDates.Add(document["_id"].AsString);
            }
            return(listDates);
        }
Example #13
0
        /// <summary>
        /// Set the replacement to same facts reported in distinct documents.
        /// </summary>
        /// <param name="factsList">The list of facts to evaluate.</param>
        /// <param name="abaxXBRLCellStoreMongo">Data access object.</param>
        public static async Task UpdatePreviousFactsReplacementVersionAsync(IList <FactJBRL> factsList, AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
        {
            if (factsList.Count == 0)
            {
                return;
            }
            var first = factsList.First();

            if (first.isReplaced)
            {
                return;
            }

            string entityId   = null;
            string taxonomyId = null;

            if (!first.dimensionMap.TryGetValue("instanceDocmentEntity", out entityId) || string.IsNullOrEmpty(entityId) ||
                !first.dimensionMap.TryGetValue("taxonomyId", out taxonomyId) || string.IsNullOrEmpty(taxonomyId))
            {
                return;
            }
            var maxReportedDate = await GetMaxReportedDateAsync(taxonomyId, entityId, abaxXBRLCellStoreMongo);

            if (maxReportedDate == null)
            {
                return;
            }
            var reportedDatesList = await FindLowestDatesAsync(taxonomyId, entityId, maxReportedDate ?? DateTime.MinValue, abaxXBRLCellStoreMongo);

            string currentDateString = null;

            first.dimensionMap.TryGetValue("instanceDocmentReportedDate", out currentDateString);
            if (currentDateString != null)
            {
                var currentDate = DateTime.Parse(currentDateString);
                if (currentDate < maxReportedDate)
                {
                    reportedDatesList.Add(currentDateString);
                }
            }
            if (reportedDatesList.Count == 0)
            {
                return;
            }
            FilterDefinition <BsonDocument> fechasAceptadas = Builders <BsonDocument> .Filter.In("dimensionMap.instanceDocmentReportedDate", reportedDatesList);

            FilterDefinition <BsonDocument> filterNoReplaced = Builders <BsonDocument> .Filter.Eq("isReplaced", false);

            FilterDefinition <BsonDocument> filterNotCurrent = Builders <BsonDocument> .Filter.And(fechasAceptadas, filterNoReplaced);

            var reportRecordId = first.reportRecordId;
            UpdateDefinition <BsonDocument> updateStatement = new BsonDocument
            {
                { "$set", new BsonDocument
                  {
                      { "isReplaced", true },
                      { "replacementId", reportRecordId },
                  } }
            };
            var db         = abaxXBRLCellStoreMongo.GetMongoDB();
            var collection = db.GetCollection <BsonDocument>(COLLECTION_NAME);

            var idsHEchosEnviados = new List <string>();

            foreach (var fact in factsList)
            {
                idsHEchosEnviados.Add(fact.factId);
                if (idsHEchosEnviados.Count >= 500)
                {
                    FilterDefinition <BsonDocument> filterIdsHechosActualizar = Builders <BsonDocument> .Filter.In("factId", idsHEchosEnviados);

                    FilterDefinition <BsonDocument> filterHechosReenviados = Builders <BsonDocument> .Filter.And(filterIdsHechosActualizar, filterNotCurrent);

                    await collection.UpdateManyAsync(filterHechosReenviados, updateStatement);

                    idsHEchosEnviados = new List <string>();
                }
            }
            if (idsHEchosEnviados.Count > 0)
            {
                FilterDefinition <BsonDocument> filterIdsHechosActualizar = Builders <BsonDocument> .Filter.In("factId", idsHEchosEnviados);

                FilterDefinition <BsonDocument> filterHechosReenviados = Builders <BsonDocument> .Filter.And(filterIdsHechosActualizar, filterNotCurrent);

                await collection.UpdateManyAsync(filterHechosReenviados, updateStatement);
            }
        }
Example #14
0
 /// <summary>
 /// Updates the attributes "isReplaced" and "replacementId" with the given parameters.
 /// </summary>
 /// <param name="reportId">Report id to evaluate.</param>
 /// <param name="reportRecordId">Version that replacement previous versions.</param>
 /// <param name="abaxXBRLCellStoreMongo">Data access object of the data base.</param>
 public static async Task UpdateReportsReplacementVersionAsync(string reportId, string reportRecordId, AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
 {
     FilterDefinition <BsonDocument> filter = new BsonDocument
     {
         { "reportId", reportId },
         { "isReplaced", false },
         { "reportRecordId", new BsonDocument {
               { "$ne", reportRecordId }
           } }
     };
     UpdateDefinition <BsonDocument> updateStatement = new BsonDocument
     {
         { "$set", new BsonDocument
           {
               { "isReplaced", true },
               { "replacementId", reportRecordId },
           } }
     };
     var db         = abaxXBRLCellStoreMongo.GetMongoDB();
     var collection = db.GetCollection <BsonDocument>(COLLECTION_NAME);
     await collection.UpdateManyAsync(filter, updateStatement);
 }
Example #15
0
        /// <summary>
        /// Finds the max reported date of the entity.
        /// </summary>
        /// <param name="taxonomyId">Taxonomy reported.</param>
        /// <param name="entityId">Entity identifier.</param>
        /// <param name="abaxXBRLCellStoreMongo">Data access object.</param>
        /// <returns>Date found or null if not date was found.</returns>
        public static async Task <DateTime?> GetMaxReportedDateAsync(string taxonomyId, string entityId, AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
        {
            var db         = abaxXBRLCellStoreMongo.GetMongoDB();
            var collection = db.GetCollection <BsonDocument>(COLLECTION_NAME);
            var match      = new BsonDocument
            {
                { "dimensionMap.taxonomyId", taxonomyId },
                { "dimensionMap.instanceDocmentEntity", entityId }
            };
            var groupDistinctDates = new BsonDocument {
                { "_id", "$dimensionMap.instanceDocmentReportedDate" }
            };
            var projectParseDate = new BsonDocument
            {
                { "_id", "$_id" },
                { "date", new BsonDocument
                  {
                      { "$dateFromString", new BsonDocument {
                            { "dateString", "$_id" }
                        } }
                  } }
            };
            var groupMaxDate = new BsonDocument
            {
                { "_id", "_id" },
                { "maxDate", new BsonDocument {
                      { "$max", "$date" }
                  } }
            };
            var projectAsStrig = new BsonDocument
            {
                { "_id", 0 },
                { "maxDate", new BsonDocument
                  {
                      { "$dateToString", new BsonDocument {
                            { "date", "$maxDate" }, { "format", "%Y-%m-%dT%H:%M:%S.%LZ" }
                        } }
                  } }
            };
            var aggregate = collection.Aggregate().
                            Match(match).Group(groupDistinctDates).
                            Project(projectParseDate).Group(groupMaxDate).Project(projectAsStrig);
            var document = await aggregate.FirstOrDefaultAsync();

            DateTime?dateFound = null;

            if (document != null && document.Contains("maxDate"))
            {
                var stringDate = document["maxDate"].AsString;
                if (!String.IsNullOrWhiteSpace(stringDate))
                {
                    dateFound = DateTime.Parse(stringDate);
                }
            }
            return(dateFound);
        }
Example #16
0
        /// <summary>
        /// Checks if the send exists in the data base.
        /// </summary>
        /// <param name="reportId">Identifier of the send.</param>
        /// <param name="abaxXBRLCellStoreMongo">Data access object.</param>
        /// <returns>If the send exists.</returns>
        public static bool Update(string reportId, AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
        {
            var count = abaxXBRLCellStoreMongo.CuentaElementosColeccion(COLLECTION_NAME, "{\"reportId\":\"" + reportId + "\"}");

            return(count > 0);
        }
Example #17
0
        /// <summary>
        /// Evaluate the given report version, and update previous versions with the given parameters or
        /// get the current version of the report.
        /// </summary>
        /// <param name="reportId">Report to evaluate.</param>
        /// <param name="reportRecordId">Version to evaluate.</param>
        /// <param name="registrationDate">Registration date of the current report.</param>
        /// <param name="abaxXBRLCellStoreMongo">Data access object.</param>
        /// <returns>The current version identifier or null if the given version is the most recent.</returns>
        public static string SarchReplacementId(string reportId, string reportRecordId, DateTime registrationDate, AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
        {
            string replacementId = null;
            var    recentlySend  = GetRecentlyReportSend(reportId, abaxXBRLCellStoreMongo);

            if (recentlySend != null && recentlySend.Contains("maxDate"))
            {
                var maxDate = DateTime.Parse(recentlySend["maxDate"].AsString);
                if (maxDate > registrationDate)
                {
                    replacementId = JBRLUtils.CreateReportRecordId(reportId, maxDate);
                }
            }
            return(replacementId);
        }
Example #18
0
        public void GeneraColeccionAdministradores()
        {
            var AbaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

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

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

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

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

            //long cantidadHechosAProcesar = 0;

            //if (listaEnvios.Count > 0)
            //{
            //    cantidadHechosAProcesar = AbaxXBRLCellStoreMongo.CuentaElementosColeccion("Hecho", ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, Administrador.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, Administrador.universoIdHechos), null, (int)cantidadRegistrosUltimaPagina, i).ToList();
            //            }
            //            else
            //            {
            //                listaHechos = AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>(ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, Administrador.universoIdHechos), null, cantidad, i).ToList();
            //            }

            //        }
            //        else
            //        {
            //            if (i == (cantidadVecesAEjecutarEntero))
            //            {
            //                listaHechos.AddRange(AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>(ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, Administrador.universoIdHechos), null, (int)cantidadRegistrosUltimaPagina, i).ToList());
            //            }
            //            else
            //            {
            //                listaHechos.AddRange(AbaxXBRLCellStoreMongo.ConsultaElementosColeccion<Hecho>(ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, Administrador.universoIdHechos), null, cantidad, i).ToList());
            //            }

            //        }
            //    }

            //}

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

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

            Dictionary <String, List <List <Hecho> > > listaDeSecuenciaPorEnvio = new Dictionary <string, List <List <Hecho> > >();

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

                Dictionary <String, List <List <Hecho> > > elemento = new Dictionary <string, List <List <Hecho> > >();

                listaDeSecuenciaPorEnvio.Add(grupo.Key, hechosAgrupadosPorSecuencia);
            }

            Administrador administrador;

            foreach (var listaSecuenciasPorEnvio in listaDeSecuenciaPorEnvio)
            {
                foreach (var elementoListaSecuencia in listaSecuenciasPorEnvio.Value)
                {
                    var entidad      = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorName")).Entidad.Nombre;
                    var taxonomia    = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorName")).Taxonomia;
                    var idEnvio      = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorName")).IdEnvio;
                    var fechaReporte = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorName")).Periodo.FechaInstante;

                    var    elementoAux       = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorName"));
                    String tipoAdministrador = "";

                    if (elementoAux != null)
                    {
                        if (elementoAux.MiembrosDimensionales.ToList().Find(miembro => miembro.Explicita == true).EtiquetasMiembroDimension.ToList().Count > 0)
                        {
                            tipoAdministrador = elementoAux.MiembrosDimensionales.ToList().Find(miembro => miembro.Explicita == true).EtiquetasMiembroDimension.ToList().Find(etiqueta => etiqueta.Idioma.Equals("es")).Valor;
                        }
                    }

                    var hechoNombre          = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorName"));
                    var hechoApellidoPaterno = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorFirstName"));
                    var hechoApellidoMaterno = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorSecondName"));
                    var hechoTipoConsejero   = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorDirectorshipType"));
                    var hechoAuditoria       = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorParticipateInCommitteesAudit"));
                    var hechoPS               = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorParticipateInCommitteesCorporatePractices"));
                    var hechoEyC              = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorParticipateInCommitteesEvaluationAndCompensation"));
                    var hechoOtros            = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorParticipateInCommitteesOthers"));
                    var hechoFechaDesignacion = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorDesignationDate"));
                    var hechoTipoAsamblea     = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorAssemblyType"));
                    var hechoPeriodoElecto    = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorPeriodForWhichTheyWereElected"));
                    var hechoCargo            = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorPosition"));
                    var hechoTiempoCargo      = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorTimeWorkedInTheIssuer"));
                    var hechoPartAccionaria   = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorShareholding"));
                    var hechoSexo             = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorGender"));
                    var hechoInfoAdicional    = elementoListaSecuencia.Find(hechoNombreAux => hechoNombreAux.Concepto.IdConcepto.Equals("ar_pros_AdministratorAdditionalInformation"));

                    administrador           = new Administrador();
                    administrador.Taxonomia = taxonomia ?? "";
                    administrador.IdEnvio   = idEnvio ?? "";

                    if (fechaReporte != null)
                    {
                        try
                        {
                            Console.WriteLine("Error en fecha fechaReporte: ", fechaReporte);
                            administrador.FechaReporte = Convert.ToDateTime(fechaReporte).ToString("dd/MM/yyyy");
                        }
                        catch (Exception e)
                        {
                            administrador.FechaReporte = "";
                            LogUtil.Error("Error en fecha: " + fechaReporte);
                        }
                    }

                    administrador.ClaveCotizacion        = entidad ?? "";
                    administrador.TipoAdministrador      = (tipoAdministrador != null) ? tipoAdministrador : "";
                    administrador.Nombre                 = (hechoNombre != null && hechoNombre.Valor != null) ? hechoNombre.Valor : "";
                    administrador.ApellidoPaterno        = (hechoApellidoPaterno != null && hechoApellidoPaterno.Valor != null) ? hechoApellidoPaterno.Valor : "";
                    administrador.ApellidoMaterno        = (hechoApellidoMaterno != null && hechoApellidoMaterno.Valor != null) ? hechoApellidoMaterno.Valor : "";
                    administrador.TipoConsejero          = (hechoTipoConsejero != null) ? hechoTipoConsejero.Valor : "";
                    administrador.Auditoria              = (hechoAuditoria != null && hechoAuditoria.Valor != null) ? hechoAuditoria.Valor : "";
                    administrador.PracticasSocietarias   = (hechoPS != null && hechoPS.Valor != null) ? hechoPS.Valor : "";
                    administrador.EvaluacionCompensacion = (hechoEyC != null && hechoEyC.Valor != null) ? hechoEyC.Valor : "";
                    administrador.Otros = (hechoOtros != null && hechoOtros.Valor != null) ? ReporteUtil.removeTextHTML(hechoOtros.Valor) : "";
                    if (hechoFechaDesignacion != null && hechoFechaDesignacion.Valor != null)
                    {
                        try
                        {
                            Console.WriteLine("Error en fecha hechoFechaDesignacion : ", hechoFechaDesignacion.Valor);
                            administrador.FechaDesignacion = Convert.ToDateTime(hechoFechaDesignacion.Valor).ToString("dd/MM/yyyy");
                        }
                        catch (Exception e)
                        {
                            administrador.FechaDesignacion = "";
                            LogUtil.Error("Error en fecha hechoFechaDesignacion: " + hechoFechaDesignacion.Valor);
                        }
                    }
                    administrador.TipoAsamblea            = (hechoTipoAsamblea != null && hechoTipoAsamblea.Valor != null) ? hechoTipoAsamblea.Valor : "";
                    administrador.PeriodoElecto           = (hechoPeriodoElecto != null && hechoPeriodoElecto.Valor != null) ? hechoPeriodoElecto.Valor : "";
                    administrador.Cargo                   = (hechoCargo != null && hechoCargo.Valor != null) ? hechoCargo.Valor : "";
                    administrador.TiempoOcupandoCargo     = (hechoTiempoCargo != null && hechoTiempoCargo.Valor != null) ? hechoTiempoCargo.Valor : "";
                    administrador.ParticipacionAccionaria = (hechoPartAccionaria != null && hechoPartAccionaria.Valor != null) ? hechoPartAccionaria.Valor : "";
                    administrador.Sexo          = (hechoSexo != null && hechoSexo.Valor != null) ? hechoSexo.Valor : "";
                    administrador.InfoAdicional = (hechoInfoAdicional != null && hechoInfoAdicional.Valor != null) ? ReporteUtil.removeTextHTML(hechoInfoAdicional.Valor) : "";

                    listaAdministradores.Add(administrador);
                }
            }

            AbaxXBRLCellStoreMongo.UpsertCollectionReportes("Administrador", listaAdministradores);
        }
Example #19
0
        /// <summary>
        /// Checks if the send exists in the data base.
        /// </summary>
        /// <param name="sendId">Identifier of the send.</param>
        /// <param name="abaxXBRLCellStoreMongo">Data access object.</param>
        /// <returns>If the send exists.</returns>
        public static bool ExistsDownloadId(string downloadId, AbaxXBRLCellStoreMongo abaxXBRLCellStoreMongo)
        {
            var count = abaxXBRLCellStoreMongo.CuentaElementosColeccion(COLLECTION_NAME, "{\"dimensionMap.downloadId\":\"" + downloadId + "\"}");

            return(count > 0);
        }
Example #20
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);
        }
Example #21
0
        public void GeneraColeccionResumen4D()
        {
            var AbaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo();

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

            var universoTaxonomias = "'http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_ics_entry_point_2014-12-05', 'http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_cp_entry_point_2014-12-05'," +
                                     "'http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_fibras_entry_point_2014-12-05', 'http://www.bmv.com.mx/2015-06-30/ccd/full_ifrs_ccd_entry_point_2015-06-30', " +
                                     "'http://www.bmv.com.mx/2015-06-30/deuda/full_ifrs_deuda_entry_point_2015-06-30'";

            var parametrosEnvio = " { 'Parametros.trimestre': '4D', Taxonomia: {$in : [" + universoTaxonomias + "] } }";

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

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

            if (listaEnvios.Count > 0)
            {
                listaHechos = AbaxXBRLCellStoreMongo.ConsultaElementos <Hecho>("Hecho", ReporteUtil.obtenerFiltrosHechosEnFormatoBSON(listaEnvios, ResumenInformacion4D.universoIdHechos));
            }

            List <Dictionary <Envio, IList <Hecho> > > listaHechosPorEnvio = new List <Dictionary <Envio, IList <Hecho> > >();

            if (listaEnvios != null && listaEnvios.Count > 0 && listaHechos != null && listaHechos.Count > 0)
            {
                foreach (var envio in listaEnvios)
                {
                    IList <Hecho> listaHechosPorIdEnvio = listaHechos.ToList().FindAll(hecho => hecho.IdEnvio == envio.IdEnvio);

                    Dictionary <Envio, IList <Hecho> > hechosPorEnvio = new Dictionary <Envio, IList <Hecho> >();
                    hechosPorEnvio.Add(envio, listaHechosPorIdEnvio);

                    listaHechosPorEnvio.Add(hechosPorEnvio);
                }
            }

            List <ResumenInformacion4D> listaResumenInformacion4D = new List <ResumenInformacion4D>();

            #region Se construye la lista del Resumen de Información 4D.

            foreach (var infoEnvio in listaHechosPorEnvio)
            {
                ResumenInformacion4D elemento = new ResumenInformacion4D();

                var taxonomia = infoEnvio.ElementAt(0).Key.Taxonomia;

                elemento.IdEnvio      = infoEnvio.ElementAt(0).Key.IdEnvio;
                elemento.Taxonomia    = taxonomia;
                elemento.FechaReporte = infoEnvio.ElementAt(0).Key.Periodo.Fecha.GetValueOrDefault().ToString("dd/MM/yyyy");
                elemento.TotalActivo  = (infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Assets")) != null) ? Decimal.Parse(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Assets")).Valor) : 0;
                elemento.TotalPasivo  = (infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Liabilities")) != null) ? Decimal.Parse(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Liabilities")).Valor) : 0;
                elemento.TotalCapitalContablePasivo = (infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_EquityAndLiabilities")) != null) ? Decimal.Parse(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_EquityAndLiabilities")).Valor) : 0;
                elemento.Ingreso = (infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Revenue")) != null) ? Decimal.Parse(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Revenue")).Valor) : 0;

                try
                {
                    elemento.Unidad = infoEnvio.ElementAt(0).Key.Parametros["moneda"].ToString().Substring(infoEnvio.ElementAt(0).Key.Parametros["moneda"].ToString().LastIndexOf(':') + 1);
                }
                catch (KeyNotFoundException)
                {
                    //LogUtil.Error("LLave no encontrada");
                }

                switch (taxonomia)
                {
                case "http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_ics_entry_point_2014-12-05":
                case "http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_cp_entry_point_2014-12-05":
                case "http://www.bmv.com.mx/taxonomy/ifrs_mx/full_ifrs_mc_mx_fibras_entry_point_2014-12-05":
                    elemento.ClaveCotizacion   = infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs_mx-cor_20141205_ClaveDeCotizacionBloqueDeTexto")).Valor;
                    elemento.NumeroFideicomiso = "";
                    elemento.NombreProveedorServiciosAuditoria = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs_mx-cor_20141205_NombreDeProveedorDeServiciosDeAuditoriaExternaBloqueDeTexto")).Valor);
                    elemento.NombreSocioOpinion            = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs_mx-cor_20141205_NombreDelSocioQueFirmaLaOpinionBloqueDeTexto")).Valor);
                    elemento.TipoOpinionEstadosFinancieros = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs_mx-cor_20141205_TipoDeOpinionALosEstadosFinancierosBloqueDeTexto")).Valor);
                    break;

                case "http://www.bmv.com.mx/2015-06-30/ccd/full_ifrs_ccd_entry_point_2015-06-30":
                    elemento.ClaveCotizacion   = infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_ccd_Ticker")).Valor;
                    elemento.NumeroFideicomiso = infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_ccd_TrustNumber")).Valor;
                    elemento.NombreProveedorServiciosAuditoria = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_ccd_NameServiceProviderExternalAudit")).Valor);
                    elemento.NombreSocioOpinion            = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_ccd_NameOfTheAsociadoSigningOpinion")).Valor);
                    elemento.TipoOpinionEstadosFinancieros = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_ccd_TypeOfOpinionOnTheFinancialStatements")).Valor);
                    break;

                case "http://www.bmv.com.mx/2015-06-30/deuda/full_ifrs_deuda_entry_point_2015-06-30":
                    elemento.ClaveCotizacion   = infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_deuda_Ticker")).Valor;
                    elemento.NumeroFideicomiso = infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_deuda_TrustNumber")).Valor;;
                    elemento.NombreProveedorServiciosAuditoria = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_deuda_NameServiceProviderExternalAudit")).Valor);
                    elemento.NombreSocioOpinion            = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_deuda_NameOfTheAsociadoSigningOpinion")).Valor);
                    elemento.TipoOpinionEstadosFinancieros = ReporteUtil.removeTextHTML(infoEnvio.ElementAt(0).Value.ToList().Find(hecho => hecho.Concepto.IdConcepto.Equals("mx_deuda_TypeOfOpinionOnTheFinancialStatements")).Valor);
                    break;

                default:
                    break;
                }

                listaResumenInformacion4D.Add(elemento);
            }
            #endregion

            AbaxXBRLCellStoreMongo.UpsertCollectionReportes("Resumen4D", listaResumenInformacion4D);
        }
Example #22
0
        /// <summary>
        /// Genera el reporte de Calculo de Materialidad.
        /// </summary>
        /// <param name="parametrosReporte"></param>
        /// <returns></returns>
        public ResultadoOperacionDto GenerarReporteCalculoMaterialidad(IDictionary <string, object> parametrosReporte, IDictionary <String, object> datosReporte)
        {
            ResultadoOperacionDto resultadoOperacionDto = new ResultadoOperacionDto();

            String[] listaEmisoras = { "" };
            object   claveEmisora  = "";

            parametrosReporte.TryGetValue("'Entidad.Nombre'", out claveEmisora);
            listaEmisoras[0] = "'" + claveEmisora.ToString() + "'";

            IDictionary <string, object> parametrosEnvioReporteAnual = new Dictionary <string, object>();

            foreach (var parametro in parametrosReporte)
            {
                parametrosEnvioReporteAnual.Add(parametro.Key, parametro.Value);
            }

            parametrosEnvioReporteAnual.Add("Taxonomia", TAXO_REPORTE_ANUAL);
            parametrosEnvioReporteAnual.Add("EsVersionActual", true);

            String       parametrosConsultaEnvioReporteAnual = ReporteCalculoMaterialidad.GenerarCadenaParametrosConsulta(parametrosEnvioReporteAnual);
            List <Envio> enviosReporteAnual = (List <Envio>)AbaxXBRLCellStoreMongo.ConsultaElementos <Envio>("Envio", parametrosConsultaEnvioReporteAnual);

            enviosReporteAnual.Sort((x, y) => x.Periodo.Ejercicio.CompareTo(y.Periodo.Ejercicio));

            Envio envioReporteAnual = null;

            if (enviosReporteAnual != null && enviosReporteAnual.Count > 0)
            {
                envioReporteAnual = enviosReporteAnual[0];
            }

            IDictionary <string, object> parametrosHechosReporteAnual = new Dictionary <string, object>();
            IList <Hecho> hechosReporteAnual = null;

            if (envioReporteAnual != null)
            {
                parametrosHechosReporteAnual.Add("IdEnvio", "'" + envioReporteAnual.IdEnvio + "'");
                String parametrosConsultaReporteAnual = ReporteCalculoMaterialidad.GenerarCadenaParametrosConsulta(parametrosHechosReporteAnual);
                hechosReporteAnual = ReporteCalculoMaterialidad.ObtenerHechosReporteAnual(parametrosConsultaReporteAnual, AbaxXBRLCellStoreMongo);
            }



            IDataFormat format;
            String      plantillaDocumento = ConfigurationManager.AppSettings.Get("plantillaCalculoDeMaterialidad");
            Stream      streamExcel        = Assembly.GetExecutingAssembly().GetManifestResourceStream(plantillaDocumento);

            HSSFWorkbook workbook = new HSSFWorkbook(streamExcel, true);
            ISheet       sheet    = workbook.GetSheet("CÁLCULO DE MATERIALIDAD");

            format = workbook.CreateDataFormat();

            Envio        envioIFRS       = ReporteCalculoMaterialidad.ObtenerUltimoEnviosIFRS(claveEmisora.ToString(), AbaxXBRLCellStoreMongo);
            List <Hecho> listaHechosIFRS = ReporteCalculoMaterialidad.ObtenerHechosIFRS(AbaxXBRLCellStoreMongo, envioIFRS);

            List <Envio> enviosIFRS = ReporteCalculoMaterialidad.ObtenerUlrimosTresReportesTrimestralesIFRS(AbaxXBRLCellStoreMongo, claveEmisora.ToString());

            Entities.Empresa empresa = EmpresaRepository.ObtenerEmpresaClaveCotizacion(claveEmisora.ToString());
            if (empresa != null)
            {
                datosReporte.Add("nombreCompletoEmpresa", empresa.RazonSocial);
            }


            ReporteCalculoMaterialidad.EscribirDatosGeneralesReporteCalculoMaterialidad(sheet, (List <Hecho>)hechosReporteAnual, parametrosReporte, datosReporte);
            EscribirSeccionEventosRelevantesCalculoMaterialidad(sheet, ReporteErPcsUtil.ObtenerUltimosSincoEventosRelevantesDelSector(listaEmisoras, AbaxXBRLCellStoreMongo));
            ReporteCalculoMaterialidad.EscribirSeccionReporteAnual(sheet, envioReporteAnual);
            ReporteCalculoMaterialidad.EscribirValoresCalculo(sheet, envioIFRS, listaHechosIFRS);
            ReporteCalculoMaterialidad.EscribirSeccionReporteTrimestral(sheet, enviosIFRS);

            sheet.ForceFormulaRecalculation = true;

            MemoryStream ms = new MemoryStream();

            workbook.Write(ms);

            resultadoOperacionDto.InformacionExtra = ms.ToArray();
            resultadoOperacionDto.Resultado        = true;

            return(resultadoOperacionDto);
        }
        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();
            }
        }
Example #24
0
 public void LlenaElementosBase(
     IList <HechoReducido> listaElementos,
     IDictionary <String, ElementoConsulta4D> diccionarioElementos,
     AbaxXBRLCellStoreMongo AbaxXBRLCellStoreMongo)
 {
     foreach (var elemento in listaElementos)
     {
         ElementoConsulta4D elementoTabla = null;
         if (!diccionarioElementos.TryGetValue(elemento.IdEnvio, out elementoTabla))
         {
             elementoTabla           = new ElementoConsulta4D();
             elementoTabla.Taxonomia = elemento.Taxonomia;
             elementoTabla.Entidad   = elemento.Entidad;
             elementoTabla.IdEnvio   = elemento.IdEnvio;
             elementoTabla.Unidad    = elemento.Unidad;
             diccionarioElementos.Add(elemento.IdEnvio, elementoTabla);
         }
         var idConcepto = elemento.IdConcepto;
         if (idConcepto.Equals("ifrs_mx-cor_20141205_ClaveDeCotizacionBloqueDeTexto") ||
             idConcepto.Equals("mx_deuda_Ticker") ||
             idConcepto.Equals("mx_ccd_Ticker"))
         {
             elementoTabla.ClaveCotizacion = elemento.Valor;
             elementoTabla.Fecha           = elemento.Fecha;
         }
         else if (idConcepto.Equals("mx_deuda_TrustNumber") || idConcepto.Equals("mx_ccd_TrustNumber"))
         {
             elementoTabla.NumeroFideicomiso = elemento.Valor;
         }
         else if (
             idConcepto.Equals("ifrs_mx-cor_20141205_NumeroDeTrimestre") ||
             idConcepto.Equals("mx_deuda_NumberOfQuarter") ||
             idConcepto.Equals("mx_ccd_NumberOfQuarter"))
         {
             elementoTabla.NumeroTrimestre = elemento.Valor;
         }
         else if (
             idConcepto.Equals("ifrs_mx-cor_20141205_NombreDeProveedorDeServiciosDeAuditoriaExternaBloqueDeTexto") ||
             idConcepto.Equals("mx_deuda_NameServiceProviderExternalAudit") ||
             idConcepto.Equals("mx_ccd_NameServiceProviderExternalAudit"))
         {
             elementoTabla.NombreProveedorServiciosAuditoriaExterna = elemento.Valor;
         }
         else if (
             idConcepto.Equals("ifrs_mx-cor_20141205_NombreDeProveedorDeServiciosDeAuditoriaExternaBloqueDeTexto") ||
             idConcepto.Equals("mx_deuda_NameServiceProviderExternalAudit") ||
             idConcepto.Equals("mx_ccd_NameServiceProviderExternalAudit"))
         {
             elementoTabla.NombreProveedorServiciosAuditoriaExterna = elemento.Valor;
         }
         else if (
             idConcepto.Equals("ifrs_mx-cor_20141205_NombreDelSocioQueFirmaLaOpinionBloqueDeTexto") ||
             idConcepto.Equals("mx_deuda_NameOfTheAsociadoSigningOpinion") ||
             idConcepto.Equals("mx_ccd_NameOfTheAsociadoSigningOpinion"))
         {
             elementoTabla.NombreSocioFirmaOpinion = elemento.Valor;
         }
         else if (
             idConcepto.Equals("ifrs_mx-cor_20141205_TipoDeOpinionALosEstadosFinancierosBloqueDeTexto") ||
             idConcepto.Equals("mx_deuda_TypeOfOpinionOnTheFinancialStatements") ||
             idConcepto.Equals("mx_ccd_TypeOfOpinionOnTheFinancialStatements"))
         {
             elementoTabla.TipoOpinionEstadosFinancieros = elemento.Valor;
             //if (String.IsNullOrEmpty(elemento.Valor))
             //{
             //    elementoTabla.TipoOpinionEstadosFinancieros = AbaxXBRLCellStoreMongo.ObtenValorCheckun(elemento.IdHecho);
             //}
         }
     }
 }