Commit Graph

2741 Commits

Author SHA1 Message Date
Nathnael
ea0f264d72 fea: add poa section to backoffice customer detail page 2026-07-10 08:19:12 +00:00
Nathnael
78cb1ac5d3 feat: add poa and poa delegation file to onboarding 2026-07-10 08:18:37 +00:00
yaschalew
2696ca7498 user route 2026-07-10 10:56:59 +03:00
yaschalew
28a20923ff user management ui 2026-07-10 10:41:48 +03:00
yaschalew
dcb2d98503 fix 2026-07-10 10:37:01 +03:00
Hagernesh Tadesse
583846a185 Merge pull request #591 from Tria-plc/Truckdetantion
Truckdetantion

Receive to warehouse form cleanup and trimming
Wiring GRN with bookings
Fixed Slow GRN
plus fixed Freight order genration and rendering
2026-07-10 10:35:56 +03:00
Stephanos A.
85dec2b044 Merge pull request #592 from Tria-plc/alpha
Alpha
2026-07-10 10:35:46 +03:00
Stephanos A
4705f5c478 Merge branch 'alpha' of github.com:Tria-plc/edr-platform into alpha 2026-07-10 10:34:49 +03:00
Stephanos A
acc93aeffc UAT fixes and enhancements 2026-07-10 10:33:36 +03:00
Hagernesh
140c5a6469 fix(bookings): freight order renders styled on Chromium-less servers
The customer-truck freight order went through ContractPdfService, whose only
fallback is a crude text dump - so on servers without Chromium the document
rendered as unstyled text.

- render via the shared PdfRenderService with the styled tabular fallback
  (same path as marshalling / release documents)
- rebuild the freight-order HTML in the standard document shape: brand header,
  booking summary tiles, one trucks table (plate / driver / type / containers /
  arrival), gate notice, signature lines - which is also what the fallback
  parser reads
- keep the two watermarked copies (Port Operations, Gate Security & Carrier)
  for the Chromium path; drop the now-unused ContractPdfService injection

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 07:11:20 +00:00
Hagernesh
a7b429544b fix(warehouses): trim receive form to fields with a real source
- remove Incoterms, HS codes, and Item code from the truck-entrance form:
  nothing in the booking captures them, so they were always hand-typed noise
- remove the hand-typed "Warehouse code and location" input: the backend now
  stamps it from the warehouse/yard/zone the operator actually selected
  (WH / YARD / ZONE codes), so the GRN and notes always match reality
- Declaration number and Item description widen to full rows

Backend DTO keeps the optional fields for compatibility.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 07:11:20 +00:00
Hagernesh
fc2366f9e0 feat(warehouses): prefill receive-to-warehouse from existing booking data
The receive form now arrives filled with everything the booking already knows,
instead of the operator re-typing it:

- container numbers come from the per-unit records (booking_container_units)
  entered at booking time, falling back to the line-level aggregate
- customs seal number prefilled from the units' seal numbers
- net weight prefilled from the booking's declared cargo weight (tonnes)
- driver signatory defaults to the arriving driver's name

