AssignmentList.xaml.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using InABox.Clients;
  5. using InABox.Core;
  6. using Comal.Classes;
  7. using Xamarin.Forms;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using comal.timesheets.CustomControls;
  11. using comal.timesheets.iOS.Assignments;
  12. using InABox.Configuration;
  13. using Syncfusion.SfSchedule.XForms;
  14. using Xamarin.Forms.Xaml;
  15. using XF.Material.Forms.UI.Dialogs;
  16. namespace comal.timesheets
  17. {
  18. public partial class AssignmentList : ContentPage
  19. {
  20. private AssignmentEdit _editor = null;
  21. private Guid[] _employeeids = new Guid[] { App.Data.Employee.ID };
  22. private List<AssignmentColumn> _columns = new List<AssignmentColumn>();
  23. private AssignmentModuleSettings _settings = null;
  24. public AssignmentList()
  25. {
  26. InitializeComponent();
  27. _settings = new LocalConfiguration<AssignmentModuleSettings>().Load();
  28. DatePicker.Date = _settings.Date.IsEmpty() ? DateTime.Today : _settings.Date;
  29. if (_settings.Employees != null)
  30. _employeeids = _settings.Employees;
  31. ReloadColumns();
  32. }
  33. private void ReloadColumns()
  34. {
  35. _columns.Clear();
  36. Grid.Children.Clear();
  37. Grid.ColumnDefinitions.Clear();
  38. foreach (var empid in _employeeids)
  39. {
  40. AssignmentColumn column = new AssignmentColumn();
  41. column.OnChanged += (o,e) => Refresh();
  42. column.EmployeeID = empid;
  43. var empname = GlobalVariables.EmployeeShells.FirstOrDefault(x => x.ID == empid)?.Name;
  44. var comps = (empname ?? empid.ToString()).Split(' ');
  45. column.EmployeeName = _employeeids.Length == 1
  46. ? empname
  47. : string.Format("{0}{1}", comps.First().Substring(0, 1), comps.Length > 1 ? comps.Skip(1).First().Substring(0, 1) : "");
  48. if (_columns.Count == 0)
  49. {
  50. Grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(50,GridUnitType.Absolute)});
  51. column.SetValue(Grid.ColumnProperty,0);
  52. column.SetValue(Grid.ColumnSpanProperty,2);
  53. }
  54. else
  55. column.SetValue(Grid.ColumnProperty, _columns.Count + 1);
  56. column.ShowTime = _columns.Count == 0;
  57. Grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star)});
  58. Grid.Children.Add(column);
  59. _columns.Add(column);
  60. }
  61. }
  62. private void Refresh()
  63. {
  64. Title.Text = $"{DatePicker.Date:dd MMMM yyyy}";
  65. DataModel.Load(
  66. new Filter<Assignment>(x => x.Date).IsEqualTo(DatePicker.Date).And(x => x.EmployeeLink.ID).InList(_employeeids),
  67. () =>
  68. {
  69. Dispatcher.BeginInvokeOnMainThread(() =>{
  70. foreach (var column in _columns)
  71. {
  72. column.Date = DatePicker.Date;
  73. column.Load(DataModel.Items.Where(x => x.EmployeeId == column.EmployeeID).ToArray());
  74. }
  75. });
  76. }
  77. );
  78. }
  79. protected override void OnAppearing()
  80. {
  81. base.OnAppearing();
  82. Refresh();
  83. }
  84. private void BackButton_OnClicked(object sender, EventArgs e)
  85. {
  86. Navigation.PopAsync();
  87. }
  88. private void SelectedDate_Tapped(object sender, EventArgs e)
  89. {
  90. DatePicker.Focus();
  91. }
  92. private void DatePicker_OnDateSelected(object sender, DateChangedEventArgs e)
  93. {
  94. _settings.Date = DatePicker.Date;
  95. new LocalConfiguration<AssignmentModuleSettings>().Save(_settings);
  96. Refresh();
  97. }
  98. private async void SelectEmployees_Tapped(object sender, EventArgs e)
  99. {
  100. var actions = new List<string>() { "Only Me" };
  101. actions.AddRange(GlobalVariables.TeamEmployeeShells.Where(x=>x.ID == App.Data.Employee.ID).Select(x=>x.TeamName).Distinct());
  102. var result = await MaterialDialog.Instance.SelectActionAsync(title: "Select a Team",
  103. actions: actions);
  104. if (result == 0)
  105. _employeeids = new Guid[] { App.Data.Employee.ID };
  106. else if (result > 0)
  107. _employeeids = GlobalVariables.TeamEmployeeShells.Where(x => String.Equals(x.TeamName, actions[result]))
  108. .Select(x => x.ID).Distinct().ToArray();
  109. _settings.Employees = _employeeids;
  110. new LocalConfiguration<AssignmentModuleSettings>().Save(_settings);
  111. Dispatcher.BeginInvokeOnMainThread(()=>
  112. {
  113. ReloadColumns();
  114. Refresh();
  115. });
  116. }
  117. }
  118. }