DataModelTemplateGrid.cs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Media.Imaging;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. using InABox.DynamicGrid;
  8. using InABox.WPF;
  9. using static InABox.Core.DataModelTemplate;
  10. using ScriptEditorWindow = InABox.DynamicGrid.ScriptEditorWindow;
  11. namespace PRSDesktop
  12. {
  13. public class DataModelTemplateGrid : DynamicDataGrid<DataModelTemplate>
  14. {
  15. private readonly BitmapImage _edit = PRSDesktop.Resources.pencil.AsBitmapImage();
  16. private DataModelTemplate[] Items;
  17. public DataModelTemplateGrid()
  18. {
  19. HiddenColumns.Add(x => x.Template);
  20. OnCustomiseEditor += DataModelTemplateGrid_OnCustomiseEditor;
  21. }
  22. private void DataModelTemplateGrid_OnCustomiseEditor(IDynamicEditorForm sender, DataModelTemplate[]? items, DynamicGridColumn column, BaseEditor editor)
  23. {
  24. if (editor == null)
  25. return;
  26. if (column.ColumnName.Equals("To") ||
  27. column.ColumnName.Equals("CC") ||
  28. column.ColumnName.Equals("BCC") ||
  29. column.ColumnName.Equals("Subject") ||
  30. column.ColumnName.Equals("AttachmentName")
  31. )
  32. (editor as ExpressionEditor).OnGetVariables += EmailTemplateManagerWindow_OnGetVariables;
  33. else if (column.ColumnName.Equals("Template") && items.Count() == 1)
  34. {
  35. var edt = editor as ScriptEditor;
  36. edt.Type = ScriptEditorType.TemplateEditor;
  37. Items = items;
  38. edt.OnEditorClicked += Edt_OnEditorClicked;
  39. }
  40. }
  41. private void Edt_OnEditorClicked()
  42. {
  43. var template = Items[0];
  44. var editor = new ScriptEditorWindow(template.Template, SyntaxLanguage.HTML);
  45. var snippets = new Dictionary<string, string[]>();
  46. var tables = Model.AsDictionary;
  47. foreach (var key in tables.Keys)
  48. {
  49. var name = key.Name;
  50. var variable = name.Substring(0, 1).ToLower();
  51. var cursnippets = new List<string>();
  52. cursnippets.Add("{{ for " + variable + " in " + name + " }}\n\n{{ end }}");
  53. var props = DatabaseSchema.Properties(key)
  54. .Where(x => x.Editor != null && x.Editor.GetType() != typeof(NullEditor) && x.Editor.Visible != Visible.Hidden);
  55. foreach (var prop in props)
  56. cursnippets.Add("{{ " + variable + "." + prop.Name + " }}");
  57. snippets[name] = cursnippets.ToArray();
  58. }
  59. editor.Snippets = snippets;
  60. if (editor.ShowDialog() == true)
  61. {
  62. template.Template = editor.Script;
  63. }
  64. }
  65. private DataModel EmailTemplateManagerWindow_OnGetVariables()
  66. {
  67. return Model;
  68. }
  69. public DataModel Model { get; set; }
  70. protected override void Reload(Filters<DataModelTemplate> criteria, Columns<DataModelTemplate> columns, ref SortOrder<DataModelTemplate> sort,
  71. Action<CoreTable, Exception> action)
  72. {
  73. criteria.Add(new Filter<DataModelTemplate>(x => x.Model).IsEqualTo(Model.Name));
  74. base.Reload(criteria, columns, ref sort, action);
  75. }
  76. protected override DataModelTemplate CreateItem()
  77. {
  78. var result = base.CreateItem();
  79. result.Visible = true;
  80. result.Model = Model.Name;
  81. return result;
  82. }
  83. }
  84. }