using System; using System.Collections.ObjectModel; using System.Drawing; using Comal.Classes; using InABox.Core; using InABox.Mobile; using Color = Xamarin.Forms.Color; namespace PRS.Mobile { public class AssignmentShell : Shell { protected override void ConfigureColumns(ShellColumns columns) { columns .Map(nameof(EmployeeID), x => x.EmployeeLink.ID) .Map(nameof(Number), x => x.Number) .Map(nameof(Title), x => x.Title) .Map(nameof(Description), x => x.Description) .Map(nameof(Date), x => x.Date) .Map(nameof(BookedStart), x => x.Booked.Start) .Map(nameof(BookedDuration), x => x.Booked.Duration) .Map(nameof(BookedFinish), x => x.Booked.Finish) .Map(nameof(ActualStart), x => x.Actual.Start) .Map(nameof(ActualDuration), x => x.Actual.Duration) .Map(nameof(ActualFinish), x => x.Actual.Finish) .Map(nameof(Completed), x => x.Completed) .Map(nameof(JobID), x => x.JobLink.ID) .Map(nameof(JobNumber), x => x.JobLink.JobNumber) .Map(nameof(JobName), x => x.JobLink.Name) .Map(nameof(Latitude), x => x.JobLink.SiteAddress.Location.Latitude) .Map(nameof(Longitude), x => x.JobLink.SiteAddress.Location.Longitude) .Map(nameof(TaskID), x => x.Task.ID) .Map(nameof(TaskNumber), x => x.Task.Number) .Map(nameof(TaskName), x => x.Task.Title) .Map(nameof(ActivityID), x => x.ActivityLink.ID) .Map(nameof(ActivityCode), x => x.ActivityLink.Code) .Map(nameof(ActivityDescription), x => x.ActivityLink.Description) .Map(nameof(ActivityColor), x => x.ActivityLink.Color) .Map(nameof(DeliveryID), x => x.Delivery.ID); } public String Title { get => Get(); set => Set(value); } public Guid EmployeeID { get => Get(); set => Set(value); } public int Number { get => Get(); set => Set(value); } public String Description { get => Get(); set => Set(value); } public double Latitude { get => Get(); set => Set(value); } public double Longitude { get => Get(); set => Set(value); } public DateTime Completed { get => Get(); set => Set(value); } public Guid DeliveryID => Get(); #region Date & Time public DateTime Date { get => Get(); set => Set(value); } public TimeSpan ActualStart { get => Get(); set => Set(value); } public TimeSpan ActualDuration { get => Get(); set => Set(value); } public TimeSpan ActualFinish { get => Get(); set => Set(value); } public TimeSpan BookedStart { get => Get(); set => Set(value); } public TimeSpan BookedDuration { get => Get(); set => Set(value); } public TimeSpan BookedFinish { get => Get(); set => Set(value); } #endregion #region Job Settings public Guid JobID { get => Get(); set => Set(value); } public String JobNumber { get => Get(); set { Set(value,false); DoPropertyChanged(nameof(JobDisplay)); } } public String JobName { get => Get(); set { Set(value,false); DoPropertyChanged(nameof(JobDisplay)); } } #endregion #region Task Settings public Guid TaskID { get => Get(); set => Set(value); } public int TaskNumber { get => Get(); set { Set(value,false); DoPropertyChanged(nameof(TaskDisplay)); } } public String TaskName { get => Get(); set { Set(value,false); DoPropertyChanged(nameof(TaskDisplay)); } } #endregion #region Activity Code public Guid ActivityID { get => Get(); set => Set(value); } public String ActivityCode { get => Get(); set { Set(value,false); DoPropertyChanged(nameof(ActivityDisplay)); } } public String ActivityDescription { get => Get(); set { Set(value,false); DoPropertyChanged(nameof(ActivityDisplay)); } } public String ActivityColor { get => Get(); set { Set(value,false); DoPropertyChanged(nameof(ActivityDisplay)); } } #endregion #region Calculated Fields public String JobDisplay => JobID != Guid.Empty ? $"{JobNumber}: {JobName}" : "(No Job Selected)"; public String ActivityDisplay => ActivityID != Guid.Empty ? $"{ActivityCode}: {ActivityDescription}" : "(No Activity Selected)"; public String TaskDisplay => TaskID != Guid.Empty ? $"{TaskNumber}: {TaskName}" : "(No Task Selected)"; public String Subject => string.Format("{0}{1} {2}", Number, JobID != Guid.Empty ? $"({JobNumber})" : "", Title ); public bool IsCompleted => !Completed.IsEmpty(); public DateTime StartTime => Date.Add(Assignment.EffectiveTime(ActualStart, BookedStart).Floor(TimeSpan.FromMinutes(5))); public DateTime EndTime => Date.Add(Assignment.EffectiveTime(ActualFinish, BookedFinish).Ceiling(TimeSpan.FromMinutes(5))); public Color BackgroundColor => !String.IsNullOrWhiteSpace(ActivityColor) ? Color.FromHex(ActivityColor) : Color.Silver; public Color TextColor => Color.Black; public ObservableCollection ResourceIds => new ObservableCollection() { EmployeeID }; public PointF Coordinates => new PointF( (float)(Longitude), (float)(Latitude) ); #endregion } }