class Product { // 1. مشخصات شناسایی و ظاهری کالا (Identification & Appearance) int? id; // شناسه منحصر به فرد کالا (Primary Key در دیتابیس) String name; // نام کالا (اجباری) String code; // کد کالا، مانند بارکد یا کد داخلی (اجباری) String? description; // توضیحات تکمیلی کالا (اختیاری) String? imageUrl; // آدرس URL یا مسیر فایل عکس کالا (اختیاری) String? serialNumber; // شماره سریال منحصر به فرد هر واحد کالا (اختیاری) String? model; // شماره مدل خاص محصول (اختیاری) List? 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 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 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' ')'; } }