DataModelTemplateGrid.cs 4.0 KB

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