• Reworks the demo seed and SPA to match the reference customer's
    work-order management process (EBC-PP-001 from raw/ docs).
    
    Demo seed (DemoSeedRunner):
      - 7 printing-specific items: paper stock, 4-color ink, CTP plates,
        lamination film, business cards, brochures, posters
      - 4 partners: 2 customers (Wucai Advertising, Globe Marketing),
        2 suppliers (Huazhong Paper, InkPro Industries)
      - 2 warehouses with opening stock for all items
      - Pre-seeded WO-PRINT-0001 with full BOM (3 inputs: paper +
        ink + CTP plates from WH-RAW) and 3-step routing (CTP
        plate-making @ CTP-ROOM-01 -> offset printing @ PRESS-A ->
        post-press finishing @ BIND-01) matching EBC-PP-001 steps
        C-010/C-040
      - 2 DRAFT sales orders: SO-2026-0001 (100x business cards +
        500x brochures, $1950), SO-2026-0002 (200x posters, $760)
      - 1 DRAFT purchase order: PO-2026-0001 (10000x paper + 50kg
        ink, $2550) from Huazhong Paper
    
    SPA additions:
      - New CreateSalesOrderPage with customer dropdown, item
        selector, dynamic line add/remove, quantity + price inputs.
        Navigates to the detail page on creation.
      - "+ New Order" button on the SalesOrdersPage header
      - Dashboard "Try the demo" section rewritten to walk the
        EBC-PP-001 flow: create SO -> confirm (auto-spawns WOs) ->
        walk WO routing -> complete (material issue + production
        receipt) -> ship SO (stock debit + AR settle)
      - salesOrders.create() added to the typed API client
    
    The key demo beat: confirming SO-2026-0001 auto-spawns
    WO-FROM-SO-2026-0001-L1 and -L2 via SalesOrderConfirmedSubscriber
    (EBC-PP-001 step B-010). The pre-seeded WO-PRINT-0001 shows
    the full BOM + routing story separately. Together they
    demonstrate that the framework expresses the customer's
    production workflow through configuration, not code.
    
    Smoke verified on fresh Postgres: all 7 items seeded, WO with
    3 BOM + 3 ops created, SO confirm spawns 2 WOs with source
    traceability, SPA /sales-orders/new renders and creates orders.
    zichun authored
     
    Browse Code »