Commit Graph

260 Commits

Author SHA1 Message Date
marshal
5564819b28 Merge pull request #1033 from Tria-plc/freight_feature/usermanagement
add goverment booking
2026-07-31 03:43:36 +03:00
Marshal
65f18b4796 add goverment booking 2026-07-31 00:41:51 +00:00
marshal
143cbebb18 Merge pull request #1031 from Tria-plc/freight_feature/usermanagement
leg-aware capacity and wagon sharing
2026-07-30 22:08:50 +03:00
Marshal
f891f6abe2 leg-aware capacity and wagon sharing 2026-07-30 19:08:06 +00:00
marshal
52eda90642 Merge pull request #1030 from Tria-plc/freight_feature/usermanagement
leg-aware capacity and wagon sharing
2026-07-30 20:22:44 +03:00
Marshal
acef6870e9 leg-aware capacity and wagon sharing 2026-07-30 17:21:44 +00:00
Hagernesh
63aa2c7920 docs: clarify container returns are last-mile only (not first-mile)
Update labels and comments to reflect that container returns are for
last-mile trucks only: either EDR last-mile or customer self-haul. Same
truck that delivered will return with empty containers. Changed labels
from "EDR Returns" → "EDR Last Mile" and "Customer Returns" →
"Customer Self-Haul".

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-30 14:35:59 +00:00
Hagernesh
c0d6b1a1c5 feat: add Container Returns page with EDR/Customer filter
Separate page for tracking empty container returns by type: EDR returns
(empty containers from EDR first-mile) or Customer returns (customer
self-haul). Segmented control filter, expandable booking rows showing
containers, modal to record return with warehouse selection. Accessible
via sidebar menu under Import Operations.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-30 14:07:09 +00:00
Marshal
2cdf8bd161 export flow and fix intercity issue 2026-07-30 13:15:56 +00:00
Marshal
e80aac877f export flow and fix intercity issue 2026-07-30 13:11:35 +00:00
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
Marshal
63604b0cf4 changes 2026-07-29 19:00:32 +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
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
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
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
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
marshal
12bab14b06 Merge pull request #964 from Tria-plc/freight_feature/usermanagement
add dispute functionality for contract duty and implement collection…
2026-07-26 20:30:31 +03:00
Marshal
bfea9de660 add dispute functionality for contract duty and implement collection dates 2026-07-26 17:30:00 +00:00
marshal
e63ddec088 Merge pull request #963 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-26 19:59:39 +03:00
Marshal
9b13fa2ac6 feat: implement wagon transfer management modals and page
- Add TransferFulfillModal for fulfilling wagon transfer requests.
- Create TransferRequestFormModal for filing new wagon transfer requests.
- Introduce TransferCloseShortModal for closing requests that cannot be fully fulfilled.
- Develop WagonTransfersPage to manage and display wagon transfer requests.
- Implement utility functions for handling wagon transfer request data and UI components.
- Enhance UI with Mantine components for better user experience.
2026-07-26 15:11:50 +00:00
marshal
48873890a4 Merge pull request #962 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-26 11:12:23 +03:00
Marshal
fde5e6de4b add company stamp upload functionality for contract signing
- Introduced StampUpload component for uploading company stamp images.
- Integrated stamp upload in contract signing modal, supporting PNG and JPG formats.
- Implemented validation for file type and size (max 5 MB).
- Added visual feedback for drag-and-drop functionality.
- Updated contract-related pages to handle duplicate contract alerts and pricing notices.
- Enhanced contract expiry management with a nightly sweep service.
- Added unit tests for new features and updated existing tests for contract handling.
2026-07-25 17:14:58 +00:00
Hagernesh
a544bebc51 fix(operations): last-mile assign until load fully trucked + 40ft cap
Assign was gated on any truck assigned, blocking multi-truck
deliveries. Gate on remaining containers (or bulk tonnage) instead, show
covered/total in the modal, cap a 40ft container to one truck with no
size mixing (mirrors assertTruckLoad), and lock arrived/departed rows.
2026-07-25 10:29:44 +00:00
Marshal
54b5882355 changes 2026-07-25 06:05:20 +00:00
Marshal
286390a3cf change contrat creation 2026-07-24 13:26:19 +00:00
Marshal
668b5e1c9d add permissions and fix issues 2026-07-23 20:24:20 +00:00
marshal
091dd0bfa3 Merge pull request #923 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-23 00:02:55 +03:00
Marshal
5709801590 enhance shipment form and booking process 2026-07-22 17:25:01 +00:00
marshal
a3037749b4 Merge pull request #912 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-22 15:35:11 +03:00
Marshal
ef840241c0 permision 2026-07-22 12:34:08 +00:00
Hagernesh Tadesse
11437cfd35 Merge pull request #905 from Tria-plc/testfixes
Fixes
Download Excel template with instructions
Parse uploaded file, preview trucks
Validate container assignments (1x40ft OR 2x20ft per truck)
Commit bulk upload in one call
2026-07-22 13:54:59 +03:00
Hagernesh
5395d4f346 Customer Name + Customer ID columns removed from the Export Marshalling Document 2026-07-22 08:01:15 +00:00
Nathnael
905bf75bce fix: test 2026-07-22 07:47:25 +00:00
Marshal
ed3c8307bb refactor(train-scheduling): rename and restructure container movement logic 2026-07-21 23:49:10 +00:00
Marshal
835c9e111c feat(train-scheduling): implement container movement between wagons
- Added functionality to move containers between wagons in the train scheduling system.
- Introduced  API endpoint and service method to handle container movement.
- Updated  component to support drag-and-drop for rearranging containers.
- Enhanced  to allow moving containers to other wagons via a context menu.
- Implemented UI feedback for container movement actions, including loading states and success/error notifications.
- Updated relevant types and constants to accommodate new container movement logic.
- Added tests for the rule engine to ensure proper handling of hazardous bookings.
2026-07-21 23:02:06 +00:00
Hagernesh
1fe8c2fd8e feat(export): gate receive on payment and loading on received + GRN
Three export rules that the flow left open.

An unpaid export booking could be received at the warehouse. Receiving is
what starts storage and mints a GRN, so it must not happen against cargo the
customer has not settled. receive() now rejects an unpaid EXPORT booking.
Import is untouched — it arrives OFF a train and its receive is the unload,
so gating that on payment would strand cargo already at the yard.

An allocated export booking could be marked loaded onto its train without
ever reaching the warehouse. An allocation is a plan; the GRN is the proof
the goods are in hand. Two loading paths skipped that check — the per-yard
loadBooking and the workspace confirmScheduleLoading — and both now require
every export booking to be received with a GRN first, however it arrived
(first-mile or the customer's own truck) and whatever it is allocated to.
The rule lives in one shared guard (assertExportReceivedWithGrn) so the two
paths cannot drift.

Export self-haul without a first-mile leg already worked and is unchanged:
assertSelfHaulPaid allows a customer truck when there is no EDR mile leg and
the booking is paid, and addTruck applies the same one-40ft-or-two-20ft rule
to containers and the tonnage drawdown to bulk, exactly as import does.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 08:01:32 +00:00
marshal
bb068d38d1 Merge pull request #834 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-20 13:52:55 +03:00
Marshal
eb532399d9 changes 2026-07-20 10:52:20 +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
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
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