- All 5 batch steps: Picking, Sorting, Clarification, Slots, Handoff - go_router navigation with step indicator - graphql_flutter client wired up (endpoint via env var) - Mock data layer swappable with real GraphQL service - Item types: normal, cold, frozen, alcohol, clarify - Storage slot assignment (cell/freezer/fridge)
223 lines
7.7 KiB
Dart
223 lines
7.7 KiB
Dart
import '../models/models.dart';
|
||
|
||
/// Static mock data — swap this layer with GraphQL service when backend is ready.
|
||
class MockData {
|
||
static List<Order> get orders => [
|
||
Order(
|
||
id: 1001,
|
||
orderNumber: '#10234',
|
||
amount: 1850.50,
|
||
slotTime: DateTime.now().add(const Duration(minutes: 25)),
|
||
status: OrderStatus.newOrder,
|
||
customer: const Customer(
|
||
name: 'Костянтин',
|
||
phone: '+380671234567',
|
||
comment: 'Будь-ласка, найбільш свіже мясо, щоб могла їсти дитина!',
|
||
),
|
||
segments: [
|
||
OrderSegment(
|
||
id: 1,
|
||
name: 'М\'ясо та риба',
|
||
zone: 'A1',
|
||
items: [
|
||
OrderItem(
|
||
id: 101,
|
||
sku: 'SKU-001',
|
||
name: 'Курятина філе охолоджена',
|
||
category: 'М\'ясо',
|
||
price: 189.90,
|
||
planQty: 1,
|
||
type: ItemType.cold,
|
||
substitutes: [
|
||
const OrderItemSubstitute(sku: 'SKU-002', name: 'Курятина стегно охол.', priority: 1),
|
||
],
|
||
),
|
||
OrderItem(
|
||
id: 102,
|
||
sku: 'SKU-003',
|
||
name: 'Яловичина вирізка охол.',
|
||
category: 'М\'ясо',
|
||
price: 320.00,
|
||
planQty: 0.5,
|
||
type: ItemType.cold,
|
||
),
|
||
],
|
||
),
|
||
OrderSegment(
|
||
id: 2,
|
||
name: 'Молочні продукти',
|
||
zone: 'B2',
|
||
items: [
|
||
OrderItem(
|
||
id: 103,
|
||
sku: 'SKU-010',
|
||
name: 'Молоко Яготинське 2.5% 1л',
|
||
category: 'Молоко',
|
||
price: 45.50,
|
||
planQty: 2,
|
||
type: ItemType.cold,
|
||
),
|
||
OrderItem(
|
||
id: 104,
|
||
sku: 'SKU-011',
|
||
name: 'Сир кисломолочний 9% 200г',
|
||
category: 'Сир',
|
||
price: 38.90,
|
||
planQty: 3,
|
||
type: ItemType.cold,
|
||
),
|
||
],
|
||
),
|
||
OrderSegment(
|
||
id: 3,
|
||
name: 'Заморожені',
|
||
zone: 'C1',
|
||
items: [
|
||
OrderItem(
|
||
id: 105,
|
||
sku: 'SKU-020',
|
||
name: 'Вареники з картоплею 800г',
|
||
category: 'Заморожені',
|
||
price: 89.90,
|
||
planQty: 2,
|
||
type: ItemType.frozen,
|
||
),
|
||
],
|
||
),
|
||
OrderSegment(
|
||
id: 4,
|
||
name: 'Алкоголь',
|
||
zone: 'D3',
|
||
items: [
|
||
OrderItem(
|
||
id: 106,
|
||
sku: 'SKU-030',
|
||
name: 'Вино Коблево Шардоне 0.75л',
|
||
category: 'Вино',
|
||
price: 225.00,
|
||
planQty: 1,
|
||
type: ItemType.alcohol,
|
||
),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
Order(
|
||
id: 1002,
|
||
orderNumber: '#10235',
|
||
amount: 640.00,
|
||
slotTime: DateTime.now().add(const Duration(minutes: 45)),
|
||
status: OrderStatus.inProgress,
|
||
customer: const Customer(
|
||
name: 'Оксана',
|
||
phone: '+380507654321',
|
||
),
|
||
segments: [
|
||
OrderSegment(
|
||
id: 5,
|
||
name: 'Бакалія',
|
||
zone: 'E1',
|
||
items: [
|
||
OrderItem(
|
||
id: 201,
|
||
sku: 'SKU-040',
|
||
name: 'Гречка ТМ Жменька 800г',
|
||
category: 'Крупи',
|
||
price: 55.90,
|
||
planQty: 2,
|
||
status: ItemStatus.picked,
|
||
actualQty: 2,
|
||
),
|
||
OrderItem(
|
||
id: 202,
|
||
sku: 'SKU-041',
|
||
name: 'Олія соняшникова Чумак 1л',
|
||
category: 'Олія',
|
||
price: 89.90,
|
||
planQty: 1,
|
||
status: ItemStatus.picked,
|
||
actualQty: 1,
|
||
),
|
||
OrderItem(
|
||
id: 203,
|
||
sku: 'SKU-042',
|
||
name: 'Цукор білий 1кг',
|
||
category: 'Бакалія',
|
||
price: 48.90,
|
||
planQty: 3,
|
||
),
|
||
],
|
||
),
|
||
OrderSegment(
|
||
id: 6,
|
||
name: 'Овочі та фрукти',
|
||
zone: 'F2',
|
||
items: [
|
||
OrderItem(
|
||
id: 204,
|
||
sku: 'SKU-050',
|
||
name: 'Банани імпортні',
|
||
category: 'Фрукти',
|
||
price: 49.90,
|
||
planQty: 1.5,
|
||
type: ItemType.clarify,
|
||
substitutes: [
|
||
const OrderItemSubstitute(sku: 'SKU-051', name: 'Яблуко Голден', priority: 1),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
Order(
|
||
id: 1003,
|
||
orderNumber: '#10236',
|
||
amount: 2340.00,
|
||
slotTime: DateTime.now().add(const Duration(minutes: 10)),
|
||
status: OrderStatus.newOrder,
|
||
customer: const Customer(
|
||
name: 'Андрій',
|
||
phone: '+380931112233',
|
||
comment: 'Без замін, будь ласка',
|
||
),
|
||
segments: [
|
||
OrderSegment(
|
||
id: 7,
|
||
name: 'Хліб та випічка',
|
||
zone: 'G1',
|
||
items: [
|
||
OrderItem(
|
||
id: 301,
|
||
sku: 'SKU-060',
|
||
name: 'Хліб Бородинський 400г',
|
||
category: 'Хліб',
|
||
price: 42.50,
|
||
planQty: 2,
|
||
),
|
||
OrderItem(
|
||
id: 302,
|
||
sku: 'SKU-061',
|
||
name: 'Батон нарізний 500г',
|
||
category: 'Хліб',
|
||
price: 38.90,
|
||
planQty: 1,
|
||
),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
];
|
||
|
||
static List<StorageSlot> get availableSlots => [
|
||
const StorageSlot(id: 1, type: StorageSlotType.cell, name: 'Ячейка 1', maxOrders: 3),
|
||
const StorageSlot(id: 2, type: StorageSlotType.cell, name: 'Ячейка 2', maxOrders: 3),
|
||
const StorageSlot(id: 3, type: StorageSlotType.cell, name: 'Ячейка 3', maxOrders: 3),
|
||
const StorageSlot(id: 4, type: StorageSlotType.cell, name: 'Ячейка 4', maxOrders: 3),
|
||
const StorageSlot(id: 5, type: StorageSlotType.cell, name: 'Ячейка 5', maxOrders: 3),
|
||
const StorageSlot(id: 6, type: StorageSlotType.freezer, name: 'Морозилка A', maxOrders: 5),
|
||
const StorageSlot(id: 7, type: StorageSlotType.freezer, name: 'Морозилка B', maxOrders: 5),
|
||
const StorageSlot(id: 8, type: StorageSlotType.fridge, name: 'Холодильник 1', maxOrders: 4),
|
||
const StorageSlot(id: 9, type: StorageSlotType.fridge, name: 'Холодильник 2', maxOrders: 4),
|
||
];
|
||
}
|