Skip to main content

CARRIER

🚛 Technical Specification: Carrier Setup


📋 Feature Overview

Attribute Detail
Module 📂 Fleet (CARRIER)
Feature Name Carrier Management (Fleet Panel)
Description Links a Driver, Mover, and Tanker to form a deployable operational unit. Tracks operational Availability based on component schedules.
Page & Detail
1. Listing Page: /listing-fleet-panel-mover
Displays grid of carriers, filters, availability status, and actions.
2. Add/Edit Page: /add-edit-carrier
Form for linking assets (Driver/Mover/Tanker) to create a carrier unit.
3. Calendar View: /carrier-calendar
Consolidated calendar view of block days for all linked assets.
User Guide 📄 [Ekajaya Admin User Guide - Fleet Module, Section 2]

🛠️ Technical Implementation

A. Permissions & Access Control

Note: Access is controlled via PermissionGuard and component-level checks.
Scope Permission Code Description & Page Usage
Menu Visibility CARRIER.MENU

Sidebar menu visibility.

\listing-fleet-panel-mover

\add-edit-carrier

Page AccessRouting CARRIER.VIEW

Access to listing route.
\listing-fleet-panel-mover

\add-edit-carrier

/carrier-calendar

Create Action CARRIER.UPDATE Controls the + Add button on listing.
\listing-fleet-panel-mover
Delete Action CARRIER.DELETE Visibility of the Delete 🗑️ icon.
\listing-fleet-panel-mover
Edit/Save Action CARRIER.UPDATE Ability to save changes on Add/Edit screen.
\add-edit-carrier

B. API Interaction

Base URL: ${environment.baseApiUrl}
1. RetrieveListing Carrier Listing (Custom Logic)Manage \listing-fleet-panel-mover
Endpoint
/carrier/getListing
Method
POST
PurposeFilter: statusStartDatetime, statusEndDatetime, availability
Fetches carriers
and
/movers/getQuery
calculatesPOST
their
Filter: "Availability"plateNo based(Filter onDropdown)
block
days.
/tankers/getQuery
POST
Filter: tankerNumber (Filter Dropdown)
/drivers/getQuery
POST
Filter: fullName (Filter Dropdown)
/driverUser/getUserList
POST
Purpose: Populate User Filter
/carriers/update
POST
Purpose: Soft Delete (isDeleted=true)
{
  "statusStartDatetime": "2023-10-27T00:00:00.000Z",
  "statusEndDatetime": "2023-10-27T23:59:59.999Z",
  "limit": 25,
  "page": 1
  // Optional: driverId, moverId, tankerId, availability
}
2. DeleteAdd Carrier \listing-fleet-panel-mover
Endpoint
/carriers/update
Method
POST
{ "id": Number, "isDeleted": true }
3. Get Single Carrier (Edit Mode)Manage \add-edit-carrier
Endpoint
/companies/getQuery
POST
Filter: isDeleted=0
/carriers/getQuery
Method
POST
QueryFilter: Paramsid (Fetch record or check uniqueness)
filter:
/movers/getQuery
POST
Filter: id||id!$eq||{id}in...
 (Exclude active assets), joincompanyId:
/tankers/getQuery
moverPOST
Filter: id!$in... (Exclude active assets), companyId
/drivers/getQuery
POST
Filter: id!$in... (Exclude active assets), companyId
/carriers/create
POST
Purpose: Create new dataSource record
/carriers/update
POST
Purpose: Update existing dataSource record
4. Create/Update3. Carrier Calendar \add-edit-carriercarrier-calendar
Create EP
/carriers/creategetQuery
POST
UpdatePurpose: EPFetch carrier details (driver/mover/tanker IDs)
/carriers/updatedriverBlockDayDetails/getQuery
POST
Filter: driverId, blockStatus (Blocked, Released, etc.)
/moverBlockDayDetails/getQuery
POST
Filter: moverId, blockStatus
/tankerBlockDayDetails/getQuery
POST
Filter: tankerId, blockStatus
{
  "companyId": Number,
  "moverId": Number,
  "tankerId": Number,
  "driverId": Number,
  "remark": "String",
  "isDeleted": 0
}
5. Carrier Calendar (Consolidated View) \carrier-calendar
Aggregates block days (leave/maintenance) from three separate tables.
Driver Blocks
/driverBlockDayDetails/getQuery
POST
Mover Blocks
/moverBlockDayDetails/getQuery
POST
Tanker Blocks
/tankerBlockDayDetails/getQuery
POST
6. Helper APIs (Dropdowns)
\listing-fleet-panel-mover \add-edit-carrier
Movers
/movers/getQuery
POST
Tankers
/tankers/getQuery
POST
Drivers
/drivers/getQuery
POST
Users (Listing)
/driverUser/getUserList
POST

C. Validation & Business Logic

1. Asset Availability Filtering (The "In-Use" Check) \add-edit-carrier

System ensures you cannot select an asset already assigned to another active carrier.

  • Step 1: Fetch all active carriers (excluding current) via /carriers/getQuery.
  • Step 2: Filter Dropdowns by excluding IDs found in Step 1.
Movers: id||!$in||{used_ids} AND companyId||$eq||{selectedCompany}
Tankers: id||!$in||{used_ids} AND companyId||$eq||{selectedCompany}
Drivers: id||!$in||{used_ids} AND companyId||$eq||{selectedCompany}

2. Availability Status \listing-fleet-panel-mover

The "Availability" column is a calculated status derived from the statusStartDatetime and statusEndDatetime passed to the API.

Logic: If any component (Driver/Mover/Tanker) has a block record during that window, the Carrier is marked "Unavailable".