Unit Documentation
Unit Controller Documentation
File: /controllers/unitController.php
Purpose: Manages units of measurement for products and categories
Last Updated: December 19, 2024
Total Functions: 8
Lines of Code: 311
---
๐ Overview
The Unit Controller manages all units of measurement used throughout the ERP system. Units are fundamental building blocks that define how products are measured (pieces, kilograms, liters, etc.) and are essential for inventory management, billing, and reporting.
Primary Functions
- โ Create new measurement units
- โ Edit existing units
- โ Display all units in management interface
- โ Soft delete units (temporary removal)
- โ Restore deleted units
- โ Batch operations on multiple units
- โ Validate unit dependencies before deletion
- โ Integration with product-category unit assignments
Related Controllers
- โข productCatController.php - Category-unit assignments
- โข productController.php - Product unit assignments
- โข buyBillController.php - Purchase quantities
- โข sellbillController.php - Sales quantities
- โข storedetailController.php - Inventory quantities
- โข inventoryController.php - Stock management
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns |
|---|---|---|
| unit | Main units table | unitId, unitName, unitSymbol, unitDescription, conditions |
| Table Name | Purpose | Relationship | |
|---|---|---|---|
| productunit | Product-unit assignments | Foreign Key: unit.unitId | |
| productcatunit | Category-unit assignments | Foreign Key: unit.unitId | |
| buybilldetail | Purchase quantities | Foreign Key: unit.unitId | |
| sellbilldetail | Sales quantities | Foreign Key: unit.unitId | |
| storedetail | Inventory quantities | Foreign Key: unit.unitId |
๐ง Key Functions
1. add()
Purpose: Creates a new unit of measurement
Called By: POST request with do=add
Parameters:
- โข
$_POST['unitName'](string) - Unit name (e.g., "Kilogram", "Piece") - โข
$_POST['unitSymbol'](string) - Unit symbol (e.g., "kg", "pcs") - โข
$_POST['unitDescription'](string) - Optional description
Returns: void (redirects on success/error)
Database Operations:
- โข INSERT into
unittable
Business Logic:
1. Collect form data
2. Set default conditions = 0 (active)
3. Set current date
4. Set current user ID
5. Insert unit record
Example:
// POST data: unitName="Kilogram", unitSymbol="kg", unitDescription="Weight unit"
add(); // Creates new unit and redirects
2. show()
Purpose: Displays all units in management interface
Called By: GET request with do=show
Database Operations:
- โข SELECT * FROM
unitviaqueryAll()
Business Logic:
1. Fetch all unit records
2. Assign to Smarty template variable
3. Display in show.html template
Template Integration:
- โข Displays units in table format
- โข Shows unit name, symbol, description
- โข Provides edit/delete action buttons
3. executeOperation()
Purpose: Performs batch operations on multiple selected units
Called By: POST request with do=executeOperation
Parameters:
- โข
$_POST['operation'](string) - Operation type ("1"=temp delete, "2"=restore) - โข
$_POST['choosedItem'](array) - Array of unit IDs
Returns: void (displays results)
Business Logic Flow:
Output Format:
- โข Success: "Unit Name: Operation completed successfully"
- โข Error: "Unit Name: Error message"
4. tempdelete($unitid)
Purpose: Safely deletes a unit with dependency validation
Parameters:
- โข
$unitid(int) - Unit ID to delete
Returns: string - "success" or error message
Business Logic Flow:
Validation Rules:
- โข Cannot delete if used in product-unit assignments
- โข Returns specific error message for blocked deletions
Error Messages:
- โข Arabic: "ูุง ูู ูู ุญุฐู ูุฐู ุงููุญุฏุฉ ูุงุฑุชุจุงุทูุง ุจู ูุชุฌุงุช"
- โข Translation: "Cannot delete this unit because it's linked to products"
5. returndelete($unitid)
Purpose: Restores a temporarily deleted unit
Parameters:
- โข
$unitid(int) - Unit ID to restore
Database Operations:
- โข UPDATE
unitSET conditions = 0 WHERE unitId = $unitid
Business Logic:
1. Restore unit by setting conditions back to 0
2. Unit becomes available for use again
6. edit()
Purpose: Loads unit data for editing
Called By: GET request with do=edit&id={unitId}
Returns: object - Unit data for form population
Database Operations:
- โข SELECT * FROM
unitWHERE unitId = $unitId
Template Integration:
- โข Populates edit form with existing data
- โข Allows modification of name, symbol, description
7. update()
Purpose: Updates existing unit with new data
Called By: POST request with do=update
Parameters:
- โข
$_POST['unitId'](int) - Unit ID to update - โข
$_POST['unitName'](string) - Updated unit name - โข
$_POST['unitSymbol'](string) - Updated symbol - โข
$_POST['unitDescription'](string) - Updated description - โข
$_POST['conditions'](int) - Unit status (0=active, 1=deleted)
Database Operations:
- โข UPDATE
unitSET ... WHERE unitId = $unitId
Business Logic:
1. Collect form data
2. Set current date and user ID
3. Update all unit properties
4. Preserve unit ID for update
8. Global Helper Functions
Purpose: Utility functions used throughout the system
getUnits() (referenced in other controllers):
- โข Returns all active units for dropdowns
- โข Used in product and category management
---
๐ Business Logic Flow
Unit Creation Workflow
Unit Deletion Safety Check
---
โ ๏ธ Common Issues
Dependency Validation
Issue: Attempting to delete units that are in use
Solution: System checks productunit table before allowing deletion
Error Handling: Returns descriptive Arabic error message
Unicode Support
Issue: Arabic unit names and symbols need proper encoding
Solution: Database and forms configured for UTF-8 support
Symbol Standardization
Issue: Inconsistent unit symbols
Best Practice: Use standard abbreviations (kg, pcs, L, mยฒ, etc.)
---
๐ Dependencies
Required Files
include("../public/impOpreation.php"); // Core operations
include("../public/config.php"); // Configuration
include("../public/authentication.php"); // User authentication
DAO Classes
UnitDAO.class.php // Basic unit operations
UnitMySqlExtDAO.class.php // Extended unit operations
ProductunitDAO.class.php // Product-unit relationships
YoutubeLinkDAO.class.php // YouTube integration (help videos)
Views
- โข
/views/default/unitview/add.html- Add unit form - โข
/views/default/unitview/edit.html- Edit unit form - โข
/views/default/unitview/show.html- Units listing - โข
/views/default/unitview/editprint.html- Print view
Global Variables
$unit // Unit DTO object
$unitDAO // Unit DAO object
$unitExt // Extended DAO object
$productUnitDAO // Product-unit relationships
$today // Current date
---
๐ Performance Considerations
Database Queries
- โข Simple CRUD operations with minimal joins
- โข Index on unitId for fast lookups
- โข Dependency checks use efficient count queries
Memory Usage
- โข Lightweight controller with small data sets
- โข Units table typically contains <100 records
Caching Opportunities
- โข Unit list could be cached for dropdown menus
- โข Rarely changes, good candidate for application-level caching
---
๐ฏ Integration Points
Product Management
- โข Units assigned to products for quantity measurement
- โข Default unit inheritance from category settings
Inventory System
- โข All stock quantities tracked with units
- โข Conversion between units handled by related controllers
Billing System
- โข Purchase and sales quantities use unit measurements
- โข Unit symbols displayed on bills and invoices
Reporting
- โข Inventory reports group by units
- โข Sales reports show quantities with proper unit labels
---
๐ Usage Examples
Common Unit Types
// Weight units
Name: "Kilogram", Symbol: "kg"
Name: "Gram", Symbol: "g"
Name: "Ton", Symbol: "t"
// Count units
Name: "Piece", Symbol: "pcs"
Name: "Dozen", Symbol: "dz"
Name: "Box", Symbol: "box"
// Volume units
Name: "Liter", Symbol: "L"
Name: "Milliliter", Symbol: "mL"
Name: "Cubic Meter", Symbol: "mยณ"
// Length units
Name: "Meter", Symbol: "m"
Name: "Centimeter", Symbol: "cm"
Name: "Kilometer", Symbol: "km"
Typical Workflow
1. Administrator creates standard units (kg, pcs, L, etc.)
2. Categories are assigned appropriate units
3. Products inherit units from categories or override
4. Purchase/sales use these units for quantities
5. Reports display quantities with proper unit symbols
---
๐ Troubleshooting
Cannot Delete Unit
Symptom: Unit deletion fails with Arabic error message
Cause: Unit is assigned to one or more products
Solution:
1. Remove unit from all products first
2. Or use temporary deletion to hide unit
Missing Units in Dropdowns
Symptom: Units not appearing in product/category forms
Cause: Units marked as deleted (conditions = 1)
Solution: Restore units using returndelete function
Character Encoding Issues
Symptom: Arabic text not displaying correctly
Cause: Database charset or page encoding mismatch
Solution: Ensure UTF-8 encoding throughout the system