JobScopeActivityGrid.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using System.Windows.Controls;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. namespace PRSDesktop;
  10. public class JobScopeActivityGrid : DynamicDataGrid<JobScopeActivity>, IJobScopeGrid
  11. {
  12. public JobScope? Scope { get; set; }
  13. protected override void Init()
  14. {
  15. base.Init();
  16. HiddenColumns.Add(x=>x.Activity.ID);
  17. HiddenColumns.Add(x => x.Hours);
  18. AddButton("Reset", null, ResetActivities);
  19. if (Security.CanView<Activity>())
  20. AddButton("Manage", null, ManageActivities, DynamicGridButtonPosition.Right);
  21. }
  22. protected override void DoReconfigure(DynamicGridOptions options)
  23. {
  24. base.DoReconfigure(options);
  25. options.SelectColumns = true;
  26. }
  27. public override DynamicGridColumns GenerateColumns()
  28. {
  29. var _columns = new DynamicGridColumns();
  30. _columns.Add<JobScopeActivity>(x => x.Activity.Code, 120, "Code", "", Alignment.MiddleLeft);
  31. _columns.Add<JobScopeActivity>(x => x.Activity.Description, 0, "Description", "", Alignment.MiddleLeft);
  32. _columns.Add<JobScopeActivity>(x => x.Hours, 70, "Hours", "hhh:mm", Alignment.MiddleCenter);
  33. _columns.Add<JobScopeActivity>(x => x.Rate, 70, "Rate", "F2", Alignment.MiddleCenter);
  34. _columns.Add<JobScopeActivity>(x => x.Cost, 70, "Cost", "F2", Alignment.MiddleCenter);
  35. _columns.Add<JobScopeActivity>(x => x.Markup, 70, "M/Up", "F2", Alignment.MiddleCenter);
  36. _columns.Add<JobScopeActivity>(x => x.Sell, 70, "Sell", "F2", Alignment.MiddleCenter);
  37. return _columns;
  38. }
  39. protected override void Reload(
  40. Filters<JobScopeActivity> criteria, Columns<JobScopeActivity> columns, ref SortOrder<JobScopeActivity>? sort,
  41. CancellationToken token, Action<CoreTable?, Exception?> action)
  42. {
  43. if ((Scope == null) || (Scope.ID == Guid.Empty))
  44. criteria.Add(Filter.None<JobScopeActivity>());
  45. else
  46. criteria.Add(Filter<JobScopeActivity>.Where(x => x.Scope.ID).IsEqualTo(Scope.ID));
  47. base.Reload(criteria, columns, ref sort, token, action);
  48. }
  49. protected override bool CanCreateItems()
  50. {
  51. return base.CanCreateItems() && Scope != null;
  52. }
  53. public override JobScopeActivity CreateItem()
  54. {
  55. var _result = base.CreateItem();
  56. _result.Scope.Synchronise(Scope ?? new JobScope());
  57. return _result;
  58. }
  59. private bool ManageActivities(Button button, CoreRow[] rows)
  60. {
  61. var list = new MasterList(typeof(Activity));
  62. list.ShowDialog();
  63. return true;
  64. }
  65. private bool ResetActivities(Button button, CoreRow[] rows)
  66. {
  67. var _current = ExtractValues(x => x.Activity.ID, Selection.All).ToArray();
  68. var _masters = Client.Query(
  69. Filter<Activity>.Where(x => x.IsJobActity).IsEqualTo(true),
  70. Columns.None<Activity>().Add(x => x.ID)
  71. ).Rows
  72. .Select(row =>
  73. {
  74. var result = new JobScopeActivity();
  75. result.Job.ID = Scope.Job.ID;
  76. result.Scope.ID = Scope.ID;
  77. result.Activity.ID = row.Get<Activity, Guid>(x => x.ID);
  78. return result;
  79. }
  80. ).ToArray();
  81. var _new = _masters.Where(a => _current.All(x => x != a.Activity.ID)).ToList();
  82. if (_new.Any())
  83. Client.Save(_new, "Updated from Master Activity List");
  84. var _unused = Data.ToObjects<JobScopeActivity>()
  85. .Where(x => x.Hours == TimeSpan.Zero)
  86. .Where(x => _masters.All(m => m.Activity.ID != x.Activity.ID))
  87. .ToArray();
  88. if (_unused.Any())
  89. Client.Delete(_unused, "Deleted from Master Activity List");
  90. return _new.Any() || _unused.Any();
  91. }
  92. }