velmart-picker/lib/data/mock/mock_data.dart
Fibe Agent 5ba2691eac feat: initial Velmart Picker Flutter app
- 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)
2026-04-23 21:43:07 +00:00

223 lines
7.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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),
];
}