DynamicEntityFormGrid.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using InABox.Clients;
  2. using InABox.Core;
  3. using InABox.WPF;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Media.Imaging;
  10. namespace InABox.DynamicGrid
  11. {
  12. public class DynamicEntityFormGrid<TForm, TEntity, TEntityLink> : DynamicDataGrid<TForm>
  13. where TForm : EntityForm<TEntity, TEntityLink>, new()
  14. where TEntity : Entity
  15. where TEntityLink : IEntityLink<TEntity>, new()
  16. {
  17. private Guid EntityID { get; set; }
  18. public DynamicEntityFormGrid(Guid entityID)
  19. {
  20. EntityID = entityID;
  21. OnBeforeSave += BeforeSave;
  22. ActionColumns.Add(new DynamicActionColumn(EditImage, EditClick));
  23. if (DynamicGridUtils.PreviewReport != null)
  24. ActionColumns.Add(new DynamicActionColumn(PrintImage, PrintClick));
  25. HiddenColumns.Add(x => x.FormCompleted);
  26. HiddenColumns.Add(x => x.Form.ID);
  27. }
  28. protected override TForm CreateItem()
  29. {
  30. var result = base.CreateItem();
  31. result.Parent.ID = EntityID;
  32. return result;
  33. }
  34. protected override void Reload(Filters<TForm> criteria, Columns<TForm> columns, ref SortOrder<TForm>? sort, Action<CoreTable?, Exception?> action)
  35. {
  36. criteria.Add(new Filter<TForm>("Parent.ID").IsEqualTo(EntityID));
  37. base.Reload(criteria, columns, ref sort, action);
  38. }
  39. private void BeforeSave(DynamicEditorForm editor, TForm[] items)
  40. {
  41. foreach(var item in items)
  42. {
  43. item.Parent.ID = EntityID;
  44. }
  45. }
  46. private BitmapImage PrintImage(CoreRow? arg)
  47. {
  48. return Properties.Resources.print.AsBitmapImage();
  49. }
  50. private bool PrintClick(CoreRow? arg)
  51. {
  52. if (arg is null) return false;
  53. var formid = arg.Get<TForm, Guid>(x => x.Form.ID);
  54. var model = new DigitalFormReportDataModel<TForm>(new Filter<TForm>("Parent.ID").IsEqualTo(EntityID), formid);
  55. var section = formid.ToString();
  56. // TODO: This is a hack
  57. DynamicGridUtils.PrintMenu?.Invoke(null, section, model, true);
  58. return false;
  59. }
  60. private BitmapImage EditImage(CoreRow? arg)
  61. {
  62. if (arg == null)
  63. return Properties.Resources.pencil.AsBitmapImage();
  64. var completed = arg.Get<TForm, DateTime>(x => x.FormCompleted);
  65. return completed.IsEmpty() ? Properties.Resources.pencil.AsBitmapImage() : Properties.Resources.view.AsBitmapImage();
  66. }
  67. private bool EditClick(CoreRow? arg)
  68. {
  69. if (arg is null) return false;
  70. var item = LoadItem(arg);
  71. var form = new Client<TForm>()
  72. .Query(
  73. new Filter<TForm>(x => x.ID).IsEqualTo(item.ID),
  74. new Columns<TForm>(x => x.ID)
  75. .Add(x => x.FormData)
  76. .Add(x => x.BlobData)
  77. .Add(x => x.FormCompleted)
  78. .Add(x => x.FormCompletedBy.ID)
  79. .Add(x => x.Form.ID)
  80. .Add(x => x.Parent.ID))
  81. .Rows.FirstOrDefault()?.ToObject<TForm>();
  82. if (form is null) return false;
  83. if (DynamicFormEditWindow.EditDigitalForm(form, out var dataModel))
  84. {
  85. dataModel.Update(null);
  86. return true;
  87. }
  88. return false;
  89. }
  90. }
  91. }