Replaces the free-text "Place of Delivery" with a dropdown sourced from a new admin-managed Delivery Locations list (each = a Company FK + free-text address). - schema + migration: new DeliveryLocation model (companyId, address, isActive). - permission: manage_delivery_locations granted to Manager + SuperUser + Admin (Manager-accessible, not admin-only, per the issue). - admin screen /admin/delivery-locations: table + Add/Edit dialogs + activate/deactivate + delete (mirrors /admin/sites); sidebar link under Administration for Manager/SuperUser/Admin. - PO forms (new / edit / manager-edit): shared <DeliveryLocationField> native select populated from active locations, formatted "Company — address". - PurchaseOrder.placeOfDelivery stays a free-text SNAPSHOT (no FK) — the dropdown only changes how the value is picked, so export/import/historical POs are unchanged, and an edit preserves a current value not in the list as a "(current)" option. Deleting a location is therefore always safe. - tests: delivery-location CRUD + permission guard (6). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9 lines
432 B
TypeScript
9 lines
432 B
TypeScript
/**
|
|
* Delivery locations (issue #19) — admin-managed destinations used to populate
|
|
* the PO "Place of Delivery" dropdown. A location is a Company + a free-text
|
|
* address; the PO stores the resolved single string below as a point-in-time
|
|
* snapshot in `PurchaseOrder.placeOfDelivery`.
|
|
*/
|
|
export function formatDeliveryLocation(companyName: string, address: string): string {
|
|
return `${companyName} — ${address}`.trim();
|
|
}
|