private static string GetValueForField(FieldDefinition fieldDefinition, IInternalState state)
{
string format = fieldDefinition.Format;
var columnDescriber = new ColumnDescriber(fieldDefinition.Name, fieldDefinition.Table);
if(fieldDefinition.Type.IsIn(FieldDefinitionType.DateTime))
{
var dateTime = state.Get<DateTime?>(columnDescriber);
if (!dateTime.HasValue)
return fieldDefinition.Default;
// DateTime needs a format specifier
return !format.IsNullOrEmpty() ? dateTime.Value.ToString(format, CultureInfo.InvariantCulture) : dateTime.Value.ToShortDateString();
}
if(fieldDefinition.Type.IsIn(FieldDefinitionType.Amount, FieldDefinitionType.InvertedAmount, FieldDefinitionType.Decimal))
{
var money = state.Get<Money>(columnDescriber);
if (money.IsEmpty) return fieldDefinition.Default;
if (fieldDefinition.Type == FieldDefinitionType.InvertedAmount) money *= -1;
return ToString(money, format);
}
if(fieldDefinition.Type.IsIn(FieldDefinitionType.Int16, FieldDefinitionType.Int32, FieldDefinitionType.Int64))
{
var value = state.Get<long?>(columnDescriber);
return !value.HasValue ? fieldDefinition.Default : ToString(value, format);
}
return !state.Get<string>(columnDescriber).IsNullOrEmpty() ? state.Get<string>(columnDescriber) : fieldDefinition.Default;
}