Existing prefills (owner, TIN, phone, booking ref, cargo, packaging, unit
count, first-mile / customer truck + driver) unchanged; all fields stay
editable where they were editable before.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 07:11:20 +00:00
Abubeker Yasin
953657bb49 Merge pull request #590 from Tria-plc/dev
Merge
2026-07-10 09:43:04 +03:00
marshal
0a88e2bb1d Merge pull request #589 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-10 00:16:46 +03:00
Marshal
2fb1917956 merge 2026-07-09 21:15:07 +00:00
Marshal
30f809b999 Merge branch 'dev' of github.com:Tria-plc/edr-platform into freight_feature/usermanagement 2026-07-09 21:14:09 +00:00
Marshal
3443b79644 make a contrat template 2026-07-09 21:13:07 +00:00
marshal
516dfd4032 Merge pull request #588 from Tria-plc/freight_feature/usermanagement
fix issues
2026-07-09 23:27:02 +03:00
Marshal
e4429592d3 fix issues 2026-07-09 20:26:14 +00:00
marshal
0a73d968b8 Merge pull request #587 from Tria-plc/freight_feature/usermanagement
add Excel import functionality for container bookings
2026-07-09 21:12:19 +03:00
Marshal
1d77cc9219 add Excel import functionality for container bookings 2026-07-09 18:10:58 +00:00
marshal
ae9c6b820a Merge pull request #586 from Tria-plc/freight_feature/usermanagement
test batch system
2026-07-09 20:15:39 +03:00
Marshal
a7d05fba34 test batch system 2026-07-09 17:04:25 +00:00
Hagernesh Tadesse
0f1aaace80 Merge pull request #585 from Tria-plc/Truckdetantion
Truck arrives (portal-assigned or walk-in) → handover generated → flag true → button appears on detail page and dashboard, + notification every 5 min.
Customer clicks → reviews the handover PDF → signs → signed_at stamped → sign-modal invalidates both the booking and the list queries → flag false → button gone, reminders stop.
Operator's Exit Paper signature-request on a booking with no handover also creates one → button appears the same way.
2026-07-09 18:38:59 +03:00
Hagernesh
58a66b3a23 fix(warehouses): retire per-booking Load and Dispatch buttons
Wagon loading happens in the train flow and dispatch at the train level, which
already advances inventory - the per-row buttons duplicated that and confused
operators.

- WarehouseInventoryTable (import dispatch queue + warehouse pages): suppress
  the 'load'/'dispatch' next-action buttons and drop the extra per-row Dispatch
  on READY_FOR_PICKUP rows (Store stays)
- Export Dispatch Queue: drop the per-row Dispatch button and its Actions
  column; the bulk Dispatch All / Dispatch Selected controls remain

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 15:37:07 +00:00
Hagernesh
7ab5e9edd5 feat(warehouses): handover-driven approve delivery, weigh-skip, 5-min sign reminders
Approve delivery now tracks the handover lifecycle exactly: the button appears
(detail page + portal dashboard) the moment a handover is generated and
disappears when the customer signs. The bookings list attaches the
handoverAwaitingSignature flag via one batched query per page; status
heuristics (COMPLETED / TRUCK_ASSIGNED+arrived) are gone.

- generate the arrival handover for ANY self-haul truck: portal-assigned OR
  walk-in registered at the gate (isSelfHaulBooking: assigned_at set, or no
  EDR last-mile leg). Same rule now guards the exit paper.
- remind every 5 minutes (in-app + SMS + email) until the handover is signed
  (@Cron in HandoverService; one reminder per booking per tick)
- Truck Leaving no longer opens blank: the import queue mapper now carries
  inv.notes, so the saved arrival renders read-only with only gate-out time
  and gross weight editable
- container bookings get "Weigh truck? Yes/No": No skips tare/gross and the
  container weight match (weighingSkipped on ReleaseOrderDto, decision made at
  arrival sticks for the exit via the Weighing: SKIPPED note). Bulk always
  weighs, unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 15:37:06 +00:00
Hagernesh
7bf407b503 fix(warehouses): surface the real reason when a PDF download fails
Blob downloads set responseType: 'blob', so axios delivers the JSON error body
as a Blob. extractErrorMessage() reads `.message` off it, finds nothing, and
falls back to "Request failed with status code 400" - hiding every real reason
("Handover must be signed...", "...must be fully paid before terminal release").

Only ContainerItemsModal used the async Blob decoder. Switch the remaining nine
blob-download catches to extractDownloadErrorMessage():

  InventoryWorkbench      release paper, handover
  WarehouseInventoryTable GRN
  ReceiveInventoryModal   GRN (x2), handover, exit paper
  FeePreviewModal         release paper
  TruckDispatchModal      truck exit paper

Mutation-error catches are untouched - their bodies are already parsed JSON.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 15:37:06 +00:00
Hagernesh
ca774267cd fix(warehouses): Store no longer strands an import item in STORED
READY_FOR_PICKUP allows STORED (park an import item back into storage), but
STORED allowed only RESERVED / READY_FOR_LOADING - so readyForPickup() hit
assertTransition(STORED, READY_FOR_PICKUP) and threw. The item could never
return to pickup, and getNextInventoryAction returned null for an import STORED
item, leaving the row with no action at all.

- allow STORED -> READY_FOR_PICKUP
- an inspected import STORED item now advances to ready-for-pickup

