using System; using System.Collections.Generic; using System.Linq; using System.Windows.Controls; using Comal.Classes; using Comal.Stores; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; namespace PRSDesktop; internal class GPSTrackerLocationGrid : DynamicOneToManyGrid { private static List _cache; protected override void Init() { base.Init(); Criteria.Add( Filter.Where(x => x.Location.Timestamp).IsGreaterThanOrEqualTo(DateTime.Now.AddDays(-1)) ); HiddenColumns.Add(x => x.Location.Longitude); HiddenColumns.Add(x => x.Location.Latitude); HiddenColumns.Add(x => x.Location.Address); ActionColumns.Add(new DynamicMapColumn(this, x => x.Location)); // AddButton("Get Addresses", null, GetAddressClick); } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.SelectColumns = true; options.RecordCount = true; options.FilterRows = true; } // public static string ReverseGeocode(double latitude, double longitude) // { // _cache ??= Client.Query( // Filter.Where(x => x.Location.Address).IsNotEqualTo(""), // Columns.None().Add( // x => x.Location.Address, // x => x.Location.Longitude, // x => x.Location.Latitude)) // .ToList(); // var tuple = _cache.FirstOrDefault(x => Equals(x.Location.Latitude, latitude) && Equals(x.Location.Longitude, longitude)); // if (tuple == null) // { // var address = StoreUtils.ReverseGeocode(latitude, longitude); // if (!string.IsNullOrWhiteSpace(address)) // { // tuple = new GPSTrackerLocation(); // tuple.Location.Latitude = latitude; // tuple.Location.Longitude = longitude; // tuple.Location.Address = address; // _cache.Add(tuple); // } // } // // return tuple != null ? tuple.Location.Address : ""; // } // private bool GetAddressClick(Button arg1, CoreRow[] arg2) // { // var result = false; // var rows = Data.Rows.Where(r => // string.IsNullOrWhiteSpace(r.Get(c => c.Location.Address)) // && !Equals(r.Get(c => c.Location.Latitude), 0.0F) // && !Equals(r.Get(c => c.Location.Longitude), 0.0F) // ); // Progress.ShowModal("Updating Addresses", progress => // { // foreach (var row in rows) // { // var item = LoadItem(row); // var address = ReverseGeocode( // row.Get(x => x.Location.Latitude), // row.Get(x => x.Location.Longitude) // ); // if (!string.IsNullOrWhiteSpace(address)) // { // item.Location.Address = address; // UpdateRow(row, x => x.Location.Address, address, false); // result = true; // } // } // }); // return result; // } }