/// <summary> /// The create. /// </summary> /// <param name="property"> /// The property. /// </param> /// <param name="model"> /// The model. /// </param> /// <returns> /// The <see cref="ChecklistFieldOptions"/>. /// </returns> public static ChecklistFieldOptions Create(PropertyInfo property, IEditableRoot model) { if (property == null) { throw new ArgumentNullException("property"); } var result = new ChecklistFieldOptions(); Ioc.SatisfyImportsOnce(result); var value = property.GetValue(model) as ChecklistEdit; if (value == null) { result.NeedSaving = true; return result; } result.AllowAdhocQuestions = value.AllowAdhocQuestions; result.AnswerProcessSystemName = value.AnswerProcessSystemName; result.ListDisplayFieldSystemName = value.ListDisplayFieldSystemName; result.CanChangeItemState = value.CanChangeItemState; if (!string.IsNullOrEmpty(value.HiddenAnswersId)) { result.HiddenAnswersId = value.HiddenAnswersId.Split(',').Select(SafeTypeConverter.Convert<int>).ToArray(); } if (!string.IsNullOrEmpty(value.AnswerProcessSystemName)) { var editableRootType = result.DynamicTypeManager.GetEditableRootType(value.AnswerProcessSystemName); result.CanAddItem = Csla.Rules.BusinessRules.HasPermission(Csla.Rules.AuthorizationActions.CreateObject, editableRootType); result.CanDeleteItem = Csla.Rules.BusinessRules.HasPermission(Csla.Rules.AuthorizationActions.DeleteObject, editableRootType) && model.CanWritePropertyByName(property.Name); if (value.AnswerProcessList != null && value.AnswerProcessList.Count > 0) { result.AnswerProcessFields = result.GetFields((IEditableRoot)value.AnswerProcessList[0]); } else { result.AnswerProcessFields = result.GetFields((IEditableRoot)DataPortal.Create(editableRootType, null)); } var displayFieldAttributes = (ChecklistDisplayFieldAttribute[])property.GetCustomAttributes(typeof(ChecklistDisplayFieldAttribute), false); foreach (var displayFieldAttribute in displayFieldAttributes) { result.AnswerDisplayFields.Add( new FieldSettingsOverride { FieldName = displayFieldAttribute.SystemName, Position = displayFieldAttribute.Sequence, Width = displayFieldAttribute.Width, RowSpan = displayFieldAttribute.NumberOfRows }); } } return result; }