using System; using System.Collections.Generic; using System.IO; using System.Linq; using Comal.Classes; using InABox.Core; using Xamarin.Forms; namespace comal.timesheets { public class EquipmentListDataModel : ListDataModel { public override Columns Columns => new Columns(x => x.ID) .Add(x => x.Code) .Add(x => x.Description) .Add(x => x.GroupLink.ID) .Add(x => x.GroupLink.Description) .Add(x=>x.TrackerLink.BatteryLevel) .Add(x => x.GroupLink.Thumbnail.ID) .Add(x=>x.TrackerLink.Location.Timestamp); public EquipmentListDataModel() : base() { Images = new Dictionary() { { Guid.Empty, null } }; } public override void BeforeLoad(MultiQuery query, Filter filter) { base.BeforeLoad(query, filter); query.Add( //new Filter(x => x.ID).InQuery(filter, x => x.GroupLink.Thumbnail.ID), new Filter(x => x.ID).InQuery(filter, x => x.GroupLink.ID), new Columns(x => x.ID, x => x.Data) ); } public String[] GroupNames => Items.Select(x => x.GroupName).Distinct().OrderBy(x => x).Prepend("All").ToArray(); public Dictionary Images { get; private set; } public override void AfterLoad(MultiQuery query, Filter filter) { base.AfterLoad(query, filter); Images.Clear(); CoreTable docs = query.Get(); foreach (var row in docs.Rows) { Guid imgid = row.Get(c => c.ID); byte[] imgdata = row.Get(c => c.Data); ImageSource imgsource = ImageSource.FromStream(() => new MemoryStream(imgdata)); Images[imgid] = imgsource; } } } public class EquipmentListDataModelItem : CoreDataModelItem { public Guid ID => Row.Get(x => x.ID); public string Code => Row.Get(x => x.Code); public string Description => Row.Get(x => x.Description); public Guid GroupID => Row.Get(x => x.GroupLink.ID); public string GroupName => Row.Get(x => x.GroupLink.Description); public double BatteryDouble => Row.Get(x => x.TrackerLink.BatteryLevel); public DateTime LastUpdate => Row.Get(x => x.TrackerLink.Location.Timestamp); public ImageSource ImageSource { get { (Parent as EquipmentListDataModel).Images.TryGetValue(GroupID, out ImageSource img); return img; } } public double ColumnWidth => (Parent as EquipmentListDataModel).Images.Any() ? 55 : 0; public string Battery => $"Battery {BatteryDouble:F2}"; public string BatteryLastUpdate => $"Last Update: {LastUpdate:dd MMM yy}"; public Color LastUpdateColour => LastUpdate < DateTime.Today.AddMonths(-1) ? Color.FromHex("#f08080") : LastUpdate < DateTime.Today.AddDays(-14) ? Color.FromHex("#ffef00") : Color.LightGreen; public double BatteryRowHeight => BatteryDouble > 0 ? 25 : 0; public Color BatteryColour => BatteryDouble <= 40D ? Color.FromHex("#f08080") : BatteryDouble > 40D && BatteryDouble <= 70D ? Color.FromHex("#ffef00") : Color.LightGreen; } }