ProductCat Documentation
Product Category Controller Documentation
File: /controllers/productCatController.php
Purpose: Manages product categories, category hierarchy, units assignment, and category-level pricing and discounts
Last Updated: December 19, 2024
Total Functions: 12
Lines of Code: 883
---
๐ Overview
The Product Category Controller is a core component for managing product categorization in the ERP system. It handles hierarchical category structures, category-specific pricing, discount management, and unit assignments.
Primary Functions
- โ Create and edit product categories
- โ Manage category hierarchy (parent-child relationships)
- โ Assign units to categories
- โ Set category-level pricing (buy/sell prices)
- โ Configure category discounts
- โ Handle temporary and permanent deletion
- โ Manage optic services settings
- โ Upload category images/logos
- โ Batch operations (multiple category actions)
- โ Menu visibility controls
- โ Negative sale prevention settings
Related Controllers
- โข productController.php - Product management
- โข buyBillController.php - Purchase operations
- โข sellbillController.php - Sales operations
- โข unitController.php - Unit management
- โข storeController.php - Store management
- โข storedetailController.php - Inventory management
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| productcat | Main category table | productCatId, productCatName, productCatParent, conditions | |
| productcatunit | Category-unit relationships | productcatunitid, productcatid, unitid, productnumber |
| Table Name | Purpose | Relationship | |
|---|---|---|---|
| product | Products in categories | Foreign Key: productcat.productCatId | |
| unit | Available units | Foreign Key: productcatunit.unitid | |
| user | User who created category | Foreign Key: productcat.userId |
๐ง Key Functions
1. add()
Purpose: Creates a new product category with all associated settings
Called By: POST request with do=add
Parameters:
- โข
$_POST['productCatName'](string) - Category name - โข
$_POST['productCatDescription'](string) - Category description - โข
$_POST['parent'](int) - Parent category ID - โข
$_POST['inMenu'](int) - Show in menu (0/1) - โข
$_POST['stopNegativeSale'](int) - Prevent negative sales (0/1) - โข
$_POST['discounttype'](int) - Discount type - โข
$_POST['selldiscount'](float) - Sell discount percentage - โข
$_POST['buydiscount'](float) - Buy discount percentage - โข
$_POST['buytotal'](int) - Buy total setting - โข
$_POST['price4']to$_POST['price13'](int) - Additional price levels - โข
$_POST['opticServices'](array) - Optic services - โข
$_FILES['logo']- Category image/logo
Returns: int - New category ID
Database Operations:
- โข INSERT into
productcat - โข INSERT into
productcatunit(for each unit)
Business Logic Flow:
1. Validate and process form data
โ
2. Handle image upload
โ
3. Insert category record
โ
4. Process category units
โ
5. Call online sync function
โ
6. Return category ID
Example:
// Called via POST with category data
$categoryId = add();
2. show()
Purpose: Displays all categories for management interface
Called By: GET request with do=show
Database Operations:
- โข SELECT from
productcatviaqueryAllForShow()
Business Logic:
1. Fetch all categories with extended data
2. Assign to Smarty template
3. Display show.html template
3. showByCatId($catId)
Purpose: Shows specific category details
Parameters:
- โข
$catId(int) - Category ID to display
Database Operations:
- โข SELECT from
productcatWHERE productCatId = $catId
4. executeOperation()
Purpose: Performs batch operations on multiple categories
Called By: POST request with do=executeOperation
Parameters:
- โข
$_POST['operation'](string) - Operation type ("1"=temp delete, "2"=restore) - โข
$_POST['choosedItem'](array) - Array of category IDs
Business Logic Flow:
1. Get operation type and selected items
โ
2. Loop through each selected category
โ
3. Perform operation (delete/restore)
โ
4. Build result message string
โ
5. Display results
5. tempdelete($productCatid)
Purpose: Temporarily deletes a category (soft delete)
Parameters:
- โข
$productCatid(int) - Category ID to delete
Returns: string - "success" or error message
Business Logic Flow:
Validation Rules:
- โข Cannot delete if products exist in category
- โข Cannot delete if child categories exist
6. returndelete($productCatid)
Purpose: Restores a temporarily deleted category
Parameters:
- โข
$productCatid(int) - Category ID to restore
Database Operations:
- โข UPDATE
productcatSET conditions = 0
7. edit()
Purpose: Loads category data for editing
Called By: GET request with do=edit&id={categoryId}
Returns: object - Category data with modified opticServices
Special Processing:
- โข Prepends comma to opticServices for Smarty string position functions
8. update()
Purpose: Updates existing category with new data
Called By: POST request with do=update
Parameters: Same as add() plus:
- โข
$_POST['productCatId'](int) - Category ID to update - โข
$_POST['conditions'](int) - Category status
Business Logic Flow:
1. Load existing category
โ
2. Update category properties
โ
3. Handle image upload/update
โ
4. Delete existing category units
โ
5. Insert new category units
โ
6. Update database record
9. deleteFinaly($productCatid)
Purpose: Permanently deletes category and all child categories recursively
Parameters:
- โข
$productCatid(int) - Category ID to delete permanently
Business Logic Flow:
โ ๏ธ Warning: This is a destructive operation that cannot be undone!
10. addCatByNameOnly($catName)
Purpose: Quickly creates a category with only a name (used by external apps)
Parameters:
- โข
$catName(string) - Category name
Returns: int - New category ID
Use Case: Used by integrated applications (like obygy) to create basic categories
11. getUnits()
Purpose: Retrieves all available units for category assignment
Returns: array - All active units
12. getProductCatUnits($productCatId)
Purpose: Gets all units assigned to a specific category
Parameters:
- โข
$productCatId(int) - Category ID
Returns: array - Category-unit relationships
---
๐ Business Logic Flow
Category Creation Workflow
Category Deletion Safety Check
---
โ ๏ธ Common Issues
PHP 8.2 Compatibility
Issue: Object initialization before property assignment
Solution: Objects are properly initialized in constructor
Image Upload Handling
Issue: File upload errors not properly handled
Files: Uses uploadImages2() and updateImagesWithoutresiz() functions
Solution: Proper error handling in upload functions
Recursive Deletion
Issue: Stack overflow with deep category hierarchies
Solution: Function handles recursion safely but monitor for very deep trees
Online Sync Dependency
Function: onlineTempCategoryFunc()
Purpose: Syncs category changes with web store
Issue: Sync failures can cause inconsistency
---
๐ Dependencies
Required Files
include("../public/impOpreation.php"); // Core operations
include("../public/config.php"); // Configuration
include("dailyentryfun.php"); // Daily entry functions
include("../library/uploadImages.php"); // Image upload functions
DAO Classes
ProductcatDAO.class.php // Category operations
ProductDAO.class.php // Product operations
ProductcatunitDAO.class.php // Category-unit relationships
UnitDAO.class.php // Unit operations
ProgramsettingsDAO.class.php // System settings
YoutubeLinkDAO.class.php // YouTube integration
Views
- โข
/views/default/productCatview/add.html- Add category form - โข
/views/default/productCatview/edit.html- Edit category form - โข
/views/default/productCatview/show.html- Category listing - โข
/views/default/productCatview/editprint.html- Print view
JavaScript Dependencies
- โข Custom validation scripts for form handling
- โข Image upload preview functionality
- โข Dynamic unit row addition/removal
---
๐ Performance Considerations
Database Optimization
- โข Category hierarchy queries use indexed parent-child relationships
- โข Bulk operations minimize database calls
- โข Extended DAO methods provide optimized queries
Caching Strategy
- โข Category trees could benefit from caching for large hierarchies
- โข Unit assignments cached during form display
Memory Usage
- โข Recursive deletion loads all children - monitor for large trees
- โข Image uploads handled efficiently with proper resizing
---
๐ฏ Integration Points
Web Store Integration
- โข
onlineTempCategoryFunc()syncs changes - โข Category visibility controlled by
inMenusetting
Product Management
- โข Categories required for product creation
- โข Category-level pricing affects product defaults
Inventory Management
- โข Category units define available measurement types
- โข Discount settings affect pricing calculations