feat(reservations): detail page with agreement flow + contract mirror
Adds /berth-reservations/[id] with state-aware agreement card (none / in-flight / completed) and the Generate-agreement entry point that opens the wizard prefilled. handleDocumentCompleted now mirrors a signed reservation_agreement onto berth_reservations.contractFileId so the portal can resolve contracts without joining through documents. Reservation merge tokens (startDate/endDate/tenureType/termSummary/ signedDate) added to the catalog. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,13 @@ export const MERGE_FIELDS: MergeFieldCatalog = {
|
||||
{ token: '{{berth.tenureType}}', label: 'Tenure Type', required: false },
|
||||
{ token: '{{berth.tenureYears}}', label: 'Tenure Years', required: false },
|
||||
],
|
||||
reservation: [
|
||||
{ token: '{{reservation.startDate}}', label: 'Reservation Start Date', required: false },
|
||||
{ token: '{{reservation.endDate}}', label: 'Reservation End Date', required: false },
|
||||
{ token: '{{reservation.tenureType}}', label: 'Reservation Tenure Type', required: false },
|
||||
{ token: '{{reservation.termSummary}}', label: 'Reservation Term Summary', required: false },
|
||||
{ token: '{{reservation.signedDate}}', label: 'Reservation Signed Date', required: false },
|
||||
],
|
||||
port: [
|
||||
{ token: '{{port.name}}', label: 'Port Name', required: false },
|
||||
{ token: '{{port.defaultCurrency}}', label: 'Default Currency', required: false },
|
||||
|
||||
Reference in New Issue
Block a user