public Completeness(Terrasoft.Configuration.Completeness source) : base(source) { this.CopyEntityLookupProperties(source); }
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); }