DataModelTemplateGrid.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading;
  5. using System.Windows.Media.Imaging;
  6. using FastReport.Dialog;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. using org.w3c.dom.html;
  11. using static InABox.Core.DataModelTemplate;
  12. using ScriptEditorWindow = InABox.DynamicGrid.ScriptEditorWindow;
  13. namespace PRSDesktop
  14. {
  15. public class DataModelTemplateGrid : DynamicDataGrid<DataModelTemplate>
  16. {
  17. private readonly BitmapImage _edit = PRSDesktop.Resources.pencil.AsBitmapImage();
  18. private DataModelTemplate[] Items;
  19. public DataModelTemplateGrid()
  20. {
  21. HiddenColumns.Add(x => x.Template);
  22. OnCustomiseEditor += DataModelTemplateGrid_OnCustomiseEditor;
  23. }
  24. private void DataModelTemplateGrid_OnCustomiseEditor(IDynamicEditorForm sender, DataModelTemplate[]? items, DynamicGridColumn column, BaseEditor editor)
  25. {
  26. if (editor == null)
  27. return;
  28. if (column.ColumnName.Equals("Template")
  29. || column.ColumnName.Equals("To")
  30. || column.ColumnName.Equals("Subject")
  31. || column.ColumnName.Equals("AttachmentName")
  32. )
  33. {
  34. var edt = editor as TextBoxEditor;
  35. edt.Buttons = new EditorButton[]
  36. {
  37. new EditorButton(items.FirstOrDefault(), "Edit", 60, TemplateEditorClicked, true)
  38. };
  39. }
  40. }
  41. private void TemplateEditorClicked(object editor, object? item)
  42. {
  43. var template = item as DataModelTemplate;
  44. var edtControl = editor as TextBoxEditorControl;
  45. var col = edtControl.ColumnName;
  46. var toEdit = CoreUtils.GetPropertyValue(template, col);
  47. var edt = new ScriptEditorWindow(toEdit as string, SyntaxLanguage.HTML);
  48. var snippets = new Dictionary<string, string[]>();
  49. foreach (var (name, table) in Model.ModelTables)
  50. {
  51. var variable = name.Substring(0, 1).ToLower();
  52. var cursnippets = new List<string>();
  53. cursnippets.Add("{{ for " + variable + " in " + name + " }}\n\n{{ end }}");
  54. if(table.Type is not null)
  55. {
  56. var props = DatabaseSchema.Properties(table.Type)
  57. .Where(x => x.Editor != null && x.Editor.GetType() != typeof(NullEditor) && x.Editor.Visible != Visible.Hidden);
  58. foreach (var prop in props)
  59. cursnippets.Add("{{ " + variable + "." + prop.Name + " }}");
  60. }
  61. snippets[name] = cursnippets.ToArray();
  62. }
  63. edt.Snippets = snippets;
  64. if (edt.ShowDialog() == true)
  65. {
  66. CoreUtils.SetPropertyValue(template, col, edt.Script);
  67. }
  68. }
  69. // private String[] EmailTemplateManagerWindow_OnGetVariables()
  70. // {
  71. // List<string> list = new List<string>();
  72. // foreach (var table in Model.DefaultTables)
  73. // {
  74. // foreach (var col in table.Columns)
  75. // {
  76. // if (col.ToString() != "ID")
  77. // list.Add(table.ToString() + "." + col.ToString());
  78. // }
  79. // }
  80. // list.Sort();
  81. // return list.ToArray();
  82. // }
  83. public DataModel Model { get; set; }
  84. protected override void Reload(
  85. Filters<DataModelTemplate> criteria, Columns<DataModelTemplate> columns, ref SortOrder<DataModelTemplate>? sort,
  86. CancellationToken token, Action<CoreTable?, Exception?> action)
  87. {
  88. criteria.Add(new Filter<DataModelTemplate>(x => x.Model).IsEqualTo(Model.Name));
  89. base.Reload(criteria, columns, ref sort, token, action);
  90. }
  91. public override DataModelTemplate CreateItem()
  92. {
  93. var result = base.CreateItem();
  94. result.Visible = true;
  95. result.Model = Model.Name;
  96. return result;
  97. }
  98. }
  99. }