import 'package:niogu_app/core/enums/item_type.dart'; import 'package:niogu_app/core/enums/payment_status.dart'; import 'package:niogu_app/core/enums/stock_card_type.dart'; import 'package:niogu_app/core/enums/sync_status.dart'; import 'package:uuid/uuid.dart'; enum DisplayItemEmpty { loading, empty_database, empty_search_result, has_data } class DisplayItem { final String id; final String itemId; final String? localImagePath; final String name; final String? variantName; final double costPrice; final double purchasePrice; final double remainingStock; final String unit; final double sellingPrice; const DisplayItem({ required this.id, required this.itemId, this.localImagePath, required this.name, this.variantName, required this.costPrice, required this.purchasePrice, required this.remainingStock, required this.unit, required this.sellingPrice, }); } enum SelectedItemType { production, transfer_in, purchase } class SelectedItem { final String id; final ItemType itemType; final String itemId; final String? localImagePath; final String name; final String? variantName; final double costPrice; final double purchasePrice; final double remainingStock; final String unit; final double sellingPrice; final double quantity; final SelectedItemType type; const SelectedItem({ required this.id, required this.itemType, required this.itemId, this.localImagePath, required this.name, this.variantName, required this.costPrice, required this.purchasePrice, required this.remainingStock, required this.unit, required this.sellingPrice, this.quantity = 1.0, required this.type, }); SelectedItem copyWith({double? quantity}) { return SelectedItem( id: id, itemType: itemType, itemId: itemId, localImagePath: localImagePath, name: name, variantName: variantName, costPrice: costPrice, remainingStock: remainingStock, unit: unit, sellingPrice: sellingPrice, quantity: quantity ?? this.quantity, purchasePrice: purchasePrice, type: type, ); } } class UpdateStockItem { final String id; final String outletInventoryId; final StockCardType stockCardType; final String? receiveFromId; final double remainingStock; final double qtyChange; final double updateStock; final double currentStock; final double purchasePrice; final double costPrice; final String? referenceId; final String? documentNumber; final String? notes; final SyncStatus syncStatus; UpdateStockItem({ required this.outletInventoryId, required this.stockCardType, this.receiveFromId, required this.remainingStock, required this.qtyChange, required this.updateStock, required this.currentStock, required this.costPrice, required this.purchasePrice, this.referenceId, this.documentNumber, this.notes, this.syncStatus = SyncStatus.dirty, }) : id = const Uuid().v7().toString(); } class SupplierInformation { final String localId; final String name; final String phoneNumber; final String address; SupplierInformation({ String? localId, required this.name, required this.phoneNumber, required this.address, }) : this.localId = localId ?? const Uuid().v7().toString(); } class OtherInformation { final double discount; final double tax; final String? note; const OtherInformation({this.discount = 0.0, this.tax = 0.0, this.note}); } class NewPurchase { final String localId; final String? supplierId; final String? supplierNameSnapshot; final String? supplierPhoneNumberSnapshot; final double totalPurchase; final OtherInformation otherInformation; final PaymentStatus paymentStatus; final double totalAmount; final double amountPaid; final double changeAmount; final double underPaymentAmount; final double debtAmount; final String? paymentProofPath; final SyncStatus syncStatus; NewPurchase({ this.supplierId, this.supplierNameSnapshot, this.supplierPhoneNumberSnapshot, required this.totalPurchase, required this.paymentStatus, required this.totalAmount, required this.otherInformation, required this.amountPaid, required this.changeAmount, required this.underPaymentAmount, required this.debtAmount, this.paymentProofPath, this.syncStatus = SyncStatus.dirty, }) : this.localId = const Uuid().v7().toString(); } class ItemPurchase { final String localId; final String purchaseId; final ItemType itemType; final String itemId; final double quantity; final String? imagePath; final String itemNameSnapshot; final String? itemVariantNameSnapshot; final double purchasePriceSnaphot; final double subtotal; final SyncStatus syncStatus; ItemPurchase({ required this.purchaseId, required this.itemType, required this.itemId, required this.quantity, required this.imagePath, required this.itemNameSnapshot, required this.itemVariantNameSnapshot, required this.purchasePriceSnaphot, required this.subtotal, this.syncStatus = SyncStatus.dirty, }) : localId = const Uuid().v7().toString(); }