You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.4 KiB
Dart
118 lines
3.4 KiB
Dart
/// Model representing an application demo request
|
|
class ApplicationDemoRequestModel {
|
|
final String? id;
|
|
final String fullName;
|
|
final String emailAddress;
|
|
final String mobileNumber;
|
|
final String? companyName;
|
|
final int? companyId;
|
|
final List<String> roleIds;
|
|
final List<String> roleNames;
|
|
final String status; // Pending, Approved, Rejected
|
|
final DateTime requestDate;
|
|
|
|
ApplicationDemoRequestModel({
|
|
this.id,
|
|
required this.fullName,
|
|
required this.emailAddress,
|
|
required this.mobileNumber,
|
|
this.companyName,
|
|
this.companyId,
|
|
required this.roleIds,
|
|
required this.roleNames,
|
|
required this.status,
|
|
required this.requestDate,
|
|
});
|
|
|
|
/// Converts model to JSON for API submission
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id ?? 0,
|
|
'fullName': fullName,
|
|
'emailAddress': emailAddress,
|
|
'mobileNumber': mobileNumber,
|
|
// 'companyName': companyId ?? 88,
|
|
'companyId': 88,
|
|
'demoRequestUserRoleIds': roleIds,
|
|
};
|
|
}
|
|
|
|
/// Creates model from API response JSON
|
|
factory ApplicationDemoRequestModel.fromJson(Map<String, dynamic> json) {
|
|
return ApplicationDemoRequestModel(
|
|
id: json['id']?.toString() ?? json['requestNumber']?.toString() ?? '',
|
|
fullName: json['fullName'] ?? '',
|
|
emailAddress: json['emailAddress'] ?? json['email'] ?? '',
|
|
mobileNumber: json['mobileNumber'] ?? json['mobile'] ?? '',
|
|
companyName: json['companyName'] ?? json['company'] ?? '',
|
|
companyId: json['companyId'],
|
|
roleIds: _parseList(json['roleIds'] ?? json['demoRequestUserRoleIds']),
|
|
roleNames: _parseList(json['roleNames'] ?? json['roles']),
|
|
status: json['status'] ?? 'Pending',
|
|
requestDate: _parseDate(json),
|
|
);
|
|
}
|
|
|
|
/// Helper method to parse list from various formats
|
|
static List<String> _parseList(dynamic value) {
|
|
if (value == null) return [];
|
|
|
|
if (value is List) {
|
|
return value.map((e) => e.toString()).toList();
|
|
}
|
|
|
|
if (value is String) {
|
|
if (value.isEmpty) return [];
|
|
return value.split(',').map((e) => e.trim()).where((e) => e.isNotEmpty).toList();
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
/// Helper method to parse date from various formats
|
|
static DateTime _parseDate(Map<String, dynamic> json) {
|
|
final dateValue = json['requestDate'] ?? json['createdDate'] ?? json['date'];
|
|
|
|
if (dateValue == null) return DateTime.now();
|
|
|
|
if (dateValue is String) {
|
|
try {
|
|
return DateTime.parse(dateValue);
|
|
} catch (e) {
|
|
return DateTime.now();
|
|
}
|
|
}
|
|
|
|
if (dateValue is DateTime) return dateValue;
|
|
|
|
return DateTime.now();
|
|
}
|
|
|
|
/// Creates a copy with optional field updates
|
|
ApplicationDemoRequestModel copyWith({
|
|
String? id,
|
|
String? fullName,
|
|
String? emailAddress,
|
|
String? mobileNumber,
|
|
String? companyName,
|
|
int? companyId,
|
|
List<String>? roleIds,
|
|
List<String>? roleNames,
|
|
String? status,
|
|
DateTime? requestDate,
|
|
}) {
|
|
return ApplicationDemoRequestModel(
|
|
id: id ?? this.id,
|
|
fullName: fullName ?? this.fullName,
|
|
emailAddress: emailAddress ?? this.emailAddress,
|
|
mobileNumber: mobileNumber ?? this.mobileNumber,
|
|
companyName: companyName ?? this.companyName,
|
|
companyId: companyId ?? this.companyId,
|
|
roleIds: roleIds ?? this.roleIds,
|
|
roleNames: roleNames ?? this.roleNames,
|
|
status: status ?? this.status,
|
|
requestDate: requestDate ?? this.requestDate,
|
|
);
|
|
}
|
|
}
|