123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- 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 DynamicActionColumn(Properties.Resources.load.AsBitmapImage(), ImportClick)
- { Position = DynamicActionColumnPosition.Start });
- ActionColumns.Add(new DynamicActionColumn(Properties.Resources.save.AsBitmapImage(), ExportClick)
- { Position = DynamicActionColumnPosition.Start });
- ActionColumns.Add(new DynamicActionColumn(ScriptImage, ScriptClick));
- ActionColumns.Add(new DynamicActionColumn(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)
- {
- var id = row.Get<ReportTemplate, Guid>(x => x.ID);
- SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
- 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)
- {
- 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();
- SelectedTemplate.RDL = File.ReadAllText(dlg.FileName);
- new Client<ReportTemplate>().Save(SelectedTemplate, "Imported from " + dlg.FileName);
- }
- return false;
- }
- private bool DesignClick(CoreRow row)
- {
- var id = row.Get<ReportTemplate, Guid>(x => x.ID);
- SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
- 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");
- }
- }
- }
- }
|