123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using System.Windows.Media.Imaging;
- using FastReport.Dialog;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- using org.w3c.dom.html;
- using static InABox.Core.DataModelTemplate;
- using ScriptEditorWindow = InABox.DynamicGrid.ScriptEditorWindow;
- namespace PRSDesktop
- {
- public class DataModelTemplateGrid : DynamicDataGrid<DataModelTemplate>
- {
- private readonly BitmapImage _edit = PRSDesktop.Resources.pencil.AsBitmapImage();
- private DataModelTemplate[] Items;
- public DataModelTemplateGrid()
- {
- HiddenColumns.Add(x => x.Template);
- OnCustomiseEditor += DataModelTemplateGrid_OnCustomiseEditor;
- }
- private void DataModelTemplateGrid_OnCustomiseEditor(IDynamicEditorForm sender, DataModelTemplate[]? items, DynamicGridColumn column, BaseEditor editor)
- {
- if (editor == null)
- return;
- if (column.ColumnName.Equals("Template")
- || column.ColumnName.Equals("To")
- || column.ColumnName.Equals("Subject")
- || column.ColumnName.Equals("AttachmentName")
- )
- {
- var edt = editor as TextBoxEditor;
- edt.Buttons = new EditorButton[]
- {
- new EditorButton(items.FirstOrDefault(), "Edit", 60, TemplateEditorClicked, true)
- };
- }
- }
- private void TemplateEditorClicked(object editor, object? item)
- {
- var template = item as DataModelTemplate;
- var edtControl = editor as TextBoxEditorControl;
- var col = edtControl.ColumnName;
- var toEdit = CoreUtils.GetPropertyValue(template, col);
- var edt = new ScriptEditorWindow(toEdit as string, SyntaxLanguage.HTML);
- var snippets = new Dictionary<string, string[]>();
- foreach (var (name, table) in Model.ModelTables)
- {
- var variable = name.Substring(0, 1).ToLower();
- var cursnippets = new List<string>();
- cursnippets.Add("{{ for " + variable + " in " + name + " }}\n\n{{ end }}");
- if(table.Type is not null)
- {
- var props = DatabaseSchema.Properties(table.Type)
- .Where(x => x.Editor != null && x.Editor.GetType() != typeof(NullEditor) && x.Editor.Visible != Visible.Hidden);
- foreach (var prop in props)
- cursnippets.Add("{{ " + variable + "." + prop.Name + " }}");
- }
- snippets[name] = cursnippets.ToArray();
- }
- edt.Snippets = snippets;
- if (edt.ShowDialog() == true)
- {
- CoreUtils.SetPropertyValue(template, col, edt.Script);
- }
- }
-
- // private String[] EmailTemplateManagerWindow_OnGetVariables()
- // {
- // List<string> list = new List<string>();
- // foreach (var table in Model.DefaultTables)
- // {
- // foreach (var col in table.Columns)
- // {
- // if (col.ToString() != "ID")
- // list.Add(table.ToString() + "." + col.ToString());
- // }
- // }
- // list.Sort();
- // return list.ToArray();
- // }
-
- public DataModel Model { get; set; }
- protected override void Reload(
- Filters<DataModelTemplate> criteria, Columns<DataModelTemplate> columns, ref SortOrder<DataModelTemplate>? sort,
- CancellationToken token, Action<CoreTable?, Exception?> action)
- {
- criteria.Add(new Filter<DataModelTemplate>(x => x.Model).IsEqualTo(Model.Name));
- base.Reload(criteria, columns, ref sort, token, action);
- }
- public override DataModelTemplate CreateItem()
- {
- var result = base.CreateItem();
- result.Visible = true;
- result.Model = Model.Name;
- return result;
- }
- }
- }
|