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.
		
		
		
		
		
			
		
			
				
	
	
		
			336 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			336 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Dart
		
	
import 'dart:io';
 | 
						|
 | 
						|
import 'package:flutter/foundation.dart';
 | 
						|
import 'package:test_sa/controllers/notification/firebase_notification_manger.dart';
 | 
						|
import 'package:test_sa/models/enums/user_types.dart';
 | 
						|
 | 
						|
class User {
 | 
						|
  int? clientId;
 | 
						|
  String? clientName;
 | 
						|
  List<int>? departmentId;
 | 
						|
  List<String>? departmentName;
 | 
						|
  String? message;
 | 
						|
 | 
						|
  String? username;
 | 
						|
  String? userID;
 | 
						|
  String? email;
 | 
						|
  String? password;
 | 
						|
  String? token;
 | 
						|
  dynamic roles;
 | 
						|
  List<UserRoles>? userRoles;
 | 
						|
  String? tokenlife;
 | 
						|
  bool? isAuthenticated;
 | 
						|
  bool? hasError;
 | 
						|
  String? profilePhotoName;
 | 
						|
  String? id;
 | 
						|
  String? userName;
 | 
						|
  String? normalizedUserName;
 | 
						|
  String? normalizedEmail;
 | 
						|
  bool? emailConfirmed;
 | 
						|
  dynamic passwordHash;
 | 
						|
  String? securityStamp;
 | 
						|
  String? concurrencyStamp;
 | 
						|
  String? phoneNumber;
 | 
						|
  String? extensionNo;
 | 
						|
  bool? phoneNumberConfirmed;
 | 
						|
  bool? twoFactorEnabled;
 | 
						|
  dynamic lockoutEnd;
 | 
						|
  bool? lockoutEnabled;
 | 
						|
  int? accessFailedCount;
 | 
						|
  List<AssetGroup>? assetGroups;
 | 
						|
  bool? employeeIsHMG;
 | 
						|
  bool? enableWifi;
 | 
						|
  bool? enableNFC;
 | 
						|
  bool? enableQR;
 | 
						|
  bool? isEnabledFaceId;
 | 
						|
  bool? onlySwipe;
 | 
						|
 | 
						|
  User({
 | 
						|
    this.clientId,
 | 
						|
    this.clientName,
 | 
						|
    this.departmentId,
 | 
						|
    this.departmentName,
 | 
						|
    this.message,
 | 
						|
    this.username,
 | 
						|
    this.userID,
 | 
						|
    this.email,
 | 
						|
    this.password,
 | 
						|
    this.token,
 | 
						|
    this.roles,
 | 
						|
    this.userRoles,
 | 
						|
    this.tokenlife,
 | 
						|
    this.isAuthenticated,
 | 
						|
    this.hasError,
 | 
						|
    this.profilePhotoName,
 | 
						|
    this.id,
 | 
						|
    this.userName,
 | 
						|
    this.normalizedUserName,
 | 
						|
    this.normalizedEmail,
 | 
						|
    this.emailConfirmed,
 | 
						|
    this.passwordHash,
 | 
						|
    this.securityStamp,
 | 
						|
    this.concurrencyStamp,
 | 
						|
    this.phoneNumber,
 | 
						|
    this.phoneNumberConfirmed,
 | 
						|
    this.twoFactorEnabled,
 | 
						|
    this.lockoutEnd,
 | 
						|
    this.lockoutEnabled,
 | 
						|
    this.accessFailedCount,
 | 
						|
    this.employeeIsHMG,
 | 
						|
    this.enableNFC,
 | 
						|
    this.enableQR,
 | 
						|
    this.enableWifi,
 | 
						|
    this.isEnabledFaceId,
 | 
						|
    this.onlySwipe,
 | 
						|
  });
 | 
						|
 | 
						|
  bool get isLiveToken => tokenlife != null && (DateTime.tryParse(tokenlife!)?.isAfter(DateTime.now()) ?? false);
 | 
						|
 | 
						|
  Future<Map<String, dynamic>> toLoginJson() async {
 | 
						|
    String notificationType = (Platform.isAndroid && !(await FirebaseNotificationManger.isGoogleServicesAvailable())) ? "HMC" : "FCM";
 | 
						|
    if(FirebaseNotificationManger.token==null){
 | 
						|
      //calling this agin to check for token as sometimes token is null fresh install..
 | 
						|
      await FirebaseNotificationManger.getToken();
 | 
						|
    }
 | 
						|
    return {"username": userName, "password": password, "fireBaseToken": FirebaseNotificationManger?.token ?? "", "notificationType": notificationType};
 | 
						|
  }
 | 
						|
  UsersTypes? get type {
 | 
						|
    switch (userRoles?.first.value) {
 | 
						|
      case "R-6":
 | 
						|
        return UsersTypes.engineer;
 | 
						|
      case "R-7": // Nurse Role
 | 
						|
        return UsersTypes.normal_user;
 | 
						|
      case "R-33": // Head Nurse Role
 | 
						|
        return UsersTypes.normal_user;
 | 
						|
      default:
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  Map<String, dynamic> toUpdateProfileJson() {
 | 
						|
    Map<String, dynamic> jsonObject = {};
 | 
						|
    // if (departmentId != null) jsonObject["department"] = departmentId;
 | 
						|
    // if (whatsApp != null && whatsApp.isNotEmpty) jsonObject["whatsapp"] = whatsApp;
 | 
						|
    // if (phoneNumber != null && phoneNumber.isNotEmpty) jsonObject["phone"] = phoneNumber;
 | 
						|
    return jsonObject;
 | 
						|
  }
 | 
						|
 | 
						|
  Future<Map<String, dynamic>> toRegisterJson() async {
 | 
						|
    // if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken();
 | 
						|
    return {
 | 
						|
      // "username": userName,
 | 
						|
      // "email": email,
 | 
						|
      // "whatsapp": whatsApp,
 | 
						|
      // "client": hospital.id,
 | 
						|
      // "department": department?.id,
 | 
						|
      // "phone": phoneNumber,
 | 
						|
      // "pass": password,
 | 
						|
      // "firebase_token": FirebaseNotificationManger?.token ?? "",
 | 
						|
    };
 | 
						|
  }
 | 
						|
 | 
						|
  Map<String, dynamic> toJson() {
 | 
						|
    final map = <String, dynamic>{};
 | 
						|
    map['client_id'] = clientId;
 | 
						|
    map['client_name'] = clientName;
 | 
						|
    map['department_id'] = departmentId;
 | 
						|
    map['department_name'] = departmentName;
 | 
						|
    map['message'] = message;
 | 
						|
    map['username'] = username;
 | 
						|
    map['userID'] = userID;
 | 
						|
    map['email'] = email;
 | 
						|
    map['password'] = password;
 | 
						|
    map['token'] = token;
 | 
						|
    map['roles'] = roles;
 | 
						|
    if (userRoles != null) {
 | 
						|
      map['userRoles'] = userRoles!.map((v) => v.toJson()).toList();
 | 
						|
    }
 | 
						|
    if (assetGroups != null) {
 | 
						|
      map['assetGroups'] = assetGroups!.map((v) => v.toJson()).toList();
 | 
						|
    }
 | 
						|
    map['tokenlife'] = tokenlife;
 | 
						|
    map['isAuthenticated'] = isAuthenticated;
 | 
						|
    map['hasError'] = hasError;
 | 
						|
    map['profilePhotoName'] = profilePhotoName;
 | 
						|
    map['id'] = id;
 | 
						|
    map['userName'] = userName;
 | 
						|
    map['normalizedUserName'] = normalizedUserName;
 | 
						|
    map['normalizedEmail'] = normalizedEmail;
 | 
						|
    map['emailConfirmed'] = emailConfirmed;
 | 
						|
    map['passwordHash'] = passwordHash;
 | 
						|
    map['securityStamp'] = securityStamp;
 | 
						|
    map['concurrencyStamp'] = concurrencyStamp;
 | 
						|
    map['phoneNumber'] = phoneNumber;
 | 
						|
    map['extensionNo'] = extensionNo;
 | 
						|
    map['phoneNumberConfirmed'] = phoneNumberConfirmed;
 | 
						|
    map['twoFactorEnabled'] = twoFactorEnabled;
 | 
						|
    map['lockoutEnd'] = lockoutEnd;
 | 
						|
    map['lockoutEnabled'] = lockoutEnabled;
 | 
						|
    map['accessFailedCount'] = accessFailedCount;
 | 
						|
    map['employeeIsHMG'] = employeeIsHMG;
 | 
						|
    map['enableWifi'] = enableWifi;
 | 
						|
    map['enableNFC'] = enableNFC;
 | 
						|
    map['enableQR'] = enableQR;
 | 
						|
    map['onlySwipe'] = onlySwipe;
 | 
						|
    map['isEnabledFaceId'] = isEnabledFaceId;
 | 
						|
    return map;
 | 
						|
  }
 | 
						|
 | 
						|
  static Future<User> fromJson(Map<String, dynamic> json) {
 | 
						|
    return compute(User.fromJsonCons, json);
 | 
						|
  }
 | 
						|
 | 
						|
  User.fromJsonCons(dynamic json) {
 | 
						|
    clientId = json['client_id'];
 | 
						|
    clientName = json['client_name'];
 | 
						|
    if (json['department_id'] != null) {
 | 
						|
      departmentId = [];
 | 
						|
      json['department_id'].forEach((v) {
 | 
						|
        departmentId!.add(v);
 | 
						|
      });
 | 
						|
    }
 | 
						|
    if (json['department_name'] != null) {
 | 
						|
      departmentName = [];
 | 
						|
      json['department_name'].forEach((v) {
 | 
						|
        departmentName!.add(v);
 | 
						|
      });
 | 
						|
    }
 | 
						|
    message = json['message'];
 | 
						|
    username = json['username'];
 | 
						|
    userID = json['userID'];
 | 
						|
    email = json['email'];
 | 
						|
    password = json['password'];
 | 
						|
    token = json['token'];
 | 
						|
    roles = json['roles'];
 | 
						|
    if (json['userRoles'] != null) {
 | 
						|
      userRoles = [];
 | 
						|
      json['userRoles'].forEach((v) {
 | 
						|
        userRoles!.add(UserRoles.fromJson(v));
 | 
						|
      });
 | 
						|
    }
 | 
						|
 | 
						|
    if (json['assetGroups'] != null) {
 | 
						|
      assetGroups = <AssetGroup>[];
 | 
						|
      json['assetGroups'].forEach((v) {
 | 
						|
        assetGroups!.add(AssetGroup.fromJson(v));
 | 
						|
      });
 | 
						|
    }
 | 
						|
    tokenlife = json['tokenlife'];
 | 
						|
    isAuthenticated = json['isAuthenticated'];
 | 
						|
    hasError = json['hasError'];
 | 
						|
    profilePhotoName = json['profilePhotoName'];
 | 
						|
    id = json['id'];
 | 
						|
    userName = json['userName'];
 | 
						|
    normalizedUserName = json['normalizedUserName'];
 | 
						|
    normalizedEmail = json['normalizedEmail'];
 | 
						|
    emailConfirmed = json['emailConfirmed'];
 | 
						|
    passwordHash = json['passwordHash'];
 | 
						|
    securityStamp = json['securityStamp'];
 | 
						|
    concurrencyStamp = json['concurrencyStamp'];
 | 
						|
    phoneNumber = json['phoneNumber'];
 | 
						|
    extensionNo = json['extensionNo'];
 | 
						|
    phoneNumberConfirmed = json['phoneNumberConfirmed'];
 | 
						|
    twoFactorEnabled = json['twoFactorEnabled'];
 | 
						|
    lockoutEnd = json['lockoutEnd'];
 | 
						|
    lockoutEnabled = json['lockoutEnabled'];
 | 
						|
    accessFailedCount = json['accessFailedCount'];
 | 
						|
    employeeIsHMG = json['employeeIsHMG'];
 | 
						|
    enableWifi = json['enableWifi'];
 | 
						|
    enableNFC = json['enableNFC'];
 | 
						|
    enableQR = json['enableQR'];
 | 
						|
    onlySwipe = json['onlySwipe'];
 | 
						|
    isEnabledFaceId = json['isEnabledFaceId'];
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class UserRoles {
 | 
						|
  String? id;
 | 
						|
  String? name;
 | 
						|
  String? value;
 | 
						|
 | 
						|
  UserRoles({
 | 
						|
    this.id,
 | 
						|
    this.name,
 | 
						|
    this.value,
 | 
						|
  });
 | 
						|
 | 
						|
  UserRoles.fromJson(dynamic json) {
 | 
						|
    id = json['id'];
 | 
						|
    name = json['name'];
 | 
						|
    value = json['value'];
 | 
						|
  }
 | 
						|
 | 
						|
  UserRoles copyWith({
 | 
						|
    String? id,
 | 
						|
    String? name,
 | 
						|
    String? value,
 | 
						|
  }) =>
 | 
						|
      UserRoles(
 | 
						|
        id: id ?? this.id,
 | 
						|
        name: name ?? this.name,
 | 
						|
        value: value ?? this.value,
 | 
						|
      );
 | 
						|
 | 
						|
  Map<String, dynamic> toJson() {
 | 
						|
    final map = <String, dynamic>{};
 | 
						|
    map['id'] = id;
 | 
						|
    map['name'] = name;
 | 
						|
    map['value'] = value;
 | 
						|
    return map;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class AssetGroup {
 | 
						|
  int? id;
 | 
						|
  String? name;
 | 
						|
  String? code;
 | 
						|
  bool? enabledEngineerTimer;
 | 
						|
 | 
						|
  AssetGroup({this.id, this.name, this.code, this.enabledEngineerTimer});
 | 
						|
 | 
						|
  AssetGroup.fromJson(Map<String, dynamic>? json) {
 | 
						|
    // Allow json to be null
 | 
						|
    if (json != null) {
 | 
						|
      // Add null check
 | 
						|
      id = json['id'];
 | 
						|
      name = json['name'];
 | 
						|
      code = json['code'];
 | 
						|
      enabledEngineerTimer = json['enabledEngineerTimer'] ?? false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  Map<String, dynamic> toJson() {
 | 
						|
    final Map<String, dynamic> data = <String, dynamic>{}; // Use <String, dynamic> for type safety
 | 
						|
    data['id'] = id;
 | 
						|
    data['name'] = name;
 | 
						|
    data['code'] = code;
 | 
						|
    data['enabledEngineerTimer'] = enabledEngineerTimer;
 | 
						|
    return data;
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  bool operator ==(Object other) =>
 | 
						|
      identical(this, other) ||
 | 
						|
          other is AssetGroup && runtimeType == other.runtimeType && id == other.id;
 | 
						|
 | 
						|
  @override
 | 
						|
  int get hashCode => id.hashCode;
 | 
						|
}
 | 
						|
 | 
						|
class UserContactInfoModel {
 | 
						|
  dynamic userId;
 | 
						|
  String? email;
 | 
						|
  String? phoneNo;
 | 
						|
  String? extensionNo;
 | 
						|
 | 
						|
  UserContactInfoModel({this.email, this.phoneNo, this.extensionNo, this.userId});
 | 
						|
 | 
						|
  Map<String, dynamic> toJson() {
 | 
						|
    return {
 | 
						|
      'email': email,
 | 
						|
      'mobileNumber': phoneNo,
 | 
						|
      'extensionNo': extensionNo,
 | 
						|
    };
 | 
						|
  }
 | 
						|
}
 |