using System; using InABox.Core; namespace Comal.Classes { [UserTracking("Timesheets")] public class TimeSheet : Entity, IPersistent, IRemotable, IOneToMany, IOneToMany, ILicense, IExportable, IImportable, IPostable { [EditorSequence(1)] public EmployeeLink EmployeeLink { get; set; } [SecondaryIndex] [DateEditor] [EditorSequence(2)] [LoggableProperty(Format = "dd MMM yy")] public DateTime Date { get; set; } [NullEditor] public Guid JobID { get; set; } [EditorSequence(3)] public JobLink JobLink { get; set; } [EntityRelationship(DeleteAction.SetNull)] [EditorSequence(4)] public TimeSheetActivityLink ActivityLink { get; set; } [TimeOfDayEditor] [EditorSequence(5)] [LoggableProperty(Format = "hh\\:mm")] public TimeSpan Start { get; set; } [TimeOfDayEditor] [EditorSequence(6)] [LoggableProperty(Format = "hh\\:mm")] public TimeSpan Finish { get; set; } [DurationEditor] [EditorSequence(7)] [LoggableProperty(Format = "hh\\:mm")] public TimeSpan ApprovedStart { get; set; } [DurationEditor] [EditorSequence(8)] [LoggableProperty(Format = "hh\\:mm")] public TimeSpan ApprovedFinish { get; set; } [MemoEditor] [EditorSequence(9)] public string Notes { get; set; } = ""; [TimestampEditor] [EditorSequence(10)] [LoggableProperty(Format = "dd MMM yy HH:mm")] public DateTime Confirmed { get; set; } [TimestampEditor] [EditorSequence(11)] [LoggableProperty(Format = "dd MMM yy HH:mm")] public DateTime Approved { get; set; } = DateTime.MinValue; [SecondaryIndex] //[TimestampEditor] //[EditorSequence(12)] //[LoggableProperty(Format = "dd MMM yy HH:mm")] [NullEditor] [Obsolete("Replaced with Posted")] public DateTime Processed { get; set; } = DateTime.MinValue; [NullEditor] [EntityRelationship(DeleteAction.Cascade)] public LeaveRequestLink LeaveRequestLink { get; set; } [NullEditor] [EntityRelationship(DeleteAction.Cascade)] public StandardLeaveLink StandardLeaveLink { get; set; } [TextBoxEditor(Editable = Editable.Hidden)] public string SoftwareVersion { get; set; } [NullEditor] public Location StartLocation { get; set; } [NullEditor] public Location FinishLocation { get; set; } [DurationEditor(Editable = Editable.Hidden, Summary = Summary.Sum)] public TimeSpan ApprovedDuration { get; set; } [NullEditor] [Obsolete("Replaced with EmployeeLink.ID",true)] public Guid EmployeeID { get; set; } [DurationEditor(Editable = Editable.Hidden, Summary = Summary.Sum)] public TimeSpan Duration { get; set; } [TextBoxEditor(Editable = Editable.Hidden)] public string Address { get; set; } [TextBoxEditor(Editable = Editable.Hidden)] public string Gate { get; set; } [LoggableProperty(Format = "dd MMM yy HH:mm")] [TimestampEditor] [EditorSequence(12)] public DateTime Posted { get; set; } [NullEditor] [LoggableProperty] public PostedStatus PostedStatus { get; set; } [NullEditor] public string PostedNote { get; set; } [NullEditor] public string PostedReference { get; set; } protected override void DoPropertyChanged(string name, object? before, object? after) { base.DoPropertyChanged(name, before, after); if (name.Equals("Start")) Duration = Finish > (TimeSpan)after ? Finish.Subtract((TimeSpan)after) : new TimeSpan(); else if (name.Equals("Finish")) Duration = (TimeSpan)after > Start ? ((TimeSpan)after).Subtract(Start) : new TimeSpan(); else if (name.Equals("ApprovedStart")) //ApprovedDuration = ApprovedFinish > ((TimeSpan)after) ? ApprovedFinish.Subtract((TimeSpan)after) : new TimeSpan(); ApprovedDuration = ApprovedFinish > (TimeSpan)after ? ApprovedFinish.Subtract((TimeSpan)after) : new TimeSpan(); else if (name.Equals("ApprovedFinish")) ApprovedDuration = (TimeSpan)after > ApprovedStart ? ((TimeSpan)after).Subtract(ApprovedStart) : new TimeSpan(); } } }