2025-10-27 21:55:19 +07:00
|
|
|
part of '../order.dart';
|
|
|
|
|
|
|
|
|
|
@freezed
|
|
|
|
|
class ListOrder with _$ListOrder {
|
|
|
|
|
const factory ListOrder({
|
|
|
|
|
required List<Order> orders,
|
|
|
|
|
required int totalCount,
|
|
|
|
|
required int page,
|
|
|
|
|
required int limit,
|
|
|
|
|
required int totalPages,
|
|
|
|
|
}) = _ListOrder;
|
|
|
|
|
|
|
|
|
|
factory ListOrder.empty() =>
|
|
|
|
|
ListOrder(orders: [], totalCount: 0, page: 0, limit: 0, totalPages: 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@freezed
|
|
|
|
|
class Order with _$Order {
|
|
|
|
|
const factory Order({
|
|
|
|
|
required String id,
|
|
|
|
|
required String orderNumber,
|
|
|
|
|
required String outletId,
|
|
|
|
|
required String userId,
|
|
|
|
|
required String tableNumber,
|
|
|
|
|
required String orderType,
|
|
|
|
|
required String status,
|
|
|
|
|
required int subtotal,
|
|
|
|
|
required int taxAmount,
|
|
|
|
|
required int discountAmount,
|
|
|
|
|
required int totalAmount,
|
|
|
|
|
required num totalCost,
|
|
|
|
|
required int remainingAmount,
|
|
|
|
|
required String paymentStatus,
|
|
|
|
|
required int refundAmount,
|
2025-11-01 16:17:45 +07:00
|
|
|
required String refundReason,
|
2025-10-27 21:55:19 +07:00
|
|
|
required bool isVoid,
|
|
|
|
|
required bool isRefund,
|
|
|
|
|
required String notes,
|
|
|
|
|
required Map<String, dynamic> metadata,
|
|
|
|
|
required DateTime createdAt,
|
|
|
|
|
required DateTime updatedAt,
|
|
|
|
|
required List<OrderItem> orderItems,
|
2025-10-28 00:58:39 +07:00
|
|
|
required List<Payment> payments,
|
2025-10-27 21:55:19 +07:00
|
|
|
required int totalPaid,
|
|
|
|
|
required int paymentCount,
|
|
|
|
|
required String splitType,
|
|
|
|
|
}) = _Order;
|
|
|
|
|
|
|
|
|
|
factory Order.empty() => Order(
|
|
|
|
|
id: '',
|
|
|
|
|
orderNumber: '',
|
|
|
|
|
outletId: '',
|
|
|
|
|
userId: '',
|
|
|
|
|
tableNumber: '',
|
|
|
|
|
orderType: '',
|
|
|
|
|
status: '',
|
|
|
|
|
subtotal: 0,
|
|
|
|
|
taxAmount: 0,
|
|
|
|
|
discountAmount: 0,
|
|
|
|
|
totalAmount: 0,
|
|
|
|
|
totalCost: 0,
|
|
|
|
|
remainingAmount: 0,
|
|
|
|
|
paymentStatus: '',
|
|
|
|
|
refundAmount: 0,
|
|
|
|
|
isVoid: false,
|
|
|
|
|
isRefund: false,
|
|
|
|
|
notes: '',
|
|
|
|
|
metadata: const {},
|
|
|
|
|
createdAt: DateTime(1970),
|
|
|
|
|
updatedAt: DateTime(1970),
|
|
|
|
|
orderItems: const [],
|
|
|
|
|
payments: const [],
|
|
|
|
|
totalPaid: 0,
|
|
|
|
|
paymentCount: 0,
|
|
|
|
|
splitType: '',
|
2025-11-01 16:17:45 +07:00
|
|
|
refundReason: '',
|
2025-10-27 21:55:19 +07:00
|
|
|
);
|
2025-11-06 18:15:54 +07:00
|
|
|
|
|
|
|
|
factory Order.mockOrder() => Order(
|
|
|
|
|
id: 'ORD-001',
|
|
|
|
|
orderNumber: 'A-1001',
|
|
|
|
|
outletId: 'OUTLET-001',
|
|
|
|
|
userId: 'USER-001',
|
|
|
|
|
tableNumber: 'T01',
|
|
|
|
|
orderType: 'Dine In',
|
|
|
|
|
status: 'Completed',
|
|
|
|
|
subtotal: 150000,
|
|
|
|
|
taxAmount: 15000,
|
|
|
|
|
discountAmount: 5000,
|
|
|
|
|
totalAmount: 160000,
|
|
|
|
|
totalCost: 100000,
|
|
|
|
|
remainingAmount: 0,
|
|
|
|
|
paymentStatus: 'Paid',
|
|
|
|
|
refundAmount: 0,
|
|
|
|
|
refundReason: '',
|
|
|
|
|
isVoid: false,
|
|
|
|
|
isRefund: false,
|
|
|
|
|
notes: 'Customer requested less sugar',
|
|
|
|
|
metadata: {'source': 'POS', 'device': 'iPad', 'customer_name': "John Doe"},
|
|
|
|
|
createdAt: DateTime.now().subtract(const Duration(hours: 1)),
|
|
|
|
|
updatedAt: DateTime.now(),
|
|
|
|
|
orderItems: [
|
|
|
|
|
OrderItem(
|
|
|
|
|
id: 'ITEM-001',
|
|
|
|
|
orderId: 'ORD-001',
|
|
|
|
|
productId: 'PROD-001',
|
|
|
|
|
productName: 'Cappuccino',
|
|
|
|
|
productVariantId: 'VAR-001',
|
|
|
|
|
productVariantName: 'Hot',
|
|
|
|
|
quantity: 2,
|
|
|
|
|
unitPrice: 25000,
|
|
|
|
|
totalPrice: 50000,
|
|
|
|
|
modifiers: [
|
|
|
|
|
{'name': 'Extra Shot', 'price': 5000},
|
|
|
|
|
],
|
|
|
|
|
notes: 'No sugar',
|
|
|
|
|
status: 'Served',
|
|
|
|
|
createdAt: DateTime.now().subtract(const Duration(hours: 1)),
|
|
|
|
|
updatedAt: DateTime.now(),
|
|
|
|
|
printerType: 'Barista',
|
|
|
|
|
paidQuantity: 2,
|
|
|
|
|
),
|
|
|
|
|
OrderItem(
|
|
|
|
|
id: 'ITEM-002',
|
|
|
|
|
orderId: 'ORD-001',
|
|
|
|
|
productId: 'PROD-002',
|
|
|
|
|
productName: 'Spaghetti Carbonara',
|
|
|
|
|
productVariantId: 'VAR-002',
|
|
|
|
|
productVariantName: '',
|
|
|
|
|
quantity: 1,
|
|
|
|
|
unitPrice: 55000,
|
|
|
|
|
totalPrice: 55000,
|
|
|
|
|
modifiers: [],
|
|
|
|
|
notes: '',
|
|
|
|
|
status: 'Served',
|
|
|
|
|
createdAt: DateTime.now().subtract(const Duration(hours: 1)),
|
|
|
|
|
updatedAt: DateTime.now(),
|
|
|
|
|
printerType: 'Kitchen',
|
|
|
|
|
paidQuantity: 1,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
payments: [
|
|
|
|
|
Payment(
|
|
|
|
|
id: 'PAY-001',
|
|
|
|
|
orderId: 'ORD-001',
|
|
|
|
|
paymentMethodId: 'PM-CASH',
|
|
|
|
|
paymentMethodName: 'Cash',
|
|
|
|
|
paymentMethodType: 'Cash',
|
|
|
|
|
amount: 160000,
|
|
|
|
|
status: 'Success',
|
|
|
|
|
splitNumber: 1,
|
|
|
|
|
splitTotal: 1,
|
|
|
|
|
splitDescription: 'Full payment by cash',
|
|
|
|
|
refundAmount: 0,
|
|
|
|
|
metadata: {'cashier': 'Efril', 'device': 'POS iPad'},
|
|
|
|
|
createdAt: DateTime.now().subtract(const Duration(minutes: 45)),
|
|
|
|
|
updatedAt: DateTime.now(),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
totalPaid: 160000,
|
|
|
|
|
paymentCount: 1,
|
|
|
|
|
splitType: 'Single',
|
|
|
|
|
);
|
2025-10-27 21:55:19 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@freezed
|
|
|
|
|
class OrderItem with _$OrderItem {
|
|
|
|
|
const factory OrderItem({
|
|
|
|
|
required String id,
|
|
|
|
|
required String orderId,
|
|
|
|
|
required String productId,
|
|
|
|
|
required String productName,
|
|
|
|
|
required String productVariantId,
|
|
|
|
|
required String productVariantName,
|
|
|
|
|
required int quantity,
|
|
|
|
|
required int unitPrice,
|
|
|
|
|
required int totalPrice,
|
|
|
|
|
required List<dynamic> modifiers,
|
|
|
|
|
required String notes,
|
|
|
|
|
required String status,
|
|
|
|
|
required DateTime createdAt,
|
|
|
|
|
required DateTime updatedAt,
|
|
|
|
|
required String printerType,
|
|
|
|
|
required int paidQuantity,
|
|
|
|
|
}) = _OrderItem;
|
|
|
|
|
|
|
|
|
|
factory OrderItem.empty() => OrderItem(
|
|
|
|
|
id: '',
|
|
|
|
|
orderId: '',
|
|
|
|
|
productId: '',
|
|
|
|
|
productName: '',
|
|
|
|
|
productVariantId: '',
|
|
|
|
|
productVariantName: '',
|
|
|
|
|
quantity: 0,
|
|
|
|
|
unitPrice: 0,
|
|
|
|
|
totalPrice: 0,
|
|
|
|
|
modifiers: const [],
|
|
|
|
|
notes: '',
|
|
|
|
|
status: '',
|
|
|
|
|
createdAt: DateTime(1970),
|
|
|
|
|
updatedAt: DateTime(1970),
|
|
|
|
|
printerType: '',
|
|
|
|
|
paidQuantity: 0,
|
|
|
|
|
);
|
|
|
|
|
}
|