| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | using System;using System.Collections.Generic;using System.Linq;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,            Action<CoreTable, Exception> action)        {            criteria.Add(new Filter<DataModelTemplate>(x => x.Model).IsEqualTo(Model.Name));            base.Reload(criteria, columns, ref sort, action);        }        protected override DataModelTemplate CreateItem()        {            var result = base.CreateItem();            result.Visible = true;            result.Model = Model.Name;            return result;        }    }}
 |