Add PocketBase collections, APIs & migration docs
Introduce PocketBase workflow support, migration tooling, server APIs and documentation. Adds a set of PocketBase collection JSONs (order_items, order_items_v2, collection_pool, delivery_notes, delivery_note_items, repairs) and a large import manifest for workflow collections; includes docs describing MCP/API layer, migration audit, order-item schema and rollout plans. Adds server-side agent/MCP endpoints and services (api/mcp, api/v1/orders, collection-pool, order-items status, health) plus helper modules (pocketbase-admin, orders-service, order-item-status, agent-auth) and a migration script to create order_items_v2/collection_pool. UI: new pages for collection-pool, delivery-notes, repairs and several updates to orders/quotes pages, sidebar, tooltip and pb helpers/types. Also updates package.json (migration script and related changes) and global styles. Required env vars and suggested migration command are documented (e.g. NEXT_PUBLIC_POCKETBASE_URL, PB_ADMIN_EMAIL, PB_ADMIN_PASSWORD, ORDER_ITEMS_COLLECTION; run npm run pb:migrate:orders-v2).
2026-05-25 16:39:33 +00:00
|
|
|
{
|
|
|
|
|
"name": "order_items_v2",
|
|
|
|
|
"type": "base",
|
|
|
|
|
"system": false,
|
|
|
|
|
"listRule": "@request.auth.id != ''",
|
|
|
|
|
"viewRule": "@request.auth.id != ''",
|
|
|
|
|
"createRule": "@request.auth.id != ''",
|
|
|
|
|
"updateRule": "@request.auth.id != ''",
|
|
|
|
|
"deleteRule": "@request.auth.id != ''",
|
|
|
|
|
"fields": [
|
|
|
|
|
{ "name": "order", "type": "relation", "required": true, "options": { "collectionId": "REPLACE_ORDERS_COLLECTION_ID", "maxSelect": 1, "minSelect": null, "displayFields": [] } },
|
|
|
|
|
{ "name": "quote_item", "type": "relation", "required": false, "options": { "collectionId": "REPLACE_QUOTE_ITEMS_COLLECTION_ID", "maxSelect": 1, "minSelect": null, "displayFields": [] } },
|
|
|
|
|
{ "name": "purchase_order", "type": "relation", "required": false, "options": { "collectionId": "REPLACE_PURCHASE_ORDERS_COLLECTION_ID", "maxSelect": 1, "minSelect": null, "displayFields": [] } },
|
|
|
|
|
{ "name": "supplier", "type": "relation", "required": false, "options": { "collectionId": "REPLACE_SUPPLIERS_COLLECTION_ID", "maxSelect": 1, "minSelect": null, "displayFields": [] } },
|
|
|
|
|
{ "name": "drv_id", "type": "relation", "required": false, "options": { "collectionId": "_pb_users_auth_", "maxSelect": 1, "minSelect": null, "displayFields": ["name", "email"] } },
|
|
|
|
|
|
|
|
|
|
{ "name": "description", "type": "text", "required": true, "options": { "min": 1, "max": 5000, "pattern": "" } },
|
|
|
|
|
{ "name": "po_description", "type": "text", "required": false, "options": { "min": null, "max": 5000, "pattern": "" } },
|
|
|
|
|
{ "name": "notes", "type": "text", "required": false, "options": { "min": null, "max": 5000, "pattern": "" } },
|
|
|
|
|
{ "name": "problem_notes", "type": "text", "required": false, "options": { "min": null, "max": 5000, "pattern": "" } },
|
|
|
|
|
|
|
|
|
|
{ "name": "quantity", "type": "number", "required": true, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
|
{ "name": "order_qty", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
|
{ "name": "qty_processed", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
|
{ "name": "qty_assigned", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
|
{ "name": "qty_collected", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
|
{ "name": "qty_delivered", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
|
|
|
|
|
|
{ "name": "cost_price", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
|
{ "name": "selling_price", "type": "number", "required": false, "options": { "min": 0, "max": null, "noDecimal": false } },
|
|
|
|
|
{ "name": "markup", "type": "number", "required": false, "options": { "min": null, "max": null, "noDecimal": false } },
|
|
|
|
|
{ "name": "markup_percent", "type": "number", "required": false, "options": { "min": null, "max": null, "noDecimal": false } },
|
|
|
|
|
|
|
|
|
|
{ "name": "item_status", "type": "select", "required": true, "options": { "maxSelect": 1, "values": ["pending", "processed", "po_generated", "ready_delivery", "delivered", "cancelled"] } },
|
|
|
|
|
{ "name": "drv_status", "type": "select", "required": true, "options": { "maxSelect": 1, "values": ["unassigned", "assigned", "en_route", "collected", "failed"] } },
|
|
|
|
|
{ "name": "delivery_status", "type": "select", "required": false, "options": { "maxSelect": 1, "values": ["pending", "ready", "in_transit", "delivered", "failed"] } },
|
|
|
|
|
{ "name": "invoice_status", "type": "select", "required": false, "options": { "maxSelect": 1, "values": ["pending", "invoiced", "paid", "cancelled"] } },
|
|
|
|
|
|
|
|
|
|
{ "name": "problem_flag", "type": "bool", "required": false },
|
|
|
|
|
{ "name": "problem_type", "type": "select", "required": false, "options": { "maxSelect": 1, "values": ["stock", "supplier", "driver", "delivery", "pricing", "other"] } },
|
|
|
|
|
|
|
|
|
|
{ "name": "drv_assigned_at", "type": "date", "required": false, "options": { "min": "", "max": "" } },
|
|
|
|
|
{ "name": "drv_collected_at", "type": "date", "required": false, "options": { "min": "", "max": "" } },
|
|
|
|
|
{ "name": "delivered_at", "type": "date", "required": false, "options": { "min": "", "max": "" } },
|
|
|
|
|
|
|
|
|
|
{ "name": "legacy_order_item_id", "type": "text", "required": false, "options": { "min": null, "max": 64, "pattern": "" } }
|
|
|
|
|
],
|
|
|
|
|
"indexes": [
|
|
|
|
|
"CREATE INDEX idx_order_items_v2_order ON order_items_v2 (order)",
|
|
|
|
|
"CREATE INDEX idx_order_items_v2_item_status ON order_items_v2 (item_status)",
|
|
|
|
|
"CREATE INDEX idx_order_items_v2_drv_status ON order_items_v2 (drv_status)",
|
|
|
|
|
"CREATE INDEX idx_order_items_v2_supplier ON order_items_v2 (supplier)",
|
|
|
|
|
"CREATE INDEX idx_order_items_v2_drv_id ON order_items_v2 (drv_id)"
|
|
|
|
|
]
|
2026-06-11 18:30:02 +00:00
|
|
|
}
|