ReportGrid.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. using System.IO;
  2. using System.Text;
  3. using System.Windows.Media.Imaging;
  4. using InABox.Clients;
  5. using InABox.Core;
  6. using InABox.DynamicGrid;
  7. using InABox.Reports.Common;
  8. using InABox.WPF;
  9. using OpenFileDialog = Microsoft.Win32.OpenFileDialog;
  10. using SaveFileDialog = Microsoft.Win32.SaveFileDialog;
  11. using ScriptEditor = InABox.DynamicGrid.ScriptEditor;
  12. namespace InABox.Reports
  13. {
  14. public class ReportGrid : DynamicDataGrid<ReportTemplate>
  15. {
  16. private readonly string scripttemplate =
  17. @"using System;
  18. using System.Linq;
  19. using System.Runtime;
  20. using InABox.Core;
  21. using Comal.Classes;
  22. public class Report
  23. {{
  24. public {0} Model {{ get; set; }}
  25. public IEnumerable<String> RequiredTables {{ get; set; }}
  26. public bool Init()
  27. {{
  28. return true;
  29. }}
  30. public bool Populate()
  31. {{
  32. return true;
  33. }}
  34. }}";
  35. private ReportTemplate SelectedTemplate;
  36. public ReportGrid()
  37. {
  38. Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.ShowHelp);
  39. //OnAddItem += ReportGrid_OnAddItem;
  40. //OnEditItem += ReportGrid_OnEditItem;
  41. ActionColumns.Add(new DynamicActionColumn(Properties.Resources.load.AsBitmapImage(), ImportClick)
  42. { Position = DynamicActionColumnPosition.Start });
  43. ActionColumns.Add(new DynamicActionColumn(Properties.Resources.save.AsBitmapImage(), ExportClick)
  44. { Position = DynamicActionColumnPosition.Start });
  45. ActionColumns.Add(new DynamicActionColumn(ScriptImage, ScriptClick));
  46. ActionColumns.Add(new DynamicActionColumn(Properties.Resources.pencil.AsBitmapImage(), DesignClick));
  47. HiddenColumns.Add(x => x.IsRDL);
  48. HiddenColumns.Add(x => x.Script);
  49. }
  50. public DataModel DataModel { get; set; }
  51. public string Section { get; set; }
  52. public bool Populate { get; set; }
  53. private bool ScriptClick(CoreRow arg)
  54. {
  55. if (arg != null)
  56. {
  57. var template = arg.ToObject<ReportTemplate>();
  58. var script = template.Script;
  59. if (string.IsNullOrWhiteSpace(script))
  60. script = string.Format(scripttemplate, DataModel.GetType().Name.Split('.').Last());
  61. var editor = new ScriptEditor(script);
  62. if (editor.ShowDialog() == true)
  63. {
  64. template.Script = editor.Script;
  65. new Client<ReportTemplate>().Save(template, "Updated Script");
  66. return true;
  67. }
  68. }
  69. return false;
  70. }
  71. private BitmapImage ScriptImage(CoreRow arg)
  72. {
  73. return arg == null ? Properties.Resources.edit.AsBitmapImage() :
  74. arg.Get<ReportTemplate, bool>(x => x.IsRDL) ? null : Properties.Resources.edit.AsBitmapImage();
  75. }
  76. protected override DynamicGridColumns LoadColumns()
  77. {
  78. var columns = new DynamicGridColumns();
  79. columns.Add(new DynamicGridColumn { ColumnName = "Name", Width = 0 });
  80. //var col = new DynamicGridColumn { ColumnName = "PrinterName", Width = 0 };
  81. //columns.Add(col);
  82. columns.Add(new DynamicGridColumn { ColumnName = "Visible", Width = 50, Alignment = Alignment.MiddleCenter });
  83. return columns;
  84. }
  85. protected override void Reload(Filters<ReportTemplate> criteria, Columns<ReportTemplate> columns, ref SortOrder<ReportTemplate> sort,
  86. Action<CoreTable, Exception> action)
  87. {
  88. criteria.Add(new Filter<ReportTemplate>(x => x.DataModel).IsEqualTo(DataModel.Name).And(x => x.Section).IsEqualTo(Section));
  89. base.Reload(criteria, columns, ref sort, action);
  90. }
  91. private bool ReportGrid_OnEditItem(object sender, object item)
  92. {
  93. var editor = new DynamicEditorForm(item.GetType());
  94. editor.OnCustomiseColumns += Editor_OnDefineGridColumns;
  95. editor.Items = new[] { (BaseObject)item };
  96. var bOK = editor.ShowDialog() == true;
  97. return bOK;
  98. }
  99. private DynamicGridColumns Editor_OnDefineGridColumns(object sender, DynamicGridColumns master)
  100. {
  101. return LoadColumns();
  102. }
  103. private bool ExportClick(CoreRow row)
  104. {
  105. var id = row.Get<ReportTemplate, Guid>(x => x.ID);
  106. SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
  107. var dlg = new SaveFileDialog
  108. {
  109. Filter = "RDL Files|*.rdl"
  110. };
  111. if (dlg.ShowDialog() == true)
  112. File.WriteAllText(dlg.FileName, SelectedTemplate.RDL);
  113. return false;
  114. }
  115. private bool ImportClick(CoreRow row)
  116. {
  117. var id = row.Get<ReportTemplate, Guid>(x => x.ID);
  118. var dlg = new OpenFileDialog
  119. {
  120. Filter = "RDL Files|*.rdl"
  121. };
  122. if (dlg.ShowDialog() == true)
  123. {
  124. SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
  125. SelectedTemplate.RDL = File.ReadAllText(dlg.FileName);
  126. new Client<ReportTemplate>().Save(SelectedTemplate, "Imported from " + dlg.FileName);
  127. }
  128. return false;
  129. }
  130. private bool DesignClick(CoreRow row)
  131. {
  132. var id = row.Get<ReportTemplate, Guid>(x => x.ID);
  133. SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
  134. ReportUtils.DesignReport(SelectedTemplate, DataModel, Populate);
  135. return false;
  136. }
  137. protected override ReportTemplate CreateItem()
  138. {
  139. var template = base.CreateItem();
  140. template.DataModel = DataModel.Name;
  141. template.Section = Section;
  142. template.Name = "Untitled Report";
  143. return template;
  144. }
  145. private void ReportGrid_OnAddItem(object sender, object item)
  146. {
  147. SelectedTemplate = (ReportTemplate)item;
  148. SelectedTemplate.DataModel = DataModel.Name;
  149. SelectedTemplate.Section = Section;
  150. SelectedTemplate.Name = "Untitled Report";
  151. }
  152. private void Form_ReportSaved(object sender, string RDL)
  153. {
  154. var rdl = Convert.ToBase64String(Encoding.UTF8.GetBytes(RDL));
  155. SelectedTemplate.RDL = rdl;
  156. File.WriteAllText(@"test.rdl", RDL);
  157. using (var client = new Client<ReportTemplate>())
  158. {
  159. client.Save(SelectedTemplate, "Report Saved from Designer");
  160. }
  161. }
  162. }
  163. }