KanbanGrid.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using Comal.Classes;
  2. using InABox.Clients;
  3. using InABox.Core;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using Xamarin.Forms;
  10. using XF.Material.Forms.UI.Dialogs;
  11. using PRSSecurity = InABox.Core.Security;
  12. namespace comal.timesheets
  13. {
  14. public delegate object KanbanGridItemSelected(DataGridViewModelItem item);
  15. public class KanbanGrid : MobileDataGrid
  16. {
  17. public event KanbanGridItemSelected OnKanbanGridItemSelected;
  18. Filter<Kanban> Filter;
  19. public KanbanGrid(Filter<Kanban> filter, DataGridSaveType savetype = DataGridSaveType.None)
  20. {
  21. Filter = filter;
  22. savetype = PRSSecurity.IsAllowed<CanChangeOthersTasks>()? DataGridSaveType.Multiple : DataGridSaveType.None;
  23. Load(filter, savetype);
  24. OnItemSelected += KanbanGrid_OnItemSelected;
  25. }
  26. private object KanbanGrid_OnItemSelected(DataGridViewModelItem item)
  27. {
  28. return OnKanbanGridItemSelected.Invoke(item);
  29. }
  30. private List<DataGridViewModelItem> LoadItems(Filter<Kanban> filter)
  31. {
  32. var columns = new Columns<Kanban>(
  33. x => x.ID,
  34. x => x.Number,
  35. x => x.Title,
  36. x => x.Summary,
  37. x => x.Notes,
  38. x => x.EmployeeLink.Name,
  39. x => x.ManagerLink.Name,
  40. x => x.Category,
  41. x => x.DueDate,
  42. x => x.Created,
  43. x => x.StartDate,
  44. x => x.Type.Description
  45. );
  46. if (new Client<CompanyInformation>().Query(new Filter<CompanyInformation>(x => x.CompanyName).IsEqualTo("Com-Al Windows")
  47. .Or(x => x.CompanyName).IsEqualTo("PRS Software")).Rows.Any())
  48. columns.Add("IssueNumber");
  49. CoreTable table = new Client<Kanban>().Query(
  50. filter,
  51. columns
  52. );
  53. List<DataGridViewModelItem> shells = new List<DataGridViewModelItem>();
  54. foreach (CoreRow row in table.Rows)
  55. {
  56. List<Tuple<string, string>> tuples = new List<Tuple<string, string>>
  57. {
  58. new Tuple<string, string>("Title", "(No. " + row.Get<Kanban, int>(x => x.Number).ToString() + ") " + row.Get<Kanban, string>(x => x.Title)),
  59. new Tuple<string, string>("Summary", row.Get<Kanban, string>(x => x.Summary)),
  60. new Tuple<string, string>("Type", row.Get<Kanban,string>(x => x.Type.Description)),
  61. new Tuple<string, string>("Emp", row.Get<Kanban,string>(x => x.EmployeeLink.Name)),
  62. };
  63. shells.Add(new DataGridViewModelItem
  64. (
  65. id: row.Get<Kanban, Guid>(x => x.ID),
  66. data: tuples,
  67. popupdetail: GenerateDetail(row)
  68. ));
  69. }
  70. return shells;
  71. }
  72. private string GenerateDetail(CoreRow row)
  73. {
  74. string detail = "";
  75. if (!string.IsNullOrWhiteSpace(row.Get<Kanban, string>(x => x.Title)))
  76. detail = "TITLE: " + row.Get<Kanban, string>(x => x.Title) + System.Environment.NewLine + System.Environment.NewLine;
  77. if (!string.IsNullOrWhiteSpace(row.Get<Kanban, string>(x => x.Summary)))
  78. detail = detail + "SUMMARY: " + row.Get<Kanban, string>(x => x.Summary) + System.Environment.NewLine + System.Environment.NewLine;
  79. if (row.Get<Kanban, string[]>(x => x.Notes).Any())
  80. {
  81. detail = detail + "NOTES: ";
  82. foreach (var note in row.Get<Kanban, string[]>(x => x.Notes))
  83. detail = detail + note + System.Environment.NewLine;
  84. }
  85. if (!string.IsNullOrWhiteSpace(row.Get<Kanban, string>(x => x.ManagerLink.Name)))
  86. detail = detail + "MANAGER: " + row.Get<Kanban, string>(x => x.ManagerLink.Name) + System.Environment.NewLine + System.Environment.NewLine;
  87. if (!string.IsNullOrWhiteSpace(row.Get<Kanban, string>(x => x.Category)))
  88. detail = detail + "CATEGORY: " + row.Get<Kanban, string>(x => x.Category) + System.Environment.NewLine + System.Environment.NewLine;
  89. if (!string.IsNullOrWhiteSpace(row.Get<string>("IssueNumber")))
  90. detail = detail + "ISSUE NUMBER: " + row.Get<string>("IssueNumber") + System.Environment.NewLine + System.Environment.NewLine;
  91. if (row.Get<Kanban, DateTime>(x => x.Created) != DateTime.MinValue)
  92. detail = detail + "CREATED: " + row.Get<Kanban, DateTime>(x => x.Created).ToString("dd MMM yy") + System.Environment.NewLine + System.Environment.NewLine;
  93. if (row.Get<Kanban, DateTime>(x => x.StartDate) != DateTime.MinValue)
  94. detail = detail + "STARTED: " + row.Get<Kanban, DateTime>(x => x.StartDate).ToString("dd MMM yy") + System.Environment.NewLine + System.Environment.NewLine;
  95. if (row.Get<Kanban, DateTime>(x => x.DueDate) != DateTime.MinValue)
  96. detail = detail + "DUE: " + row.Get<Kanban, DateTime>(x => x.DueDate).ToString("dd MMM yy") + System.Environment.NewLine + System.Environment.NewLine;
  97. return detail;
  98. }
  99. private void Load(Filter<Kanban> filter, DataGridSaveType savetype)
  100. {
  101. Task.Run(async () =>
  102. {
  103. using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Loading"))
  104. {
  105. Setup(LoadItems(Filter), typeof(Kanban), savetype);
  106. }
  107. });
  108. }
  109. public async void RefreshGrid()
  110. {
  111. using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Loading"))
  112. {
  113. var list = LoadItems(Filter);
  114. Items.Clear();
  115. Items.AddRange(list);
  116. Refresh(Items);
  117. UpdateScreenOnFilter();
  118. }
  119. }
  120. }
  121. }