Commit Graph

68 Commits

Author SHA1 Message Date
Hagernesh
3f6b9ac974 Container truck assignment on customer portal for import 2026-07-08 04:36:03 +00:00
Hagernesh
25c9bdeecd Export Load on train 2026-07-07 10:21:17 +00:00
Hagernesh
24fa6ab83b Doublehandling 2026-07-07 06:25:58 +00:00
Hagernesh
96b78fc72e Login fixed — freight-api boots (PgBouncer search_path + migrations-table reconcile).
Invoice PDF styled (vector fallback, no Docker change).
Marshalling doc styled (table-aware fallback, portrait/landscape).
Load to Train tab — per-train arrived containers → multiselect → load onto wagons.
Yard/zone list filtered by freight type.
2026-07-06 21:09:56 +00:00
Hagernesh
bc47a42e1e export loading 2026-07-06 18:53:25 +00:00
Hagernesh
692d9074d0 feat: container/bulk items datatable on warehouse view details
Adds a per-container/bulk items view for a booking with derived lifecycle
stage (PENDING -> RECEIVED -> GRN -> LOADED -> LEFT -> DELIVERED) and reference
badges (booking, contract, last-mile). Backend containerItems() aggregates
booking_container_units + customer_truck_containers + inventory; exposed at
GET warehouse-inventory/bookings/:id/container-items.

Frontend ContainerItemsModal (opened from the View Details eye): stage tabs
with counts, ref columns, checkbox multiselect of loadable items -> pick truck
-> load (Truck_dispatch), and per-row per-truck Exit Paper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 13:46:16 +00:00
Hagernesh
756ad73e9c pERTRUCK EXIT 2026-07-06 13:16:34 +00:00
Hagernesh
551a5fdeed list trucks + loadable containers → load) 2026-07-06 12:40:34 +00:00
Hagernesh
fe9503638b separte handover edr lastmile and customer last mile flow 2026-07-06 12:27:58 +00:00
Hagernesh
44317a6bbc Naming convention no digit or symbol allowed 2026-07-03 14:39:47 +00:00
hagiye
5af45c2643 Customer Truck Assignment and Portal Delivary Approval 2026-07-02 15:54:16 +03:00
hagiye
ad9f9de7a8 Truck Assign by customer plus Handover signature on portal 2026-07-02 12:32:18 +03:00
hagiye
129448e437 frist mile receive to warehouse and last mile truck arrival integration 2026-07-02 01:08:37 +03:00
hagiye
14a00af341 train gate pass, Telebirr and Wafi 2026-07-01 16:23:52 +03:00
Nathnael
e5aab84f51 feat: ui changes and pdf setup on the clients 2026-07-01 06:56:58 +00:00
hagiye
9f5c22c1ee Goods recieved notes and Booking delivery 2026-06-30 07:19:12 +03:00
hagiye
d55f9312bf Marshaling document Receive Export and import handover to customer 2026-06-29 12:24:14 +03:00
hagiye
fee4365b70 Import operation gate pass 2026-06-27 21:04:27 +03:00
hagiye
d726927453 Notification for demurrage and invoice fee 2026-06-27 05:33:58 +03:00
hagiye
11803763b0 Invoice and clearance seal approval 2026-06-27 05:11:44 +03:00
hagiye
108d91b5fa Invoice and clearance seal approval 2026-06-27 04:58:21 +03:00
hagiye
fafa64e4db Warehouse receiving for export and GRN generation 2026-06-27 04:20:23 +03:00
hagiye
15be978c42 Warehouse receiving for export and GRN generation 2026-06-27 04:19:32 +03:00
hagiye
6860b891f7 Interchange document 2026-06-27 02:27:40 +03:00
hagiye
29bdf68742 Invoice and clearance seal approval 2026-06-27 01:22:14 +03:00
hagiye
b2b668a392 Invoice and clearance seal approval 2026-06-27 01:13:25 +03:00
hagiye
8005282f9e Invoice and clearance seal approval 2026-06-27 00:39:48 +03:00
hagiye
0438dade75 Invoice and clearance seal approval 2026-06-27 00:32:17 +03:00
hagiye
1d84cad99d Invoice genaration and seal 2026-06-27 00:22:38 +03:00
Hagernesh Tadesse
2f06817e48 Merge pull request #307 from Tria-plc/Release_order
Release order
2026-06-26 23:53:32 +03:00
hagiye
9534950e09 get clearance fix 2026-06-26 23:49:12 +03:00
hagiye
d5e8abcf62 get clearance fix 2026-06-26 23:37:09 +03:00
hagiye
4efef9bab3 inspection status column fix 2026-06-26 13:20:26 +03:00
hagiye
e6c2735f9b Fix inventory status column 2026-06-25 13:06:11 +03:00
hagiye
f4a90755c2 api 2026-06-25 11:00:40 +03:00
hagiye
503878110f DJbouti port Export Unloading 2026-06-24 23:25:34 +03:00
hagiye
c69dd3c238 Release Order plus Storage fee 2026-06-24 15:23:50 +03:00
hagiye
8ee31789c6 merge conflict fix 2026-06-24 12:31:59 +03:00
hagiye
0255adffe6 changes 2026-06-24 09:56:12 +03:00
Nathnael
cbbad02b29 fix: type error and other fixes 2026-06-23 13:14:06 +00:00
ghost2023
cdfe7c1f5b fix: type errors 2026-06-23 15:02:25 +03:00
Nathnael
2700a3edec refactor: migrate from most of the custom hooks into the api.ts 2026-06-22 13:46:38 +00:00
Nathnael
d66ccc5363 refactor: migrated of the customer hooks for warehouse data fetching 2026-06-22 12:25:20 +00:00
Nathnael Wondisha
fff679369d Merge branch 'freight/develop' into freight/style/ui-sync 2026-06-22 11:58:18 +03:00
Nathnael
feddce8a0c style: use the proper primary color 2026-06-22 08:11:11 +00:00
Hagernesh
41d21edae5 feat(warehouse): Batch 10 — import post-inspection actions (pickup / last-mile / store / dispatch)
- READY_FOR_PICKUP transitions now → DELIVERED (customer pickup) OR DISPATCHED (dispatch out) OR
  STORED (operator-chosen storage) — pickup and dispatch kept separate. No auto-storage.
