using System; using InABox.Core; namespace Comal.Classes { [UserTracking("Timesheets")] public class TimeSheet : Entity, IPersistent, IRemotable, IOneToMany, IOneToMany, ILicense, IExportable, IImportable { [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; } [NullEditor] public DateTime UTCStart { get; set; } [NullEditor] public DateTime UTCFinish { get; set; } [CoreTimeEditor] public TimeBlock ActualTime { get; set; } [CoreTimeEditor] public TimeBlock ApprovedTime { get; set; } [TextBoxEditor] [EditorSequence(6)] public string TimeZoneStart { get; set; } [TextBoxEditor] [EditorSequence(8)] public string TimeZoneFinish { get; set; } [MemoEditor] [EditorSequence(11)] public string Notes { get; set; } [TimestampEditor] [EditorSequence(12)] [LoggableProperty(Format = "dd MMM yy HH:mm")] public DateTime Confirmed { get; set; } [TimestampEditor] [EditorSequence(13)] [LoggableProperty(Format = "dd MMM yy HH:mm")] public DateTime Approved { get; set; } [SecondaryIndex] [TimestampEditor] [EditorSequence(14)] [LoggableProperty(Format = "dd MMM yy HH:mm")] public DateTime Processed { get; set; } [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; } [NullEditor] [Obsolete("Replaced with EmployeeLink.ID",true)] public Guid EmployeeID { get; set; } [TextBoxEditor(Editable = Editable.Hidden)] public string Address { get; set; } [TextBoxEditor(Editable = Editable.Hidden)] public string Gate { get; set; } [TimeOfDayEditor] [LoggableProperty(Format = "hh\\:mm")] [Obsolete("Replaced with ActualTime.Start")] public TimeSpan Start { get; set; } [TimeOfDayEditor] [LoggableProperty(Format = "hh\\:mm")] [Obsolete("Replaced with ActualTime.Finish")] public TimeSpan Finish { get; set; } [DurationEditor(Editable = Editable.Hidden, Summary = Summary.Sum)] [Obsolete("Replaced with ActualTime.Duration")] public TimeSpan Duration { get; set; } [DurationEditor] [LoggableProperty(Format = "hh\\:mm")] [Obsolete("Replaced with ApprovedTime.Start")] public TimeSpan ApprovedStart { get; set; } [DurationEditor] [LoggableProperty(Format = "hh\\:mm")] [Obsolete("Replaced with ApprovedTime.Finish")] public TimeSpan ApprovedFinish { get; set; } [DurationEditor(Editable = Editable.Hidden, Summary = Summary.Sum)] [Obsolete("Replaced with ApprovedTime.Duration")] public TimeSpan ApprovedDuration { get; set; } protected override void Init() { base.Init(); Notes = string.Empty; Approved = DateTime.MinValue; Processed = DateTime.MinValue; EmployeeLink = new EmployeeLink(); JobLink = new JobLink(); ActivityLink = new TimeSheetActivityLink(); LeaveRequestLink = new LeaveRequestLink(); StandardLeaveLink = new StandardLeaveLink(); StartLocation = new Location(); FinishLocation = new Location(); } 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(); } } }