marco.pms.mobileapp/lib/model/document/document_version_model.dart
Vaibhav Surve 334023bf1b feat: Add document management features including document listing, details, and filtering
- Implemented DocumentsResponse and related models for handling document data.
- Created UserDocumentsPage for displaying user-specific documents with filtering options.
- Developed DocumentDetailsPage to show detailed information about a selected document.
- Added functionality for uploading documents with DocumentUploadBottomSheet.
- Integrated document filtering through UserDocumentFilterBottomSheet.
- Enhanced dashboard to include navigation to the document management section.
- Updated user profile right bar to provide quick access to user documents.
2025-09-04 16:56:49 +05:30

139 lines
3.7 KiB
Dart

class DocumentVersionsResponse {
final bool success;
final String message;
final VersionDataWrapper data;
final dynamic errors;
final int statusCode;
final DateTime timestamp;
DocumentVersionsResponse({
required this.success,
required this.message,
required this.data,
this.errors,
required this.statusCode,
required this.timestamp,
});
factory DocumentVersionsResponse.fromJson(Map<String, dynamic> json) {
return DocumentVersionsResponse(
success: json['success'] ?? false,
message: json['message'] ?? "",
data: VersionDataWrapper.fromJson(json['data']),
errors: json['errors'],
statusCode: json['statusCode'] ?? 0,
timestamp: DateTime.parse(json['timestamp']),
);
}
}
class VersionDataWrapper {
final int currentPage;
final int totalPages;
final int totalEntites;
final List<DocumentVersionItem> data;
VersionDataWrapper({
required this.currentPage,
required this.totalPages,
required this.totalEntites,
required this.data,
});
factory VersionDataWrapper.fromJson(Map<String, dynamic> json) {
return VersionDataWrapper(
currentPage: json['currentPage'] ?? 1,
totalPages: json['totalPages'] ?? 1,
totalEntites: json['totalEntites'] ?? 0,
data: (json['data'] as List<dynamic>?)
?.map((e) => DocumentVersionItem.fromJson(e))
.toList() ??
[],
);
}
}
class DocumentVersionItem {
final String id;
final String name;
final String documentId;
final int version;
final int fileSize;
final String contentType;
final DateTime uploadedAt;
final UserInfo uploadedBy;
final DateTime? updatedAt;
final UserInfo? updatedBy;
final DateTime? verifiedAt;
final UserInfo? verifiedBy;
final bool? isVerified;
DocumentVersionItem({
required this.id,
required this.name,
required this.documentId,
required this.version,
required this.fileSize,
required this.contentType,
required this.uploadedAt,
required this.uploadedBy,
this.updatedAt,
this.updatedBy,
this.verifiedAt,
this.verifiedBy,
this.isVerified,
});
factory DocumentVersionItem.fromJson(Map<String, dynamic> json) {
return DocumentVersionItem(
id: json['id'] ?? "",
name: json['name'] ?? "",
documentId: json['documentId'] ?? "",
version: json['version'] ?? 0,
fileSize: json['fileSize'] ?? 0,
contentType: json['contentType'] ?? "",
uploadedAt: DateTime.parse(json['uploadedAt']),
uploadedBy: UserInfo.fromJson(json['uploadedBy']),
updatedAt:
json['updatedAt'] != null ? DateTime.parse(json['updatedAt']) : null,
updatedBy:
json['updatedBy'] != null ? UserInfo.fromJson(json['updatedBy']) : null,
verifiedAt: json['verifiedAt'] != null
? DateTime.tryParse(json['verifiedAt'])
: null,
verifiedBy:
json['verifiedBy'] != null ? UserInfo.fromJson(json['verifiedBy']) : null,
isVerified: json['isVerified'],
);
}
}
class UserInfo {
final String id;
final String firstName;
final String lastName;
final String photo;
final String jobRoleId;
final String jobRoleName;
UserInfo({
required this.id,
required this.firstName,
required this.lastName,
required this.photo,
required this.jobRoleId,
required this.jobRoleName,
});
factory UserInfo.fromJson(Map<String, dynamic> json) {
return UserInfo(
id: json['id'] ?? "",
firstName: json['firstName'] ?? "",
lastName: json['lastName'] ?? "",
photo: json['photo'] ?? "",
jobRoleId: json['jobRoleId'] ?? "",
jobRoleName: json['jobRoleName'] ?? "",
);
}
}