ReportGrid.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. if (row is null) return false;
  106. var id = row.Get<ReportTemplate, Guid>(x => x.ID);
  107. SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
  108. if(SelectedTemplate is null)
  109. {
  110. Logger.Send(LogType.Error, "", $"Report Template {id} does not exist!");
  111. return false;
  112. }
  113. var dlg = new SaveFileDialog
  114. {
  115. Filter = "RDL Files|*.rdl"
  116. };
  117. if (dlg.ShowDialog() == true)
  118. File.WriteAllText(dlg.FileName, SelectedTemplate.RDL);
  119. return false;
  120. }
  121. private bool ImportClick(CoreRow? row)
  122. {
  123. if (row is null) return false;
  124. var id = row.Get<ReportTemplate, Guid>(x => x.ID);
  125. var dlg = new OpenFileDialog
  126. {
  127. Filter = "RDL Files|*.rdl"
  128. };
  129. if (dlg.ShowDialog() == true)
  130. {
  131. SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
  132. if (SelectedTemplate is null)
  133. {
  134. Logger.Send(LogType.Error, "", $"Report Template {id} does not exist!");
  135. return false;
  136. }
  137. SelectedTemplate.RDL = File.ReadAllText(dlg.FileName);
  138. new Client<ReportTemplate>().Save(SelectedTemplate, "Imported from " + dlg.FileName);
  139. }
  140. return false;
  141. }
  142. private bool DesignClick(CoreRow? row)
  143. {
  144. if (row is null) return false;
  145. var id = row.Get<ReportTemplate, Guid>(x => x.ID);
  146. SelectedTemplate = new Client<ReportTemplate>().Load(new Filter<ReportTemplate>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
  147. if (SelectedTemplate is null)
  148. {
  149. Logger.Send(LogType.Error, "", $"Report Template {id} does not exist!");
  150. return false;
  151. }
  152. ReportUtils.DesignReport(SelectedTemplate, DataModel, Populate);
  153. return false;
  154. }
  155. protected override ReportTemplate CreateItem()
  156. {
  157. var template = base.CreateItem();
  158. template.DataModel = DataModel.Name;
  159. template.Section = Section;
  160. template.Name = "Untitled Report";
  161. return template;
  162. }
  163. /*private void ReportGrid_OnAddItem(object sender, object item)
  164. {
  165. SelectedTemplate = (ReportTemplate)item;
  166. SelectedTemplate.DataModel = DataModel.Name;
  167. SelectedTemplate.Section = Section;
  168. SelectedTemplate.Name = "Untitled Report";
  169. }
  170. private void Form_ReportSaved(object sender, string RDL)
  171. {
  172. var rdl = Convert.ToBase64String(Encoding.UTF8.GetBytes(RDL));
  173. SelectedTemplate.RDL = rdl;
  174. File.WriteAllText(@"test.rdl", RDL);
  175. using (var client = new Client<ReportTemplate>())
  176. {
  177. client.Save(SelectedTemplate, "Report Saved from Designer");
  178. }
  179. }*/
  180. }
  181. }