- GET /warehouse-inventory/import/pickup-ready-queue: READY_FOR_PICKUP import items (shared query
  with the unloaded queue, route-derived import filter)
- WarehouseInventoryTable: PICKUP_READY rows now show explicit Store + Dispatch buttons alongside
  the customer-pickup (release/deliver) next action; reuses the existing advance() dispatcher
- Import → Dispatch Queue tab renders pickup-ready items via InventoryWorkbench (all existing
  actions + modals intact) with Last Mile shown only when door delivery was requested
- Verified: pickup-ready item → Store → STORED; → Dispatch → DISPATCHED

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 14:38:23 +00:00
Hagernesh
040ba6d495 feat(warehouse): Batch 9 — Import Unloaded Queue + bulk destination inspection
- bulkMarkInspected: UNLOADED added to eligible statuses; IMPORT passed items now advance to
  READY_FOR_PICKUP (pickup ready) instead of READY_FOR_LOADING (export unchanged)
- GET /warehouse-inventory/import/unloaded-queue: UNLOADED import items with the inspection-screen
  columns (booking, customer, arrival, container, cargo type, weight, train schedule, inspection
  status, pickup option, last-mile, current status); route-derived import filter
- Dedicated ImportUnloadedQueueTab replaces the Batch 8 workbench reuse: full spec columns,
  Select All / Unselect All / selected count / Mark Selected as Inspected, plus per-row
  Inspect / Report (InspectionReportModal) for damage / image / weight-loss detail
- Verified: import item UNLOADED → bulk inspect → READY_FOR_PICKUP (PASSED), drops out of queue

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 14:15:22 +00:00
Hagernesh
8b28a7c430 feat(warehouse): Batch 8 — Import Auto Unload Arrived Bookings (→ UNLOADED)
- New UNLOADED inventory status (train-arrival landing state) + transitions + unloaded_at column
  (idempotent migration 1791000000003) + INVENTORY_UNLOADED activity type
- POST /warehouse-inventory/import/auto-unload-arrived-bookings { scheduleId }: validates ARRIVED
  IMPORT train, unloads all eligible assigned bookings (IN_TRANSIT/ARRIVED_AT_*) into UNLOADED,
  records unloadedAt + activity. Does NOT store and does NOT inspect. Reuses allocation + inventory
  plumbing. Returns { unloadedCount, skippedCount, failedCount, results }.
- Arrive Queue "Auto Unload Arrived Bookings" button now calls the new endpoint (was per-booking loop)
- Import → Unloaded Queue tab: lists UNLOADED items via InventoryWorkbench (existing actions preserved:
  Inspect/Store/Move/History) + a Last Mile action shown ONLY when booking requested door delivery
- Batch8TestDataSeeder: sets seed import train bookings to IN_TRANSIT (unload-eligible)
- Verified: auto-unload → 1 UNLOADED (unloadedAt set, not stored, not inspected); ineligible skipped;
  idempotent re-run skips already-unloaded

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 12:57:29 +00:00
Hagernesh
35c3341baf feat(warehouse): Batch 7 — Import Arrive Queue (arrived import trains, read-only)
- SchedulingReadFacade: importArriveQueue() + importTrainDetail() — read-only SELECTs only,
  direction derived from origin/destination station countries (route-based), so EXPORT/DOMESTIC
  trains are excluded. Per-train booking/container/cargo counts.
- GET /warehouse-inventory/import/arrive-queue + /import/trains/:scheduleId/items
- Import tab restructured into sub-tabs: Arrive Queue (implemented) / Unloaded Queue /
  Dispatch Queue (placeholders for next batch)
- ImportArriveQueueTab: train table (schedule id, train #, route, origin, destination, arrival,
  bookings/containers/cargoes, status) with Open (expandable assigned-items detail) + Auto Unload
  (reuses existing per-booking unload endpoint over the train's bookings)
- Batch7TestDataSeeder: 1 arrived IMPORT train (SEED-IMP-001) + 1 arrived EXPORT train
  (SEED-EXP-001, proves exclusion); idempotent
- Train schedule service logic untouched (facade is SELECT-only)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 11:15:31 +00:00
Hagernesh
a8bc5b19de feat(warehouse): fetch all PAID bookings in one call, classified IMPORT/EXPORT by route
- eligibleBookings(direction?) now returns all import+export bookings when direction omitted
  (DOMESTIC excluded); per-direction filter preserved for backward compatibility
- GET /warehouse-inventory/eligible-bookings (no query) returns the combined set
- Frontend: single shared useEligibleBookings() query; both Receive tabs filter client-side
  by route-derived direction, so only one HTTP request fires

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 20:15:26 +00:00