Files
worker/lib/core/database/models/enums.dart
2025-10-24 11:31:48 +07:00

865 lines
16 KiB
Dart

import 'package:hive_ce/hive.dart';
import 'package:worker/core/constants/storage_constants.dart';
part 'enums.g.dart';
// ============================================================================
// USER ENUMS
// ============================================================================
/// User Role
///
/// Represents the role of a user in the system.
@HiveType(typeId: HiveTypeIds.userRole)
enum UserRole {
@HiveField(0)
customer,
@HiveField(1)
distributor,
@HiveField(2)
admin,
@HiveField(3)
staff,
}
/// User Status
///
/// Represents the account status of a user.
@HiveType(typeId: HiveTypeIds.userStatus)
enum UserStatus {
@HiveField(0)
active,
@HiveField(1)
inactive,
@HiveField(2)
suspended,
@HiveField(3)
pending,
}
/// Loyalty Tier Levels
///
/// Represents the loyalty program membership tiers.
/// Higher tiers receive more benefits and rewards.
@HiveType(typeId: HiveTypeIds.loyaltyTier)
enum LoyaltyTier {
@HiveField(0)
bronze,
@HiveField(1)
silver,
@HiveField(2)
gold,
@HiveField(3)
platinum,
@HiveField(4)
diamond,
@HiveField(5)
titan,
}
// ============================================================================
// ORDER ENUMS
// ============================================================================
/// Order Status
///
/// Represents the current state of an order.
@HiveType(typeId: HiveTypeIds.orderStatus)
enum OrderStatus {
@HiveField(0)
draft,
@HiveField(1)
pending,
@HiveField(2)
confirmed,
@HiveField(3)
processing,
@HiveField(4)
shipped,
@HiveField(5)
delivered,
@HiveField(6)
completed,
@HiveField(7)
cancelled,
@HiveField(8)
refunded,
}
// ============================================================================
// INVOICE & PAYMENT ENUMS
// ============================================================================
/// Invoice Type
///
/// Represents the type of invoice.
@HiveType(typeId: HiveTypeIds.invoiceType)
enum InvoiceType {
@HiveField(0)
sales,
@HiveField(1)
proforma,
@HiveField(2)
creditNote,
@HiveField(3)
debitNote,
}
/// Invoice Status
///
/// Represents the payment status of an invoice.
@HiveType(typeId: HiveTypeIds.invoiceStatus)
enum InvoiceStatus {
@HiveField(0)
draft,
@HiveField(1)
issued,
@HiveField(2)
partiallyPaid,
@HiveField(3)
paid,
@HiveField(4)
overdue,
@HiveField(5)
cancelled,
@HiveField(6)
refunded,
}
/// Payment Method
///
/// Represents available payment methods.
@HiveType(typeId: HiveTypeIds.paymentMethod)
enum PaymentMethod {
@HiveField(0)
cash,
@HiveField(1)
bankTransfer,
@HiveField(2)
creditCard,
@HiveField(3)
debitCard,
@HiveField(4)
eWallet,
@HiveField(5)
cheque,
@HiveField(6)
creditTerm,
}
/// Payment Status
///
/// Represents the status of a payment transaction.
@HiveType(typeId: HiveTypeIds.paymentStatus)
enum PaymentStatus {
@HiveField(0)
pending,
@HiveField(1)
processing,
@HiveField(2)
completed,
@HiveField(3)
failed,
@HiveField(4)
refunded,
@HiveField(5)
cancelled,
}
// ============================================================================
// LOYALTY ENUMS
// ============================================================================
/// Entry Type
///
/// Represents the type of loyalty points entry.
@HiveType(typeId: HiveTypeIds.entryType)
enum EntryType {
@HiveField(0)
earn,
@HiveField(1)
redeem,
@HiveField(2)
adjustment,
@HiveField(3)
expiry,
@HiveField(4)
refund,
}
/// Entry Source
///
/// Represents the source of a loyalty points entry.
@HiveType(typeId: HiveTypeIds.entrySource)
enum EntrySource {
@HiveField(0)
purchase,
@HiveField(1)
referral,
@HiveField(2)
promotion,
@HiveField(3)
bonus,
@HiveField(4)
giftRedemption,
@HiveField(5)
projectSubmission,
@HiveField(6)
pointsRecord,
@HiveField(7)
manualAdjustment,
}
/// Complaint Status
///
/// Represents the status of a complaint.
@HiveType(typeId: HiveTypeIds.complaintStatus)
enum ComplaintStatus {
@HiveField(0)
none,
@HiveField(1)
pending,
@HiveField(2)
investigating,
@HiveField(3)
resolved,
@HiveField(4)
rejected,
}
/// Gift Category
///
/// Represents the category of a gift.
@HiveType(typeId: HiveTypeIds.giftCategory)
enum GiftCategory {
@HiveField(0)
voucher,
@HiveField(1)
product,
@HiveField(2)
service,
@HiveField(3)
discount,
@HiveField(4)
experience,
}
/// Gift Status
///
/// Represents the status of a redeemed gift.
@HiveType(typeId: HiveTypeIds.giftStatus)
enum GiftStatus {
@HiveField(0)
active,
@HiveField(1)
used,
@HiveField(2)
expired,
@HiveField(3)
cancelled,
}
/// Points Record Status
///
/// Represents the status of a points record submission.
@HiveType(typeId: HiveTypeIds.pointsStatus)
enum PointsStatus {
@HiveField(0)
pending,
@HiveField(1)
approved,
@HiveField(2)
rejected,
}
// ============================================================================
// PROJECT ENUMS
// ============================================================================
/// Project Type
///
/// Represents the category of construction project.
@HiveType(typeId: HiveTypeIds.projectType)
enum ProjectType {
@HiveField(0)
residential,
@HiveField(1)
commercial,
@HiveField(2)
industrial,
@HiveField(3)
infrastructure,
@HiveField(4)
renovation,
@HiveField(5)
interior,
@HiveField(6)
exterior,
}
/// Submission Status
///
/// Represents the status of a project submission.
@HiveType(typeId: HiveTypeIds.submissionStatus)
enum SubmissionStatus {
@HiveField(0)
pending,
@HiveField(1)
reviewing,
@HiveField(2)
approved,
@HiveField(3)
rejected,
@HiveField(4)
needsRevision,
}
/// Design Status
///
/// Represents the status of a design request.
@HiveType(typeId: HiveTypeIds.designStatus)
enum DesignStatus {
@HiveField(0)
pending,
@HiveField(1)
assigned,
@HiveField(2)
inProgress,
@HiveField(3)
reviewing,
@HiveField(4)
completed,
@HiveField(5)
cancelled,
@HiveField(6)
onHold,
}
// ============================================================================
// QUOTE ENUMS
// ============================================================================
/// Quote Status
///
/// Represents the status of a quotation.
@HiveType(typeId: HiveTypeIds.quoteStatus)
enum QuoteStatus {
@HiveField(0)
draft,
@HiveField(1)
sent,
@HiveField(2)
viewed,
@HiveField(3)
accepted,
@HiveField(4)
rejected,
@HiveField(5)
expired,
@HiveField(6)
converted,
@HiveField(7)
cancelled,
}
// ============================================================================
// CHAT ENUMS
// ============================================================================
/// Room Type
///
/// Represents the type of chat room.
@HiveType(typeId: HiveTypeIds.roomType)
enum RoomType {
@HiveField(0)
support,
@HiveField(1)
sales,
@HiveField(2)
orderInquiry,
@HiveField(3)
quoteDiscussion,
@HiveField(4)
general,
}
/// Content Type
///
/// Represents the type of message content.
@HiveType(typeId: HiveTypeIds.contentType)
enum ContentType {
@HiveField(0)
text,
@HiveField(1)
image,
@HiveField(2)
file,
@HiveField(3)
video,
@HiveField(4)
audio,
@HiveField(5)
productReference,
@HiveField(6)
orderReference,
@HiveField(7)
quoteReference,
}
// ============================================================================
// NOTIFICATION ENUMS
// ============================================================================
/// Reminder Type
///
/// Represents the type of payment reminder.
@HiveType(typeId: HiveTypeIds.reminderType)
enum ReminderType {
@HiveField(0)
beforeDue,
@HiveField(1)
dueDate,
@HiveField(2)
overdue,
@HiveField(3)
finalNotice,
}
// ============================================================================
// EXTENSION METHODS
// ============================================================================
extension UserRoleExtension on UserRole {
String get displayName {
switch (this) {
case UserRole.customer:
return 'Khách hàng';
case UserRole.distributor:
return 'Đại lý';
case UserRole.admin:
return 'Quản trị viên';
case UserRole.staff:
return 'Nhân viên';
}
}
}
extension UserStatusExtension on UserStatus {
String get displayName {
switch (this) {
case UserStatus.active:
return 'Hoạt động';
case UserStatus.inactive:
return 'Không hoạt động';
case UserStatus.suspended:
return 'Tạm khóa';
case UserStatus.pending:
return 'Chờ duyệt';
}
}
}
extension LoyaltyTierExtension on LoyaltyTier {
String get displayName {
switch (this) {
case LoyaltyTier.bronze:
return 'Đồng';
case LoyaltyTier.silver:
return 'Bạc';
case LoyaltyTier.gold:
return 'Vàng';
case LoyaltyTier.platinum:
return 'Bạch kim';
case LoyaltyTier.diamond:
return 'Kim cương';
case LoyaltyTier.titan:
return 'Titan';
}
}
int get level {
switch (this) {
case LoyaltyTier.bronze:
return 1;
case LoyaltyTier.silver:
return 2;
case LoyaltyTier.gold:
return 3;
case LoyaltyTier.platinum:
return 4;
case LoyaltyTier.diamond:
return 5;
case LoyaltyTier.titan:
return 6;
}
}
}
extension OrderStatusExtension on OrderStatus {
String get displayName {
switch (this) {
case OrderStatus.draft:
return 'Nháp';
case OrderStatus.pending:
return 'Chờ xác nhận';
case OrderStatus.confirmed:
return 'Đã xác nhận';
case OrderStatus.processing:
return 'Đang xử lý';
case OrderStatus.shipped:
return 'Đang giao hàng';
case OrderStatus.delivered:
return 'Đã giao hàng';
case OrderStatus.completed:
return 'Hoàn thành';
case OrderStatus.cancelled:
return 'Đã hủy';
case OrderStatus.refunded:
return 'Đã hoàn tiền';
}
}
bool get isActive {
return this == OrderStatus.pending ||
this == OrderStatus.confirmed ||
this == OrderStatus.processing ||
this == OrderStatus.shipped;
}
bool get isFinal {
return this == OrderStatus.completed ||
this == OrderStatus.cancelled ||
this == OrderStatus.refunded;
}
}
extension InvoiceStatusExtension on InvoiceStatus {
String get displayName {
switch (this) {
case InvoiceStatus.draft:
return 'Nháp';
case InvoiceStatus.issued:
return 'Đã phát hành';
case InvoiceStatus.partiallyPaid:
return 'Thanh toán 1 phần';
case InvoiceStatus.paid:
return 'Đã thanh toán';
case InvoiceStatus.overdue:
return 'Quá hạn';
case InvoiceStatus.cancelled:
return 'Đã hủy';
case InvoiceStatus.refunded:
return 'Đã hoàn tiền';
}
}
}
extension PaymentMethodExtension on PaymentMethod {
String get displayName {
switch (this) {
case PaymentMethod.cash:
return 'Tiền mặt';
case PaymentMethod.bankTransfer:
return 'Chuyển khoản';
case PaymentMethod.creditCard:
return 'Thẻ tín dụng';
case PaymentMethod.debitCard:
return 'Thẻ ghi nợ';
case PaymentMethod.eWallet:
return 'Ví điện tử';
case PaymentMethod.cheque:
return 'Séc';
case PaymentMethod.creditTerm:
return 'Công nợ';
}
}
}
extension PaymentStatusExtension on PaymentStatus {
String get displayName {
switch (this) {
case PaymentStatus.pending:
return 'Chờ xử lý';
case PaymentStatus.processing:
return 'Đang xử lý';
case PaymentStatus.completed:
return 'Hoàn thành';
case PaymentStatus.failed:
return 'Thất bại';
case PaymentStatus.refunded:
return 'Đã hoàn tiền';
case PaymentStatus.cancelled:
return 'Đã hủy';
}
}
}
extension EntryTypeExtension on EntryType {
String get displayName {
switch (this) {
case EntryType.earn:
return 'Tích điểm';
case EntryType.redeem:
return 'Đổi điểm';
case EntryType.adjustment:
return 'Điều chỉnh';
case EntryType.expiry:
return 'Hết hạn';
case EntryType.refund:
return 'Hoàn điểm';
}
}
bool get isPositive {
return this == EntryType.earn || this == EntryType.refund;
}
bool get isNegative {
return this == EntryType.redeem || this == EntryType.expiry;
}
}
extension EntrySourceExtension on EntrySource {
String get displayName {
switch (this) {
case EntrySource.purchase:
return 'Mua hàng';
case EntrySource.referral:
return 'Giới thiệu';
case EntrySource.promotion:
return 'Khuyến mãi';
case EntrySource.bonus:
return 'Thưởng';
case EntrySource.giftRedemption:
return 'Đổi quà';
case EntrySource.projectSubmission:
return 'Nộp công trình';
case EntrySource.pointsRecord:
return 'Ghi nhận điểm';
case EntrySource.manualAdjustment:
return 'Điều chỉnh thủ công';
}
}
}
extension GiftCategoryExtension on GiftCategory {
String get displayName {
switch (this) {
case GiftCategory.voucher:
return 'Phiếu quà tặng';
case GiftCategory.product:
return 'Sản phẩm';
case GiftCategory.service:
return 'Dịch vụ';
case GiftCategory.discount:
return 'Giảm giá';
case GiftCategory.experience:
return 'Trải nghiệm';
}
}
}
extension GiftStatusExtension on GiftStatus {
String get displayName {
switch (this) {
case GiftStatus.active:
return 'Có hiệu lực';
case GiftStatus.used:
return 'Đã sử dụng';
case GiftStatus.expired:
return 'Hết hạn';
case GiftStatus.cancelled:
return 'Đã hủy';
}
}
}
extension ProjectTypeExtension on ProjectType {
String get displayName {
switch (this) {
case ProjectType.residential:
return 'Dân dụng';
case ProjectType.commercial:
return 'Thương mại';
case ProjectType.industrial:
return 'Công nghiệp';
case ProjectType.infrastructure:
return 'Hạ tầng';
case ProjectType.renovation:
return 'Cải tạo';
case ProjectType.interior:
return 'Nội thất';
case ProjectType.exterior:
return 'Ngoại thất';
}
}
}
extension QuoteStatusExtension on QuoteStatus {
String get displayName {
switch (this) {
case QuoteStatus.draft:
return 'Nháp';
case QuoteStatus.sent:
return 'Đã gửi';
case QuoteStatus.viewed:
return 'Đã xem';
case QuoteStatus.accepted:
return 'Chấp nhận';
case QuoteStatus.rejected:
return 'Từ chối';
case QuoteStatus.expired:
return 'Hết hạn';
case QuoteStatus.converted:
return 'Đã chuyển đổi';
case QuoteStatus.cancelled:
return 'Đã hủy';
}
}
bool get isActive {
return this == QuoteStatus.sent || this == QuoteStatus.viewed;
}
bool get isFinal {
return this == QuoteStatus.accepted ||
this == QuoteStatus.rejected ||
this == QuoteStatus.expired ||
this == QuoteStatus.converted ||
this == QuoteStatus.cancelled;
}
}
extension RoomTypeExtension on RoomType {
String get displayName {
switch (this) {
case RoomType.support:
return 'Hỗ trợ';
case RoomType.sales:
return 'Bán hàng';
case RoomType.orderInquiry:
return 'Đơn hàng';
case RoomType.quoteDiscussion:
return 'Báo giá';
case RoomType.general:
return 'Chung';
}
}
}
extension ReminderTypeExtension on ReminderType {
String get displayName {
switch (this) {
case ReminderType.beforeDue:
return 'Trước hạn';
case ReminderType.dueDate:
return 'Đến hạn';
case ReminderType.overdue:
return 'Quá hạn';
case ReminderType.finalNotice:
return 'Thông báo cuối';
}
}
}