123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- import 'package:fis_lib_report/converts/int_to_double_convert.dart';
- import 'package:fis_lib_report/report/element_tag.dart';
- import 'package:fis_lib_report/report/element_type.dart';
- import 'package:fis_lib_report/report/input_image_list.dart';
- import 'package:fis_lib_report/report/interfaces/block_element.dart';
- import 'package:fis_lib_report/report/interfaces/report_template_document.dart';
- import 'package:fis_lib_report/report/paragraph.dart';
- import 'package:fis_lib_report/report/rt_page_size.dart';
- import 'package:fis_lib_report/report/rt_table.dart';
- import 'package:fis_lib_report/report/rt_thickness.dart';
- import 'package:uuid/uuid.dart';
- class ReportTemplateDocument implements IReportTemplateDocument {
- Map<String, Map<String, String>> _customizeTranslation = {};
- Set<String> _customizeComments = {};
- Set<String> _customizeReportComments = {};
- Set<String> _customizeCalculations = {};
- @override
- Map<String, Map<String, String>> get customizeTranslation =>
- _customizeTranslation;
- @override
- set customizeTranslation(Map<String, Map<String, String>>? v) {
- _customizeTranslation = v ?? {};
- }
- @override
- Set<String> get customizeComments => _customizeComments;
- @override
- set customizeReportComments(Set<String>? v) {
- _customizeReportComments = v ?? {};
- }
- @override
- Set<String> get customizeReportComments => _customizeReportComments;
- @override
- set customizeComments(Set<String>? v) {
- _customizeComments = v ?? {};
- }
- @override
- Set<String> get customizeCalculations => _customizeCalculations;
- @override
- set customizeCalculations(Set<String>? v) {
- _customizeCalculations = v ?? {};
- }
- /// Gets the author of the report template.
- @override
- String? author;
- @override
- double? baseFontSize;
- /// Gets all the report template blocks.
- @override
- List<IBlockElement>? blocks = [];
- /// get or set the distance between the footer and the bottom of the page
- @override
- double? footerDistance;
- /// Gets or sets the height of footer.
- @override
- double? footerHeight;
- /// get or set the distance between the header and the top of the page
- @override
- double? headerDistance;
- /// Gets or sets the height of header.
- @override
- double? headerHeight;
- @override
- bool? invertColor;
- /// Gets or sets the value to indicate whether the report template is created by user.
- @override
- bool? isCustom;
- /// Gets the report template name.
- @override
- String? name;
- /// Gets or sets the page padding. Default is 20mm.
- @override
- RTThickness? pagePadding;
- /// Gets or sets the page size.
- @override
- RTPageSize? pageSize;
- @override
- String? id;
- /// Gets the custom input element tags of the report template.
- @override
- Map<String, ElementTag>? tags;
- /// Gets or sets the update time.
- @override
- DateTime? updateTime;
- ///version
- @override
- String? version;
- /// Gets the report template footer.
- @override
- List<IBlockElement>? footer = [];
- /// Gets the report template header.
- @override
- List<IBlockElement>? header = [];
- @override
- ReportTemplateDocument() {
- id = const Uuid().v1();
- pageSize = RTPageSize.a4;
- pagePadding = RTThickness.uniform(56.83);
- headerHeight = null;
- footerHeight = null;
- baseFontSize = 9;
- headerDistance = 34;
- footerDistance = 34;
- }
- ReportTemplateDocument.fromJson(Map<String, dynamic> json) {
- try {
- isCustom = json['IsCustom'];
- id = json['Id'];
- final jsonData = json['UpdateTime'];
- updateTime = DateTime.parse(jsonData!).toLocal();
- author = json['Author'];
- name = json['Name'];
- footerHeight = IntToDouble.intToDouble(json['FooterHeight']);
- headerHeight = IntToDouble.intToDouble(json['HeaderHeight']);
- headerDistance = IntToDouble.intToDouble(json['HeaderDistance']);
- footerDistance = IntToDouble.intToDouble(json['FooterDistance']);
- baseFontSize = IntToDouble.intToDouble(json['BaseFontSize']);
- invertColor = json['InvertColor'];
- version = json['Version'];
- pagePadding = RTThickness.fromJson(json['PagePadding'] ?? {});
- pageSize = RTPageSize.fromJson(json['PageSize'] ?? {});
- Map jsonTags = json['Tags'];
- if (jsonTags.isNotEmpty) {
- //TODO(Loki):tags convert
- } else {
- tags = {};
- }
- Map<dynamic, dynamic> jsonLanguages = json['CustomizeTranslation'] ?? {};
- jsonLanguages.forEach((key, value) {
- if (value is Map<dynamic, dynamic>) {
- if (value.isNotEmpty) {
- customizeTranslation[key] = value.map(
- (key, value) => MapEntry(key.toString(), value.toString()));
- } else {
- customizeTranslation[key] = {};
- }
- } else {
- customizeTranslation[key] = {};
- }
- });
- _initComments(json);
- _initBlocks(json);
- } catch (e) {
- print(e);
- }
- }
- void _initBlocks(Map<String, dynamic> json) {
- List<dynamic> jsonBlocks = json['Blocks'];
- if (jsonBlocks.isNotEmpty) {
- for (var block in jsonBlocks) {
- final type = block['ElementType'];
- final jsonType = ElementType.fromJson(type);
- final name = jsonType.name;
- if (name == ElementType.rtTable.name) {
- final jsonBlock = RTTable.fromJson(block);
- blocks!.add(jsonBlock);
- } else if (name == ElementType.paragraph.name) {
- final jsonBlock = Paragraph.fromJson(block);
- blocks!.add(jsonBlock);
- } else if (name == ElementType.imageList.name) {
- final inputImageList = InputImageList.fromJson(block);
- blocks!.add(inputImageList);
- }
- }
- }
- List<dynamic> jsonHeads = json['Header'];
- if (jsonHeads.isNotEmpty) {
- for (var block in jsonHeads) {
- final type = block['ElementType'];
- final jsonType = ElementType.fromJson(type);
- final name = jsonType.name;
- if (name == ElementType.rtTable.name) {
- final jsonBlock = RTTable.fromJson(block);
- header!.add(jsonBlock);
- } else if (name == ElementType.paragraph.name) {
- final jsonBlock = Paragraph.fromJson(block);
- header!.add(jsonBlock);
- } else if (name == ElementType.imageList.name) {
- final inputImageList = InputImageList.fromJson(block);
- header!.add(inputImageList);
- }
- }
- }
- List<dynamic> jsonFooter = json['Footer'];
- if (jsonFooter.isNotEmpty) {
- for (var block in jsonFooter) {
- final type = block['ElementType'];
- final jsonType = ElementType.fromJson(type);
- final name = jsonType.name;
- if (name == ElementType.rtTable.name) {
- final jsonBlock = RTTable.fromJson(block);
- footer!.add(jsonBlock);
- } else if (name == ElementType.paragraph.name) {
- final paragraph = Paragraph.fromJson(block);
- footer!.add(paragraph);
- }
- }
- }
- }
- void _initComments(Map<String, dynamic> json) {
- List<String> tempComments = [];
- List<dynamic> jsonCustomizeComments = json['CustomizeComments'] ?? [];
- for (var element in jsonCustomizeComments) {
- tempComments.add(element.toString());
- }
- customizeComments = tempComments.toSet();
- tempComments.clear();
- List<dynamic> jsonReportComments = json['CustomizeReportComments'] ?? [];
- for (var element in jsonReportComments) {
- tempComments.add(element.toString());
- }
- customizeReportComments = tempComments.toSet();
- tempComments.clear();
- List<dynamic> jsonCustomizeCalculations =
- json['CustomizeCalculations'] ?? [];
- for (var element in jsonCustomizeCalculations) {
- tempComments.add(element.toString());
- }
- customizeCalculations = tempComments.toSet();
- }
- }
|