Skip to main content

TANKER

🚛 Technical Specification: Tanker Setup


📋 Feature Overview

Attribute Detail
Module 📂 Directory (TANKER)
Feature Name Tanker Management (Trailers)
Description Manages the fleet of tankers (trailers) attached to prime movers. Tracks vehicle ID, specs, and compliance dates (Road Tax, Permits).
Page & Detail
1. Listing Page: /listing-tanker-manage
Displays grid of tankers, filters, and delete actions.
2. Add/Edit Page: /add-tanker-manage
Form for creating new tankers or updating details/expiry dates.
User Guide 📄 [Ekajaya Admin User Guide - Directory Module, Section 4]

🛠️ Technical Implementation

A. Permissions & Access Control

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

Sidebar menu visibility.

\listing-tanker-manage

\add-tanker-manage

Page Routing TANKER.LISTING Access to listing route.
\listing-tanker-manage
Page Routing TANKER.VIEW

Access to add route.

\add-tanker-manage

Create Action TANKER.UPDATE Controls the + Add button on listing.
\listing-tanker-manage
View Access TANKER.VIEW Controls visibility of Edit icon.
\listing-tanker-manage
Delete Action TANKER.DELETE Visibility of the Delete 🗑️ icon.
\listing-tanker-manage
Edit/Save Action TANKER.UPDATE Ability to save changes on Add/Edit screen.
\add-tanker-manage

B. API Interaction

Base URL: ${environment.baseApiUrl}
1. Retrieve Tanker List \listing-tanker-manage
Endpoint
/tankers/getQuery
Method
POST
Key Params
filter: isDeleted||$eq||0 (plus dynamic filters).
join: company
2. Delete Tanker (Soft Delete) \listing-tanker-manage
Endpoint
/tankers/update
Method
POST
Logic
Updates record setting isDeleted: true.
{ "id": Number, "isDeleted": true }
3. Get Single Tanker (Edit Mode) \add-tanker-manage
Endpoint
/tankers/getQuery
Method
POST
Query Params
filter: id||$eq||{id}
limit: 1
4. Create/Update Tanker \add-tanker-manage
Create EP
/tankers/create
POST
Update EP
/tankers/update
POST
{
  "companyId": Number,
  "tankerNumber": "String",
  "type": "String",
  "model": "String",
  "chassisNumber": "String",
  "bdm": "String",
  "spadPermitOwner": "String",
  "malaysiaRoadTaxExpiry": "yyyy-MM-dd",
  "singaporeRoadTaxExpiry": "yyyy-MM-dd",
  "opcCapacity": "String",
  "isDeleted": 0
}
5. Helper APIs (Dropdowns)
\listing-tanker-manage \add-tanker-manage
Companies
/companies/getQuery
POST
Permit Owners
/settings/getQuery (type="SPAD Permit Owner")
POST

C. Validation & Business Logic

1. Dependency Checks (Pre-Delete) \listing-tanker-manage

Before deleting a tanker, the system ensures it is not assigned to an active Carrier.

Module Endpoint Filter Logic
🚛 Carriers /carriers/getQuery tankerId
Error: "Unable to delete Tanker due to tagging to carrier."

2. Unique Tanker Number Validation \add-tanker-manage

  • Trigger: On Save.
  • Logic: Calls /tankers/getQuery. Filter: tankerNumber||$eq||{input}.
  • Error: Blocking error: "Tanker number already exists".

3. Date Formatting \add-tanker-manage

  • Library: Luxon (DateTime).
  • Logic: Before saving, all date fields (malaysiaRoadTaxExpiry, etc.) are converted to standard yyyy-MM-dd format. Null strings converted to null.