106 lines
3.1 KiB
Dart
106 lines
3.1 KiB
Dart
/// Project Submission Model
|
|
///
|
|
/// Data model for project submission from API responses with Hive caching.
|
|
/// Based on API response from building_material.building_material.api.project.get_list
|
|
library;
|
|
|
|
import 'package:hive_ce/hive.dart';
|
|
import 'package:worker/core/constants/storage_constants.dart';
|
|
import 'package:worker/features/projects/domain/entities/project_submission.dart';
|
|
|
|
part 'project_submission_model.g.dart';
|
|
|
|
/// Project Submission Model - Type ID: 14
|
|
@HiveType(typeId: HiveTypeIds.projectSubmissionModel)
|
|
class ProjectSubmissionModel extends HiveObject {
|
|
/// Unique submission identifier (API: name)
|
|
@HiveField(0)
|
|
final String submissionId;
|
|
|
|
/// Project name/title (API: designed_area)
|
|
@HiveField(1)
|
|
final String designedArea;
|
|
|
|
/// Design area value in square meters (API: design_area)
|
|
@HiveField(2)
|
|
final double designArea;
|
|
|
|
/// Submission/request date (API: request_date)
|
|
@HiveField(3)
|
|
final DateTime requestDate;
|
|
|
|
/// Status label - Vietnamese (API: status)
|
|
@HiveField(4)
|
|
final String status;
|
|
|
|
/// Rejection reason if rejected (API: reason_for_rejection)
|
|
@HiveField(5)
|
|
final String? reasonForRejection;
|
|
|
|
/// Status color indicator (API: status_color)
|
|
@HiveField(6)
|
|
final String statusColor;
|
|
|
|
ProjectSubmissionModel({
|
|
required this.submissionId,
|
|
required this.designedArea,
|
|
required this.designArea,
|
|
required this.requestDate,
|
|
required this.status,
|
|
this.reasonForRejection,
|
|
required this.statusColor,
|
|
});
|
|
|
|
/// Create from JSON (API response)
|
|
factory ProjectSubmissionModel.fromJson(Map<String, dynamic> json) {
|
|
return ProjectSubmissionModel(
|
|
submissionId: json['name'] as String,
|
|
designedArea: json['designed_area'] as String,
|
|
designArea: (json['design_area'] as num).toDouble(),
|
|
requestDate: DateTime.parse(json['request_date'] as String),
|
|
status: json['status'] as String,
|
|
reasonForRejection: json['reason_for_rejection'] as String?,
|
|
statusColor: json['status_color'] as String,
|
|
);
|
|
}
|
|
|
|
/// Convert to JSON
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'name': submissionId,
|
|
'designed_area': designedArea,
|
|
'design_area': designArea,
|
|
'request_date': requestDate.toIso8601String(),
|
|
'status': status,
|
|
'reason_for_rejection': reasonForRejection,
|
|
'status_color': statusColor,
|
|
};
|
|
}
|
|
|
|
/// Convert to entity
|
|
ProjectSubmission toEntity() {
|
|
return ProjectSubmission(
|
|
submissionId: submissionId,
|
|
designedArea: designedArea,
|
|
designArea: designArea,
|
|
requestDate: requestDate,
|
|
status: status,
|
|
reasonForRejection: reasonForRejection,
|
|
statusColor: statusColor,
|
|
);
|
|
}
|
|
|
|
/// Create from entity
|
|
factory ProjectSubmissionModel.fromEntity(ProjectSubmission entity) {
|
|
return ProjectSubmissionModel(
|
|
submissionId: entity.submissionId,
|
|
designedArea: entity.designedArea,
|
|
designArea: entity.designArea,
|
|
requestDate: entity.requestDate,
|
|
status: entity.status,
|
|
reasonForRejection: entity.reasonForRejection,
|
|
statusColor: entity.statusColor,
|
|
);
|
|
}
|
|
}
|