add start/business unit

This commit is contained in:
Phuoc Nguyen
2025-11-07 13:56:51 +07:00
parent 3803bd26e0
commit ce7396f729
9 changed files with 687 additions and 12 deletions

View File

@@ -0,0 +1,93 @@
/// Domain Entity: Business Unit
///
/// Represents a business unit that a user can access.
library;
/// Business Unit Entity
///
/// Represents a business division or unit that a user has access to.
class BusinessUnit {
/// Unique business unit identifier
final String id;
/// Business unit code (e.g., "VIKD", "HSKD", "LPKD")
final String code;
/// Display name
final String name;
/// Description
final String? description;
/// Whether this is the default unit
final bool isDefault;
const BusinessUnit({
required this.id,
required this.code,
required this.name,
this.description,
this.isDefault = false,
});
/// Create from JSON map
factory BusinessUnit.fromJson(Map<String, dynamic> json) {
return BusinessUnit(
id: json['id'] as String,
code: json['code'] as String,
name: json['name'] as String,
description: json['description'] as String?,
isDefault: json['is_default'] as bool? ?? false,
);
}
/// Convert to JSON map
Map<String, dynamic> toJson() {
return {
'id': id,
'code': code,
'name': name,
'description': description,
'is_default': isDefault,
};
}
/// Copy with method for immutability
BusinessUnit copyWith({
String? id,
String? code,
String? name,
String? description,
bool? isDefault,
}) {
return BusinessUnit(
id: id ?? this.id,
code: code ?? this.code,
name: name ?? this.name,
description: description ?? this.description,
isDefault: isDefault ?? this.isDefault,
);
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is BusinessUnit &&
other.id == id &&
other.code == code &&
other.name == name &&
other.description == description &&
other.isDefault == isDefault;
}
@override
int get hashCode {
return Object.hash(id, code, name, description, isDefault);
}
@override
String toString() {
return 'BusinessUnit(id: $id, code: $code, name: $name, isDefault: $isDefault)';
}
}