Commit Graph

262 Commits

Author SHA1 Message Date
Nathnael Wondisha
4abc2aa7ae Merge pull request #765 from Tria-plc/freight/feat/chat-app
Freight/feat/chat app
2026-07-17 14:12:05 +03:00
natib21
35303ece58 Merge branch 'dev' of github.com:Tria-plc/edr-platform into freight/feature/user_management_UI 2026-07-17 11:03:37 +00:00
natib21
57f49a9333 fix 2026-07-17 11:03:23 +00:00
Nathnael
031e5ab292 Merge branch 'dev' into freight/feat/chat-app 2026-07-17 11:01:39 +00:00
Nathnael
1fd46afaaa fix: added chat to the freight api 2026-07-17 10:59:25 +00:00
Hagernesh
ce3ef15e7c feat(yards): record which yards can load/unload cargo
Intercity cargo is loaded at its origin yard and unloaded at its destination, but
only some yards have the equipment. EDR's facilities are Indode, Sebeta, Modjo,
Adama and Dire Dawa — and the set grows, so it has to be data.

- yards.has_facility marks a yard as a load/unload point; the new yard_facilities
  record says what it can do. Only Indode stores cargo (has_warehouse), so only it
  accrues storage/demurrage — the rest just move cargo on and off the train.
- facility_handling_events records each load/unload and carries its GRN.
  warehouse_inventory cannot: its warehouse/yard/zone are NOT NULL, so a facility
  without a warehouse could never have a row. inventory_id links to the storage
  record when there is one.
- YardFacilitiesService.facilityForYard is the single resolver the handling flows
  share, so they cannot drift on what a facility is.
- The seeder flags EXISTING yards and creates none. The codes are historical and
  do not read like the facility names — Indode is KALITY ("Gelan Multi Purpose
  Port (Indode)") and Sebeta is LEGACY_DEST — so it maps by code. Creating fresh
  INDODE/SEBETA yards would have split data that routes and bookings already
  reference.

Negad is deliberately absent: NAGAD ("DCT/SGDT") is in Djibouti while
NEGAD_FY_BCC is in Ethiopia and inactive, and which one is the intercity facility
is unsettled.

No behaviour change yet — nothing reads has_facility until the gate lands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 10:40:16 +00:00
marshal
39a48a2c30 Merge pull request #761 from Tria-plc/freight_feature/usermanagement
fix rate edit
2026-07-17 13:31:08 +03:00
Marshal
801872c106 fix rate edit 2026-07-17 10:15:26 +00:00
natib21
a9d65e04fc fix number of wagon 2026-07-17 10:12:43 +00:00
yaschalew10
9ade4b2c83 Merge pull request #757 from Tria-plc/freight/feature/user_management_UI
Freight/feature/user management UI
2026-07-17 12:37:22 +03:00
Marshal
7b7e7c3f62 fix schule issue and contianer type issue 2026-07-17 09:16:35 +00:00
natib21
b4118e1bd4 add export/inport number 2026-07-17 08:47:52 +00:00
Hagernesh
ff49554cc2 feat(last-mile): per-truck EDR arrival/exit, exit paper, bulk drawdown, departure notify
EDR last-mile is multi-truck but was modelled as one: setVehicles accepted any
number of trucks with no validation, arrival/delivery were stamped once per
last_mile record (N trucks shared one timestamp), EDR trucks got no exit paper,
and the per-truck EDR handover never happened because deliver() resolved the
plate via last_mile_container_allocations — a table nothing writes.

- Migration 2260000000000: per-truck arrived_at/departed_at/gross_weight_tons/
  net_weight_tons on last_mile_vehicle_assignments, plus a
  last_mile_vehicle_containers child table (a truck holds 1x40ft OR 2x20ft, so
  the single container_number scalar could not express a load). Weights are
  TONNES and named accordingly — the older gross_weight_kg lies about its unit.
- setVehicles: enforce the size rule (one 40ft, or two 20ft), container
  membership, one-container-one-truck, and never more trucks than containers.
  Bulk carries no containers and is instead gated on tonnage remaining.
- Bulk drawdown: remainingTonsForBooking = booking VGM minus the net weighed off
  every departed truck (both tonnes, no conversion), exposed as
  GET /last-mile/booking/:bookingId/remaining-tons.
- release() now stamps the EDR truck's own arrival and exit (matched by plate, so
  it works for bulk too) alongside the existing customer-truck stamp. The exit
  weighing itself is untouched.
