DynamicEntityFormGrid.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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.FormData);
  26. HiddenColumns.Add(x => x.FormCompleted);
  27. HiddenColumns.Add(x => x.FormCompletedBy.ID);
  28. HiddenColumns.Add(x => x.Form.ID);
  29. HiddenColumns.Add(x => x.Parent.ID);
  30. }
  31. protected override TForm CreateItem()
  32. {
  33. var result = base.CreateItem();
  34. result.Parent.ID = EntityID;
  35. return result;
  36. }
  37. protected override void Reload(Filters<TForm> criteria, Columns<TForm> columns, ref SortOrder<TForm> sort, Action<CoreTable, Exception> action)
  38. {
  39. criteria.Add(new Filter<TForm>("Parent.ID").IsEqualTo(EntityID));
  40. base.Reload(criteria, columns, ref sort, action);
  41. }
  42. private void BeforeSave(DynamicEditorForm editor, TForm[] items)
  43. {
  44. foreach(var item in items)
  45. {
  46. item.Parent.ID = EntityID;
  47. }
  48. }
  49. private BitmapImage PrintImage(CoreRow arg)
  50. {
  51. return Properties.Resources.print.AsBitmapImage();
  52. }
  53. private bool PrintClick(CoreRow arg)
  54. {
  55. var formid = arg.Get<TForm, Guid>(x => x.Form.ID);
  56. var model = new DigitalFormReportDataModel<TForm>(new Filter<TForm>("Parent.ID").IsEqualTo(EntityID), formid);
  57. var section = formid.ToString();
  58. // TODO: This is a hack
  59. DynamicGridUtils.PrintMenu?.Invoke(null, section, model, true);
  60. return false;
  61. }
  62. private BitmapImage EditImage(CoreRow arg)
  63. {
  64. if (arg == null)
  65. return Properties.Resources.pencil.AsBitmapImage();
  66. var completed = arg.Get<TForm, DateTime>(x => x.FormCompleted);
  67. return completed.IsEmpty() ? Properties.Resources.pencil.AsBitmapImage() : Properties.Resources.view.AsBitmapImage();
  68. }
  69. private bool EditClick(CoreRow arg)
  70. {
  71. var item = LoadItem(arg);
  72. if (DynamicFormEditWindow.EditDigitalForm(item, out var dataModel))
  73. {
  74. dataModel.Update(null);
  75. return true;
  76. }
  77. return false;
  78. }
  79. }
  80. }