Beispiel #1
0
 public Completeness(Terrasoft.Configuration.Completeness source)
     : base(source)
 {
     this.CopyEntityLookupProperties(source);
 }
Beispiel #2
0
 public Completeness(Completeness source)
     : base(source)
 {
 }
        /// <summary>
        /// Calculate completeness for record.
        /// </summary>
        /// <param name="recordId">Record id.</param>
        /// <param name="schemaName">Schema name.</param>
        /// <param name="typeValue">Type Id.</param>
        /// <returns>Dictionary with completeness info for each calculated record.</returns>
        protected Dictionary <Guid, CompletenessServiceResponse> CalculateRecordCompleteness(Guid recordId,
                                                                                             string schemaName, Guid typeValue)
        {
            int    completenessValue         = 0;
            string resultColumn              = string.Empty;
            string scale                     = string.Empty;
            var    result                    = new Dictionary <Guid, CompletenessServiceResponse>();
            var    completenessParameterList = new List <CompletenessParameter>();

            result.Add(recordId, new CompletenessServiceResponse());
            if (recordId.IsEmpty())
            {
                return(result);
            }
            Completeness completeness = GetCompletenessList(typeValue)
                                        .FirstOrDefault(cmpl => cmpl.EntitySchemaName == schemaName);

            if (completeness != null)
            {
                resultColumn = completeness.ResultColumnName;
                scale        = completeness.Scale;
                completenessParameterList = GetCompletenessParameters(completeness.Id);
            }
            var          columnParams      = new List <CompletenessParameter>();
            var          detailParams      = new List <CompletenessParameter>();
            EntitySchema schema            = AppConnection.SystemUserConnection.EntitySchemaManager.GetInstanceByName(schemaName);
            var          esq               = new EntitySchemaQuery(schema);
            string       primaryColumnName = esq.RootSchema.GetPrimaryColumnName();
            Select       entitiesSelect    =
                new Select(AppConnection.SystemUserConnection)
                .Column(primaryColumnName).As(primaryColumnName)
                .Column(resultColumn).As("Completeness")
                .From(schemaName) as Select;

            entitiesSelect.Where(primaryColumnName).IsEqual(new QueryParameter(recordId));
            foreach (CompletenessParameter param in completenessParameterList)
            {
                if (param.IsColumn)
                {
                    if (!entitiesSelect.Columns.ExistsByAlias(param.ColumnName))
                    {
                        entitiesSelect.Column(param.ColumnName).As(param.ColumnName);
                    }
                    param.setDBColumnName(param.ColumnName);
                    columnParams.Add(param);
                }
                else if (param.IsDetail)
                {
                    if (!entitiesSelect.Columns.ExistsByAlias(param.MasterColumn))
                    {
                        entitiesSelect.Column(param.MasterColumn).As(param.MasterColumn);
                    }
                    param.setDBMasterColumn(param.MasterColumn);
                    detailParams.Add(param);
                }
            }
            using (DBExecutor dbExecutor = EnsureSystemUserDbConnection()) {
                using (IDataReader dataReader = entitiesSelect.ExecuteReader(dbExecutor)) {
                    while (dataReader.Read())
                    {
                        var primaryColumnValue = dataReader.GetColumnValue <Guid>(primaryColumnName);
                        var missingParameters  = new List <CompletenessParameter>();
                        foreach (CompletenessParameter param in detailParams)
                        {
                            var detailMasterColumnId = dataReader.GetColumnValue <Guid>(param.getDBMasterColumn());
                            int detailCompleteness   = GetCompletenessFromDetail(param, detailMasterColumnId);
                            if (detailCompleteness == 0)
                            {
                                missingParameters.Add(param);
                            }
                            completenessValue += detailCompleteness;
                        }
                        foreach (CompletenessParameter param in columnParams)
                        {
                            double valueDouble = 0;
                            object value       = dataReader.GetColumnValue(param.getDBColumnName());
                            bool   isDouble    = value != null && double.TryParse(value.ToString(), out valueDouble);
                            if (value != null &&
                                ((isDouble && valueDouble != 0) ||
                                 (!isDouble && !string.IsNullOrEmpty(value.ToString()))))
                            {
                                completenessValue += param.Percentage;
                            }
                            else
                            {
                                missingParameters.Add(param);
                            }
                        }
                        var currentEntityCompleteness = dataReader.GetColumnValue <int>("Completeness");
                        if (currentEntityCompleteness != completenessValue)
                        {
                            var item = ClassFactory.Get <CompletenessItem>(
                                new ConstructorArgument("recordId", primaryColumnValue),
                                new ConstructorArgument("schemaName", schemaName),
                                new ConstructorArgument("completeness", completenessValue),
                                new ConstructorArgument("resultColumn", resultColumn));
                            _completenessItems.Add(item);
                        }
                        missingParameters          = missingParameters.OrderBy(param => param.Percentage).ToList();
                        result[primaryColumnValue] = new CompletenessServiceResponse {
                            Completeness      = completenessValue,
                            MissingParameters = missingParameters,
                            Scale             = scale
                        };
                    }
                }
                PersistCompletenessItems();
            }
            return(result);
        }