211 lines
8.8 KiB
Dart
211 lines
8.8 KiB
Dart
class Product {
|
|
// 1. مشخصات شناسایی و ظاهری کالا (Identification & Appearance)
|
|
int? id; // شناسه منحصر به فرد کالا (Primary Key در دیتابیس)
|
|
String name; // نام کالا (اجباری)
|
|
String code; // کد کالا، مانند بارکد یا کد داخلی (اجباری)
|
|
String? description; // توضیحات تکمیلی کالا (اختیاری)
|
|
String? imageUrl; // آدرس URL یا مسیر فایل عکس کالا (اختیاری)
|
|
String? serialNumber; // شماره سریال منحصر به فرد هر واحد کالا (اختیاری)
|
|
String? model; // شماره مدل خاص محصول (اختیاری)
|
|
List<String>? tags; // هشتگها یا کلمات کلیدی برای جستجو و دستهبندی (اختیاری)
|
|
|
|
// 2. اطلاعات مالی و تجاری (Financial & Commercial)
|
|
double price; // قیمت فروش واحد کالا (اجباری)
|
|
double? costPrice; // قیمت خرید / بهای تمام شده کالا (اختیاری)
|
|
double? taxRate; // نرخ مالیات/عوارض مربوط به کالا (مثلاً 0.09 برای 9 درصد) (اختیاری)
|
|
double? discount; // میزان تخفیف روی کالا (مثلاً به صورت درصدی یا مبلغ ثابت) (اختیاری)
|
|
double? profitMargin; // درصد سود مورد انتظار یا واقعی برای کالا (اختیاری)
|
|
|
|
// 3. موجودی و لجستیک (انبارداری)
|
|
int quantity; // تعداد موجودی کالا (اجباری)
|
|
String? unitOfMeasure; // واحد اندازهگیری کالا (مثلاً "کیلوگرم", "عدد", "لیتر") (اختیاری)
|
|
String? location; // مکان فیزیکی کالا در انبار یا فروشگاه (اختیاری)
|
|
int? minimumStock; // حداقل موجودی که برای سفارش مجدد لازم است (اختیاری)
|
|
String? supplier; // نام تامینکننده یا فروشنده کالا (اختیاری)
|
|
|
|
// 4. تاریخگذاری، گارانتی و وضعیت (Dating, Warranty & Status)
|
|
DateTime? entryDate; // تاریخ ورود یا ثبت کالا در سیستم (اختیاری)
|
|
DateTime? manufactureDate; // تاریخ تولید کالا (اختیاری)
|
|
DateTime? expirationDate; // تاریخ انقضای کالا (اختیاری)
|
|
String? status; // وضعیت فعلی کالا (مثلاً "موجود", "ناموجود", "آسیبدیده") (اختیاری)
|
|
|
|
// 5. دستهبندی و طبقهبندی (Categorization & Classification)
|
|
String? category; // دسته بندی اصلی کالا (مثلاً "الکترونیک", "مواد غذایی") (اختیاری)
|
|
String? brand; // برند یا شرکت سازنده کالا (اختیاری)
|
|
|
|
// 6. اطلاعات مرتبط با کاربران/کارمندان و زمان (User/Employee & Timestamp Information)
|
|
String? createdBy; // شناسه کاربری ایجاد کننده (اختیاری، اگر سیستم لاگین داشته باشد)
|
|
DateTime? createdAt; // زمان دقیق ایجاد رکورد (معمولا توسط سیستم پر میشود)
|
|
String? lastModifiedBy; // شناسه کاربری آخرین ویرایشگر (اختیاری، اگر سیستم لاگین داشته باشد)
|
|
DateTime? lastModifiedAt; // زمان دقیق آخرین ویرایش رکورد (توسط سیستم پر میشود)
|
|
|
|
Product({
|
|
// 1. مشخصات شناسایی و ظاهری کالا
|
|
this.id,
|
|
required this.name,
|
|
required this.code,
|
|
this.description,
|
|
this.imageUrl,
|
|
this.serialNumber,
|
|
this.model,
|
|
this.tags,
|
|
|
|
// 2. اطلاعات مالی و تجاری
|
|
required this.price,
|
|
this.costPrice,
|
|
this.taxRate,
|
|
this.discount,
|
|
this.profitMargin,
|
|
|
|
// 3. موجودی و لجستیک
|
|
required this.quantity,
|
|
this.unitOfMeasure,
|
|
this.location,
|
|
this.minimumStock,
|
|
this.supplier,
|
|
|
|
// 4. تاریخگذاری، گارانتی و وضعیت
|
|
this.entryDate,
|
|
this.manufactureDate,
|
|
this.expirationDate,
|
|
this.status,
|
|
|
|
// 5. دستهبندی و طبقهبندی
|
|
this.category,
|
|
this.brand,
|
|
|
|
// 6. اطلاعات مرتبط با کاربران/کارمندان و زمان
|
|
this.createdBy,
|
|
this.createdAt,
|
|
this.lastModifiedBy,
|
|
this.lastModifiedAt,
|
|
});
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
// 1. مشخصات شناسایی و ظاهری کالا
|
|
'id': id,
|
|
'name': name,
|
|
'code': code,
|
|
'description': description,
|
|
'imageUrl': imageUrl,
|
|
'serialNumber': serialNumber,
|
|
'model': model,
|
|
'tags': tags?.join(','), // ذخیره لیست تگها به صورت رشته جدا شده با کاما
|
|
|
|
// 2. اطلاعات مالی و تجاری
|
|
'price': price,
|
|
'costPrice': costPrice,
|
|
'taxRate': taxRate,
|
|
'discount': discount,
|
|
'profitMargin': profitMargin,
|
|
|
|
// 3. موجودی و لجستیک
|
|
'quantity': quantity,
|
|
'unitOfMeasure': unitOfMeasure,
|
|
'location': location,
|
|
'minimumStock': minimumStock,
|
|
'supplier': supplier,
|
|
|
|
// 4. تاریخگذاری، گارانتی و وضعیت
|
|
'entryDate': entryDate?.toIso8601String(),
|
|
'manufactureDate': manufactureDate?.toIso8601String(),
|
|
'expirationDate': expirationDate?.toIso8601String(),
|
|
'status': status,
|
|
|
|
// 5. دستهبندی و طبقهبندی
|
|
'category': category,
|
|
'brand': brand,
|
|
|
|
// 6. اطلاعات مرتبط با کاربران/کارمندان و زمان
|
|
'createdBy': createdBy,
|
|
'createdAt': createdAt?.toIso8601String(),
|
|
'lastModifiedBy': lastModifiedBy,
|
|
'lastModifiedAt': lastModifiedAt?.toIso8601String(),
|
|
};
|
|
}
|
|
|
|
factory Product.fromMap(Map<String, dynamic> map) {
|
|
return Product(
|
|
// 1. مشخصات شناسایی و ظاهری کالا
|
|
id: map['id'],
|
|
name: map['name'],
|
|
code: map['code'],
|
|
description: map['description'],
|
|
imageUrl: map['imageUrl'],
|
|
serialNumber: map['serialNumber'],
|
|
model: map['model'],
|
|
tags: map['tags'] != null ? (map['tags'] as String).split(',') : null, // تبدیل رشته به لیست تگها
|
|
|
|
// 2. اطلاعات مالی و تجاری
|
|
price: map['price'],
|
|
costPrice: map['costPrice'],
|
|
taxRate: map['taxRate'],
|
|
discount: map['discount'],
|
|
profitMargin: map['profitMargin'],
|
|
|
|
// 3. موجودی و لجستیک
|
|
quantity: map['quantity'],
|
|
unitOfMeasure: map['unitOfMeasure'],
|
|
location: map['location'],
|
|
minimumStock: map['minimumStock'],
|
|
supplier: map['supplier'],
|
|
|
|
// 4. تاریخگذاری، گارانتی و وضعیت
|
|
entryDate: map['entryDate'] != null ? DateTime.parse(map['entryDate']) : null,
|
|
manufactureDate: map['manufactureDate'] != null ? DateTime.parse(map['manufactureDate']) : null,
|
|
expirationDate: map['expirationDate'] != null ? DateTime.parse(map['expirationDate']) : null,
|
|
status: map['status'],
|
|
|
|
// 5. دستهبندی و طبقهبندی
|
|
category: map['category'],
|
|
brand: map['brand'],
|
|
|
|
// 6. اطلاعات مرتبط با کاربران/کارمندان و زمان
|
|
createdBy: map['createdBy'],
|
|
createdAt: map['createdAt'] != null ? DateTime.parse(map['createdAt']) : null,
|
|
lastModifiedBy: map['lastModifiedBy'],
|
|
lastModifiedAt: map['lastModifiedAt'] != null ? DateTime.parse(map['lastModifiedAt']) : null,
|
|
);
|
|
}
|
|
|
|
@override
|
|
String toString() {
|
|
return 'Product('
|
|
// 1. مشخصات شناسایی و ظاهری کالا
|
|
'id: $id, '
|
|
'name: $name, '
|
|
'code: $code, '
|
|
'description: $description, '
|
|
'imageUrl: $imageUrl, '
|
|
'serialNumber: $serialNumber, '
|
|
'model: $model, '
|
|
'tags: $tags, '
|
|
// 2. اطلاعات مالی و تجاری
|
|
'price: $price, '
|
|
'costPrice: $costPrice, '
|
|
'taxRate: $taxRate, '
|
|
'discount: $discount, '
|
|
'profitMargin: $profitMargin, '
|
|
// 3. موجودی و لجستیک
|
|
'quantity: $quantity, '
|
|
'unitOfMeasure: $unitOfMeasure, '
|
|
'location: $location, '
|
|
'minimumStock: $minimumStock, '
|
|
'supplier: $supplier, '
|
|
// 4. تاریخگذاری، گارانتی و وضعیت
|
|
'entryDate: $entryDate, '
|
|
'manufactureDate: $manufactureDate, '
|
|
'expirationDate: $expirationDate, '
|
|
'status: $status, '
|
|
// 5. دستهبندی و طبقهبندی
|
|
'category: $category, '
|
|
'brand: $brand, '
|
|
// 6. اطلاعات مرتبط با کاربران/کارمندان و زمان
|
|
'createdBy: $createdBy, '
|
|
'createdAt: $createdAt, '
|
|
'lastModifiedBy: $lastModifiedBy, '
|
|
'lastModifiedAt: $lastModifiedAt'
|
|
')';
|
|
}
|
|
} |