Timesheets.xaml.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Collections.Generic;
  3. using InABox.Clients;
  4. using InABox.Core;
  5. using Comal.Classes;
  6. using Xamarin.Forms;
  7. using System.Linq;
  8. using System.Threading.Tasks;
  9. using XF.Material.Forms.UI.Dialogs;
  10. namespace comal.timesheets
  11. {
  12. public class TimesheetModel {
  13. public DateTime Date { get; set; }
  14. public TimeSpan Start { get; set; }
  15. public TimeSpan Finish { get; set; }
  16. public TimeSpan Duration { get; set; }
  17. }
  18. public partial class Timesheets : ContentPage
  19. {
  20. int DaysFilter = -7;
  21. public Guid EmployeeID { get; set; }
  22. public Timesheets()
  23. {
  24. InitializeComponent();
  25. Title = "Timesheets";
  26. }
  27. protected override async void OnAppearing()
  28. {
  29. base.OnAppearing();
  30. await LoadData();
  31. }
  32. private async Task LoadData()
  33. {
  34. using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Loading Data"))
  35. {
  36. List<TimesheetModel> records = new List<TimesheetModel>();
  37. CoreTable timesheets = new Client<TimeSheet>().Query(
  38. new Filter<TimeSheet>(x => x.EmployeeLink.ID).IsEqualTo(EmployeeID)
  39. .And(x => x.Processed).IsEqualTo(DateTime.MinValue)
  40. .And(x => x.Date).IsLessThanOrEqualTo(DateTime.Now)
  41. .And(x => x.Date).IsGreaterThanOrEqualTo(DateTime.Now.AddDays(DaysFilter)),
  42. new Columns<TimeSheet>(X => X.Date, X => X.Start, X => X.Finish, X => X.Duration),
  43. new SortOrder<TimeSheet>(X => X.Date, SortDirection.Descending)
  44. );
  45. foreach (CoreRow row in timesheets.Rows)
  46. {
  47. DateTime date = row.Get<TimeSheet, DateTime>(x => x.Date);
  48. TimeSpan start = row.Get<TimeSheet, TimeSpan>(x => x.Start);
  49. TimeSpan finish = row.Get<TimeSheet, TimeSpan>(x => x.Finish);
  50. TimeSpan duration = row.Get<TimeSheet, TimeSpan>(x => x.Duration);
  51. var model = records.Where(x => x.Date.Equals(date)).FirstOrDefault();
  52. if (model == null)
  53. {
  54. model = new TimesheetModel() { Date = date, Start = start, Finish = finish, Duration = duration };
  55. records.Add(model);
  56. }
  57. else
  58. {
  59. model.Start = model.Start.CompareTo(start).Equals(1) ? start : model.Start;
  60. model.Finish = model.Finish.CompareTo(finish).Equals(-1) ? finish : model.Finish;
  61. model.Duration = model.Duration.Add(duration);
  62. }
  63. }
  64. Device.BeginInvokeOnMainThread(() =>
  65. {
  66. TimesheetList.ItemsSource = null;
  67. TimesheetList.ItemsSource = records;
  68. });
  69. }
  70. }
  71. private async void FilterBtn_Clicked(object sender, EventArgs e)
  72. {
  73. string chosenOption = await DisplayActionSheet("Choose filter", "Cancel", null, "Last 7 Days", "Last 14 Days", "Last 30 Days", "Last 90 Days");
  74. switch (chosenOption)
  75. {
  76. case "Cancel":
  77. return;
  78. break;
  79. default:
  80. return;
  81. break;
  82. case "Last 7 Days":
  83. DaysFilter = -7;
  84. break;
  85. case "Last 14 Days":
  86. DaysFilter = -14;
  87. break;
  88. case "Last 30 Days":
  89. DaysFilter = -30;
  90. break;
  91. case "Last 90 Days":
  92. DaysFilter = -90;
  93. break;
  94. }
  95. LoadData();
  96. filterBtn.Text = "Filter: " + chosenOption;
  97. }
  98. }
  99. }