| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 | using System;using System.Reflection;namespace InABox.Core{    public class UserTrackingAttribute : Attribute    {        public UserTrackingAttribute(bool enabled)        {            Enabled = enabled;            Parent = null;            Alias = "";        }        public UserTrackingAttribute(Type parent)        {            Enabled = true;            Parent = parent;            Alias = "";        }        public UserTrackingAttribute(string alias)        {            Enabled = true;            Parent = null;            Alias = alias;        }        public bool Enabled { get; }        public Type Parent { get; }        public string Alias { get; }        public static string TrackingName(Type type)        {            var attr = type.GetCustomAttribute<UserTrackingAttribute>();            if (attr == null)                return type.Name;            if (!attr.Enabled)                return null;            if (attr.Parent != null)                return TrackingName(attr.Parent);            return attr.Alias;        }        public static Type TrackingType(Type type)        {            var attr = type.GetCustomAttribute<UserTrackingAttribute>();            if (attr == null)                return type;            if (!attr.Enabled)                return null;            if (attr.Parent != null)                return TrackingType(attr.Parent);            return type;        }    }    [UserTracking(false)]    public class UserTracking : Entity, IRemotable, IPersistent, ILicense<CoreLicense>    {        [EntityRelationship(DeleteAction.Cascade)]        public UserLink User { get; set; }        public DateTime Date { get; set; }        public string Type { get; set; }        public int Hour00Read { get; set; }        public int Hour01Read { get; set; }        public int Hour02Read { get; set; }        public int Hour03Read { get; set; }        public int Hour04Read { get; set; }        public int Hour05Read { get; set; }        public int Hour06Read { get; set; }        public int Hour07Read { get; set; }        public int Hour08Read { get; set; }        public int Hour09Read { get; set; }        public int Hour10Read { get; set; }        public int Hour11Read { get; set; }        public int Hour12Read { get; set; }        public int Hour13Read { get; set; }        public int Hour14Read { get; set; }        public int Hour15Read { get; set; }        public int Hour16Read { get; set; }        public int Hour17Read { get; set; }        public int Hour18Read { get; set; }        public int Hour19Read { get; set; }        public int Hour20Read { get; set; }        public int Hour21Read { get; set; }        public int Hour22Read { get; set; }        public int Hour23Read { get; set; }        public int TotalRead { get; set; }        public int Hour00Write { get; set; }        public int Hour01Write { get; set; }        public int Hour02Write { get; set; }        public int Hour03Write { get; set; }        public int Hour04Write { get; set; }        public int Hour05Write { get; set; }        public int Hour06Write { get; set; }        public int Hour07Write { get; set; }        public int Hour08Write { get; set; }        public int Hour09Write { get; set; }        public int Hour10Write { get; set; }        public int Hour11Write { get; set; }        public int Hour12Write { get; set; }        public int Hour13Write { get; set; }        public int Hour14Write { get; set; }        public int Hour15Write { get; set; }        public int Hour16Write { get; set; }        public int Hour17Write { get; set; }        public int Hour18Write { get; set; }        public int Hour19Write { get; set; }        public int Hour20Write { get; set; }        public int Hour21Write { get; set; }        public int Hour22Write { get; set; }        public int Hour23Write { get; set; }        public int TotalWrite { get; set; }        public void Increment(DateTime date, UserTrackingAction action)        {            var name = string.Format("Hour{0:D2}{1}", date.Hour, action.ToString());            var property = GetType().GetProperty(name);            var value = (int)property.GetValue(this);            property.SetValue(this, value + 1);        }        protected override void Init()        {            base.Init();            User = new UserLink();        }        protected override void DoPropertyChanged(string name, object? before, object? after)        {            base.DoPropertyChanged(name, before, after);            TotalRead = Hour00Read + Hour01Read + Hour02Read + Hour03Read + Hour04Read + Hour05Read + Hour06Read + Hour07Read + Hour08Read +                        Hour09Read + Hour10Read + Hour11Read + Hour12Read + Hour13Read + Hour14Read + Hour15Read + Hour16Read + Hour17Read +                        Hour18Read + Hour19Read + Hour20Read + Hour21Read + Hour22Read + Hour23Read;            TotalWrite = Hour00Write + Hour01Write + Hour02Write + Hour03Write + Hour04Write + Hour05Write + Hour06Write + Hour07Write + Hour08Write +                         Hour09Write + Hour10Write + Hour11Write + Hour12Write + Hour13Write + Hour14Write + Hour15Write + Hour16Write + Hour17Write +                         Hour18Write + Hour19Write + Hour20Write + Hour21Write + Hour22Write + Hour23Write;        }    }}
 |