using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { [UserTracking("Human Resources")] public class Employee : Entity, IEmployee, ISchedulable, IPersistent, IRemotable, IOrgChart, ILicense, IExportable, IImportable { [UniqueCodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)] [EditorSequence(1)] public string Code { get; set; } [TextBoxEditor] [EditorSequence(2)] public string Name { get; set; } [EnumLookupEditor(typeof(EmployeeType))] [EditorSequence("Payroll", 3)] public EmployeeType Type { get; set; } [EditorSequence(4)] public Address Address { get; set; } [TextBoxEditor] [EditorSequence(5)] public string Email { get; set; } [TextBoxEditor] [EditorSequence(6)] public string Mobile { get; set; } [DateEditor] [EditorSequence(7)] public DateTime DateOfBirth { get; set; } [EditorSequence(8)] public UserLink UserLink { get; set; } [CodeEditor(Editable = Editable.Enabled)] [EditorSequence(9)] [Obsolete("Replaced with EmployeeGroup", true)] public string Department { get; set; } [EditorSequence(10)] public EmployeeGroupLink Group { get; set; } [EditorSequence(11)] public ImageDocumentLink Thumbnail { get; set; } [SecondaryIndex] [CheckBoxEditor] [EditorSequence(12)] public bool CanAllocateTasks { get; set; } [CheckBoxEditor] [EditorSequence(13)] [Caption("Show In/Out Status?")] public bool ShowOnInOutBoard { get; set; } [SecondaryIndex] [DateEditor] [EditorSequence("Payroll", 1)] public DateTime StartDate { get; set; } [SecondaryIndex] [DateEditor] [EditorSequence("Payroll", 2)] public DateTime FinishDate { get; set; } [EditorSequence("Payroll", 3)] [EmbeddedListEditor(typeof(EmployeeRosterItem), DirectEdit = true)] public String Roster { get; set; } [EditorSequence("Payroll", 4)] [DateTimeEditor(Visible = Visible.Optional)] public DateTime RosterStart { get; set; } [EditorSequence("Payroll",5)] public OvertimeRuleLink OvertimeRuleLink { get; set; } [CodeEditor(Editable = Editable.Enabled)] [EditorSequence("Payroll",6)] public string PayrollID { get; set; } [EditorSequence("Org Chart", 1)] public EmployeePositionLink Position { get; set; } [EditorSequence("Org Chart", 2)] [EntityRelationship(DeleteAction.Cascade)] public EmployeeLink Manager { get; set; } [EditorSequence("Org Chart", 3)] public OrgChartSettings OrgChart { get; set; } [NullEditor] [Obsolete("Replaced with UserLink.ID", true)] public Guid UserID { get; set; } [NullEditor] public int ActiveSchedules { get; set; } [NullEditor] public byte[]? Signature { get; set; } [NullEditor] [Obsolete("Replaced with EmployeeRoster class", true)] public TimeSpan UsualStart { get; set; } [NullEditor] [Obsolete("Replaced with EmployeeRoster class", true)] public TimeSpan UsualFinish { get; set; } protected override void Init() { base.Init(); Code = ""; Name = ""; Address = new Address(); Thumbnail = new ImageDocumentLink(); Group = new EmployeeGroupLink(); UserLink = new UserLink(); UserLink.PropertyChanged += UserLink_PropertyChanged; OvertimeRuleLink = new OvertimeRuleLink(); Roster = ""; RosterStart = DateTime.MinValue; Manager = new EmployeeLink(); Position = new EmployeePositionLink(); OrgChart = new OrgChartSettings(); } private void UserLink_PropertyChanged(object sender, PropertyChangedEventArgs e) { //if (e.PropertyName == "ID") // UserID = UserLink.ID; 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); } } }