Skip to main content

EKAJAYA - PRODUCT UNIT OF MEASUREMENT

📏 Technical Specification: Product Unit of Measurement (PUM)


📋 Feature Overview

Attribute Detail
Module 📂 Directory (PRODUCT_UNIT_OF_MEASUREMENT)
Feature Name Product Unit of Measurement (PUM)
Description Defines specific units of measurement (e.g., Bags, MT) for products and their conversion rates. Links products to external codes for integration.
Page & Detail
1. Listing Page: /product-unit-of-measurement
Displays grid of product UOMs, filters, and delete actions.
2. Add/Edit Page: /add-product-unit-of-measurement
Form for defining UOMs and conversion rates for products.
User Guide 📄 [Ekajaya Admin User Guide - Directory Module, Section 8]

🛠️ Technical Implementation

A. Permissions & Access Control

Note: Access is controlled via PermissionGuard and code-level checks.
Scope Permission Code Description & Page Usage
Menu Visibility PRODUCT_UNIT_OF_MEASUREMENT.MENU Sidebar menu visibility.
Page Access PRODUCT_UNIT_OF_MEASUREMENT.LISTING Access to listing route.
\product-unit-of-measurement
View Access PRODUCT_UNIT_OF_MEASUREMENT.VIEW Controls visibility of action buttons (Edit).
\product-unit-of-measurement
Create Action PRODUCT_UNIT_OF_MEASUREMENT.UPDATE Visibility of the + Add button.
\product-unit-of-measurement
Delete Action PRODUCT_UNIT_OF_MEASUREMENT.DELETE Visibility of the Delete 🗑️ icon.
\product-unit-of-measurement
Edit/Save Action PRODUCT_UNIT_OF_MEASUREMENT.UPDATE Ability to save changes (Create/Update).
\add-product-unit-of-measurement

B. API Interaction

Base URL: ${environment.baseApiUrl}
1. Retrieve PUM List \product-unit-of-measurement
Endpoint
/productUnitOfMeasurements/getQuery
Method
POST
Key Params
join: product
filter: Dynamic filters for unitOfMeasurement and productId.
2. Delete PUM \product-unit-of-measurement
Endpoint
/productUnitOfMeasurements/delete
Method
POST
{ "id": Number }
3. Get Single PUM (Edit Mode) \add-product-unit-of-measurement
Endpoint
/productUnitOfMeasurements/getQuery
Method
POST
Query Params
filter: id||$eq||{id}
limit: 1
4. Create PUM \add-product-unit-of-measurement
Endpoint
/productUnitOfMeasurements/create
Method
POST
{
  "productId": Number,
  "unitOfMeasurement": "String",
  "conversionRate": Number,
  "cimaProductCode": "String"
}
5. Update PUM \add-product-unit-of-measurement
Endpoint
/productUnitOfMeasurements/update
Method
POST
Payload is same as Create, but includes "id": Number.
6. Helper APIs (Dropdowns) \add-product-unit-of-measurement
Products
/products/getQuery (isDeleted=0)
POST
UOM Options
/settings/getQuery (type="Unit Of Measurement")
POST
CIMA Codes
/settings/getQuery (type="CIMA Product Code")
POST
Asia Cement Codes
/settings/getQuery (type="Asia Cement Product Code")
POST

C. Validation & Business Logic

1. Mandatory Fields Validation \add-product-unit-of-measurement

  • Trigger: On Save.
  • Logic: Checks if productId, unitOfMeasurement, or conversionRate are empty.
  • Error: Displays specific error messages (e.g., "Please select the product", "Please enter the conversion rate").

2. Conversion Logic & Constraints

Context: The conversion rate is critical for calculating tonnage vs. quantity in orders.

Note: There is no explicit backend validation check for unique Product+UOM combinations in the provided code. The system relies on the user ensuring duplicates are not created.