public ResultadoOperacionDto RegistrarConsultaAnalisis(ConsultaAnalisisDto consultaAnalisisDto)
        {
            var resultado = new ResultadoOperacionDto();

            try
            {
                if (consultaAnalisisDto.IdConsultaAnalisis > 0)
                {
                    var registoConsultaBD = ConsultaAnalisisRepository.GetById(consultaAnalisisDto.IdConsultaAnalisis);

                    ConsultaAnalisisRepository.DbContext.ConsultaAnalisisEntidad.RemoveRange(registoConsultaBD.ConsultaAnalisisEntidad);
                    ConsultaAnalisisRepository.DbContext.ConsultaAnalisisConcepto.RemoveRange(registoConsultaBD.ConsultaAnalisisConcepto);
                    ConsultaAnalisisRepository.DbContext.ConsultaAnalisisPeriodo.RemoveRange(registoConsultaBD.ConsultaAnalisisPeriodo);

                    registoConsultaBD.Nombre = consultaAnalisisDto.Nombre;
                    ConsultaAnalisisRepository.DbContext.ConsultaAnalisisConcepto.AddRange(GenerarConsultaAnalisisConcepto(consultaAnalisisDto.ConsultaAnalisisConcepto, consultaAnalisisDto.IdConsultaAnalisis));
                    ConsultaAnalisisRepository.DbContext.ConsultaAnalisisEntidad.AddRange(GenerarConsultaAnalisisEntidad(consultaAnalisisDto.ConsultaAnalisisEntidad, consultaAnalisisDto.IdConsultaAnalisis));
                    ConsultaAnalisisRepository.DbContext.ConsultaAnalisisPeriodo.AddRange(GenerarConsultaAnalisisPeriodo(consultaAnalisisDto.ConsultaAnalisisPeriodo, consultaAnalisisDto.IdConsultaAnalisis));

                    ConsultaAnalisisRepository.Update(registoConsultaBD);

                    resultado.InformacionExtra = registoConsultaBD.IdConsultaAnalisis;
                }
                else
                {
                    var consultaAnalisis = new ConsultaAnalisis();
                    consultaAnalisis.Nombre = consultaAnalisisDto.Nombre;
                    consultaAnalisis.ConsultaAnalisisConcepto = GenerarConsultaAnalisisConcepto(consultaAnalisisDto.ConsultaAnalisisConcepto, consultaAnalisisDto.IdConsultaAnalisis);
                    consultaAnalisis.ConsultaAnalisisEntidad  = GenerarConsultaAnalisisEntidad(consultaAnalisisDto.ConsultaAnalisisEntidad, consultaAnalisisDto.IdConsultaAnalisis);
                    consultaAnalisis.ConsultaAnalisisPeriodo  = GenerarConsultaAnalisisPeriodo(consultaAnalisisDto.ConsultaAnalisisPeriodo, consultaAnalisisDto.IdConsultaAnalisis);

                    ConsultaAnalisisRepository.Add(consultaAnalisis);
                    ConsultaAnalisisRepository.Commit();

                    resultado.InformacionExtra = consultaAnalisis.IdConsultaAnalisis;
                }

                resultado.Resultado = true;
            }
            catch (Exception exception)
            {
                resultado.Resultado        = false;
                resultado.Mensaje          = exception.Message;
                resultado.InformacionExtra = exception;
            }
            return(resultado);
        }
