/// <summary>
        ///		Carga las relaciones
        /// </summary>
        private void LoadRelations()
        {
            BaseDataSourceModel dataSource = GetDataSource();

            if (dataSource == null)
            {
                ListRelationsViewModel = null;
            }
            else
            {
                System.Collections.Generic.List <DimensionRelationModel> relations = new System.Collections.Generic.List <DimensionRelationModel>();

                // Busca las relaciones
                foreach (ReportDataSourceModel reportDataSource in Report.ReportDataSources)
                {
                    if (reportDataSource.DataSource.Id.Equals(dataSource.Id))
                    {
                        relations.AddRange(reportDataSource.Relations);
                    }
                }
                // Asocia la lista de relaciones
                ListRelationsViewModel = new Relations.ListRelationViewModel(ReportingSolutionViewModel, dataSource, ReportDataSource.Relations);
                // Carga las relaciones
                ListRelationsViewModel.Load();
            }
        }
 public NodeDataSourceViewModel(BaseTreeViewModel trvTree, BaseTreeNodeViewModel parent, BaseDataSourceModel dataSource) :
     base(trvTree, parent, dataSource.Id, TreeReportingViewModel.NodeType.DataSource.ToString(), TreeReportingViewModel.IconType.Table.ToString(),
          dataSource, true, true, BauMvvm.ViewModels.Media.MvvmColor.Navy)
 {
     DataSource = dataSource;
     if (dataSource is DataSourceSqlModel)
     {
         Icon = TreeReportingViewModel.IconType.DataSourceSql.ToString();
     }
 }
Example #3
0
 public ListDataSourceColumnsViewModel(ReportingSolutionViewModel reportingSolutionViewModel, BaseDataSourceModel dataSource, bool updatable)
 {
     // Asigna las propiedades
     ReportingSolutionViewModel = reportingSolutionViewModel;
     DataSource = dataSource;
     Updatable  = updatable;
     // Inicializa el viewModel
     InitViewModel();
     // Asigna los comandos
     NewColumnCommand    = new BaseCommand(_ => CreateColumn());
     DeleteColumnCommand = new BaseCommand(_ => DeleteColumn(), _ => SelectedItem != null)
                           .AddListener(this, nameof(SelectedItem));
 }
        /// <summary>
        ///		Carga los datos de una columna
        /// </summary>
        private DataSourceColumnModel LoadColumn(BaseDataSourceModel dataSource, MLNode rootML)
        {
            DataSourceColumnModel column = new DataSourceColumnModel(dataSource);

            // Carga las propiedades
            column.Id           = rootML.Attributes[TagSourceId].Value.TrimIgnoreNull();
            column.Type         = rootML.Attributes[TagType].Value.GetEnum(DataSourceColumnModel.FieldType.Unknown);
            column.Required     = rootML.Attributes[TagRequired].Value.GetBool();
            column.IsPrimaryKey = rootML.Attributes[TagPrimaryKey].Value.GetBool();
            column.Visible      = rootML.Attributes[TagVisible].Value.GetBool(true);
            // Devuelve el objeto
            return(column);
        }
        /// <summary>
        ///		Obtiene el alias del origen de datos
        /// </summary>
        private string GetDataSourceAlias(BaseDataSourceModel baseDataSource)
        {
            switch (baseDataSource)
            {
            case DataSourceTableModel dataSource:
                return(dataSource.Table);

            case DataSourceSqlModel dataSource:
                return(dataSource.Id);

            default:
                return(baseDataSource.Id);
            }
        }
Example #6
0
 public ListRelationViewModel(ReportingSolutionViewModel reportingSolutionViewModel, BaseDataSourceModel dataSource, List <DimensionRelationModel> relations)
 {
     // Asigna las propiedades
     ReportingSolutionViewModel = reportingSolutionViewModel;
     DataSource = dataSource;
     Relations  = relations;
     // Prepara la lista
     ListRelations = new ObservableCollection <DimensionRelationViewModel>();
     // Asigna los comandos
     NewRelationCommand  = new BaseCommand(_ => OpenRelation(null));
     OpenRelationCommand = new BaseCommand(_ => OpenRelation(SelectedItem), _ => SelectedItem != null)
                           .AddListener(this, nameof(SelectedItem));
     DeleteRelationCommand = new BaseCommand(_ => DeleteRelation(), _ => SelectedItem != null)
                             .AddListener(this, nameof(SelectedItem));
 }
