JobBillOfMaterialsGrid.cs 3.0 KB

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