Productrequest Documentation
Product Request Controller Documentation
File: /controllers/productrequest.php
Purpose: Manages inter-store product transfer requests and inventory redistribution workflows
Last Updated: December 19, 2024
Total Functions: 5
Lines of Code: 367
---
๐ Overview
The Product Request Controller manages the complex workflow of product requests between different stores or warehouses within the ERP system. It handles request creation, approval workflows, status tracking, and facilitates inventory redistribution across multiple locations.
Primary Functions
- โ Create product transfer requests between stores
- โ Display requests with different status levels (new, accepted, refused)
- โ Handle multi-store request management
- โ Track request status workflows (0=new, 1=refused, 2=accepted, 3=completed)
- โ Support both centralized and store-specific request management
- โ Generate hierarchical product category paths
- โ Delete/cancel product requests
- โ Integration with store and user management systems
Related Controllers
- โข storeController.php - Store/warehouse management
- โข productController.php - Product management
- โข productCatController.php - Category management
- โข storedetailController.php - Inventory tracking
- โข storemovementController.php - Stock transfers
- โข userController.php - User and permissions management
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns |
|---|---|---|
| productrequest | Main requests table | productrequestid, productid, requeststoreid, storeid, status, deleted |
| Table Name | Purpose | Relationship | |
|---|---|---|---|
| product | Product information | Foreign Key: productrequest.productid | |
| productcat | Product categories | Foreign Key: product.productCatId | |
| store | Store/warehouse info | Foreign Key: productrequest.storeid, requeststoreid | |
| user | User store assignments | Foreign Key: user.userstoreid | |
| storedetail | Inventory quantities | Related: store inventory tracking |
๐ง Key Functions
1. Main Display Logic (do = "" - Default)
Purpose: Displays the product request creation form
Called By: GET request with no 'do' parameter
Business Logic:
1. Get user's assigned store ID from user data
2. If user has no specific store (storeId = 0), show all stores for selection
3. Display add form with appropriate store options
Template Integration:
- โข Uses
/views/default/productrequestview/add.html - โข Passes store data for dropdown selection
2. Show Requests (do = "show")
Purpose: Displays all product requests with complex filtering based on user store access
Called By: GET request with do=show
Business Logic Flow:
Request Categories:
- โข My Requests:
p.requeststoreid = {userStoreId}(requests FROM my store) - โข Other Requests:
p.storeid = {userStoreId}(requests TO my store) - โข Status Filters:
- New: p.status = 0
- Refused: p.status = 1
- Accepted: p.status in (2, 3)
Data Enrichment:
For each request, the system adds:
- โข Product name from product table
- โข Category name from productcat table
- โข Full category path using
getProductPath_recursive()
3. Delete Request (do = "delete")
Purpose: Soft deletes a product request
Called By: GET request with do=delete&id={requestId}
Parameters:
- โข
$_GET['id'](int) - Product request ID to delete
Database Operations:
- โข UPDATE
productrequestSET deleted = 1 WHERE productrequestid = $id
Business Logic:
1. Load existing request record
2. Set deleted flag to 1 (soft delete)
3. Update database record
4. Redirect to success or error page
4. add() Function (Legacy/Placeholder)
Purpose: Originally intended for adding insurance companies (appears to be legacy code)
Status: Contains obsolete code not related to product requests
Note: Function contains insurance company logic that should be cleaned up
5. getProductPath_recursive($parentid, $categories, $level)
Purpose: Builds hierarchical category path for products (e.g., "Electronics/Computers/Laptops")
Parameters:
- โข
$parentid(int) - Starting category ID - โข
$categories(string) - Accumulated path string - โข
$level(int) - Recursion depth limiter
Returns: string - Complete category path separated by "/"
Business Logic Flow:
Recursion Safety: Limited to 2 levels deep to prevent infinite loops
Example Output:
getProductPath_recursive(123, "", 0);
// Returns: "Electronics/Computers"
---
๐ Business Logic Flow
Request Creation Workflow
Multi-Store Request Management
Request Status Workflow
---
โ ๏ธ Common Issues
Legacy Code Cleanup Needed
Issue: add() function contains insurance company code
Impact: Confusion and potential conflicts
Recommendation: Remove or move insurance logic to appropriate controller
Missing CRUD Operations
Issue: No functions for creating, updating, or approving requests
Current State: Only display and delete functionality
Missing Functions:
- โข Create new request
- โข Approve/refuse request
- โข Update request status
- โข Fulfill completed requests
Category Path Performance
Issue: Recursive function called for each request in loops
Impact: N+1 query problem with large request lists
Recommendation: Cache category paths or use joins
Error Handling
Issue: Limited error handling in delete operation
Risk: Potential data inconsistency
Recommendation: Add transaction support and better validation
---
๐ Dependencies
Required Files
include("../public/impOpreation.php"); // Core operations
include("../library/uploadImages.php"); // Image upload (legacy?)
include("../public/config.php"); // Configuration
include("../public/authentication.php"); // User authentication
include("../public/include_dao.php"); // DAO includes
DAO Classes
// Product-related DAOs
ProductDAO.class.php // Product operations
ProductcatDAO.class.php // Category operations
// Request-related DAOs
ProductrequestsMySqlDAO.class.php // Request operations
ProductrequestsMySqlExtDAO.class.php // Extended request queries
// Store-related DAOs
StoreDAO.class.php // Store operations
StoreMySqlExtDAO.class.php // Extended store operations
// User management
UserDAO.class.php // User operations
UserMySqlExtDAO.class.php // Extended user operations
Views
- โข
/views/default/productrequestview/add.html- Request creation form - โข
/views/default/productrequestview/show.html- Request listing and management
Global Objects
$productRequest // Request DTO
$productRequestDAO // Request DAO
$productRequestExt // Extended request operations
$product, $productDAO, $productExt // Product objects
$productCatDAO, $productCatExt // Category objects
$store, $storeDAO, $storeEX // Store objects
$user, $userDAO, $userEX // User objects
---
๐ Performance Considerations
Database Queries
- โข Multiple queries for each request to get product/category names
- โข Recursive category path function creates additional queries
- โข Extended DAO methods help optimize some operations
Memory Usage
- โข Processes request lists in memory with enriched data
- โข Category path building adds memory overhead
- โข Consider pagination for large request volumes
Optimization Opportunities
1. Join Queries: Get product/category names in single query
2. Category Path Caching: Pre-compute and cache category hierarchies
3. Pagination: Add pagination to request listing
4. Index Optimization: Ensure proper indexes on request status and store IDs
---
๐ฏ Integration Points
Store Management Integration
// User assigned to specific store
$storeId = $userdata->userstoreid;
// Request between stores
requeststoreid = source store
storeid = target store
Inventory System Integration
- โข Requests should trigger inventory checks
- โข Fulfilled requests should create store movements
- โข Integration with
storedetailandstoremovementcontrollers needed
User Permission System
- โข Store-based access control
- โข Admin users (storeId = 0) see all requests
- โข Regular users see only their store's requests
Approval Workflow Integration
- โข Missing approval/rejection functionality
- โข Should integrate with user permissions
- โข Status updates should trigger notifications
---
๐ Troubleshooting
No Requests Showing
Symptom: Empty request lists
Causes:
- โข User has no store assignment (userstoreid = null)
- โข No requests exist for user's store
- โข Database connectivity issues
Solution: Check user store assignment and database logs
Category Paths Not Displaying
Symptom: Empty or broken category paths
Causes:
- โข Orphaned category records (parent doesn't exist)
- โข Infinite recursion in category hierarchy
- โข Database corruption in productcat table
Solution: Validate category hierarchy integrity
Permission Issues
Symptom: Users seeing wrong requests
Causes:
- โข Incorrect store assignment in user table
- โข Logic error in store-based filtering
Solution: Verify user.userstoreid values
---
๐ก Future Enhancements
Missing Core Functionality
1. Request Creation: Complete form and backend processing
2. Approval Workflow: Approve/reject functionality with notifications
3. Fulfillment: Mark requests as completed with inventory movement
4. Status Tracking: Timeline view of request progress
5. Bulk Operations: Handle multiple requests simultaneously
Advanced Features
1. Auto-Approval: Rules-based automatic approval for certain conditions
2. Inventory Integration: Real-time availability checking
3. Notification System: Email/SMS alerts for request status changes
4. Reporting: Analytics on request patterns and fulfillment times
5. Mobile Support: Mobile-friendly interface for warehouse staff
Performance Improvements
1. Caching Layer: Cache category hierarchies and frequent queries
2. Real-time Updates: WebSocket integration for live status updates
3. API Integration: RESTful API for mobile apps and external systems
4. Batch Processing: Optimize database operations for large datasets
---
๐ Data Flow Example
Typical Request Scenario
Store A needs Product X (ID: 100)
โโ Store A user creates request
โโ requeststoreid = A (requesting store)
โโ storeid = B (target store that has inventory)
โโ productid = 100
โโ status = 0 (new)
โโ deleted = 0
Store B user sees incoming request
โโ Reviews inventory availability
โโ Approves: status = 2
โโ Prepares shipment: status = 3
โโ OR Rejects: status = 1
Store A user sees status update
โโ Receives notification of approval/rejection
โโ If approved, coordinates pickup/delivery
This controller serves as a foundation for inter-store inventory management but requires significant development to reach full functionality.