report_template_document.dart 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. import 'package:fis_lib_report/report/element_tag.dart';
  2. import 'package:fis_lib_report/report/element_type.dart';
  3. import 'package:fis_lib_report/report/inputImageList.dart';
  4. import 'package:fis_lib_report/report/interfaces/block_element.dart';
  5. import 'package:fis_lib_report/report/interfaces/report_template_document.dart';
  6. import 'package:fis_lib_report/report/paragraph.dart';
  7. import 'package:fis_lib_report/report/rt_page_size.dart';
  8. import 'package:fis_lib_report/report/rt_table.dart';
  9. import 'package:fis_lib_report/report/rt_thickness.dart';
  10. import 'package:uuid/uuid.dart';
  11. class ReportTemplateDocument implements IReportTemplateDocument {
  12. Map<String, Map<String, String>> _customizeTranslation = {};
  13. Set<String> _customizeComments = {};
  14. Set<String> _customizeReportComments = {};
  15. Set<String> _customizeCalculations = {};
  16. @override
  17. Map<String, Map<String, String>> get customizeTranslation =>
  18. _customizeTranslation;
  19. @override
  20. set customizeTranslation(Map<String, Map<String, String>>? v) {
  21. _customizeTranslation = v ?? {};
  22. }
  23. @override
  24. Set<String> get customizeComments => _customizeComments;
  25. @override
  26. set customizeReportComments(Set<String>? v) {
  27. _customizeReportComments = v ?? {};
  28. }
  29. @override
  30. Set<String> get customizeReportComments => _customizeReportComments;
  31. @override
  32. set customizeComments(Set<String>? v) {
  33. _customizeComments = v ?? {};
  34. }
  35. @override
  36. Set<String> get customizeCalculations => _customizeCalculations;
  37. @override
  38. set customizeCalculations(Set<String>? v) {
  39. _customizeCalculations = v ?? {};
  40. }
  41. /// Gets the author of the report template.
  42. @override
  43. String? author;
  44. @override
  45. double? baseFontSize;
  46. /// Gets all the report template blocks.
  47. @override
  48. List<IBlockElement>? blocks = [];
  49. /// get or set the distance between the footer and the bottom of the page
  50. @override
  51. double? footerDistance;
  52. /// Gets or sets the height of footer.
  53. @override
  54. double? footerHeight;
  55. /// get or set the distance between the header and the top of the page
  56. @override
  57. double? headerDistance;
  58. /// Gets or sets the height of header.
  59. @override
  60. double? headerHeight;
  61. @override
  62. bool? invertColor;
  63. /// Gets or sets the value to indicate whether the report template is created by user.
  64. @override
  65. bool? isCustom;
  66. /// Gets the report template name.
  67. @override
  68. String? name;
  69. /// Gets or sets the page padding. Default is 20mm.
  70. @override
  71. RTThickness? pagePadding;
  72. /// Gets or sets the page size.
  73. @override
  74. RTPageSize? pageSize;
  75. @override
  76. String? id;
  77. /// Gets the custom input element tags of the report template.
  78. @override
  79. Map<String, ElementTag>? tags;
  80. /// Gets or sets the update time.
  81. @override
  82. DateTime? updateTime;
  83. ///version
  84. @override
  85. String? version;
  86. /// Gets the report template footer.
  87. @override
  88. List<IBlockElement>? footer = [];
  89. /// Gets the report template header.
  90. @override
  91. List<IBlockElement>? header = [];
  92. @override
  93. ReportTemplateDocument() {
  94. id = const Uuid().v1();
  95. pageSize = RTPageSize.a4;
  96. pagePadding = RTThickness.uniform(56.83);
  97. headerHeight = null;
  98. footerHeight = null;
  99. baseFontSize = 9;
  100. headerDistance = 34;
  101. footerDistance = 34;
  102. }
  103. ReportTemplateDocument.fromJson(Map<String, dynamic> json) {
  104. try {
  105. isCustom = json['IsCustom'];
  106. id = json['Id'];
  107. final jsonData = json['UpdateTime'];
  108. updateTime = DateTime.parse(jsonData!).toLocal();
  109. author = json['Author'];
  110. name = json['Name'];
  111. headerHeight = json['HeaderHeight'];
  112. footerHeight = json['FooterHeight'];
  113. headerDistance = json['HeaderDistance'];
  114. footerDistance = json['FooterDistance'];
  115. baseFontSize = json['BaseFontSize'];
  116. invertColor = json['InvertColor'];
  117. version = json['Version'];
  118. pagePadding = RTThickness.fromJson(json['PagePadding'] ?? {});
  119. pageSize = RTPageSize.fromJson(json['PageSize'] ?? {});
  120. Map jsonTags = json['Tags'];
  121. if (jsonTags.isNotEmpty) {
  122. //TODO(Loki):tags convert
  123. } else {
  124. tags = {};
  125. }
  126. Map<dynamic, dynamic> jsonLanguages = json['CustomizeTranslation'] ?? {};
  127. jsonLanguages.forEach((key, value) {
  128. if (value is Map<dynamic, dynamic>) {
  129. if (value.isNotEmpty) {
  130. customizeTranslation[key] = value as Map<String, String>;
  131. } else {
  132. customizeTranslation[key] = {};
  133. }
  134. } else {
  135. customizeTranslation[key] = {};
  136. }
  137. });
  138. _initComments(json);
  139. _initBlocks(json);
  140. } catch (e) {
  141. print(e);
  142. }
  143. }
  144. void _initBlocks(Map<String, dynamic> json) {
  145. List<dynamic> jsonBlocks = json['Blocks'];
  146. if (jsonBlocks.isNotEmpty) {
  147. for (var block in jsonBlocks) {
  148. final type = block['ElementType'];
  149. final jsonType = ElementType.fromJson(type);
  150. final name = jsonType.name;
  151. if (name == ElementType.rtTable.name) {
  152. final jsonBlock = RTTable.fromJson(block);
  153. blocks!.add(jsonBlock);
  154. } else if (name == ElementType.paragraph.name) {
  155. final jsonBlock = Paragraph.fromJson(block);
  156. blocks!.add(jsonBlock);
  157. } else if (name == ElementType.imageList.name) {
  158. final inputImageList = InputImageList.fromJson(block);
  159. blocks!.add(inputImageList);
  160. }
  161. }
  162. }
  163. List<dynamic> jsonHeads = json['Header'];
  164. if (jsonHeads.isNotEmpty) {
  165. for (var block in jsonHeads) {
  166. final type = block['ElementType'];
  167. final jsonType = ElementType.fromJson(type);
  168. final name = jsonType.name;
  169. if (name == ElementType.rtTable.name) {
  170. final jsonBlock = RTTable.fromJson(block);
  171. header!.add(jsonBlock);
  172. } else if (name == ElementType.paragraph.name) {
  173. final jsonBlock = Paragraph.fromJson(block);
  174. header!.add(jsonBlock);
  175. } else if (name == ElementType.imageList.name) {
  176. final inputImageList = InputImageList.fromJson(block);
  177. header!.add(inputImageList);
  178. }
  179. }
  180. }
  181. List<dynamic> jsonFooter = json['Footer'];
  182. if (jsonFooter.isNotEmpty) {
  183. for (var block in jsonFooter) {
  184. final type = block['ElementType'];
  185. final jsonType = ElementType.fromJson(type);
  186. final name = jsonType.name;
  187. if (name == ElementType.rtTable.name) {
  188. final jsonBlock = RTTable.fromJson(block);
  189. footer!.add(jsonBlock);
  190. } else if (name == ElementType.paragraph.name) {
  191. final paragraph = Paragraph.fromJson(block);
  192. footer!.add(paragraph);
  193. }
  194. }
  195. }
  196. }
  197. void _initComments(Map<String, dynamic> json) {
  198. List<String> tempComments = [];
  199. List<dynamic> jsonCustomizeComments = json['CustomizeComments'] ?? [];
  200. for (var element in jsonCustomizeComments) {
  201. tempComments.add(element.toString());
  202. }
  203. customizeComments = tempComments.toSet();
  204. tempComments.clear();
  205. List<dynamic> jsonReportComments = json['CustomizeReportComments'] ?? [];
  206. for (var element in jsonReportComments) {
  207. tempComments.add(element.toString());
  208. }
  209. customizeReportComments = tempComments.toSet();
  210. tempComments.clear();
  211. List<dynamic> jsonCustomizeCalculations =
  212. json['CustomizeCalculations'] ?? [];
  213. for (var element in jsonCustomizeCalculations) {
  214. tempComments.add(element.toString());
  215. }
  216. customizeCalculations = tempComments.toSet();
  217. }
  218. }