Commit Graph

3184 Commits

Author SHA1 Message Date
Nathnael
7393034188 feat(WIP): require the gm for fayda on ethiopian companies 2026-08-04 12:43:25 +00:00
Nathnael
415ae52143 test(integration): boot freight API in-process across parallel shards
The suite drove a containerized freight API, so every code change needed an
image rebuild before a test could see it, and there was no way to attach a
debugger. Files also ran strictly in sequence against one shared database,
which is the root of the warm-stack gotchas the README documents: stowaway
paid bookings climbing back aboard, a short consist on the fifth file.

The freight app now boots inside each vitest worker from dist/, and each
worker owns a whole shard of the topology - its own database, payment API,
gateway mock and broker vhost - so nothing mutable is shared and files run
in parallel. Full suite drops from roughly 20 minutes to 196s at 4 shards.

- main.ts exports createFreightApp() so the harness applies the same prefix,
  pipes, filters and interceptors as production instead of replaying them by
  hand; self-start is guarded by require.main so the Dockerfile CMD still boots
- booking-window tick cadence is env-driven (BOOKING_WINDOW_TICK_CRON), */1 in
  the suite, */10 unchanged in production
- prepare-shards.mjs seeds a template database (boot seeders, then the SQL
  fixtures that depend on them) and clones it per shard; it.mjs re-clones on
  every run, so each run is hermetic
- gateway mock and payment API are generated per shard: the mock keeps modes
  and orders process-global and 20 of 25 specs reset it in beforeAll, and the
  inbound CBE bill query has to reach one specific shard's app
- poll() samples every 250ms instead of 2000ms, keeping the caller's deadline
- authz.it.ts seeds its own invoice; it previously read another spec's leftover
  and returned early, which silently passed on a pristine database

Known: an unlocked MAX(sequence_no)+1 in train-scheduling.service.ts races
under concurrent allocation and leaves a short consist, so 1-3 specs fail
intermittently. Pre-existing and reproduces at the production tick cadence.
2026-08-04 12:43:25 +00:00
Nathnael
3a69b961d4 refactor(freight): move the Fayda callback to /fayda/callback
Namespaces the OAuth landing path in all three places it exists: the API's
ack controller, both web apps' routes, and the redirect_uri env values.
A bare /callback claimed a generic top-level path in every app for one
provider's redirect.

