Commit Graph

2611 Commits

Author SHA1 Message Date
Marshal
540f4a1ff6 changes 2026-07-20 11:41:57 +00:00
Marshal
0727de0f4d Refactor clearance terminology to document approval across services and UI components 2026-07-20 11:41:57 +00:00
Nathnael
b67aa813f9 fix: type error in portal 2026-07-20 11:41:57 +00:00
Nathnael
38bccaccf9 fix: normalized the region and logged the otp properly 2026-07-20 11:41:57 +00:00
Nathnael
6cb921e617 fix: 194 and 183 plane takss 2026-07-20 11:41:57 +00:00
Nathnael
ccd9afacb1 feat: setup forget password to the backoffice 2026-07-20 11:41:57 +00:00
Nathnael
4b4a4ce788 feat: setup the attachment to the passenger clients 2026-07-20 11:41:57 +00:00
Nathnael
779af4c348 feat: setup the attachment to the passenger api 2026-07-20 11:41:57 +00:00
Nathnael
9fbe1c5236 feat: setup attachment to the freight chat 2026-07-20 11:41:57 +00:00
Hagernesh
c1c362ab9d fix(mile): only send bookings that bought EDR haulage to the mile queues
The rule that a customer's own truck and an EDR road leg are alternatives
existed on the truck side only (CustomerTruckService.assertSelfHaulPaid).
LastMileService had no counterpart: create checked payment and nothing else,
so any paid booking could be accepted into the queue. A booking took a
customer truck at 06:42 and an EDR last-mile leg with a real EDR truck at
06:47, neither side aware of the other, on a contract that had chosen no
road legs at all.

The road legs are chosen on the contract and copied onto the booking, and
the pickup/delivery address is the only per-booking record of that choice.
service_types cannot serve: every type ships with includes_first_mile and
includes_last_mile set to true, so reading them would mean no booking could
ever self-haul. That same always-true flag had already killed the first-mile
guard, whose `address || serviceType.includesFirstMile` admitted every paid
export booking.

One shared rule now answers it for both sides, so the two halves cannot
drift apart again: last-mile create rejects a booking that chose no road
legs and one already carrying a customer truck; first-mile no longer honours
the service-type flag; the customer-truck guard reads the same helper.

Existing legs are untouched — the guards are on creation, so the one booking
already carrying both needs a human to reconcile it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 08:03:16 +00:00
Hagernesh
2906c6bb45 test(train-scheduling): cover the checkpoint backdating guard on the DTO
The IsNotBackdated validator was covered in isolation, but not on the DTO
that actually carries it. Asserts a backdated occurredAt is rejected, that
"now" passes, and that omitting the field still validates so the service can
stamp it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:13:52 +00:00
Hagernesh
536d6043c2 fix(clearance): allow customs risk to be corrected and keep the trail
RiskStep returned early to a badge as soon as a risk level existed, so the
control was unreachable and a mis-assigned level could never be corrected.
Both the server and the sibling AssignRiskCard treat risk as correctable
until duty is advised off it — completeWithMetadata has no already-completed
guard and overwrites metadata.riskLevel. RiskStep was stricter than either.

It now keeps the control mounted alongside the assigned badge, offers
"Reassign risk", and locks to badge-only once DUTY_TAXES_ADVISED completes.
The control also reads the persisted level (it was hardcoded to GREEN, so
unhiding it alone would have misreported the assignment), and the T1 gate is
skipped once a level exists, since risk cannot be assigned without a closed
T1 and stale T1 data must not hide the badge.

Correcting a level previously left no record of the old value, who changed
it, or when — thin ground for a customer-visible level that may be disputed.
assignRisk now appends each decision to metadata.riskHistory: the level, the
level it replaced, the timestamp, the user id, and a display name resolved
at assignment time so the trail shows a person rather than a UUID. riskLevel
still carries the current value and always equals the last entry, so
existing consumers are unchanged.

History lives on the existing metadata JSONB column, so no migration is
needed, and the logic sits in assignRisk rather than the shared
completeWithMetadata that adviseDuty and others also use. Re-picking the
level already in force is not recorded — it changed nothing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 07:13:52 +00:00
Hagernesh
21df861979 back date validator 2026-07-20 07:13:52 +00:00
Hagernesh
c0fdffa7ef Marshalling document empty wagon rendering 2026-07-20 07:13:52 +00:00
Hagernesh
eb998bfddd Facility 2026-07-20 07:13:51 +00:00
Hagernesh
ee6ad7da8b Auto arrival train 2026-07-20 07:13:51 +00:00
Hagernesh
a5973de6e1 feat(intercity): a facility only handles the cargo its equipment can lift
Containers need a reach stacker or gantry, so only Indode, Modjo and Dire Dawa
take them. Bulk needs far less and is handled at all five facilities. Having a
facility was previously enough to load anything, so a container booking through
Sebeta or Adama would have been accepted and then had nothing to lift it.

- yard_facilities gains handles_container / handles_bulk, both defaulting true so
  a facility handles everything unless told otherwise; the seeder states the real
  capability.
