using System; using System.ComponentModel; using InABox.Core; namespace Comal.Classes { [UserTracking("Human Resources")] public class Employee : Entity, IEmployee, ISchedulable, IPersistent, IRemotable, IOrgChart, ILicense, IExportable, IImportable { [EditorSequence(3)] public Address Address { get; set; } //public bool ScheduleEnabled { get; set; } [SecondaryIndex] [CheckBoxEditor] [EditorSequence(7)] public bool CanAllocateTasks { get; set; } [CheckBoxEditor] [EditorSequence(10)] public bool CheckSetouts { get; set; } [CheckBoxEditor] [EditorSequence(11)] public bool Storesperson { get; set; } [NullEditor] public Guid UserID { get; set; } [EditorSequence(13)] public ImageDocumentLink Thumbnail { get; set; } [EditorSequence(15)] public OvertimeRuleLink OvertimeRuleLink { get; set; } [TextBoxEditor] [EditorSequence(17)] public string Email { get; set; } [TextBoxEditor] [EditorSequence(18)] public string Mobile { get; set; } [EnumLookupEditor(typeof(EmployeeType))] [EditorSequence(20)] public EmployeeType Type { get; set; } [CheckBoxEditor] [EditorSequence(21)] [Caption("Show In/Out Status?")] public bool ShowOnInOutBoard { get; set; } [TimeOfDayEditor] [EditorSequence(22)] [Obsolete("Replaced with EmployeeRoster class")] public TimeSpan UsualStart { get; set; } [TimeOfDayEditor] [EditorSequence(23)] [Obsolete("Replaced with EmployeeRoster class")] public TimeSpan UsualFinish { get; set; } [NullEditor] [Obsolete("Replaced with EmployeeRoster class")] public EmployeeActivityLink UsualActivity { get; set; } [IntegerEditor(Visible = Visible.Optional, Editable = Editable.Hidden)] public int RosterLength { get; set; } [DateTimeEditor(Visible = Visible.Optional, Editable = Editable.Hidden)] public DateTime RosterStart { get; set; } [EditorSequence(24)] public EmployeePositionLink Position { get; set; } [EditorSequence(25)] [EntityRelationship(DeleteAction.Cascade)] public EmployeeLink Manager { get; set; } [UniqueCodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)] [EditorSequence(1)] public string Code { get; set; } [TextBoxEditor] [EditorSequence(2)] public string Name { get; set; } [SecondaryIndex] [DateEditor] [EditorSequence(5)] public DateTime StartDate { get; set; } [SecondaryIndex] [DateEditor] [EditorSequence(6)] public DateTime FinishDate { get; set; } // Deprecated - Replace with EmployeeGroup [CodeEditor(Editable = Editable.Enabled)] [EditorSequence(8)] public string Department { get; set; } [EditorSequence(9)] public EmployeeGroupLink Group { get; set; } [EditorSequence(12)] public UserLink UserLink { get; set; } [CodeEditor(Editable = Editable.Enabled)] [EditorSequence(14)] public string PayrollID { get; set; } [DateEditor] [EditorSequence(4)] public DateTime DateOfBirth { get; set; } public OrgChartSettings OrgChart { get; set; } [NullEditor] public int ActiveSchedules { get; set; } [NullEditor] public byte[]? Signature { get; set; } protected override void Init() { base.Init(); Code = ""; Name = ""; Address = new Address(); //Photo = new ImageDataFile(); Thumbnail = new ImageDocumentLink(); //Attachments = new List(); UsualActivity = new EmployeeActivityLink(); Group = new EmployeeGroupLink(); UserLink = new UserLink(); UserLink.PropertyChanged += UserLink_PropertyChanged; OvertimeRuleLink = new OvertimeRuleLink(); RosterLength = 7; RosterStart = DateTime.Today; Manager = new EmployeeLink(); Position = new EmployeePositionLink(); OrgChart = new OrgChartSettings(); } private void UserLink_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "ID") UserID = UserLink.ID; else if (e.PropertyName == "Type") ShowOnInOutBoard = Type == EmployeeType.Employee; } public override string ToString() { return Name; } public static Filter ActiveEmployees(DateTime date) { var start = new Filter(x => x.StartDate).IsEqualTo(DateTime.MinValue).Or(x => x.StartDate).IsLessThanOrEqualTo(date); var finish = new Filter(x => x.FinishDate).IsEqualTo(DateTime.MinValue).Or(x => x.FinishDate).IsGreaterThanOrEqualTo(date); return start.And(finish); } } }