marco.pms.mobileapp/lib/model/document/documents_list_model.dart

295 lines
7.5 KiB
Dart

class DocumentsResponse {
final bool success;
final String message;
final DocumentDataWrapper data;
final dynamic errors;
final int statusCode;
final DateTime timestamp;
DocumentsResponse({
required this.success,
required this.message,
required this.data,
this.errors,
required this.statusCode,
required this.timestamp,
});
factory DocumentsResponse.fromJson(Map<String, dynamic> json) {
return DocumentsResponse(
success: json['success'] ?? false,
message: json['message'] ?? '',
data: DocumentDataWrapper.fromJson(json['data']),
errors: json['errors'],
statusCode: json['statusCode'] ?? 0,
timestamp: json['timestamp'] != null
? DateTime.parse(json['timestamp'])
: DateTime.now(),
);
}
Map<String, dynamic> toJson() {
return {
'success': success,
'message': message,
'data': data.toJson(),
'errors': errors,
'statusCode': statusCode,
'timestamp': timestamp.toIso8601String(),
};
}
}
class DocumentDataWrapper {
final dynamic currentFilter;
final int currentPage;
final int totalPages;
final int totalEntites;
final List<DocumentItem> data;
DocumentDataWrapper({
this.currentFilter,
required this.currentPage,
required this.totalPages,
required this.totalEntites,
required this.data,
});
factory DocumentDataWrapper.fromJson(Map<String, dynamic> json) {
return DocumentDataWrapper(
currentFilter: json['currentFilter'],
currentPage: json['currentPage'] ?? 0,
totalPages: json['totalPages'] ?? 0,
totalEntites: json['totalEntites'] ?? 0,
data: (json['data'] as List<dynamic>? ?? [])
.map((e) => DocumentItem.fromJson(e))
.toList(),
);
}
Map<String, dynamic> toJson() {
return {
'currentFilter': currentFilter,
'currentPage': currentPage,
'totalPages': totalPages,
'totalEntites': totalEntites,
'data': data.map((e) => e.toJson()).toList(),
};
}
}
class DocumentItem {
final String id;
final String name;
final String documentId;
final String description;
final DateTime uploadedAt;
final String? parentAttachmentId;
final bool isCurrentVersion;
final int version;
final bool isActive;
final bool? isVerified;
final UploadedBy uploadedBy;
final DocumentType documentType;
DocumentItem({
required this.id,
required this.name,
required this.documentId,
required this.description,
required this.uploadedAt,
this.parentAttachmentId,
required this.isCurrentVersion,
required this.version,
required this.isActive,
this.isVerified,
required this.uploadedBy,
required this.documentType,
});
factory DocumentItem.fromJson(Map<String, dynamic> json) {
return DocumentItem(
id: json['id'] ?? '',
name: json['name'] ?? '',
documentId: json['documentId'] ?? '',
description: json['description'] ?? '',
uploadedAt: DateTime.parse(json['uploadedAt']),
parentAttachmentId: json['parentAttachmentId'],
isCurrentVersion: json['isCurrentVersion'] ?? false,
version: json['version'] ?? 0,
isActive: json['isActive'] ?? false,
isVerified: json['isVerified'],
uploadedBy: UploadedBy.fromJson(json['uploadedBy']),
documentType: DocumentType.fromJson(json['documentType']),
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'documentId': documentId,
'description': description,
'uploadedAt': uploadedAt.toIso8601String(),
'parentAttachmentId': parentAttachmentId,
'isCurrentVersion': isCurrentVersion,
'version': version,
'isActive': isActive,
'isVerified': isVerified,
'uploadedBy': uploadedBy.toJson(),
'documentType': documentType.toJson(),
};
}
}
extension DocumentItemCopy on DocumentItem {
DocumentItem copyWith({
bool? isActive,
}) {
return DocumentItem(
id: id,
name: name,
documentId: documentId,
description: description,
uploadedAt: uploadedAt,
parentAttachmentId: parentAttachmentId,
isCurrentVersion: isCurrentVersion,
version: version,
isActive: isActive ?? this.isActive,
isVerified: isVerified,
uploadedBy: uploadedBy,
documentType: documentType,
);
}
}
class UploadedBy {
final String id;
final String firstName;
final String? lastName;
final String? photo;
final String jobRoleId;
final String jobRoleName;
UploadedBy({
required this.id,
required this.firstName,
this.lastName,
this.photo,
required this.jobRoleId,
required this.jobRoleName,
});
factory UploadedBy.fromJson(Map<String, dynamic> json) {
return UploadedBy(
id: json['id'] ?? '',
firstName: json['firstName'] ?? '',
lastName: json['lastName'],
photo: json['photo'],
jobRoleId: json['jobRoleId'] ?? '',
jobRoleName: json['jobRoleName'] ?? '',
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'firstName': firstName,
'lastName': lastName,
'photo': photo,
'jobRoleId': jobRoleId,
'jobRoleName': jobRoleName,
};
}
}
class DocumentType {
final String id;
final String name;
final String? regexExpression;
final String? allowedContentType;
final int? maxSizeAllowedInMB;
final bool isValidationRequired;
final bool isMandatory;
final bool isSystem;
final bool isActive;
final DocumentCategory? documentCategory;
DocumentType({
required this.id,
required this.name,
this.regexExpression,
this.allowedContentType,
this.maxSizeAllowedInMB,
required this.isValidationRequired,
required this.isMandatory,
required this.isSystem,
required this.isActive,
this.documentCategory,
});
factory DocumentType.fromJson(Map<String, dynamic> json) {
return DocumentType(
id: json['id'] ?? '',
name: json['name'] ?? '',
regexExpression: json['regexExpression'], // nullable
allowedContentType: json['allowedContentType'],
maxSizeAllowedInMB: json['maxSizeAllowedInMB'],
isValidationRequired: json['isValidationRequired'] ?? false,
isMandatory: json['isMandatory'] ?? false,
isSystem: json['isSystem'] ?? false,
isActive: json['isActive'] ?? false,
documentCategory: json['documentCategory'] != null
? DocumentCategory.fromJson(json['documentCategory'])
: null,
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'regexExpression': regexExpression,
'allowedContentType': allowedContentType,
'maxSizeAllowedInMB': maxSizeAllowedInMB,
'isValidationRequired': isValidationRequired,
'isMandatory': isMandatory,
'isSystem': isSystem,
'isActive': isActive,
'documentCategory': documentCategory?.toJson(),
};
}
}
class DocumentCategory {
final String id;
final String name;
final String? description;
final String? entityTypeId;
DocumentCategory({
required this.id,
required this.name,
this.description,
this.entityTypeId,
});
factory DocumentCategory.fromJson(Map<String, dynamic> json) {
return DocumentCategory(
id: json['id'] ?? '',
name: json['name'] ?? '',
description: json['description'],
entityTypeId: json['entityTypeId'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'description': description,
'entityTypeId': entityTypeId,
};
}
}