| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 | using System.IO;using System.Text;using System.Windows.Media.Imaging;using InABox.Clients;using InABox.Core;using InABox.DynamicGrid;using InABox.Reports.Common;using InABox.WPF;using OpenFileDialog = Microsoft.Win32.OpenFileDialog;using SaveFileDialog = Microsoft.Win32.SaveFileDialog;using ScriptEditor = InABox.DynamicGrid.ScriptEditor;namespace InABox.Reports{    public class ReportGrid : DynamicDataGrid<ReportTemplate>    {        private readonly string scripttemplate =            @"using System;using System.Linq;using System.Runtime;using InABox.Core;using Comal.Classes;public class Report{{    public {0} Model {{ get; set; }}    public IEnumerable<String> RequiredTables {{ get; set; }}    public bool Init()    {{        return true;    }}    public bool Populate()    {{        return true;    }}}}";        private ReportTemplate? SelectedTemplate;        public ReportGrid()        {            Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.ShowHelp);            //OnAddItem += ReportGrid_OnAddItem;            //OnEditItem += ReportGrid_OnEditItem;            ActionColumns.Add(new DynamicImageColumn(Properties.Resources.load.AsBitmapImage(), ImportClick)                { Position = DynamicActionColumnPosition.Start });            ActionColumns.Add(new DynamicImageColumn(Properties.Resources.save.AsBitmapImage(), ExportClick)                { Position = DynamicActionColumnPosition.Start });            ActionColumns.Add(new DynamicImageColumn(ScriptImage, ScriptClick));            ActionColumns.Add(new DynamicImageColumn(Properties.Resources.pencil.AsBitmapImage(), DesignClick));            HiddenColumns.Add(x => x.IsRDL);            HiddenColumns.Add(x => x.Script);        }        public DataModel DataModel { get; set; }        public string Section { get; set; }        public bool Populate { get; set; }        private bool ScriptClick(CoreRow? arg)        {            if (arg != null)            {                var template = arg.ToObject<ReportTemplate>();                var script = template.Script;                if (string.IsNullOrWhiteSpace(script))                    script = string.Format(scripttemplate, DataModel.GetType().Name.Split('.').Last());                var editor = new ScriptEditor(script);                if (editor.ShowDialog() == true)                {                    template.Script = editor.Script;                    new Client<ReportTemplate>().Save(template, "Updated Script");                    return true;                }            }            return false;        }        private BitmapImage? ScriptImage(CoreRow? arg)        {            return arg == null ? Properties.Resources.edit.AsBitmapImage() :                arg.Get<ReportTemplate, bool>(x => x.IsRDL) ? null : Properties.Resources.edit.AsBitmapImage();        }        protected override DynamicGridColumns LoadColumns()        {            var columns = new DynamicGridColumns();            columns.Add(new DynamicGridColumn { ColumnName = "Name", Width = 0 });            //var col = new DynamicGridColumn { ColumnName = "PrinterName", Width = 0 };            //columns.Add(col);            columns.Add(new DynamicGridColumn { ColumnName = "Visible", Width = 50, Alignment = Alignment.MiddleCenter });            return columns;        }        protected override void Reload(Filters<ReportTemplate> criteria, Columns<ReportTemplate> columns, ref SortOrder<ReportTemplate>? sort,            Action<CoreTable?, Exception?> action)        {            criteria.Add(new Filter<ReportTemplate>(x => x.DataModel).IsEqualTo(DataModel.Name).And(x => x.Section).IsEqualTo(Section));            base.Reload(criteria, columns, ref sort, action);        }        private bool ReportGrid_OnEditItem(object sender, object item)        {            var editor = new DynamicEditorForm(item.GetType());            editor.OnCustomiseColumns += Editor_OnDefineGridColumns;            editor.Items = new[] { (BaseObject)item };            var bOK = editor.ShowDialog() == true;            return bOK;        }        private DynamicGridColumns Editor_OnDefineGridColumns(object sender, DynamicGridColumns? master)        {            return LoadColumns();        }        private bool ExportClick(CoreRow? row)        {            if (row is null) return false;            var id = row.Get<ReportTemplate, Guid>(x => x.ID);            SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();            if(SelectedTemplate is null)            {                Logger.Send(LogType.Error, "", $"Report Template {id} does not exist!");                return false;            }            var dlg = new SaveFileDialog            {                Filter = "RDL Files|*.rdl"            };            if (dlg.ShowDialog() == true)                File.WriteAllText(dlg.FileName, SelectedTemplate.RDL);            return false;        }        private bool ImportClick(CoreRow? row)        {            if (row is null) return false;            var id = row.Get<ReportTemplate, Guid>(x => x.ID);            var dlg = new OpenFileDialog            {                Filter = "RDL Files|*.rdl"            };            if (dlg.ShowDialog() == true)            {                SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();                if (SelectedTemplate is null)                {                    Logger.Send(LogType.Error, "", $"Report Template {id} does not exist!");                    return false;                }                SelectedTemplate.RDL = File.ReadAllText(dlg.FileName);                new Client<ReportTemplate>().Save(SelectedTemplate, "Imported from " + dlg.FileName);            }            return false;        }        private bool DesignClick(CoreRow? row)        {            if (row is null) return false;            var id = row.Get<ReportTemplate, Guid>(x => x.ID);            SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();            if (SelectedTemplate is null)            {                Logger.Send(LogType.Error, "", $"Report Template {id} does not exist!");                return false;            }            ReportUtils.DesignReport(SelectedTemplate, DataModel, Populate);            return false;        }        protected override ReportTemplate CreateItem()        {            var template = base.CreateItem();            template.DataModel = DataModel.Name;            template.Section = Section;            template.Name = "Untitled Report";            return template;        }        /*private void ReportGrid_OnAddItem(object sender, object item)        {            SelectedTemplate = (ReportTemplate)item;            SelectedTemplate.DataModel = DataModel.Name;            SelectedTemplate.Section = Section;            SelectedTemplate.Name = "Untitled Report";        }        private void Form_ReportSaved(object sender, string RDL)        {            var rdl = Convert.ToBase64String(Encoding.UTF8.GetBytes(RDL));            SelectedTemplate.RDL = rdl;            File.WriteAllText(@"test.rdl", RDL);            using (var client = new Client<ReportTemplate>())            {                client.Save(SelectedTemplate, "Report Saved from Designer");            }        }*/    }}
 |