Vaibhav_Enhancement-#1129 #73

Merged
vaibhav.surve merged 33 commits from Vaibhav_Enhancement-#1129 into main 2025-09-30 09:09:36 +00:00
2 changed files with 104 additions and 70 deletions
Showing only changes of commit 38ae9e3571 - Show all commits

View File

@ -1,51 +1,65 @@
class GlobalProjectModel { class GlobalProjectModel {
final String id; final String id;
final String name; final String name;
final String projectAddress; final String projectAddress;
final String contactPerson; final String contactPerson;
final DateTime startDate; final DateTime? startDate;
final DateTime endDate; final DateTime? endDate;
final int teamSize; final int teamSize;
final String projectStatusId; final String projectStatusId;
final String? tenantId; final String? tenantId;
GlobalProjectModel({ GlobalProjectModel({
required this.id, required this.id,
required this.name, required this.name,
required this.projectAddress, required this.projectAddress,
required this.contactPerson, required this.contactPerson,
required this.startDate, this.startDate,
required this.endDate, this.endDate,
required this.teamSize, required this.teamSize,
required this.projectStatusId, required this.projectStatusId,
this.tenantId, this.tenantId,
}); });
factory GlobalProjectModel.fromJson(Map<String, dynamic> json) { factory GlobalProjectModel.fromJson(Map<String, dynamic> json) {
return GlobalProjectModel( return GlobalProjectModel(
id: json['id'] ?? '', id: json['id'] ?? '',
name: json['name'] ?? '', name: json['name'] ?? '',
projectAddress: json['projectAddress'] ?? '', projectAddress: json['projectAddress'] ?? '',
contactPerson: json['contactPerson'] ?? '', contactPerson: json['contactPerson'] ?? '',
startDate: DateTime.parse(json['startDate']), startDate: _parseDate(json['startDate']),
endDate: DateTime.parse(json['endDate']), endDate: _parseDate(json['endDate']),
teamSize: json['teamSize'] ?? 0, // SAFER teamSize: json['teamSize'] is int
projectStatusId: json['projectStatusId'] ?? '', ? json['teamSize']
tenantId: json['tenantId'], : int.tryParse(json['teamSize']?.toString() ?? '0') ?? 0,
); projectStatusId: json['projectStatusId'] ?? '',
tenantId: json['tenantId'],
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'projectAddress': projectAddress,
'contactPerson': contactPerson,
'startDate': startDate?.toIso8601String(),
'endDate': endDate?.toIso8601String(),
'teamSize': teamSize,
'projectStatusId': projectStatusId,
'tenantId': tenantId,
};
}
static DateTime? _parseDate(dynamic value) {
if (value == null || value.toString().trim().isEmpty) {
return null;
}
try {
return DateTime.parse(value.toString());
} catch (e) {
print('⚠️ Failed to parse date "$value": $e');
return null;
}
}
} }
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'projectAddress': projectAddress,
'contactPerson': contactPerson,
'startDate': startDate.toIso8601String(),
'endDate': endDate.toIso8601String(),
'teamSize': teamSize,
'projectStatusId': projectStatusId,
'tenantId': tenantId,
};
}
}

View File

@ -3,8 +3,8 @@ class ProjectModel {
final String name; final String name;
final String projectAddress; final String projectAddress;
final String contactPerson; final String contactPerson;
final DateTime startDate; final DateTime? startDate;
final DateTime endDate; final DateTime? endDate;
final int teamSize; final int teamSize;
final double completedWork; final double completedWork;
final double plannedWork; final double plannedWork;
@ -16,8 +16,8 @@ class ProjectModel {
required this.name, required this.name,
required this.projectAddress, required this.projectAddress,
required this.contactPerson, required this.contactPerson,
required this.startDate, this.startDate,
required this.endDate, this.endDate,
required this.teamSize, required this.teamSize,
required this.completedWork, required this.completedWork,
required this.plannedWork, required this.plannedWork,
@ -25,36 +25,30 @@ class ProjectModel {
this.tenantId, this.tenantId,
}); });
// Factory method to create an instance of ProjectModel from a JSON object
factory ProjectModel.fromJson(Map<String, dynamic> json) { factory ProjectModel.fromJson(Map<String, dynamic> json) {
return ProjectModel( return ProjectModel(
id: json['id'], id: json['id']?.toString() ?? '',
name: json['name'], name: json['name']?.toString() ?? '',
projectAddress: json['projectAddress'], projectAddress: json['projectAddress']?.toString() ?? '',
contactPerson: json['contactPerson'], contactPerson: json['contactPerson']?.toString() ?? '',
startDate: DateTime.parse(json['startDate']), startDate: _parseDate(json['startDate']),
endDate: DateTime.parse(json['endDate']), endDate: _parseDate(json['endDate']),
teamSize: json['teamSize'], teamSize: _parseInt(json['teamSize']),
completedWork: json['completedWork'] != null completedWork: _parseDouble(json['completedWork']),
? (json['completedWork'] as num).toDouble() plannedWork: _parseDouble(json['plannedWork']),
: 0.0, projectStatusId: json['projectStatusId']?.toString() ?? '',
plannedWork: json['plannedWork'] != null tenantId: json['tenantId']?.toString(),
? (json['plannedWork'] as num).toDouble()
: 0.0,
projectStatusId: json['projectStatusId'],
tenantId: json['tenantId'],
); );
} }
// Method to convert the ProjectModel instance back to a JSON object
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { return {
'id': id, 'id': id,
'name': name, 'name': name,
'projectAddress': projectAddress, 'projectAddress': projectAddress,
'contactPerson': contactPerson, 'contactPerson': contactPerson,
'startDate': startDate.toIso8601String(), 'startDate': startDate?.toIso8601String(),
'endDate': endDate.toIso8601String(), 'endDate': endDate?.toIso8601String(),
'teamSize': teamSize, 'teamSize': teamSize,
'completedWork': completedWork, 'completedWork': completedWork,
'plannedWork': plannedWork, 'plannedWork': plannedWork,
@ -62,4 +56,30 @@ class ProjectModel {
'tenantId': tenantId, 'tenantId': tenantId,
}; };
} }
// ---------- Helpers ----------
static DateTime? _parseDate(dynamic value) {
if (value == null || value.toString().trim().isEmpty) {
return null;
}
try {
return DateTime.parse(value.toString());
} catch (e) {
print('⚠️ Failed to parse date: $value');
return null;
}
}
static int _parseInt(dynamic value) {
if (value == null) return 0;
if (value is int) return value;
return int.tryParse(value.toString()) ?? 0;
}
static double _parseDouble(dynamic value) {
if (value == null) return 0.0;
if (value is num) return value.toDouble();
return double.tryParse(value.toString()) ?? 0.0;
}
} }