CalculatedFields.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Data;
  2. namespace TravelAgencyWinForms.Utils;
  3. public static class CalculatedFields
  4. {
  5. private static readonly Dictionary<string, string> Labels = new(StringComparer.OrdinalIgnoreCase)
  6. {
  7. ["age_years"] = "Возраст сотрудника",
  8. ["duration_days"] = "Длительность тура",
  9. ["days_overdue"] = "Дней просрочки",
  10. ["is_overdue"] = "Просрочено"
  11. };
  12. public static bool IsCalculated(string columnName)
  13. {
  14. return Labels.ContainsKey(columnName);
  15. }
  16. public static List<string> GetColumns(DataTable table)
  17. {
  18. return table.Columns
  19. .Cast<DataColumn>()
  20. .Where(column => IsCalculated(column.ColumnName))
  21. .Select(column => column.ColumnName)
  22. .ToList();
  23. }
  24. public static string GetLabel(string columnName)
  25. {
  26. return Labels.TryGetValue(columnName, out var label) ? label : columnName;
  27. }
  28. public static string FormatValue(string columnName, object? value)
  29. {
  30. if (value == null || value == DBNull.Value)
  31. return "—";
  32. if (columnName.Equals("is_overdue", StringComparison.OrdinalIgnoreCase))
  33. {
  34. if (value is bool boolValue)
  35. return boolValue ? "Да" : "Нет";
  36. return value.ToString()?.Equals("true", StringComparison.OrdinalIgnoreCase) == true ? "Да" : "Нет";
  37. }
  38. if (columnName.Equals("age_years", StringComparison.OrdinalIgnoreCase))
  39. return value + " лет";
  40. if (columnName.Equals("duration_days", StringComparison.OrdinalIgnoreCase))
  41. return value + " дн.";
  42. if (columnName.Equals("days_overdue", StringComparison.OrdinalIgnoreCase))
  43. return value + " дн.";
  44. return value.ToString() ?? "—";
  45. }
  46. }