Commit Graph

1134 Commits

Author SHA1 Message Date
Marshal
acb6f286d4 fix(payments): reconcile with gateway before expiring unpaid holds
Replace the fixed 5-minute grace with a settlement check at expiry:
expire() calls the payment API's reconcile endpoint — paid intents are
kept and allocated via payment.succeeded, unverifiable results defer
expiry to the next tick, only verifiably unpaid holds expire.
2026-07-30 12:01:59 +00:00
Marshal
22de05fe8e Merge branch 'dev' of github.com:Tria-plc/edr-platform into freight_feature/usermanagement 2026-07-30 11:31:02 +00:00
Marshal
2ca04b8f98 changes export flow 2026-07-30 11:30:34 +00:00
Hagernesh
fe04d2edd6 feat: add warehouse gate times editor modal for import trucks
Enable per-truck editing of warehouse gate arrival/departure times
(arrivedAt/departedAt) via modal on Import Trucks page. Accessible via
row action menu for EDR-haulage trucks. Includes backend endpoint
POST /last-mile/:id/warehouse-gate-times and frontend modal with
DateTimePicker inputs.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-30 10:04:32 +00:00
Marshal
b671f07ce6 fix(rule-engine): merge duplicate Sebeta yards, block dupes
Two active Sebeta yards (LEGACY_DEST/'Sebeta' and SEBETA/'sebeta')
split rates and routes across different yard ids, so route-scoped rate
lookups missed. Migration repoints every yard reference to the survivor,
retires the duplicate, and adds partial unique indexes on active label
and code. Service now rejects case-insensitive duplicate labels on
create/update - the old guard only compared generated codes, which
missed labels whose existing code differs (LEGACY_DEST).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 09:25:02 +00:00
Marshal
9241ce01d2 fix(contracts): price base freight from contract lane only
Contract pricing matched base container/bulk rates by type+currency
with no origin/destination filter, so a lane with no configured rate
silently froze another lane's price into the contract snapshot
(CTR-2026-00065: DCT-Sebeta contract froze DCT-GMP rates) and bookings
then billed off it. Now scoped to the contract's first route and a
missing lane rate hard-blocks pricing with a 422, matching the
customs-clearance and booking-side behaviour.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 09:24:37 +00:00
Marshal
63604b0cf4 changes 2026-07-29 19:00:32 +00:00
Nathnael Wondisha
49fce33832 Merge pull request #1012 from Tria-plc/freight/nati-1
fayda verification and validation
2026-07-29 17:36:43 +03:00
Nathnael
848c0d7768 fix: customer settings fix 2026-07-29 14:30:35 +00:00
Hagernesh
e2ad024da1 fix(train-scheduling): marshalling doc 40ft/20ft counts were always 0
findByIdWithFullGraph loaded containerItems but not
containerItems.bookingContainer, so item.bookingContainer was always
undefined and the 40ft/20ft/total tallies on the Import/Export
Marshalling Document silently read as 0. Load containerType on both the
item and its bookingContainer, and resolve size from whichever is set.
2026-07-29 14:13:09 +00:00
Hagernesh
78b5665ea7 feat(marshalling-documents): add company column and container summary
Export and import marshalling documents now include:
- Company name column per cargo allocation row
- Executive summary with container counts (40ft, 20ft, total)
- Total weight already shown, now grouped with container data