- New GET /warehouse-inventory/edr-truck-exit-paper/:assignmentId — per-truck
  exit paper for EDR trucks. Deliberately not signature-gated: EDR handovers are
  generated at delivery, after the truck has left.
- deliver(): resolve the handover plate from the truck's own containers instead
  of the dead allocations table, so EDR handovers are genuinely per-truck.
- Notify the customer (portal inbox + SMS/email) when a truck leaves — one hook
  in release() covers both self-haul and EDR, since it is the single exit path.

Self-haul is intentionally unchanged (one booking-level handover signed once).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 09:24:22 +00:00
natib21
4a04aa7e97 fic 2026-07-16 08:13:22 +00:00
natib21
9d53552f95 Merge branch 'dev' of github.com:Tria-plc/edr-platform into freight/feature/user_management_UI 2026-07-16 07:48:27 +00:00
natib21
a4b3309412 add seed 2026-07-16 07:43:54 +00:00
Marshal
41fe04652f fix issue 2026-07-16 00:33:31 +00:00
Marshal
234a74e812 implement empty-container return service: add return quantity handling, update related DTOs, services, and UI components 2026-07-15 22:48:04 +00:00
Marshal
fc44eee25e implement update train details feature: add DTO, service method, and UI modal for editing train name and run numbers 2026-07-15 20:14:39 +00:00
Marshal
19c9da28ae changes 2026-07-15 13:29:01 +00:00
Marshal
11771e5f92 remove reopen delay minutes from global rules and update related types
- Removed the  field from  and related components.
- Updated  to reflect the removal of the reopen delay input field.
- Modified  to include new train number fields:  and .
- Added  interface to manage active schedules with trade direction.
- Introduced  interface to track wagon shortages in bookings.
- Updated  logic to ensure consistent UI state representation.
- Created migrations to drop the  column and add  and  columns to the  table.
- Added tests for the new booking window display logic and wagon planning functionality.
2026-07-15 09:13:02 +00:00
Marshal
5cffe2860c fix train builder and consolidation 2026-07-14 13:49:39 +00:00
Marshal
01459bd73c train 2026-07-14 13:11:38 +00:00
Marshal
b5a97d344a train 2026-07-14 13:10:00 +00:00
Hagernesh
a367306565 feat(warehouse): accrual acknowledge/snooze + zone weight fix, handover signer, portal delivery
Accrual dashboard:
- warehouse_accrual_acks table (migration 2140) + acknowledge/unacknowledge
  endpoints; dashboard rows carry acknowledged/snoozeUntil, acked items sink
  and are skipped by the alert cron. Row menu: mark reviewed / snooze 3d / 7d /
  un-acknowledge; acked rows dimmed with a "Reviewed" badge.
- Fix zone weight occupancy: normalise inventory kg vs zone-capacity tonnes.

Handover (rode along, shared files):
- Require signer full name on delivery handover (signature optional);
  migration 2130 adds signer_name.

