import 'package:niogu_app/core/enums/order_source.dart'; import 'package:niogu_app/core/enums/order_status.dart'; import 'package:niogu_app/core/enums/stock_type.dart'; import 'package:niogu_app/core/enums/sync_status.dart'; import 'package:uuid/uuid.dart'; class DisplayProductPos { final String productId; final String productVariantId; final String outletInventoryId; final String? imagePath; final String name; final String variantName; final double currentSold; final StockType stockType; final double remainingStock; final String unitName; final double costPrice; final double sellingPrice; final bool hasVariant; DisplayProductPos({ required this.productId, required this.productVariantId, required this.outletInventoryId, this.imagePath, required this.name, required this.variantName, required this.currentSold, required this.stockType, required this.remainingStock, required this.unitName, required this.costPrice, required this.sellingPrice, required this.hasVariant, }); } class CartItems { final String currentOutletId; final String outletInventoryId; final String id; final String? imagePath; final String name; final String? variantName; final double currentSold; final double quantity; final double costPrice; final double sellingPrice; final StockType stockType; final double remainingStock; final String unit; const CartItems({ required this.currentOutletId, required this.outletInventoryId, required this.id, this.imagePath, required this.name, this.variantName, required this.currentSold, this.quantity = 0.0, required this.costPrice, required this.sellingPrice, required this.stockType, required this.remainingStock, required this.unit, }); CartItems copyWith({double? quantity}) { return CartItems( currentOutletId: currentOutletId, outletInventoryId: outletInventoryId, id: id, imagePath: imagePath, name: name, variantName: variantName, currentSold: currentSold, quantity: quantity ?? this.quantity, costPrice: costPrice, sellingPrice: sellingPrice, stockType: stockType, remainingStock: remainingStock, unit: unit, ); } } enum AlreadyCustomerEmpty { loading, empty_database, empty_search_result, has_data, } class AlreadyCustomer { final String id; final String name; final String phoneNumber; final List addresses; const AlreadyCustomer({ required this.id, required this.name, required this.phoneNumber, required this.addresses, }); } class SelectedCustomer { final String id; final String outletId; final String name; final String phoneNumber; final String address; const SelectedCustomer({ required this.id, required this.outletId, required this.name, required this.phoneNumber, required this.address, }); } class OtherInformation { final double discount; final double tax; final String? note; const OtherInformation({this.discount = 0.0, this.tax = 0.0, this.note}); } class CustomerInformation { final String id; final String name; final String? phoneNumber; final String? address; CustomerInformation({ String? id, required this.name, this.phoneNumber, this.address, }) : id = id ?? const Uuid().v7().toString(); } class NewSale { final String localId; final String? customerId; final String? customerNameSnapshot; final String? customerPhoneNumberSnapshot; final OrderSource orderSource; final OrderStatus orderStatus; final double totalOrder; final OtherInformation otherInformation; final double totalAmount; final double amountPaid; final double changeAmount; final String? paymentProofPath; final Map customerAddressSnapshot; final SyncStatus syncStatus; NewSale({ this.customerId, required this.customerNameSnapshot, required this.customerPhoneNumberSnapshot, this.orderSource = OrderSource.pos, this.orderStatus = OrderStatus.completed, required this.totalOrder, required this.otherInformation, required this.totalAmount, required this.amountPaid, required this.changeAmount, required this.paymentProofPath, required this.customerAddressSnapshot, this.syncStatus = SyncStatus.dirty, }) : localId = const Uuid().v7().toString(); } class ItemSale { final String localId; final String orderId; final String outletInventoryId; final String productVariantId; final StockType stockType; final double stock; final double currentSold; final double quantity; final double costPrice; final String? productImageSnapshot; final String productNameSnapshot; final String? productVariantNameSnapshot; final double sellingPriceSnapshot; final double subtotal; final SyncStatus syncStatus; ItemSale({ required this.orderId, required this.outletInventoryId, required this.productVariantId, required this.stockType, required this.stock, required this.currentSold, required this.quantity, required this.costPrice, this.productImageSnapshot, required this.productNameSnapshot, this.productVariantNameSnapshot, required this.sellingPriceSnapshot, required this.subtotal, this.syncStatus = SyncStatus.dirty, }) : localId = const Uuid().v7().toString(); } class UpdateTotalSold { final String id; final double qtySold; final double currentSold; const UpdateTotalSold({required this.id, required this.qtySold, required this.currentSold}); }