Example #7
0
        /// <summary>
        ///		Obtiene el nombre de tabla (o la claúsula FROM) y las columnas de un origen de datos
        /// </summary>
        internal void Prepare(BaseDataSourceModel baseDataSource)
        {
            switch (baseDataSource)
            {
            case DataSourceTableModel dataSource:
                FromTable = dataSource.FullName;
                FromAlias = dataSource.Table;
                break;

            case DataSourceSqlModel dataSource:
                FromTable = $"({dataSource.Sql})";
                FromAlias = dataSource.Id;
                break;
            }
        }
        /// <summary>
        ///		Busca un origen de datos
        /// </summary>
        protected BaseDataSourceModel SearchDataSource(string dataSourceId)
        {
            // Busca el origen de datos
            foreach (DataWarehouseModel dataWarehouse in Generator.Schema.DataWarehouses.EnumerateValues())
            {
                BaseDataSourceModel dataSource = dataWarehouse.DataSources[dataSourceId];

                if (dataSource != null)
                {
                    return(dataSource);
                }
            }
            // Si ha llegado hasta aquí es porque no ha encontrado nada
            return(null);
        }
Example #9
0
 public DimensionRelationViewModel(ReportingSolutionViewModel reportingSolutionViewModel, BaseDataSourceModel dataSource, DimensionRelationModel relation)
 {
     // Inicializa los objetos
     ReportingSolutionViewModel = reportingSolutionViewModel;
     DataSource = dataSource;
     Relation   = relation;
     // Inicializa las propiedades
     InitViewModel();
     // Inicializa el manejador de eventos sobre el combo
     ComboDimensions.PropertyChanged += (sender, args) => {
         if (args.PropertyName.Equals(nameof(ComboDimensions.SelectedItem)))
         {
             LoadListForeignKeys();
         }
     };
 }
        /// <summary>
        ///		Obtiene la consulta de las expresiones
        /// </summary>
        internal QueryModel GetQuery(List <QueryModel> dimensionQueries)
        {
            //TODO En realidad, un informe puede tener varios orígenes de datos, cuál de los orígenes de datos se escoge, depende de ciertas condiciones como las dimensiones
            //TODO escogidas en la solicitud, para las primeras pruebas, cogemos directamente la primera solicitud
            ReportDataSourceModel reportDataSource = Generator.Report.ReportDataSources[0];
            BaseDataSourceModel   baseDataSource   = reportDataSource.DataSource;
            QueryModel            query            = new QueryModel(baseDataSource.Id, QueryModel.QueryType.Expressions, GetDataSourceAlias(baseDataSource));

            // Prepara la consulta
            query.Prepare(baseDataSource);
            // Añade los campos que vienen de otras dimensiones
            ComputeDimensionFields(query, dimensionQueries);
            // Obtiene los campos por los que vamos a agrupar y los añade a la colección de claves de dimensión de la consulta
            ComputeFieldsGroupBy(query, reportDataSource, dimensionQueries);
            // Obtiene los campos agrupados
            ComputeFieldsGrouped(query, Generator.Request, baseDataSource);
            // Devuelve la consulta
            return(query);
        }
        /// <summary>
        ///		Abre una ventana de consulta de un origen de datos
        /// </summary>
        private void OpenQueryDataSource(BaseDataSourceModel dataSource)
        {
            string sql = string.Empty;

            // Obtiene la cadena SQL para la consulta
            if (dataSource is DataSourceSqlModel dataSourceSql)
            {
                sql = dataSourceSql.Sql;
            }
            else if (dataSource is DataSourceTableModel dataSourceTable)
            {
                sql = GetSql(dataSourceTable);
            }
            // Abre la consulta
            if (!string.IsNullOrWhiteSpace(sql))
            {
                ReportingSolutionViewModel.SolutionViewModel.MainController
                .OpenWindow(new Details.Queries.ExecuteQueryViewModel(ReportingSolutionViewModel.SolutionViewModel, string.Empty, sql));
            }
        }
 /// <summary>
 ///		Obtiene los campos de expresiones agrupados
 /// </summary>
 private void ComputeFieldsGrouped(QueryModel query, ReportRequestModel request, BaseDataSourceModel dataSource)
 {
     foreach (ExpressionRequestModel expression in request.Expressions)
     {
         if (expression.ReportDataSourceId == dataSource.Id)
         {
             foreach (ExpressionColumnRequestModel requestColumn in expression.Columns)
             {
                 foreach (DataSourceColumnModel column in dataSource.Columns.EnumerateValues())
                 {
                     if (requestColumn.ColumnId.Equals(column.Id, StringComparison.CurrentCultureIgnoreCase))
                     {
                         query.AddColumn(column.Id, requestColumn.AggregatedBy, requestColumn);
                     }
                 }
             }
         }
     }
 }