marco.pms.mobileapp/lib/model/finance/get_employee_model.dart
2025-11-08 15:46:28 +05:30

103 lines
2.7 KiB
Dart

class Employee {
final String id;
final String name;
final String email;
Employee({
required this.id,
required this.name,
required this.email,
});
/// Computed getters for first and last names
String get firstName {
final parts = name.trim().split(RegExp(r'\s+'));
return parts.isNotEmpty ? parts.first : '';
}
String get lastName {
final parts = name.trim().split(RegExp(r'\s+'));
if (parts.length > 1) {
return parts.sublist(1).join(' ');
}
return '';
}
factory Employee.fromJson(Map<String, dynamic> json) {
// Try many possible id fields
final idVal = (json['id'] ??
json['Id'] ??
json['employeeId'] ??
json['empId'] ??
json['employee_id'])
?.toString();
// Try many possible first/last name fields
final first = (json['firstName'] ??
json['first_name'] ??
json['firstname'] ??
json['fname'] ??
'')
.toString()
.trim();
final last = (json['lastName'] ??
json['last_name'] ??
json['lastname'] ??
json['lname'] ??
'')
.toString()
.trim();
// Name may come as a single field in multiple variants
String nameVal = (json['name'] ??
json['Name'] ??
json['fullName'] ??
json['full_name'] ??
json['employeeName'] ??
json['employee_name'] ??
json['empName'] ??
json['employee'] ??
'')
.toString()
.trim();
// If separate first/last found and name empty, combine them
if (nameVal.isEmpty && (first.isNotEmpty || last.isNotEmpty)) {
nameVal = ('$first ${last}').trim();
}
// If name still empty, fallback to email or id to avoid blank name
if (nameVal.isEmpty && (json['email'] != null)) {
nameVal = json['email'].toString().split('@').first;
}
if (nameVal.isEmpty) {
nameVal = idVal ?? '';
}
final emailVal = (json['email'] ??
json['emailAddress'] ??
json['email_address'] ??
json['employeeEmail'] ??
json['employee_email'] ??
'')
.toString();
return Employee(
id: idVal ?? '',
name: nameVal,
email: emailVal,
);
}
static List<Employee> listFromJson(dynamic data) {
if (data is List) {
return data.map((e) {
if (e is Map<String, dynamic>) return Employee.fromJson(e);
return Employee.fromJson(Map<String, dynamic>.from(e));
}).toList();
}
// In case API returns { data: [...] }, that should already be unwrapped by ApiService
return [];
}
}