readyForPickup() still rejects non-IMPORT inventory, so the new edge cannot be
reached from the export flow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 15:37:06 +00:00
Hagernesh
001babbd2d fix(warehouses): repair missing warehouse_inventory.grn_number column
AddGrnNumberToWarehouseInventory1828000000000 is recorded in the migrations
table but the column is absent - it was added, then dropped out-of-band. Because
TypeORM has the original recorded it will never re-run, so every GRN read/write
fails with "column grn_number does not exist":

  - bulkReceive()             INSERT names grn_number   (receive to warehouse)
  - importQueueByStatuses()   Unloaded + Dispatch queues
  - exportInventoryByStatus() Received / Ready-To-Load / Loaded tabs
  - grnDocument()             GRN PDF

Re-adds the column, backfills from the "GRN Number:" receive note, recreates the
partial index. Idempotent, and down() is a deliberate no-op so reverting the
repair cannot re-introduce the outage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 15:37:06 +00:00
Hagernesh
c53c186896 Approve delivery and notification fix 2026-07-09 15:37:06 +00:00
marshal
3ff84d687a Merge pull request #584 from Tria-plc/freight_feature/usermanagement
Enhance bulk booking handling and wagon capacity calculations across …
2026-07-09 18:31:00 +03:00
Marshal
1690f9e498 Enhance bulk booking handling and wagon capacity calculations across services 2026-07-09 15:30:00 +00:00
Eyob T.
3d80f2d040 Merge pull request #583 from Tria-plc/alpha
design revamp
2026-07-09 17:24:46 +03:00
Roba Boru
f201b6e1fb Merge branch 'dev' of https://github.com/Tria-plc/edr-platform into alpha 2026-07-09 17:20:22 +03:00
Roba Boru
a856a763fe Merge branch 'alpha' of https://github.com/Tria-plc/edr-platform into alpha 2026-07-09 17:20:12 +03:00
Roba Boru
fc065b50aa design revamp 2026-07-09 17:20:00 +03:00
marshal
3affef65d4 Merge pull request #582 from Tria-plc/freight_feature/usermanagement
fix ui issue
2026-07-09 17:12:03 +03:00
Marshal
3259bd7667 fix ui issue 2026-07-09 14:10:46 +00:00
yaschalew10
17d95f47e5 Merge pull request #581 from Tria-plc/freight/feature/first_mile_invoice
Freight/feature/first mile invoice
2026-07-09 17:07:37 +03:00
natib21
151c82373b :Merge branch 'dev' of github.com:Tria-plc/edr-platform into freight/feature/first_mile_invoice 2026-07-09 14:06:30 +00:00
natib21
70a9742631 add gps readme 2026-07-09 14:01:59 +00:00
marshal
0fc7ed9041 Merge pull request #580 from Tria-plc/freight_feature/usermanagement
small fix
2026-07-09 16:37:53 +03:00
Marshal
3afadcd9f2 small fix 2026-07-09 13:36:36 +00:00
marshal
b1a1099532 Merge pull request #579 from Tria-plc/freight_feature/usermanagement
Enhance wagon capacity handling and validation in booking service
2026-07-09 16:20:55 +03:00
Roba Boru
188c818251 Fix chat bot alignment 2026-07-09 16:18:52 +03:00
Marshal
eb819d66a1 Enhance wagon capacity handling and validation in booking service
- Added default capacities for container and bulk wagons.
- Updated wagonsFor method to consider weight and length for wagon calculations.
- Improved handling of overweight bookings with appropriate warnings.
- Adjusted tests to reflect changes in wagon capacity and validation logic.
2026-07-09 13:10:32 +00:00
Nathnael
e5d2bb2f63 fix: unused var 2026-07-09 12:51:12 +00:00
Nathnael Wondisha
41af519afb Merge pull request #574 from Tria-plc/freight/feat/fixes-v1
Forget password and fixes
2026-07-09 15:39:39 +03:00
Nathnael
632951268f Merge branch 'dev' into freight/feat/fixes-v1 2026-07-09 12:38:55 +00:00
Nathnael
80ef15b9dc fix: onboarding back and contract blocking 2026-07-09 12:38:05 +00:00