UserTrackingAttribute.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using System;
  2. using System.Reflection;
  3. namespace InABox.Core
  4. {
  5. public class UserTrackingAttribute : Attribute
  6. {
  7. public UserTrackingAttribute(bool enabled)
  8. {
  9. Enabled = enabled;
  10. Parent = null;
  11. Alias = "";
  12. }
  13. public UserTrackingAttribute(Type parent)
  14. {
  15. Enabled = true;
  16. Parent = parent;
  17. Alias = "";
  18. }
  19. public UserTrackingAttribute(string alias)
  20. {
  21. Enabled = true;
  22. Parent = null;
  23. Alias = alias;
  24. }
  25. public bool Enabled { get; }
  26. public Type Parent { get; }
  27. public string Alias { get; }
  28. public static string TrackingName(Type type)
  29. {
  30. var attr = type.GetCustomAttribute<UserTrackingAttribute>();
  31. if (attr == null)
  32. return type.Name;
  33. if (!attr.Enabled)
  34. return null;
  35. if (attr.Parent != null)
  36. return TrackingName(attr.Parent);
  37. return attr.Alias;
  38. }
  39. public static Type TrackingType(Type type)
  40. {
  41. var attr = type.GetCustomAttribute<UserTrackingAttribute>();
  42. if (attr == null)
  43. return type;
  44. if (!attr.Enabled)
  45. return null;
  46. if (attr.Parent != null)
  47. return TrackingType(attr.Parent);
  48. return type;
  49. }
  50. }
  51. [UserTracking(false)]
  52. public class UserTracking : Entity, IRemotable, IPersistent, ILicense<CoreLicense>
  53. {
  54. [EntityRelationship(DeleteAction.Cascade)]
  55. public UserLink User { get; set; }
  56. public DateTime Date { get; set; }
  57. public string Type { get; set; }
  58. public int Hour00Read { get; set; }
  59. public int Hour01Read { get; set; }
  60. public int Hour02Read { get; set; }
  61. public int Hour03Read { get; set; }
  62. public int Hour04Read { get; set; }
  63. public int Hour05Read { get; set; }
  64. public int Hour06Read { get; set; }
  65. public int Hour07Read { get; set; }
  66. public int Hour08Read { get; set; }
  67. public int Hour09Read { get; set; }
  68. public int Hour10Read { get; set; }
  69. public int Hour11Read { get; set; }
  70. public int Hour12Read { get; set; }
  71. public int Hour13Read { get; set; }
  72. public int Hour14Read { get; set; }
  73. public int Hour15Read { get; set; }
  74. public int Hour16Read { get; set; }
  75. public int Hour17Read { get; set; }
  76. public int Hour18Read { get; set; }
  77. public int Hour19Read { get; set; }
  78. public int Hour20Read { get; set; }
  79. public int Hour21Read { get; set; }
  80. public int Hour22Read { get; set; }
  81. public int Hour23Read { get; set; }
  82. public int TotalRead { get; set; }
  83. public int Hour00Write { get; set; }
  84. public int Hour01Write { get; set; }
  85. public int Hour02Write { get; set; }
  86. public int Hour03Write { get; set; }
  87. public int Hour04Write { get; set; }
  88. public int Hour05Write { get; set; }
  89. public int Hour06Write { get; set; }
  90. public int Hour07Write { get; set; }
  91. public int Hour08Write { get; set; }
  92. public int Hour09Write { get; set; }
  93. public int Hour10Write { get; set; }
  94. public int Hour11Write { get; set; }
  95. public int Hour12Write { get; set; }
  96. public int Hour13Write { get; set; }
  97. public int Hour14Write { get; set; }
  98. public int Hour15Write { get; set; }
  99. public int Hour16Write { get; set; }
  100. public int Hour17Write { get; set; }
  101. public int Hour18Write { get; set; }
  102. public int Hour19Write { get; set; }
  103. public int Hour20Write { get; set; }
  104. public int Hour21Write { get; set; }
  105. public int Hour22Write { get; set; }
  106. public int Hour23Write { get; set; }
  107. public int TotalWrite { get; set; }
  108. public void Increment(DateTime date, UserTrackingAction action)
  109. {
  110. var name = string.Format("Hour{0:D2}{1}", date.Hour, action.ToString());
  111. var property = GetType().GetProperty(name);
  112. var value = (int)property.GetValue(this);
  113. property.SetValue(this, value + 1);
  114. }
  115. protected override void Init()
  116. {
  117. base.Init();
  118. User = new UserLink();
  119. }
  120. protected override void DoPropertyChanged(string name, object before, object after)
  121. {
  122. base.DoPropertyChanged(name, before, after);
  123. TotalRead = Hour00Read + Hour01Read + Hour02Read + Hour03Read + Hour04Read + Hour05Read + Hour06Read + Hour07Read + Hour08Read +
  124. Hour09Read + Hour10Read + Hour11Read + Hour12Read + Hour13Read + Hour14Read + Hour15Read + Hour16Read + Hour17Read +
  125. Hour18Read + Hour19Read + Hour20Read + Hour21Read + Hour22Read + Hour23Read;
  126. TotalWrite = Hour00Write + Hour01Write + Hour02Write + Hour03Write + Hour04Write + Hour05Write + Hour06Write + Hour07Write + Hour08Write +
  127. Hour09Write + Hour10Write + Hour11Write + Hour12Write + Hour13Write + Hour14Write + Hour15Write + Hour16Write + Hour17Write +
  128. Hour18Write + Hour19Write + Hour20Write + Hour21Write + Hour22Write + Hour23Write;
  129. }
  130. }
  131. }