Both export and import load list templates enhanced with same structure
for consistency. Container size calculated from booking container data.
2026-07-29 13:47:54 +00:00
Nathnael
aba39b0ec3 Merge branch 'dev' into freight/nati-1 2026-07-29 13:39:20 +00:00
Nathnael
16ef64fae2 feat: expose eTrade registration and fayda birthdate/gender in company profile 2026-07-29 13:38:39 +00:00
marshal
60f391f246 Merge pull request #1006 from Tria-plc/freight_feature/usermanagement
Add ContractCourtBadge component and integrate into contract pages
2026-07-29 16:37:51 +03:00
Marshal
47c25d3f3a Add ContractCourtBadge component and integrate into contract pages
- Introduced ContractCourtBadge to display the responsible party for contract actions.
- Updated ContractStatusBadge to include new court badge.
- Enhanced ClearanceDocumentsPage with additional filters for trade direction, freight type, and ownership.
- Modified ContractRequestDetailPage and ContractRequestsPage to utilize ContractCourtBadge.
2026-07-29 13:37:17 +00:00
Hagernesh
1b1b0e7ade feat(booking-trucks-tab): show truck-level detention, gate times, inspection status, and cargo costs
Booking detail now has a Trucks tab displaying every EDR or customer truck
assigned to a booking's last mile. Each row shows warehouse-gate times
(arrival/departure) and destination-detention times (arrival/return), with
detention costs and inspection status. Detention rows only for EDR trucks;
customer self-haul shows —. Reuses existing TruckDetentionModal and
FeePreviewModal for edit/view actions.

Backend: arrivalTrucksForBooking() adds lastMileId per truck (direct chain to
detention preview), containerItems() adds inspection_status column to responses.
No new SQL, no migrations, no new endpoints.

Frontend: BookingTrucksPanel.tsx self-fetches all data via existing warehouse +
last-mile services, renders adaptive table with cargo-cost strip above.
Wired into BookingRequestDetailPage.tsx tab bar.
2026-07-29 11:13:20 +00:00
marshal
fe79c2442c Merge pull request #1003 from Tria-plc/freight_feature/usermanagement
fix gl steps
2026-07-29 10:33:03 +03:00
Marshal
f6e363cd6f fix gl steps 2026-07-29 07:32:26 +00:00
Nathnael
68ef8dc5d7 test(freight-api): cover poa delegation and fayda identity gates
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 06:57:27 +00:00
Nathnael
68f6ec8c5f feat(freight-api): gate poa paper, fayda identity, foreign passport
- dars delegation paper mandatory wherever poa state changes (named,
  removed, forwarder role applied for/approved), not just onboarding
- ethiopian companies verify owner (and poa, once named) via fayda;
  identity, not general manager, is the verified subject
- foreign companies require a typed owner passport number instead,
  independent of an optional fayda verification
