JobBillOfMaterialsGrid.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.Wpf;
  10. namespace PRSDesktop
  11. {
  12. internal class JobBillOfMaterialsGrid : DynamicDataGrid<JobBillOfMaterials>, IMasterDetailControl<Job,JobBillOfMaterials>
  13. {
  14. private readonly Button _approve;
  15. public Job? Master { get; set; }
  16. public Filter<JobBillOfMaterials> MasterDetailFilter => (Master?.ID ?? Guid.Empty) != Guid.Empty
  17. ? new Filter<JobBillOfMaterials>(x => x.Job.ID).IsEqualTo(Master.ID)
  18. : new Filter<JobBillOfMaterials>().None();
  19. public JobBillOfMaterialsGrid()
  20. {
  21. HiddenColumns.Add(x => x.Approved);
  22. HiddenColumns.Add(x => x.Job.ID);
  23. if (Security.IsAllowed<CanApproveBillsOfMaterials>())
  24. _approve = AddButton("Approve", null, ApproveClick);
  25. }
  26. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  27. {
  28. base.DoReconfigure(options);
  29. options.AddRange(
  30. DynamicGridOption.AddRows,
  31. DynamicGridOption.EditRows,
  32. DynamicGridOption.DeleteRows,
  33. DynamicGridOption.FilterRows,
  34. DynamicGridOption.SelectColumns,
  35. DynamicGridOption.RecordCount
  36. );
  37. }
  38. private bool ApproveClick(Button button, CoreRow[] rows)
  39. {
  40. if (rows == null || !rows.Any())
  41. {
  42. MessageBox.Show("Please select a row first!");
  43. return false;
  44. }
  45. var bom = rows[0].ToObject<JobBillOfMaterials>();
  46. bom.Approved = bom.Approved.IsEmpty() ? DateTime.Now : DateTime.MinValue;
  47. UpdateRow<DateTime?>(rows[0], "Approved", bom.Approved.IsEmpty() ? null : bom.Approved, true);
  48. new Client<JobBillOfMaterials>().Save(bom, bom.Approved.IsEmpty() ? "Cleared Approval" : "Marked as Approved");
  49. UpdateButton(_approve, null,
  50. _approve.IsEnabled && !bom.Approved.IsEmpty() ? "Unapprove" : "Approve");
  51. return false;
  52. }
  53. protected override void SelectItems(CoreRow[] rows)
  54. {
  55. base.SelectItems(rows);
  56. if (rows?.Length == 1)
  57. {
  58. _approve.Visibility = Visibility.Visible;
  59. UpdateButton(_approve, null,
  60. _approve.IsEnabled && !rows[0].Get<JobBillOfMaterials, DateTime>(c => c.Approved).IsEmpty() ? "Unapprove" : "Approve");
  61. }
  62. else
  63. _approve.Visibility = Visibility.Collapsed;
  64. }
  65. protected override void Reload(Filters<JobBillOfMaterials> criteria, Columns<JobBillOfMaterials> columns,
  66. ref SortOrder<JobBillOfMaterials>? sort, Action<CoreTable?, Exception?> action)
  67. {
  68. criteria.Add(MasterDetailFilter);
  69. base.Reload(criteria, columns, ref sort, action);
  70. }
  71. protected override bool CanCreateItems()
  72. {
  73. return base.CanCreateItems() && ((Master?.ID ?? Guid.Empty) != Guid.Empty);
  74. }
  75. public override JobBillOfMaterials CreateItem()
  76. {
  77. var result = base.CreateItem();
  78. result.Job.ID = Master?.ID ?? Guid.Empty;
  79. result.Job.Synchronise(Master ?? new Job());
  80. return result;
  81. }
  82. }
  83. }