- The intercity gate now refuses cargo a facility cannot lift, saying which type,
  not just "no facility". canHandleFreight keeps that rule in the resolver so
  callers cannot get it subtly wrong.
- The intercity list resolves each end against the booking's own freight type, so
  the view flags a container booking routed through a bulk-only yard while the
  train is still coming rather than when the load is refused.

Import/export untouched — the gate is still DOMESTIC-only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 07:13:51 +00:00
Marshal
771aa2a605 Add train deactivation feature and import train number management
- 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.
2026-07-20 07:04:23 +00:00
Marshal
ab355d0e16 Enhance cargo description handling in contract forms 2026-07-20 06:10:50 +00:00
Marshal
bac0fa7f48 changes 2026-07-20 05:51:21 +00:00
marshal
f672d66a92 Merge pull request #826 from Tria-plc/freight_feature/usermanagement
changes
2026-07-20 06:06:06 +03:00
Marshal
4969f62896 changes 2026-07-20 03:05:28 +00:00
Stephanos A.
8d7a914ab7 Merge branch 'dev' into quick-fix-main 2026-07-20 00:42:25 +03:00
Stephanos A
c62491b236 Reports (overall, seats report, passenger export) updates 2026-07-20 00:37:10 +03:00
Roba Boru
3293040438 Merge branch 'main' of https://github.com/Tria-plc/edr-platform into alpha 2026-07-20 00:19:31 +03:00
Roba Boru
c31a337a98 Include coach number to voucher 2026-07-19 23:58:14 +03:00
Stephanos A
57390647d8 Search schedule update 2026-07-19 23:57:16 +03:00
Stephanos A
8e84fcebd5 Passenger list report filter updates 2026-07-19 22:52:23 +03:00
Roba Boru
a6e4f0538c Merge branch 'main' of https://github.com/Tria-plc/edr-platform into alpha 2026-07-19 22:48:46 +03:00
Roba Boru
bb78c1880e Merge branch 'alpha' of https://github.com/Tria-plc/edr-platform into alpha 2026-07-19 22:47:11 +03:00
Roba Boru
d43229528e Fix price inconsistency 2026-07-19 22:46:36 +03:00
Abubeker Yasin
f48a4735c8 fix: ( telebirr ) read transId from webhook for provider_txn_id 2026-07-19 22:16:20 +03:00
Stephanos A
eb41f4bb5f Merge branch 'quick-fix-main' of github.com:Tria-plc/edr-platform into quick-fix-main 2026-07-19 21:03:27 +03:00
Stephanos A
264206b57a Passenger report updates 2026-07-19 20:58:00 +03:00
Roba Boru
996c0d8896 Merge branch 'main' of https://github.com/Tria-plc/edr-platform into alpha 2026-07-19 18:51:41 +03:00
Roba Boru
f57f8d4550 Fix blocked seat count on booking result 2026-07-19 18:50:37 +03:00
Roba Boru
1e08f98705 Fix migration 2026-07-19 18:29:23 +03:00
Roba Boru
1804fba5bb debug(passenger-api): expose Prisma error code in 500 response body
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>
2026-07-19 18:18:08 +03:00
Roba Boru
85cd6cdf2a fix(passenger-api): repair StopStatus enum values in deployed DB
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>
2026-07-19 17:54:06 +03:00
Stephanos A.
723a5dcf92 Merge branch 'main' into quick-fix-main 2026-07-19 17:29:46 +03:00
Stephanos A
80915f94ec Passenger reports filter updates 2026-07-19 17:21:44 +03:00
Roba Boru
df992eb794 fix: add partial WHERE clause to JourneySegment unique index migration
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>
2026-07-19 17:10:57 +03:00
marshal
9170c12a73 Merge pull request #808 from Tria-plc/freight_feature/usermanagement
add contract clearance detail page and enhance contract requests fil…
2026-07-19 13:25:44 +03:00
marshal
3ab7a09d2d Merge pull request #807 from Tria-plc/freight_feature/usermanagement
add contract clearance detail page and enhance contract requests fil…
2026-07-19 12:48:00 +03:00
Marshal
de816ea9d4 add contract clearance detail page and enhance contract requests filtering and ui fix 2026-07-19 09:47:36 +00:00
Marshal
5de1853c0d add contract clearance detail page and enhance contract requests filtering and ui fix 2026-07-19 09:37:48 +00:00
marshal
969caf90a1 Merge pull request #806 from Tria-plc/freight_feature/usermanagement
add contract clearance detail page and enhance contract requests fil…
2026-07-19 11:41:45 +03:00
Marshal
8816d50276 add contract clearance detail page and enhance contract requests filtering and ui fix 2026-07-19 08:41:03 +00:00
marshal
e2e111e663 Merge pull request #805 from Tria-plc/freight_feature/usermanagement
streamline booking detail components and enhance journey visualization
2026-07-19 10:07:48 +03:00
Marshal
17dc505d50 streamline booking detail components and enhance journey visualization
- 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.
2026-07-19 07:06:58 +00:00