332 lines
8.9 KiB
Dart
332 lines
8.9 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:firebase_auth/firebase_auth.dart';
|
|
|
|
import 'role.dart';
|
|
|
|
class User {
|
|
String docID;
|
|
final String corpId;
|
|
final String name;
|
|
String phoneNumber;
|
|
String fcsID;
|
|
String shippingAddress;
|
|
String deliveryAddress;
|
|
String get phone => phoneNumber != null && phoneNumber.startsWith("959")
|
|
? "0${phoneNumber.substring(2)}"
|
|
: phoneNumber;
|
|
|
|
List<String> claimPrivileges = [];
|
|
|
|
final String dateofBirth;
|
|
final String gender;
|
|
final String status;
|
|
final bool disable;
|
|
bool registeredBuyer;
|
|
List<String> privilegeIds;
|
|
String roleName;
|
|
String roleID;
|
|
bool agreeTerms;
|
|
String bizID;
|
|
String accountID;
|
|
String email;
|
|
bool isBlock;
|
|
int userLevel;
|
|
String userLevelID;
|
|
|
|
String frontUrl;
|
|
String backUrl;
|
|
String selfieUrl;
|
|
|
|
DateTime lastActiveTime;
|
|
String device;
|
|
|
|
String primaryDeviceID;
|
|
String primaryDeviceName;
|
|
|
|
String pin;
|
|
|
|
String get getcorpId => this.corpId;
|
|
String get getname => this.name;
|
|
String get getphonenumber => this.phoneNumber;
|
|
String get getdateofBirth => this.dateofBirth;
|
|
bool get getdisable => this.disable;
|
|
|
|
String getLogDesc(List<Privilege> privileges) {
|
|
String result = "";
|
|
if (privilegeIds.isNotEmpty) {
|
|
privilegeIds.forEach((pID) {
|
|
privileges.forEach((p) {
|
|
if (p.id == pID) {
|
|
if (result != "") result += ",";
|
|
result += p.name;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
Future<void> setFirebaseUser(FirebaseUser firebaseUser) async {
|
|
// IdTokenResult idToken = await firebaseUser.getIdToken(refresh: true);
|
|
// String privileges = idToken.claims["privileges"];
|
|
// if (privileges == null || privileges == "") return;
|
|
// this.claimPrivileges = privileges.split(":").toList();
|
|
|
|
// this.accountID = idToken.claims["account_id"];
|
|
// this.bizID = idToken.claims["biz_id"];
|
|
}
|
|
|
|
User(
|
|
{this.docID,
|
|
this.name,
|
|
this.gender,
|
|
this.phoneNumber,
|
|
this.fcsID,
|
|
this.shippingAddress,
|
|
this.deliveryAddress,
|
|
this.dateofBirth,
|
|
this.corpId,
|
|
this.roleName,
|
|
this.roleID,
|
|
this.privilegeIds,
|
|
this.email,
|
|
this.disable,
|
|
this.status,
|
|
this.frontUrl,
|
|
this.backUrl,
|
|
this.selfieUrl,
|
|
this.registeredBuyer,
|
|
this.agreeTerms,
|
|
this.lastActiveTime,
|
|
this.device,
|
|
this.primaryDeviceID,
|
|
this.primaryDeviceName,
|
|
this.isBlock,
|
|
this.userLevel,
|
|
this.userLevelID,
|
|
this.pin});
|
|
|
|
factory User.fromJson(Map<String, dynamic> json) {
|
|
return User(
|
|
docID: json['id'],
|
|
name: json['user_name'],
|
|
phoneNumber: json['phone_number'],
|
|
dateofBirth: json['dob'],
|
|
gender: json['gender'],
|
|
frontUrl: json['front_url'],
|
|
backUrl: json['back_url'],
|
|
selfieUrl: json['selfie_url'],
|
|
status: json['status'],
|
|
agreeTerms: json['agree_terms'],
|
|
disable: json['disable'],
|
|
registeredBuyer: json['registered_buyer'],
|
|
privilegeIds: json['privileges'],
|
|
email: json['email'],
|
|
isBlock: json['black_list'],
|
|
userLevel: json['user_level'],
|
|
userLevelID: json['user_level_id'],
|
|
pin: json['pin']);
|
|
}
|
|
|
|
factory User.fromUserJson(Map<String, dynamic> json) {
|
|
DateTime parsedDate = DateTime.parse(json['last_active_time']);
|
|
|
|
return User(
|
|
docID: json['id'],
|
|
name: json['user_name'],
|
|
phoneNumber: json['phone_number'],
|
|
dateofBirth: json['dob'],
|
|
corpId: json['corp_id'],
|
|
roleName: json['role_name'],
|
|
roleID: json['role_id'],
|
|
disable: json['disable'],
|
|
gender: json['gender'],
|
|
status: json['status'],
|
|
// agreeTerms: json['agree_terms'],
|
|
// registeredBuyer: json['registered_buyer'],
|
|
// privilegeIds: json['privileges']==null?[]:json['privileges'].cast<String>(),
|
|
// isBlock: map['black_list'],
|
|
lastActiveTime: parsedDate == null ? null : parsedDate,
|
|
device: json['last_active_device'],
|
|
email: json['email'],
|
|
primaryDeviceID: json['primary_device_id'],
|
|
primaryDeviceName: json['primary_device_name'],
|
|
userLevel: json['user_level'],
|
|
userLevelID: json['user_level_id'],
|
|
pin: json['pin']);
|
|
}
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
'id': docID,
|
|
'user_name': name,
|
|
'gender': gender,
|
|
'phone_number': phoneNumber,
|
|
'dob': dateofBirth,
|
|
'corpId': corpId,
|
|
'roleName': roleName,
|
|
'roleId': roleID,
|
|
'disable': disable,
|
|
'status': status,
|
|
'registered_buyer': registeredBuyer,
|
|
'agree_terms': agreeTerms,
|
|
'front_url': frontUrl,
|
|
'back_url': backUrl,
|
|
'selfie_url': selfieUrl,
|
|
'email': email,
|
|
'black_list': isBlock,
|
|
'user_level': userLevel,
|
|
'user_level_id': userLevelID,
|
|
'pin': pin,
|
|
'privileges': privilegeIds,
|
|
};
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'user_name': name,
|
|
'phone_number': phoneNumber,
|
|
'dob': dateofBirth,
|
|
'corp_id': corpId,
|
|
'role_name': roleName,
|
|
'role_id': roleID,
|
|
'disable': disable,
|
|
'gender': gender,
|
|
'status': status,
|
|
'email': email,
|
|
'black_list': isBlock,
|
|
'user_level': userLevel,
|
|
'user_level_id': userLevelID,
|
|
'pin': pin
|
|
};
|
|
}
|
|
|
|
factory User.fromMap(Map<String, dynamic> map, String docID) {
|
|
var activeTime = (map['last_active_time'] as Timestamp);
|
|
return User(
|
|
docID: docID,
|
|
name: map['user_name'],
|
|
phoneNumber: map['phone_number'],
|
|
privilegeIds:
|
|
map['privileges'] == null ? [] : map['privileges'].cast<String>(),
|
|
dateofBirth: map['dob'],
|
|
corpId: map['corp_id'],
|
|
roleName: map['role_name'],
|
|
roleID: map['role_id'],
|
|
disable: map['disable'],
|
|
gender: map['gender'],
|
|
status: map['status'],
|
|
registeredBuyer: map['registered_buyer'],
|
|
agreeTerms: map['agree_terms'] == null ? false : map['agree_terms'],
|
|
lastActiveTime: activeTime == null ? null : activeTime.toDate(),
|
|
device: map['last_active_device'],
|
|
email: map['email'],
|
|
primaryDeviceID: map['primary_device_id'],
|
|
primaryDeviceName: map['primary_device_name'],
|
|
isBlock: map['black_list'],
|
|
userLevel: map['user_level'],
|
|
userLevelID: map['user_level_id'],
|
|
pin: map['pin']);
|
|
}
|
|
|
|
bool isBlockUser() {
|
|
return this.isBlock == true;
|
|
}
|
|
|
|
bool isPrimaryDevice() {
|
|
return this.primaryDeviceID != null && this.primaryDeviceID != '';
|
|
}
|
|
|
|
bool isRegisteredBuyer() {
|
|
return this.registeredBuyer != null && this.registeredBuyer;
|
|
}
|
|
|
|
bool isSysAdmin() {
|
|
return claimPrivileges != null
|
|
? claimPrivileges.contains('sys_admin')
|
|
: false;
|
|
}
|
|
|
|
bool isSysSupport() {
|
|
return claimPrivileges != null
|
|
? claimPrivileges.contains('sys_support')
|
|
: false;
|
|
}
|
|
|
|
bool isBizAdmin() {
|
|
return claimPrivileges != null ? claimPrivileges.contains('ba') : false;
|
|
}
|
|
|
|
bool isBuyer() {
|
|
return claimPrivileges == null || claimPrivileges.length == 0;
|
|
}
|
|
|
|
bool isEmail() {
|
|
return email != null;
|
|
}
|
|
|
|
bool hasAccount() {
|
|
return isOwner() ||
|
|
(claimPrivileges != null ? claimPrivileges.contains('a') : false);
|
|
}
|
|
|
|
bool hasDelivery() {
|
|
return isOwner() ||
|
|
(claimPrivileges != null ? claimPrivileges.contains('d') : false);
|
|
}
|
|
|
|
bool hasBuyer() {
|
|
return isOwner() ||
|
|
(claimPrivileges != null ? claimPrivileges.contains('b') : false);
|
|
}
|
|
|
|
bool isOwner() {
|
|
return claimPrivileges != null ? claimPrivileges.contains('o') : false;
|
|
}
|
|
|
|
bool isOwnerAndAbove() {
|
|
return isOwner() || isBizAdmin() || isSysAdmin();
|
|
}
|
|
|
|
bool hasAdmin() {
|
|
return isOwner() ||
|
|
(claimPrivileges != null ? claimPrivileges.contains('admin') : false);
|
|
}
|
|
|
|
bool hasDO() {
|
|
return isOwner() ||
|
|
(claimPrivileges != null ? claimPrivileges.contains('do') : false);
|
|
}
|
|
|
|
bool hasPO() {
|
|
return isOwner() ||
|
|
(claimPrivileges != null ? claimPrivileges.contains('po') : false);
|
|
}
|
|
|
|
bool hasInventory() {
|
|
return isOwner() ||
|
|
(claimPrivileges != null ? claimPrivileges.contains('inv') : false);
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
return 'User{name: $name, phoneNumber: $phoneNumber,dateofBirth:$dateofBirth,corpId:$corpId,disable:$disable,gender:$gender,roleName:$roleName,roleID:$roleID,privilegeIds:$privilegeIds,status:$status,frontUrl:$frontUrl,backUrl:$backUrl,selfieUrl:$selfieUrl}';
|
|
}
|
|
}
|
|
|
|
class JsonUser {
|
|
String status;
|
|
String message;
|
|
User data;
|
|
String sessionId;
|
|
|
|
JsonUser({this.status, this.message, this.sessionId, this.data});
|
|
|
|
JsonUser.fromJson(Map<String, dynamic> json) {
|
|
status = json['status'];
|
|
message = json['message'];
|
|
sessionId = json['session_id'];
|
|
if (json['status'] == 'Ok') {
|
|
data = User.fromJson(json['data']);
|
|
}
|
|
}
|
|
}
|