JobBillOfMaterialsGrid.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. namespace PRSDesktop
  10. {
  11. internal class JobBillOfMaterialsGrid : DynamicDataGrid<JobBillOfMaterials>, IJobControl
  12. {
  13. private readonly Button _approve;
  14. public JobBillOfMaterialsGrid()
  15. {
  16. Options.AddRange(
  17. DynamicGridOption.AddRows,
  18. DynamicGridOption.EditRows,
  19. DynamicGridOption.DeleteRows,
  20. DynamicGridOption.FilterRows,
  21. DynamicGridOption.SelectColumns,
  22. DynamicGridOption.RecordCount
  23. );
  24. HiddenColumns.Add(x => x.Approved);
  25. if (Security.IsAllowed<CanApproveBillsOfMaterials>())
  26. _approve = AddButton("Approve", null, ApproveClick);
  27. }
  28. public Guid JobID { get; set; }
  29. private bool ApproveClick(Button button, CoreRow[] rows)
  30. {
  31. if (rows == null || !rows.Any())
  32. {
  33. MessageBox.Show("Please select a row first!");
  34. return false;
  35. }
  36. var bom = rows[0].ToObject<JobBillOfMaterials>();
  37. bom.Approved = bom.Approved.IsEmpty() ? DateTime.Now : DateTime.MinValue;
  38. UpdateRow<DateTime?>(rows[0], "Approved", bom.Approved.IsEmpty() ? null : bom.Approved, true);
  39. new Client<JobBillOfMaterials>().Save(bom, bom.Approved.IsEmpty() ? "Cleared Approval" : "Marked as Approved");
  40. UpdateButton(_approve, null,
  41. _approve.IsEnabled && !bom.Approved.IsEmpty() ? "Unapprove" : "Approve");
  42. return false;
  43. }
  44. protected override void SelectItems(CoreRow[] rows)
  45. {
  46. base.SelectItems(rows);
  47. if (rows?.Length == 1)
  48. {
  49. _approve.Visibility = Visibility.Visible;
  50. UpdateButton(_approve, null,
  51. _approve.IsEnabled && !rows[0].Get<JobBillOfMaterials, DateTime>(c => c.Approved).IsEmpty() ? "Unapprove" : "Approve");
  52. }
  53. else
  54. _approve.Visibility = Visibility.Collapsed;
  55. }
  56. protected override void Reload(Filters<JobBillOfMaterials> criteria, Columns<JobBillOfMaterials> columns,
  57. ref SortOrder<JobBillOfMaterials> sort,
  58. Action<CoreTable, Exception> action)
  59. {
  60. criteria.Add(new Filter<JobBillOfMaterials>(x => x.Job.ID).IsEqualTo(JobID));
  61. base.Reload(criteria, columns, ref sort, action);
  62. }
  63. protected override JobBillOfMaterials CreateItem()
  64. {
  65. var result = base.CreateItem();
  66. result.Job.ID = JobID;
  67. return result;
  68. }
  69. }
  70. }