Commit Graph

374 Commits

Author SHA1 Message Date
Muluhabt
41c51b7986 Adding local packages 2026-06-22 11:53:17 +03:00
Hagernesh
0939202c8f Merge freight/develop into Warehouse_updates 2026-06-21 15:41:32 +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
Dagimassefa
e6d3e2401b feat(backoffice): integrate IAM user management with host auth adapter and freight theming 2026-06-21 12:16:48 +03:00
Dagimassefa
8111606e89 switch user management to package implmentation 2026-06-21 12:11:35 +03: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
Hagernesh
0ab508e377 feat(warehouse): Batch 6 — Export Loaded queue + Dispatch Queue with bulk dispatch
- GET /warehouse-inventory/loaded-export: EXPORT+LOADED items (route-derived direction)
- POST /warehouse-inventory/bulk-dispatch-export: reuses existing dispatch() transition
  (LOADED → DISPATCHED, capacity freed, movement/activity logged); skips non-LOADED/non-EXPORT
- Extracted shared exportInventoryByStatus() helper (readyToLoadExport now delegates to it)
- Frontend LoadedExportTab serves both Loaded (read-only) and Dispatch Queue (dispatchable)
  sub-tabs with Dispatch / Dispatch Selected / Dispatch All + per-row Dispatch
- Replaces "Loaded" and "Dispatch Queue — coming in the next batch" placeholders
- Train/schedule flow (DISPATCHED → IN_TRANSIT) unchanged

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 20:04:18 +00:00
Hagernesh
806fc4a8ca feat(warehouse): Batch 5 — Export Ready To Load queue + Auto Load Ready Items
- GET /warehouse-inventory/ready-to-load-export: EXPORT+PASSED+READY_FOR_LOADING items
  with booking details (customer, container, cargo type, route, inspection status)
- Direction filtering via deriveTradeDirection (route-based, not stored field)
- Frontend ReadyToLoadTab: full table (checkbox, booking ref/id, customer, container,
  cargo type, weight, route, inspection status, current status) with selection
- Auto Load Ready Items button reuses existing POST /load-passed-export endpoint
- Replaces "Ready To Load — coming in the next batch" placeholder in Export sub-tabs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 18:03:11 +00:00
Hagernesh
50c6381341 feat(warehouse): Batch 3+4 — export receive-selected label + bulk-mark-inspected workflow
- BulkReceiveModal: Receive Selected shows "received at facility" for EXPORT
- Export inspection: POST /warehouse-inventory/bulk-mark-inspected reuses WarehouseInspectionService.create
- EXPORT items advance to READY_FOR_LOADING after inspection PASSED
- InventoryWorkbench: selection state + "Mark Selected as Inspected" bulk button
- WarehouseInventoryTable: optional Checkbox column for bulk selection
- Route-based direction in eligibleBookings, bulkReceive, getBookingDirection
- New BulkInspectDto; service + controller wired

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 17:52:01 +00:00
Hagernesh
b7a831b063 feat(warehouse): route-based receive direction + Export Receive Queue (Batch 2)
- Direction derived from route via existing deriveTradeDirection (eligible-bookings,
  bulk receive guard, getBookingDirection) instead of stored trade_direction
- Export tab sub-tabs (Receive Queue + Ready-to-Load/Loaded/Dispatch placeholders)
- Receive Queue: full column set + per-row Receive; eligible-bookings adds customerId
- create/update warehouse: map DB errors to 400; dashboard: distinct per-status colors

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 10:26:50 +00:00
Hagernesh
0005b2edb3 feat(warehouse): Receive Import/Export tabs with bulk receive + load-passed-export
- Backend: GET eligible-bookings?direction, POST receive-bulk, POST load-passed-export
  (reuse autoUnload/autoLoad patterns; no train-schedule/wagon logic changed)
- Frontend: ReceiveInventoryModal split into Import/Export tabs with eligible PAID
  bookings table, select-all/bulk receive, and Load Passed Export Items button