Exemple #2
0
        /// <summary>
        /// Copia el elemento evitando las referencias a objetos que proboquen redundancia ciclica cuando se serializan a JSON.
        /// </summary>
        /// <param name="o">Elemento a copiar.</param>
        /// <returns>Copia del elemento.</returns>
        public ConsultaAnalisisDto Copia(ConsultaAnalisis o)
        {
            if (o == null)
            {
                return(null);
            }
            var consultaAnalisisDto = new ConsultaAnalisisDto()
            {
                IdConsultaAnalisis = o.IdConsultaAnalisis,
                Nombre             = o.Nombre,
            };

            consultaAnalisisDto.ConsultaAnalisisConcepto = Copia(o.ConsultaAnalisisConcepto);
            consultaAnalisisDto.ConsultaAnalisisEntidad  = Copia(o.ConsultaAnalisisEntidad);
            consultaAnalisisDto.ConsultaAnalisisPeriodo  = Copia(o.ConsultaAnalisisPeriodo);

            return(consultaAnalisisDto);
        }
        public List <DocumentoInstancia> ObtenerDocumentosInstanciaPorConsulta(ConsultaAnalisisDto consultaAnalisis)
        {
            List <long> entidadesId = new List <long>();
            string      queryDocumentosInstancia = @" select * from DocumentoInstancia where IdDocumentoInstancia in(";

            queryDocumentosInstancia += " select DISTINCT first_value(\"IdDocumentoInstancia\") OVER (PARTITION BY \"ClaveEmisora\",\"Anio\",\"Trimestre\" ORDER BY \"FechaUltMod\"  DESC)  ";
            queryDocumentosInstancia += " from DocumentoInstancia doc where ClaveEmisora IN (";


            foreach (var entidad in consultaAnalisis.ConsultaAnalisisEntidad)
            {
                queryDocumentosInstancia = queryDocumentosInstancia + "'" + entidad.NombreEntidad + "',";
            }
            queryDocumentosInstancia = queryDocumentosInstancia.Substring(0, queryDocumentosInstancia.Length - 1);
            queryDocumentosInstancia = queryDocumentosInstancia + ") AND ";

            foreach (var periodo in consultaAnalisis.ConsultaAnalisisPeriodo)
            {
                queryDocumentosInstancia = queryDocumentosInstancia + " ( Anio =" + periodo.Anio;
                queryDocumentosInstancia = queryDocumentosInstancia + " AND Trimestre=" + periodo.Trimestre + ") OR";
            }

            queryDocumentosInstancia = queryDocumentosInstancia.Substring(0, queryDocumentosInstancia.Length - 2);
            queryDocumentosInstancia = queryDocumentosInstancia + " ) AND ClaveEmisora IN (";

            foreach (var entidad in consultaAnalisis.ConsultaAnalisisEntidad)
            {
                queryDocumentosInstancia = queryDocumentosInstancia + "'" + entidad.NombreEntidad + "',";
            }
            queryDocumentosInstancia = queryDocumentosInstancia.Substring(0, queryDocumentosInstancia.Length - 1);
            queryDocumentosInstancia = queryDocumentosInstancia + " )";

            var queryResult = DbContext.Database.SqlQuery <DocumentoInstancia>(queryDocumentosInstancia).ToList();



            return(queryResult);
        }
        public Dictionary <string, object> ObtenerInformacionConsultaDocumentos(ConsultaAnalisisDto consiguracionConsulta, List <DocumentoInstanciaXbrlDto> informacionVersionDocumentos, TaxonomiaDto taxonomiaDto)
        {
            var informacionConsultaDocumentos = new Dictionary <string, object>();
            var documentoInstanciaDocumento   = unirDocumentosInstancia(informacionVersionDocumentos);

            if (documentoInstanciaDocumento != null)
            {
                documentoInstanciaDocumento.Taxonomia = taxonomiaDto;
                informacionConsultaDocumentos.Add("DocumentoInstancia", documentoInstanciaDocumento);

                foreach (var rolTaxonomia in consiguracionConsulta.ConsultaAnalisisRolTaxonomia)
                {
                    var informacionRolTaxonomia = new Dictionary <string, object>();
                    var estructuraDocumento     = new Dictionary <string, object>();

                    informacionRolTaxonomia.Add("NombreRol", rolTaxonomia.DescripcionRol);
                    informacionRolTaxonomia.Add("Uri", rolTaxonomia.Uri);


                    foreach (var rolPresentacion in taxonomiaDto.RolesPresentacion)
                    {
                        if (rolPresentacion.Uri.Equals(rolTaxonomia.Uri))
                        {
                            int indentacion = 1;
                            recorrerArbolLinkbasePresentacion(rolPresentacion.Estructuras, estructuraDocumento, indentacion, taxonomiaDto);
                            informacionRolTaxonomia.Add("Conceptos", estructuraDocumento);
                        }
                    }

                    informacionConsultaDocumentos.Add(rolTaxonomia.Uri, informacionRolTaxonomia);
                }
            }


            return(informacionConsultaDocumentos);
        }
        /// <summary>
        /// Realiza un export a formato excel para la consulta configurada
        /// </summary>
        /// <param name="view">Vista en presentacion que sera presentada la consulta</param>
        /// <param name="consultaAnalisisDto">Informacion de la consulta de configuracion base</param>
        /// <param name="filename">Nombre del archivo donde será mostrada la consulta</param>
        /// <param name="hechos">Listado de hechos de la consulta de informacion</param>
        /// <param name="contextos">Listado de contextos a mostrar</param>
        /// <returns>Resultado de la acción</returns>
        private IHttpActionResult ExportDataToExcel(String view, ConsultaAnalisisDto consultaAnalisisDto, String filename, Dictionary <long, Dictionary <long, Dictionary <string, AbaxXBRLCore.Viewer.Application.Dto.HechoDto> > > hechos, Dictionary <long, List <AbaxXBRLCore.Common.Dtos.ContextoDto> > contextos)
        {
            //var gv = new GridView ();
            Table    dt        = new Table();
            TableRow headerRow = new TableRow();

            TableHeaderCell oTableCell = new TableHeaderCell();

            oTableCell.Text       = "Concepto";
            oTableCell.ColumnSpan = 1;
            headerRow.Cells.Add(oTableCell);

            foreach (var idEmpresa in contextos.Keys)
            {
                var NombreEntidad = "";
                foreach (var entidad in consultaAnalisisDto.ConsultaAnalisisEntidad)
                {
                    if (entidad.IdEmpresa == idEmpresa)
                    {
                        NombreEntidad = entidad.NombreEntidad;
                        break;
                    }
                }
                oTableCell            = new TableHeaderCell();
                oTableCell.Text       = NombreEntidad;
                oTableCell.ColumnSpan = contextos[idEmpresa].Count;
                headerRow.Cells.Add(oTableCell);
            }

            dt.Rows.AddAt(0, headerRow);


            //Se agregan los contextos
            TableRow  rowContextos = new TableRow();
            TableCell tableCell    = new TableCell();

            tableCell.ColumnSpan = 1;
            tableCell.Text       = "";
            rowContextos.Cells.Add(tableCell);
            foreach (var idEmpresa in contextos.Keys)
            {
                foreach (var contexto in contextos[idEmpresa])
                {
                    tableCell = new TableCell();
                    if (contexto.Fecha != null)
                    {
                        tableCell.Text = contexto.Fecha.Value.ToString("dd/MMM/yyyy");
                    }
                    else
                    {
                        tableCell.Text = contexto.FechaInicio.Value.ToString("dd/MMM/yyyy") + " AL " + contexto.FechaFin.Value.ToString("dd/MMM/yyyy");
                    }

                    tableCell.ColumnSpan = 1;
                    rowContextos.Cells.Add(tableCell);
                }
            }
            dt.Rows.AddAt(1, rowContextos);

            //Se agregan los hechos

            var indiceColumna = 2;

            foreach (var concepto in consultaAnalisisDto.ConsultaAnalisisConcepto)
            {
                TableRow rowHechosConcepto = new TableRow();
                tableCell            = new TableCell();
                tableCell.ColumnSpan = 1;
                tableCell.Text       = concepto.DescripcionConcepto;
                rowHechosConcepto.Cells.Add(tableCell);

                foreach (var idEmpresa in contextos.Keys)
                {
                    foreach (var contexto in contextos[idEmpresa])
                    {
                        tableCell = new TableCell();

                        if (hechos.ContainsKey(idEmpresa) && hechos[idEmpresa].ContainsKey(long.Parse(contexto.Id)) && hechos[idEmpresa][long.Parse(contexto.Id)].ContainsKey(concepto.IdConcepto))
                        {
                            var hecho = hechos[idEmpresa][long.Parse(contexto.Id)][concepto.IdConcepto];
                            tableCell.Text = hecho.Valor;
                        }
                        tableCell.ColumnSpan = 1;
                        rowHechosConcepto.Cells.Add(tableCell);
                    }
                }

                dt.Rows.AddAt(indiceColumna++, rowHechosConcepto);
            }


            dt.DataBind();
            var sw  = new StringWriter();
            var htw = new HtmlTextWriter(sw);

            dt.RenderControl(htw);


            byte[]       byteArray = Encoding.ASCII.GetBytes(sw.ToString());
            MemoryStream s         = new MemoryStream(byteArray);

            var response = new HttpResponseMessage();

            response.StatusCode = HttpStatusCode.OK;
            response.Content    = new StreamContent(s);
            response.Content.Headers.ContentDisposition          = new ContentDispositionHeaderValue("attachment");
            response.Content.Headers.ContentDisposition.FileName = filename;
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");

            return(ResponseMessage(response));
        }
        /// <summary>
        /// Realiza un export a formato excel para la consulta configurada
        /// </summary>
        /// <param name="view">Vista en presentacion que sera presentada la consulta</param>
        /// <param name="estructuraDocumento">Informacion de la la estructura del documento</param>
        /// <param name="filename">Nombre del archivo donde será mostrada la consulta</param>
        /// <param name="consultaAnalisisDto">Informacion de la consulta a realizar</param>
        /// <returns>Resultado de la acción</returns>
        private IHttpActionResult ExportDatosEstructuraDocumento(String view, Dictionary <string, object> estructuraDocumento, String filename, ConsultaAnalisisDto consultaAnalisisDto)
        {
            var memoryStreamSalida = DocumentoInstanciaService.ExportDatosEstructuraDocumento(estructuraDocumento, consultaAnalisisDto);

            var response           = new HttpResponseMessage();
            var fileDownloadCookie = new CookieHeaderValue("fileDownload", "true")
            {
                Path = "/"
            };

            response.StatusCode = HttpStatusCode.OK;
            response.Content    = new ByteArrayContent(memoryStreamSalida.ToArray());
            response.Content.Headers.ContentDisposition          = new ContentDispositionHeaderValue("attachment");
            response.Content.Headers.ContentDisposition.FileName = filename;
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.Headers.AddCookies(new CookieHeaderValue[] { fileDownloadCookie });


            return(ResponseMessage(response));
        }