153 lines
4.0 KiB
Dart
153 lines
4.0 KiB
Dart
class DynamicFieldDefinition {
|
|
final String source; // e.g. "product"
|
|
final String fieldKey; // e.g. "name", "sellingPrice", "barcode"
|
|
final String displayName; // e.g. "Product Name"
|
|
final String category; // e.g. "Identification", "Pricing", "Specifications"
|
|
final String dataType; // "string", "currency", "weight", "number"
|
|
final bool isBarcodeCompatible;
|
|
final String? defaultPrefix;
|
|
final String? defaultSuffix;
|
|
|
|
const DynamicFieldDefinition({
|
|
required this.source,
|
|
required this.fieldKey,
|
|
required this.displayName,
|
|
required this.category,
|
|
this.dataType = 'string',
|
|
this.isBarcodeCompatible = false,
|
|
this.defaultPrefix,
|
|
this.defaultSuffix,
|
|
});
|
|
|
|
String get placeholder => '{{$source.$fieldKey}}';
|
|
|
|
static const List<DynamicFieldDefinition> productFields = [
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'name',
|
|
displayName: 'Product Name',
|
|
category: 'General',
|
|
dataType: 'string',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'sku',
|
|
displayName: 'SKU',
|
|
category: 'Identification',
|
|
dataType: 'string',
|
|
isBarcodeCompatible: true,
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'barcode',
|
|
displayName: 'Barcode',
|
|
category: 'Identification',
|
|
dataType: 'string',
|
|
isBarcodeCompatible: true,
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'sellingPrice',
|
|
displayName: 'Selling Price',
|
|
category: 'Pricing',
|
|
dataType: 'currency',
|
|
defaultPrefix: '₹',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'mrp',
|
|
displayName: 'MRP',
|
|
category: 'Pricing',
|
|
dataType: 'currency',
|
|
defaultPrefix: 'MRP ₹',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'weightInG',
|
|
displayName: 'Weight',
|
|
category: 'Measurements',
|
|
dataType: 'weight',
|
|
defaultSuffix: ' g',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'hsnCode',
|
|
displayName: 'HSN Code',
|
|
category: 'Tax & Compliance',
|
|
dataType: 'string',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'gstRate',
|
|
displayName: 'GST Rate',
|
|
category: 'Tax & Compliance',
|
|
dataType: 'number',
|
|
defaultSuffix: '%',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'brandName',
|
|
displayName: 'Brand',
|
|
category: 'General',
|
|
dataType: 'string',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'material',
|
|
displayName: 'Material / Metal',
|
|
category: 'Specifications',
|
|
dataType: 'string',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'size',
|
|
displayName: 'Size',
|
|
category: 'Specifications',
|
|
dataType: 'string',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'color',
|
|
displayName: 'Color',
|
|
category: 'Specifications',
|
|
dataType: 'string',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'manufacturerCode',
|
|
displayName: 'Tag / Serial / Code',
|
|
category: 'Identification',
|
|
dataType: 'string',
|
|
isBarcodeCompatible: true,
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'purityFactor',
|
|
displayName: 'Purity Factor',
|
|
category: 'Specifications',
|
|
dataType: 'number',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'description',
|
|
displayName: 'Description',
|
|
category: 'General',
|
|
dataType: 'string',
|
|
),
|
|
DynamicFieldDefinition(
|
|
source: 'product',
|
|
fieldKey: 'currentStock',
|
|
displayName: 'Current Stock',
|
|
category: 'Inventory',
|
|
dataType: 'number',
|
|
),
|
|
];
|
|
|
|
static DynamicFieldDefinition? find(String source, String fieldKey) {
|
|
if (source == 'product') {
|
|
return productFields.where((f) => f.fieldKey == fieldKey).firstOrNull;
|
|
}
|
|
return null;
|
|
}
|
|
}
|