- Single-booking receive and all existing inventory row actions preserved

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 08:29:59 +00:00
marshal
ca5877d25a Merge branch 'freight/develop' of github.com:Tria-plc/edr-platform into freight_feature/priority 2026-06-19 15:58:36 +03:00
marshal
85110adc3f Merge branch 'dev' of github.com:Tria-plc/edr-platform into freight_feature/priority 2026-06-19 15:57:26 +03:00
Nathnael
653f39ec65 feat: add the company profile support to the ui 2026-06-19 12:32:55 +00:00
Nathnael
7ce5f23005 style: profile page ui improvment 2026-06-19 12:32:55 +00:00
Nathnael
9284e72c14 fix: document uploaded 2026-06-19 12:32:55 +00:00
Nathnael
8e278a3bd6 feat: add company selection to settings onboarding 2026-06-19 12:32:55 +00:00
Hagernesh
e40318c847 Dashboard enhancement 2026-06-19 11:29:05 +00:00
Marshal
3591abd27f feat(bookings): enhance booking details with consolidation notices and streamline form handling 2026-06-19 10:45:11 +00:00
yaschalew
5e1d53b866 fix file upload 2026-06-19 08:48:58 +03:00
marshal
f1dfbbcc3f Replace EDR logo image with Train icon in FreightSidebar 2026-06-19 01:13:52 +03:00
marshal
72b63c319e - Fix shipping line mapping to use ID instead of name in EditBookingPage and NewBookingPage 2026-06-19 01:07:05 +03:00
marshal
1a3d85e46a Remove unused ArrowLeft icon import from PaymentFailurePage 2026-06-19 00:53:29 +03:00
marshal
3f81f45c6d Update login page logo from SVG to PNG format 2026-06-19 00:47:46 +03:00
marshal
8264df133f Redesign payment verification UI with Mantine components and fix route direction logic
- Refactor CheckPaymentPage and PaymentFailurePage to use Mantine UI components with modern card-based layouts
- Add gradient headers, themed icons, and improved visual hierarchy for payment status states
- Implement PaymentCard wrapper component for consistent styling across payment pages
- Update route direction logic to trim country values and simplify Djibouti import/export detection
- Replace shadcn/ui components with M
2026-06-19 00:42:27 +03:00
Marshal
ed114b1999 feat(cargo-types): add route for cargo types detail view and enhance CargoTypesPage with breadcrumbs and improved navigation 2026-06-18 20:49:46 +00:00
Marshal
aa105a5e76 feat(cargo-types): add CargoTypesPage for managing freight cargo categories and types 2026-06-18 20:19:40 +00:00
Marshal
be7c569363 feat(train-scheduling): add day-level booking pool and available days query 2026-06-18 19:48:42 +00:00
Nathnael Wondisha
1ea2f065c6 Merge branch 'freight/develop' into freight/feat/company-profile 2026-06-18 17:48:07 +03:00
Nathnael
c6179c046c feat(wip): up the settings onboaridng flow 2026-06-18 14:45:14 +00:00
Marshal
30bfc84f8f Merge branch 'freight_feature/priority' of github.com:Tria-plc/edr-platform into freight_feature/priority 2026-06-18 14:13:50 +00:00
Marshal
421e0266bc feat(train-scheduling): implement day-level booking pool
- Added `unplaced` method in `BookingNotifierService` to log warnings for bookings that cannot be placed on any train.
- Introduced `getAvailableDays` method in `TrainSchedulingService` to retrieve distinct days with open departures for a given route.
- Created `AvailableDaysQueryDto` for querying available days based on origin and destination yards.
- Updated `TrainSchedulingController` to expose an endpoint for available days.
- Modified frontend components to support day-level booking, allowing customers to select only a day without pinning to a specific train.
- Removed references to train schedules in booking forms and review steps, emphasizing day selection.
- Added a database migration to create an index for efficient querying of bookings by route and day.
2026-06-18 14:12:46 +00:00
marshal
3ad18277ea Merge branch 'freight/develop' of github.com:Tria-plc/edr-platform into freight_feature/priority 2026-06-18 17:04:35 +03:00
ghost2023
e9149242b2 feat: setup the company profiles 2026-06-18 16:38:46 +03:00
Marshal
578012dffd fix: improve route direction logic to align with backend derivation rules 2026-06-18 12:52:01 +00:00
Hagernesh
be12a9d496 fee invoice frontend 2026-06-18 00:12:59 +00:00
Hagernesh
01aec12ee9 feat(warehouse): Batch 5 — config-driven allocation + storage/demurrage fee rules
- Allocation rules engine: cargo/container/trade criteria -> deterministic yard/warehouse/zone by code; wired into auto-unload (fallback to default)
- Storage/demurrage fee rules: configurable freeDays + ratePerDay; most-specific match; fee preview per inventory item
- Inventory demurrage timestamps: inspectionStartedAt, inspectionCompletedAt, readyForPickupAt, releaseDate, gateClearedAt
- Migration 1790000000000 (allocation_rules + fee_rules tables + inventory date columns)
- Frontend: Allocation & Fees config page, automatic Fee Preview modal, plumbing/hooks
- No invoice/payment (Batch 6)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 23:53:04 +00:00
Hagernesh
89d651693b automation of loading and unloading 2026-06-17 22:33:06 +00:00
Hagernesh
ff79657018 automation 2026-06-17 22:16:01 +00:00
Hagernesh
5a6e1ef363 automation 2026-06-17 22:01:47 +00:00
Hagernesh
5b8cb16c1a automation 2026-06-17 22:00:53 +00:00
marshal
1d9e0f2108 add payment currency field to booking forms with ETB/USD selection support 2026-06-17 23:01:08 +03:00
marshal
8396b83f46 add price change confirmation modal and support document replacement for change-requested bookings 2026-06-17 22:23:48 +03:00
marshal
507758ea39 fix: update booking data structure to use meta.total and add null coalescing for checkbox states 2026-06-17 21:14:00 +03:00
marshal
ca7d5cb92b switch API base URL from localhost to production endpoint 2026-06-17 20:57:42 +03:00
marshal
1141370767 update signup phone validation to enforce Ethiopian mobile format and fix invoice default balance 2026-06-17 20:56:40 +03:00
Marshal
51e0d4897a update authentication pages with new layout and functionality 2026-06-17 17:49:16 +00:00