# transfer-order-create-form

## Overview

Form to create a new Transfer Order in DRAFT. Header captures source/destination Site (mutually exclusive) and optional notes. Lines render as a bordered table (Item / Qty / Unit / Remove) that is client-side paginated with a footer (row count, a rows-per-page selector defaulting to 100, and First/Prev/Next/Last controls); every row stays in memory so the full set is submitted. Unit is a disabled `Select` pinned to the seed `Unit.symbol = "each"` — the create resolver injects `unitId = each.id` on every line, so there is nothing to pick.

Submitting does not write immediately: a confirmation modal (`ConfirmDialog`, the uniform confirmation component) sits between the Create action and the mutation, summarising source → destination and the line count. Cancel returns to the form with all inputs intact; Confirm runs the create exactly once (an in-flight guard absorbs rapid double-activations, and the modal's initial focus is on Cancel so a stray Enter dismisses rather than confirms).

## Screen Type

Form

### Form Details

#### Input Fields

| Field Name | Field Type | Required (Yes/No) | Options / Lookup |
| --- | --- | --- | --- |
| Source Site (ship from) | lookup | Yes | Site lookup (excludes destination's selected id) |
| Destination Site (receive at) | lookup | Yes | Site lookup (excludes source's selected id) |
| Notes | textarea | No | — |
| Line Items: Item | lookup | Yes | Item lookup filtered to source's on-hand stock |
| Line Items: Unit | select (disabled) | Yes (auto) | Pinned to seed Unit.symbol = "each" |
| Line Items: Quantity | number | Yes | Integer, > 0 |

## Access Control

- [inventory-manager](../actor/inventory-manager.md)
