/// <summary> /// Gets the loan field with the specified <paramref name="fieldId"/>. /// </summary> /// <param name="fieldId">The field id of the loan field to get. Borrower pair specified fields are supported, e.g. "4000#2".</param> /// <returns></returns> public LoanField this[string fieldId] { get { Preconditions.NotNullOrEmpty(fieldId, nameof(fieldId)); FieldDescriptor descriptor; int? borrowerPairIndex = null; ModelPath? modelPath = null; if (fieldId.Length > 2 && fieldId[fieldId.Length - 2] == '#') { borrowerPairIndex = fieldId[fieldId.Length - 1] - '1'; if (borrowerPairIndex < 0 || borrowerPairIndex > 5) { throw new ArgumentException($"Could not find field '{fieldId}'"); } var strippedFieldId = fieldId.Substring(0, fieldId.Length - 2); descriptor = LoanFieldDescriptors.GetFieldDescriptor(strippedFieldId, _loan.Client?.Loans.FieldDescriptors.CustomFields, UndefinedCustomFieldHandling.Default); if (!descriptor.IsBorrowerPairSpecific) { throw new ArgumentException($"Could not find field '{fieldId}'"); } modelPath = LoanFieldDescriptors.CreateModelPath($"Loan.Applications[(ApplicationIndex == '{borrowerPairIndex}')]{descriptor.ModelPath.Substring(23)}"); } else { descriptor = LoanFieldDescriptors.GetFieldDescriptor(fieldId, _loan.Client?.Loans.FieldDescriptors.CustomFields, _loan.Client?.UndefinedCustomFieldHandling ?? UndefinedCustomFieldHandling.Default); } switch (descriptor.Type) { case LoanFieldType.Custom: return(new CustomLoanField(descriptor, _loan)); case LoanFieldType.Virtual: return(new VirtualLoanField(descriptor, _loan)); default: return(new LoanField(descriptor, _loan, modelPath, borrowerPairIndex)); } } }
/// <summary> /// Creates an instance descriptor with the specified <paramref name="instanceSpecifier"/>. /// </summary> /// <param name="instanceSpecifier">The instance specifier for an instance field descriptor.</param> /// <returns></returns> public FieldDescriptor GetInstanceDescriptor(string instanceSpecifier) { Preconditions.NotNullOrEmpty(instanceSpecifier, nameof(instanceSpecifier)); if (!MultiInstance) { throw new InvalidOperationException("field must be multi-instance to retrieve an instance descriptor"); } if (IsInstance) { throw new InvalidOperationException("cannot retrieve an instance descriptor of an instance descriptor"); } var formatArg = int.TryParse(instanceSpecifier, NumberStyles.None, null, out var i) ? (object)i : instanceSpecifier; var modelPathString = string.Format(ModelPath, formatArg); return(new FieldDescriptor(string.Format(FieldId, formatArg), LoanFieldDescriptors.CreateModelPath(modelPathString), modelPathString, string.Format(Description, formatArg), MultiInstance, instanceSpecifier, this)); }