- fanNumber removed from client-writable dtos; server-derived only

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 06:57:27 +00:00
Nathnael
dcda8d7d37 feat(freight-api): drop fan claim from fayda verification
esignet userinfo carries no national id number. keep sub/name/email/
phone/address, remove fanClaims config and the hard-fail gate that
would've blocked every real verification.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 06:57:27 +00:00
marshal
fcbfb72be8 Merge pull request #1001 from Tria-plc/freight_feature/usermanagement
Refactor EdrOrgSeeder
2026-07-29 09:32:49 +03:00
Marshal
dfde6b9021 Refactor EdrOrgSeeder 2026-07-29 06:28:42 +00:00
marshal
69f4616480 Merge pull request #1000 from Tria-plc/freight_feature/usermanagement
New Transit Agents admin table (name, valid-from/to, active/suspended…
2026-07-29 08:46:14 +03:00
Marshal
b17a72c280 New Transit Agents admin table (name, valid-from/to, active/suspended, validity badge) — DJ assign step now picks from it, active+valid only. 2026-07-29 05:38:35 +00:00
Nathnael Wondisha
8309483d8f Merge pull request #996 from Tria-plc/freight/fix/auth-separation
feat(auth): add login audience middleware (EDRFREIGHT-415)
2026-07-28 13:52:42 +03:00
marshal
3e828d3a3b Merge pull request #997 from Tria-plc/freight_feature/usermanagement
let customers dispute booking duty/tax advice so GL Ethiopia can re-a…
2026-07-28 13:49:47 +03:00
Marshal
891311d861 let customers dispute booking duty/tax advice so GL Ethiopia can re-advise 2026-07-28 10:48:27 +00:00
Nathnael
e823874d39 feat(auth): add login audience middleware (EDRFREIGHT-415) 2026-07-28 10:46:55 +00:00
mulish77
881f7e1e56 Merge pull request #994 from Tria-plc/tests
Fixing cors issue in produciton
2026-07-28 13:37:53 +03:00
Muluhabt
83137ea0ef Fixing cors issue in produciton 2026-07-28 13:37:10 +03:00
marshal
9911d862f7 Merge pull request #992 from Tria-plc/freight_feature/usermanagement
Pre-declaration Djibouti GL assignee request flow
2026-07-28 12:17:50 +03:00
Marshal
e1c831211f Pre-declaration Djibouti GL assignee request flow 2026-07-28 09:01:23 +00:00
marshal
2d8b9203d5 Merge pull request #989 from Tria-plc/freight_feature/usermanagement
update body-parser implementation to use Nest's API and improve depe…
2026-07-28 10:25:05 +03:00
Marshal
653d5782ee update body-parser implementation to use Nest's API and improve dependency handling 2026-07-28 07:21:04 +00:00
marshal
646a029d1a Merge pull request #986 from Tria-plc/freight_feature/usermanagement
update body-parser implementation to use Nest's API and improve depe…
2026-07-28 09:34:01 +03:00
Marshal
7fcf3a7084 update body-parser implementation to use Nest's API and improve dependency handling 2026-07-28 06:33:26 +00:00
marshal
161bdfff71 Merge pull request #984 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-28 09:21:12 +03:00
Marshal
c1c35e78d4 increase JSON body size limit, update awaiting shipment endpoint handling, and enhance contract document editor UI 2026-07-28 06:18:04 +00:00
marshal
bd3ff193d6 Merge pull request #983 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-28 08:58:28 +03:00
Marshal
8477de41a9 changes 2026-07-28 05:10:01 +00:00
marshal
f47a99c034 Merge pull request #982 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-28 08:03:48 +03:00
Marshal
2429f6b629 implement contract cancellation feature and update contract statuses
- Added functionality to cancel contracts, allowing users to provide a reason for cancellation.
- Updated contract statuses to include SUSPENDED and changed CLOSED to COMPLETED.
- Enhanced the UI to reflect the new cancellation option and updated messaging for contract statuses.
- Refactored contract booking actions to accommodate changes in booking logic for ONE_TIME and GENERAL contracts.
- Removed clearance document management from the contract detail page, as it is now handled per booking.
- Introduced a SQL script to reset bookings and train schedules for development purposes.
2026-07-28 05:02:58 +00:00
Marshal
481878e553 paginate wagons, locomotives and routes lists server-side 2026-07-27 21:27:36 +00:00
marshal
260a3b1198 Merge pull request #981 from Tria-plc/freight_feature/usermanagement
update locaomotive and fix wagon transfer issue
2026-07-27 23:55:12 +03:00
Marshal
496c66017f update locaomotive and fix wagon transfer issue 2026-07-27 20:34:14 +00:00
marshal
691195c9f9 Merge pull request #980 from Tria-plc/freight_feature/usermanagement
fix: correct column name in orderBy clause for listRequests method
2026-07-27 17:49:35 +03:00
Marshal
deadc59277 fix: correct column name in orderBy clause for listRequests method 2026-07-27 14:44:16 +00:00
Nathnael Wondisha
8449ce0ef3 Merge pull request #972 from Tria-plc/freight/nati-1
IAM Seeder centralized
2026-07-27 14:11:16 +03:00
Hagernesh
101bf69271 feat(warehouses): map GRN numbers to the goods owner
GRN-<DIR>-<DATE>-<REF8> carried no owner, so a note couldn't be
identified by who owns the cargo. Add an owner segment sourced from the
booking's company at every generation point (import, export, facility,
manual receive), keep REF8 for uniqueness, and label the GRN document
row Owner's Name.
2026-07-27 09:57:59 +00:00