class Report { String id; String name; String display; String object; List groupbys = []; List sorts = []; List displayFields = []; List fields; List displayFilters; bool forAllUser; Report( {this.id, this.name, this.display, this.displayFields, this.displayFilters, this.fields, this.groupbys, this.sorts, this.object, this.forAllUser}); @override bool operator ==(other) { if (identical(this, other)) { return true; } return other.id == this.id; } @override int get hashCode { int result = 17; result = 37 * result + id.hashCode; return result; } Map toMap() { List sortList = sorts.map((l) => l.toMap()).toList(); List groupByList = groupbys.map((l) => l.toMap()).toList(); List dFieldList = displayFields.map((l) => l.toMap()).toList(); return { 'id': id, 'name': name, 'display': display, 'sorts': sortList, 'object': object, 'groupbys': groupByList, 'display_fields': dFieldList, 'display_filters': displayFilters.map((filter) { return filter.toMap(); }).toList(), 'fields': fields.map((field) { return field.toMap(); }).toList(), }; } factory Report.fromMap(Map map, String id) { var list = map['fields'] as List; List fields = list.map((i) => Field.fromJson(i)).toList(); var filterlist = map['display_filters'] as List; List displayFilters = filterlist.map((i) => DisplayFilter.fromJson(i)).toList(); return Report( id: id, name: map['name'], display: map['display'], displayFields: map['display_fields'], groupbys: map['groupbys'] == null ? [] : map['groupbys'], sorts: map['sorts'] == null ? [] : map['sorts'], fields: fields, displayFilters: displayFilters, object: map['object'], forAllUser: map['for_all_users']); } convertArrayToString(Report report, List filters) { var aggFun = []; var fields = []; var groupbys = []; report.fields.asMap().forEach((key, value) { if (value.aggFun == '') { aggFun.add(''); } else { aggFun.add(value.aggFun); } }); report.fields.asMap().forEach((key, value) { fields.add(value.name); }); String strFields; fields.forEach((element) { if (strFields == null) { strFields = element; } else { strFields = strFields + ',' + element; } }); String strAgg; aggFun.forEach((element) { if (strAgg == null) { strAgg = element; } else { strAgg = strAgg + ',' + element; } }); String strGroup; groupbys.forEach((element) { if (strGroup == null) { strGroup = element; } else { strGroup = strGroup + ',' + element; } }); var data = { "fields": strFields == null ? '' : strFields, "aggfuns": strAgg == null ? '' : strAgg, "groupbys": strGroup == null ? '' : strGroup, "sorts": report.sorts == null ? [] : report.sorts, "filters": filters == null ? [] : filters }; return data; } @override String toString() { return 'Report{id:$id,name:$name,object: $object display: $display, sorts: $sorts, groupbys: $groupbys, fields: $fields, displayFilters: $displayFilters, displayFields: $displayFields}'; } } class Field { String aggFun; String dataType; String displayName; String name; int toFixed; Field( {this.aggFun, this.dataType, this.displayName, this.name, this.toFixed}); factory Field.fromJson(Map json) { return Field( aggFun: json['agg_fun'] == '' ? '' : json['agg_fun'], dataType: json['type'], displayName: json['display_name'], name: json['name'], toFixed: json['to_fixed'] == null ? 0 : json['to_fixed']); } factory Field.fromMap(Map map) { return Field( aggFun: map['agg_fun'], dataType: map['type'], displayName: map['display_name'], name: map['name'], toFixed: map['to_fixed']); } Map toMap() => { 'aggFun': aggFun, 'dataType': dataType, 'displayName': displayName, 'name': name, 'toFixed': toFixed }; Map toJson() => { 'aggFun': aggFun, 'dataType': dataType, 'displayName': displayName, 'name': name, 'toFixed': toFixed }; @override String toString() { return 'Field{aggFun: $aggFun, dataType: $dataType, displayName: $displayName, name: $name, toFixed: $toFixed}'; } } class DisplayFilter { String compare; String type; String displayName; String name; DisplayFilter({this.compare, this.type, this.displayName, this.name}); factory DisplayFilter.fromJson(Map json) { return DisplayFilter( compare: json['compare'], type: json['data_type'] == '' ? '' : json['data_type'], displayName: json['display_name'], name: json['name']); } factory DisplayFilter.fromMap(Map map) { return DisplayFilter( compare: map['compare'], type: map['type'], displayName: map['display_name'], name: map['name']); } Map toMap() => { 'compare': compare, 'type': type, 'displayName': displayName, 'name': name, }; @override String toString() { return 'DisplayFilter{compare: $compare, type: $type, displayName: $displayName, name: $name}'; } } class ReportFieldPositionSelection { String id; List fieldPosition; List fieldSelection; ReportFieldPositionSelection( {this.id, this.fieldPosition, this.fieldSelection}); factory ReportFieldPositionSelection.fromJson(Map json) { var list = json['field_position'] as List; List fields = list.map((i) => Field.fromJson(i)).toList(); return ReportFieldPositionSelection( id: json['id'], fieldPosition: fields, fieldSelection: json['field_selection']); } Map toJson() { return { 'id': id, 'field_selection': fieldSelection, 'field_position': fieldPosition.map((field) { return field.toMap(); }).toList(), }; } @override String toString() { return 'ReportFieldPositionSelection{id: $id, fieldPosition: $fieldPosition, fieldSelection: $fieldSelection}'; } }