Skip to main content

MOVER

🚛 Technical Specification: Mover Setup


📋 Feature Overview

Attribute Detail
Module 📂 Directory (MOVER)
Feature Name Mover Management (Prime Movers)
Description Manages fleet of prime movers (truck heads). Tracks vehicle ID, specs, and compliance expiry dates (Road Tax, Permits).
Page & Detail
1. Listing Page: /listing-mover-manage
Displays grid of movers, filters, and delete actions.
2. Add/Edit Page: /add-mover-manage
Form for creating new movers or updating details/expiry dates.
User Guide 📄 [Ekajaya Admin User Guide - Directory Module, Section 3]

🛠️ Technical Implementation

A. Permissions & Access Control

Note: Access is controlled via PermissionGuard and component-level checks.
Scope Permission Code Description & Page Usage
Menu Visibility MOVER.MENU Sidebar menu visibility.
Page Access MOVER.LISTING Access to listing route.
\listing-mover-manage
Create Action MOVER.UPDATE Controls the + Add button visibility.
\listing-mover-manage
View Access MOVER.VIEW Controls visibility of Edit icon.
\listing-mover-manage
Delete Action MOVER.DELETE Visibility of the Delete 🗑️ icon.
\listing-mover-manage
Edit/Save Action MOVER.UPDATE Ability to save changes on Add/Edit screen.
\add-mover-manage

B. API Interaction

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

C. Validation & Business Logic

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

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

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

2. Unique Plate Number Validation \add-mover-manage

  • Trigger: On Save.
  • Logic: Calls /movers/getQuery. Filter: plateNo||$eq||{input}.
  • Error: Blocking error: "Mover plate number already exists".

3. Date Formatting \add-mover-manage

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