- Introduced new yard distances resource with CRUD operations.
- Created migration for yard distances table with necessary constraints.
- Implemented service and repository for yard distances handling.
- Added controller for API endpoints to manage yard distances.
- Updated rule engine configuration to include yard distances.
- Enhanced rule engine resource page to support yard distance selection.
- Updated contracts and train builder pages to handle new yard distance logic.
- Added error handling utility for better error message extraction.
- Integrated CompanyInfoCard, ContainersCard, and ContractInfoCard into ChangesRequestedView, DraftBookingView, and ReadonlyBookingView components.
- Updated utils to handle new booking detail types and improve container summary calculations.
- Enhanced ShipmentDetailsCard and ScheduleCard to utilize updated booking detail structure and display relevant information more effectively.
- Introduced DEACTIVATED status for trains, allowing staff to park trains indefinitely.
- Implemented methods to deactivate and reactivate trains in the TrainBuilderService.
- Added UI components for train deactivation and reactivation in TrainBuilderDetailPage.
- Created a dropdown setting for admin-managed import train numbers, with corresponding migrations.
- Updated yard code length to accommodate soft-delete suffix.
- Enhanced train status handling to include DEACTIVATED state.
Adds prismaCode and prismaMeta fields to 500 responses so the exact
Prisma error code (P2022, P2023, etc.) is visible in curl/Swagger without
needing server log access. Temporary diagnostic aid.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The init migration created StopStatus with UPCOMING/APPROACHING/CURRENT/COMPLETED.
Migration 20260717000001 was an empty no-op file that claimed the rename was
"applied directly", but the ALTER TYPE RENAME VALUE SQL was never executed on
deployed environments. TripStopTime rows with status='UPCOMING' cause P2023
(PrismaClientKnownRequestError) on every search call that includes stopTimes.
This idempotent migration checks pg_enum before renaming so it is safe to run
whether or not the rename was previously applied.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Without WHERE ("seatId" IS NOT NULL) the index creation fails in
environments that have JourneySegment rows with NULL seatId sharing
the same (scheduleId, departureStationId), which aborts the CI/CD
pipeline before the API server restarts. Also adds the passenger.
schema prefix to match the DELETE statement above it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Removed the BookingClearanceWorkflowBanner from ClearanceCard as the clearance progress is now integrated into the unified journey wizard.
- Eliminated the MilestoneTimeline component from DocumentsTab, consolidating customs progress into the JourneyWizard.
- Updated PageHeader to include a ContractReferenceLink for better navigation to contract details.
- Simplified ShipmentTrackingCard to focus on duty/tax payment slip upload, removing unnecessary milestone display.
- Integrated JourneyWizard component to visualize the booking journey, replacing the previous progress tracker.
- Enhanced ContractDetailPage to better categorize documents and improve user experience with clearer sections for profile, business license, clearance, and other documents.
- Introduced CSS for contracts table to manage column sizing and sticky headers effectively.
- Added ContractReferenceLink component for backoffice to link to contract details, ensuring consistent navigation across applications.