using System; using System.Collections.Generic; using InABox.Clients; using InABox.Core; using Comal.Classes; using Xamarin.Forms; using System.Linq; using System.Threading.Tasks; using XF.Material.Forms.UI.Dialogs; namespace comal.timesheets { public class TimesheetModel { public DateTime Date { get; set; } public TimeSpan Start { get; set; } public TimeSpan Finish { get; set; } public TimeSpan Duration { get; set; } } public partial class Timesheets : ContentPage { int DaysFilter = -7; public Guid EmployeeID { get; set; } public Timesheets() { InitializeComponent(); Title = "Timesheets"; } protected override async void OnAppearing() { base.OnAppearing(); await LoadData(); } private async Task LoadData() { using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Loading Data")) { List records = new List(); CoreTable timesheets = new Client().Query( new Filter(x => x.EmployeeLink.ID).IsEqualTo(EmployeeID) .And(x => x.Processed).IsEqualTo(DateTime.MinValue) .And(x => x.Date).IsLessThanOrEqualTo(DateTime.Now) .And(x => x.Date).IsGreaterThanOrEqualTo(DateTime.Now.AddDays(DaysFilter)), new Columns(X => X.Date, X => X.Start, X => X.Finish, X => X.Duration), new SortOrder(X => X.Date, SortDirection.Descending) ); foreach (CoreRow row in timesheets.Rows) { DateTime date = row.Get(x => x.Date); TimeSpan start = row.Get(x => x.Start); TimeSpan finish = row.Get(x => x.Finish); TimeSpan duration = row.Get(x => x.Duration); var model = records.Where(x => x.Date.Equals(date)).FirstOrDefault(); if (model == null) { model = new TimesheetModel() { Date = date, Start = start, Finish = finish, Duration = duration }; records.Add(model); } else { model.Start = model.Start.CompareTo(start).Equals(1) ? start : model.Start; model.Finish = model.Finish.CompareTo(finish).Equals(-1) ? finish : model.Finish; model.Duration = model.Duration.Add(duration); } } Device.BeginInvokeOnMainThread(() => { TimesheetList.ItemsSource = null; TimesheetList.ItemsSource = records; }); } } private async void FilterBtn_Clicked(object sender, EventArgs e) { string chosenOption = await DisplayActionSheet("Choose filter", "Cancel", null, "Last 7 Days", "Last 14 Days", "Last 30 Days", "Last 90 Days"); switch (chosenOption) { case "Cancel": return; break; default: return; break; case "Last 7 Days": DaysFilter = -7; break; case "Last 14 Days": DaysFilter = -14; break; case "Last 30 Days": DaysFilter = -30; break; case "Last 90 Days": DaysFilter = -90; break; } LoadData(); filterBtn.Text = "Filter: " + chosenOption; } } }