Portal delivery/docs (rode along, shared files):
- Approve-delivery name capture, booking-scoped GRN/release docs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 12:54:41 +00:00
marshal
f7f311660b Merge pull request #672 from Tria-plc/freight_feature/usermanagement
train
2026-07-14 14:09:18 +03:00
Marshal
6d0cf50b4d train 2026-07-14 11:06:49 +00:00
Hagernesh
4e8d35a7fb Warehouse zone occupancy heatmap
Visualize live per-zone occupancy on the warehouse detail page.
2026-07-13 12:09:43 +00:00
marshal
43cd0223aa Merge pull request #642 from Tria-plc/freight_feature/usermanagement
add wagon allocation snapshot to train schedules
2026-07-13 11:57:24 +03:00
Marshal
a4ccdb1173 add wagon allocation snapshot to train schedules 2026-07-13 08:56:06 +00:00
marshal
3c3a7595a2 Merge pull request #640 from Tria-plc/freight_feature/usermanagement
Freight feature/usermanagement
2026-07-13 08:13:01 +03:00
Marshal
4b7f6d2548 enhance contract and booking services with server-side search and validation improvements
- Added  parameter to  and  for server-side free-text search on contract reference, company name, and booking details.
- Introduced new validation errors in  for container clashes and space issues when creating bookings.
- Implemented paginated dropdown settings retrieval in .
- Updated  to fetch active yards using a new method that handles pagination.
- Enhanced  with a  method to fetch all records by walking through pages.
- Refactored  to support filtering and pagination in schedule listings.
- Improved  to return a paginated list of facilities.
- Updated UI components in  and  to utilize debounced search inputs for better performance.
- Added alerts in  to inform users about booking constraints related to splits and capacity.
- Enhanced  to display notifications for split bookings and capacity usage.
2026-07-12 10:51:31 +00:00
Hagernesh
da44752c70 SELECT BOX 2026-07-11 08:30:39 +00:00
Nathnael
625b33733d Merge branch 'dev' into freight/feat/fixes-v1 2026-07-10 12:22:41 +00:00
Nathnael
f737e401b3 fix: the issue in the sheets file 2026-07-10 12:10:17 +00:00
Hagernesh
9eb10bb4ce feat(warehouses): auto-load targets a selected train, never loads trainless
"Auto Load Ready Items" now opens a train picker (pre-dispatch trains with
these bookings assigned, via the existing loadable-trains flow). No train
available -> no auto-loading, with a clear notice. Loading goes through the
existing per-wagon load path, so items without an allocated wagon are skipped
with a reason.

The train association is stored on the existing warehouse_loadings table
(no new table needed): new train_schedule_id column + a note recording train
number, origin -> destination, and departure time; wagon_id becomes nullable.
The trainless load-passed-export endpoint, its frontend wiring, and the unused
useLoadPassedExport hook are removed.

Migration 2100000000000 (idempotent) also applied to the dev database.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 08:34:14 +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
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
Marshal
61ec67cc2e Refactor wagon specifications to rely on wagon type; remove tare weight and max payload from wagon entity and related components 2026-07-09 07:42:02 +00:00
Marshal
1b2b3f68f8 Add tareWeightTons property to CreateWagonTypeDto and update related components 2026-07-09 06:05:34 +00:00
Marshal
305d35b2de resolve merge conflict 2026-07-09 03:39:06 +00:00
Marshal
ddddcfb71f Refactor wagon type handling and container wagon calculations
- Removed maxWagonsPerTrain from WagonType entity and related DTOs.
- Updated containerWagonsForLines function to calculate required wagons based on container lines more accurately.
- Added unit tests for containerWagonsForLines to ensure correct calculations.
- Adjusted related services and scripts to reflect the removal of maxWagonsPerTrain.
- Enhanced booking and contract components to use new status labels for better user experience.
- Implemented validation for unique container numbers in shipment forms.
2026-07-09 03:36:35 +00:00
Hagernesh
33956d07dc Fix customer_truck_containers status 2026-07-08 13:56:56 +00:00
Nathnael
8947ab8614 feat: fix the settings preview for the business licence and changes request to the approval 2026-07-08 10:42:00 +00:00
Nathnael
2cae451edc feat: implemented the changes request to the company profile 2026-07-08 08:06:50 +00:00
Hagernesh Tadesse
7712340c51 Merge pull request #525 from Tria-plc/Truckdetantion
Container truck assignment on customer portal for import
2026-07-08 07:41:22 +03:00
Hagernesh
3f6b9ac974 Container truck assignment on customer portal for import 2026-07-08 04:36:03 +00:00
Marshal
9dd9ace313 add reference field to train schedules and implement unique sequence generation 2026-07-07 23:06:44 +00:00
Marshal
88b1e548a2 resolve conflict 2026-07-07 22:24:42 +00:00