JobFormGrid.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System;
  2. using System.Linq;
  3. using System.Windows.Controls;
  4. using Comal.Classes;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. using InABox.DynamicGrid;
  8. using InABox.WPF;
  9. namespace PRSDesktop
  10. {
  11. public class JobFormGrid : DynamicDataGrid<JobForm>, IJobControl, IDataModelSource
  12. {
  13. public event DataModelUpdateEvent? OnUpdateDataModel;
  14. public string SectionName => "Job Forms";
  15. public DataModel DataModel(Selection selection)
  16. {
  17. var ids = ExtractValues(x => x.ID, selection).ToArray();
  18. return new AutoDataModel<JobForm>(new Filter<JobForm>(x => x.ID).InList(ids));
  19. }
  20. public JobFormGrid()
  21. {
  22. ActionColumns.Add(new DynamicActionColumn(PRSDesktop.Resources.pencil.AsBitmapImage(), EditAction));
  23. HiddenColumns.Add(x => x.FormData);
  24. HiddenColumns.Add(x => x.Form.ID);
  25. HiddenColumns.Add(x => x.Parent.ID);
  26. }
  27. public Guid JobID { get; set; }
  28. private bool EditAction(CoreRow? row)
  29. {
  30. if (row == null) return false;
  31. if(DynamicFormEditWindow.EditDigitalForm(row.ToObject<JobForm>(), out var dataModel))
  32. {
  33. dataModel.Update(null);
  34. return true;
  35. }
  36. return false;
  37. }
  38. protected override void Reload(Filters<JobForm> criteria, Columns<JobForm> columns, ref SortOrder<JobForm> sort,
  39. Action<CoreTable?, Exception?> action)
  40. {
  41. criteria.Add(new Filter<JobForm>(x => x.Parent.ID).IsEqualTo(JobID));
  42. base.Reload(criteria, columns, ref sort, action);
  43. }
  44. protected override JobForm CreateItem()
  45. {
  46. var result = base.CreateItem();
  47. result.Parent.ID = JobID;
  48. return result;
  49. }
  50. }
  51. public class JobFormDefinitionGrid : DynamicManyToManyGrid<JobFormDefinition, Job>
  52. {
  53. public JobFormDefinitionGrid()
  54. {
  55. AddButton("Add All", null, AddAllClick);
  56. }
  57. private bool AddAllClick(Button arg1, CoreRow[] arg2)
  58. {
  59. var existingforms = ExtractValues(x => x.Form.ID, Selection.All).ToArray();
  60. var newforms = new Client<DigitalForm>().Query(
  61. new Filter<DigitalForm>(x => x.Active).IsEqualTo(true)
  62. .And(x => x.AppliesTo).IsEqualTo("Job")
  63. .And(x => x.ID).NotInList(existingforms)
  64. );
  65. foreach (var row in newforms.Rows)
  66. {
  67. var newitem = CreateItem();
  68. newitem.Job.ID = Item.ID;
  69. newitem.Form.ID = row.Get<DigitalForm, Guid>(x => x.ID);
  70. newitem.Form.Synchronise(row.ToObject<DigitalForm>());
  71. SaveItem(newitem);
  72. }
  73. return true;
  74. }
  75. }
  76. }