report_template_document.dart 7.6 KB

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