The API side needed care. The ack controller moves to @Controller
('fayda/callback'), and the global-prefix exclusion has to name that exact
path — setGlobalPrefix's exclude is an exact route match, not a subtree, so
excluding "fayda" would have left /fayda/callback served at
/api/fayda/callback and 404ing at the registered redirect_uri, while
reading as though it covered everything under /fayda. Naming the full path
also keeps /api/fayda/verification/* prefixed, which every client calls.

Also drops a stale comment on the portal's callback route describing the
popup that no longer exists, and records why the route is public: behind
RequireAuth the onboarding gate redirects to /portal before the code+state
exchange can run.

NOT verified at runtime — this changes route registration, so boot the API
and confirm GET /fayda/callback answers un-prefixed and
/api/fayda/verification/start still resolves before relying on it.

Deploying this requires registering the new redirect_uri with eSignet
first; FAYDA_WEB_REDIRECT_URI, FAYDA_PORTAL_REDIRECT_URI and any mobile
client must be updated in step or verification breaks with a redirect_uri
mismatch.
2026-08-04 12:43:25 +00:00
Nathnael
53accbc57b feat(freight-portal): verify Fayda via redirect, gate DARS on verification
The verification popup was opened after the /start round-trip, by which
point the click's user activation is spent — iOS Safari blocks it outright,
so mobile customers could never verify. Replace the popup with a full-page
redirect: the panel stashes {subject, returnTo} in sessionStorage and
navigates the tab to eSignet, and /callback completes the code+state
exchange itself before returning the user where they were.

This drops the postMessage listener, the popup-closed poller and the
pop-up-blocked branch. onVerified goes with them: the app boots fresh on
the way back, so the target page refetches rather than being pushed to.

Hide the DARS delegation upload until the PoA is Fayda-verified. The paper
authorises the representative the verification names, so it has nothing to
authorise before one exists — and it has to stop being required while
hidden, or the save blocks on a control the customer cannot see. Freight
forwarders are still held to having a PoA by the step's verification gate
and by the API. This also removes the one thing the redirect could not
carry across: a staged File cannot be serialised to sessionStorage, and
there is now never one pending before verification.

Unsaved text typed since the last step-save is still lost on redirect; the
wizard's per-step persistence covers everything already advanced past.
2026-08-04 12:43:25 +00:00
ghost2023
3a5126670f fix: centralized on rabbitmq for sms 2026-08-04 15:32:49 +03:00
Nathnael
f0fd15b139 Merge branch 'dev' into fixes 2026-08-04 09:00:52 +00:00
Nathnael
acd2cfbe8c feat: add drain tail to the payments 2026-08-04 08:59:33 +00:00
marshal
1352b46c33 Merge pull request #1102 from Tria-plc/freight_feature/usermanagement
change ewit images
2026-08-04 11:43:01 +03:00
Marshal
aac1175964 change ewit images 2026-08-04 08:42:15 +00:00
marshal
61c3faa23e Merge pull request #1101 from Tria-plc/freight_feature/usermanagement
allow the custoemr to book while the payment window time
2026-08-04 11:15:02 +03:00
Marshal
2eb752e8c2 allow the custoemr to book while the payment window time 2026-08-04 08:10:00 +00:00
Hagernesh
87b04973d8 fix(bookings): gate export carriage acceptance sheet on GRN receipt
The sheet attests EDR has taken custody. Export custody happens at
warehouse receipt, so the shared received-with-GRN gate now runs even
when wagons are already allocated. Receipt-row query also accepts the
legacy notes GRN fallback, matching the loading gate.
2026-08-04 07:59:39 +00:00
Abubeker Yasin
19ab3af1cb chore: ( iam ) update iam package 2026-08-04 10:56:47 +03:00
Abubeker Yasin
85d5faed34 chore: ( iam ) update iam package 2026-08-04 10:27:59 +03:00
Hagernesh
dfc7dfec5a fix(freight): filter container returns by returned-by truck type
Top Returned Containers table ignored the EDR/Customer tab because
the backend never persisted which truck type performed the return.
Added returned_by column + DTO/entity field, wired create payload to
send it, and filtered the table by the active tab.
2026-08-04 06:55:22 +00:00
Hagernesh
5c33ea90bd Truck operations inside each bookings 2026-08-04 06:55:21 +00:00
marshal
237bb067ad Merge pull request #1097 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-08-04 01:11:09 +03:00
Marshal
05450d4693 add reports module with controller, service, and repository 2026-08-03 22:08:16 +00:00
Marshal
5e8eec9539 add reports module with controller, service, and repository 2026-08-03 21:58:35 +00:00
Marshal
c3979b08b6 add reports module with controller, service, and repository 2026-08-03 21:43:23 +00:00
Marshal
e68bdb7a1a Enhance overview and train scheduling features
- Updated OverviewContractsTabPanel to include a new donut chart for freight type distribution.
- Modified OverviewOperationsTabPanel to improve data visualization with additional charts and refactored data handling.
- Introduced CreateScheduleWindowFields component for configuring booking windows in train scheduling.
- Added new API endpoints for allocation candidates and booking allocation in trainScheduling.service.
- Enhanced BookingRequestsPage to support allocation of paid bookings with a modal for selecting alternative dates.
- Updated QUERY_KEYS and URLS constants to accommodate new operations and features.
- Improved type definitions for overview and train scheduling to support new functionalities.
2026-08-03 21:06:59 +00:00
marshal
e56905de57 Merge pull request #1096 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-08-03 22:53:30 +03:00
Marshal
488c2465be feat: add per-ton cargo loading limits and update related services 2026-08-03 19:16:28 +00:00
Marshal
9afc281d21 fix issue: user trade access 2026-08-03 13:06:43 +00:00
Marshal
106b07a02b add staff user list endpoint 2026-08-03 12:32:10 +00:00
Nathnael Wondisha
229fc8e2db Merge pull request #1094 from Tria-plc/fixes
Fixes
2026-08-03 15:01:08 +03:00
Nathnael
72532f36cd fix: seeder 2026-08-03 11:58:33 +00:00
marshal
3a7ed7d24b Merge pull request #1092 from Tria-plc/freight_feature/usermanagement
expose per-side facility flags
2026-08-03 11:59:11 +03:00
Marshal
c12108d953 expose per-side facility flags 2026-08-03 08:49:07 +00:00
mulish77
3c4dd07128 Merge pull request #1091 from Tria-plc/mulufeatures
Adding more detail messages for seat blocking
2026-08-03 11:39:09 +03:00
Mulu Mehari
8594d75164 Adding more detail messages for seat blocking 2026-08-03 11:37:16 +03:00
marshal
e7d1143c26 Merge pull request #1090 from Tria-plc/freight_feature/usermanagement
expose per-side facility flags
2026-08-03 11:22:08 +03:00
Marshal
dfd27efb6b expose per-side facility flags 2026-08-03 08:20:18 +00:00
Hagernesh
6a62ece814 feat(train-scheduling): auto-place intercity cargo on wagons freed mid-corridor
Intercity bookings ride the wagons freed by earlier unloads (e.g. import
containers uncoupled at Dire Dawa). loadBooking now auto-allocates a
DOMESTIC booking onto on-train slots whose cargo has all departed —
greedy in consist order by capacity, container numbers copied for the
marshalling tally. Falls back to unallocated load when nothing is free.
2026-08-02 23:07:59 +00:00
Hagernesh
035369af43 fix intercity unloading at facility 2026-08-02 23:07:59 +00:00
marshal
c3ba0192a9 Merge pull request #1083 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-08-03 01:40:20 +03:00
Marshal
f4fd469643 per-user trade-direction access scope 2026-08-02 22:29:58 +00:00
Marshal
c055abe8c1 train 3d visualizations 2026-08-02 21:48:22 +00:00
Marshal
6d8e5551ad train 3d visualizations 2026-08-02 21:46:00 +00:00
Marshal
163c501f8f train 3d visualizations 2026-08-02 21:35:45 +00:00
ghost2023
12fb756cf5 fix: duplicate 2026-08-03 00:32:38 +03:00
Nathnael Wondisha
62a7e35708 Merge branch 'dev' into staging 2026-08-03 00:24:17 +03:00
Marshal
94c64c2390 configer the stamp 2026-08-02 21:09:37 +00:00
Nathnael
6f137a11c3 fix:cbe and cac 2026-08-02 20:37:16 +00:00
Marshal
950bcc0912 configer the stamp 2026-08-02 20:29:09 +00:00
mulish77
2822e73503 Merge pull request #1079 from Tria-plc/mulufeatures
Adding seat blocking revenue loss dashboard
2026-08-02 23:13:46 +03:00
Nathnael
da1da7befb fix: cbe freight base url 2026-08-02 20:10:42 +00:00
Nathnael
2ead1d0782 fix: cbe not appearing 2026-08-02 20:09:27 +00:00
Mulu Mehari
f0295f401a Adding seat blocking revenue loss dashboard 2026-08-02 23:08:15 +03:00
ghost2023
16baa1dd1d fix: cbe callback 2026-08-02 23:01:29 +03:00