Setting Operation Controller Documentation
File: /controllers/settingOperationController.php
Purpose: Manages manufacturing operation settings including workstations, assets, and worker configurations
Last Updated: December 20, 2024
Total Functions: 8 main functions + 6 utility functions
Lines of Code: ~400
---
๐ Overview
The Setting Operation Controller is a comprehensive manufacturing management module that handles the configuration of production operations. It manages:
- โข Manufacturing operation definitions and settings
- โข Workstation assignments and configurations
- โข Asset allocation to operations
- โข Worker count management per operation
- โข Real-time tracking of operation durations
- โข Operation start/stop controls
- โข Integration between workstations, workers, and assets
Primary Functions
- โ Create and manage manufacturing operations
- โ Assign workstations to operations
- โ Allocate assets to specific operations
- โ Configure worker requirements per operation
- โ Set standard operation times
- โ Start/stop operation tracking
- โ Edit and update operation configurations
- โ Delete operations with dependency checks
Related Controllers
- โข workstationController.php - Workstation management
- โข assetController.php - Asset management
- โข employeeController.php - Employee management
- โข productionOrderController.php - Production planning
- โข productionExecutionController.php - Production tracking
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **settingoperation** | Manufacturing operation configurations | settingOperationID, settingOperationName, workStationID, assetesID, workersNo, realTime, conditions, operationType | |
| **workstation** | Manufacturing workstations | workStationID, workStationName | |
| **workstationworker** | Worker assignments to workstations | workstationworkerid, workstationid, workerid | |
| **assets** | Manufacturing assets/equipment | assetsID, assetsName |
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **user** | System users | userid, username | |
| **youtubelink** | Tutorial videos | youtubelinkid, title, url |
-- Operation settings
settingoperation.workStationID -> workstation.workStationID
settingoperation.assetesID -> assets.assetsID
settingoperation.userID -> user.userid
-- Worker assignments
workstationworker.workstationid -> workstation.workStationID
---
๐ Key Functions
1. Default Action (empty $do) - Add Form Display
Location: Lines 112-131
Purpose: Display form for creating new manufacturing operations
Process Flow:
1. Check user authentication
2. Load all workstations via getWorkStation()
3. Get worker count via getworkersNo()
4. Load all assets via getAsetesName()
5. Display add form with all reference data
Template Variables:
- โข
$allWorkStation- Available workstations - โข
$workerNumber- Worker count for selected workstation - โข
$allAsetes- Available assets
---
2. add ($do == "add") - Create Operation
Location: Lines 134-145 (function at 281-311)
Purpose: Create new manufacturing operation with all configurations
Function Signature:
function add()
Process Flow:
1. Extract form data from POST
2. Set operation defaults (conditions = 0, operationType = 1)
3. Set current user and date
4. Insert operation via DAO
5. Redirect to success page
Form Fields:
- โข
settingOperationName1- Operation name - โข
workstationid- Assigned workstation ID - โข
realTime1- Standard operation time - โข
assetesID1- Required asset ID - โข
workersNo1- Number of workers needed
Database Operation:
$settingOperation->settingOperationName = $settingOperationName;
$settingOperation->workStationID = $workStationID;
$settingOperation->realTime = $realTime;
$settingOperation->assetesID = $assetesID;
$settingOperation->workersNo = $workersNo;
$settingOperation->operationType = 1;
$settingOperation->conditions = 0;
$settingOperation->userID = $_SESSION['userid'];
$settingOperation->operationDate = date('Y-m-d');
$settingOperationDAO->insert($settingOperation);
---
3. show ($do == "show") - Display Operations List
Location: Lines 148-162 (function at 315-323)
Purpose: Display all manufacturing operations with workstation details
Function Signature:
function showAllDatat()
Process Flow:
1. Load YouTube tutorial links
2. Query all operations with workstation join via queryAllWithWorkstation()
3. Display operations list with edit/delete options
Template Variables:
- โข
$youtubes- Tutorial video links - โข
$all- Operations data with workstation information
---
4. edit ($do == "edit") - Edit Form Display
Location: Lines 165-186 (function at 325-336)
Purpose: Display edit form for existing operation
Parameters:
- โข
id- Operation ID to edit
Process Flow:
1. Load workstations and assets for dropdowns
2. Load operation data via load($id)
3. Display edit form with pre-filled data
Function Signature:
function edit()
---
5. update ($do == "update") - Update Operation
Location: Lines 189-200 (function at 338-369)
Purpose: Update existing manufacturing operation
Function Signature:
function update()
Process Flow:
1. Extract form data including operation ID
2. Load existing operation object
3. Update all fields except ID
4. Save updated operation
5. Redirect to success
Form Fields:
- โข
settingOperationID- Operation ID (hidden) - โข
settingOperationName- Updated operation name - โข
workStationID- Updated workstation assignment - โข
workersNo- Updated worker count - โข
assetesID- Updated asset assignment - โข
realTime- Updated standard time
---
6. stop ($do == "stop") - Toggle Operation Status
Location: Lines 201-209 (function at 371-387)
Purpose: Start or stop operation (toggle active status)
Parameters:
- โข
id- Operation ID to toggle
Function Signature:
function stopOperation()
Process Flow:
1. Load operation by ID
2. Toggle conditions field (0 โ 1)
3. Update operation status
4. Redirect to success
Status Logic:
if ($settingOperation->conditions == 0) {
$settingOperation->conditions = 1; // Stop operation
} elseif ($settingOperation->conditions == 1) {
$settingOperation->conditions = 0; // Start operation
}
---
7. delete ($do == "delete") - Delete Operation
Location: Lines 212-225 (function at 389-398)
Purpose: Permanently delete manufacturing operation
Parameters:
- โข
id- Operation ID to delete
Function Signature:
function delete()
Process Flow:
1. Check user authentication
2. Delete operation via DAO
3. Redirect to success page
---
๐ Workflows
Workflow 1: Manufacturing Operation Creation
---
Workflow 2: Operation Management
---
๐ URL Routes & Actions
| URL Parameter | Function Called | Description | |
|---|---|---|---|
| `do=` (empty) | Default action | Display operation creation form | |
| `do=add` | `add()` | Create new manufacturing operation | |
| `do=show` | `showAllDatat()` | Display list of all operations | |
| `do=edit` | `edit()` | Display edit form for operation | |
| `do=update` | `update()` | Update existing operation | |
| `do=stop` | `stopOperation()` | Toggle operation start/stop status | |
| `do=delete` | `delete()` | Delete operation permanently |
Edit Operation (do=edit):
- โข
id- Operation ID to edit
Update Operation (do=update):
- โข
settingOperationID- Operation ID - โข
settingOperationName- Operation name - โข
workStationID- Workstation assignment - โข
workersNo- Worker count - โข
assetesID- Asset assignment - โข
realTime- Standard operation time
Stop/Start Operation (do=stop):
- โข
id- Operation ID to toggle
Delete Operation (do=delete):
- โข
id- Operation ID to delete
---
๐งฎ Calculation Methods
Worker Count Calculation
function getworkersNo() {
global $workstationworkerEX;
$allworkerhours = $workstationworkerEX->queryByWorkstationid($dropval);
$workersNo = count($allworkerhours);
return $workersNo;
}
Operation Status Toggle
// Toggle between active (0) and stopped (1)
if ($settingOperation->conditions == 0) {
$settingOperation->conditions = 1; // Stop
} elseif ($settingOperation->conditions == 1) {
$settingOperation->conditions = 0; // Start
}
Standard Time Tracking
// Store standard operation time for planning
$settingOperation->realTime = $realTime; // Duration in minutes/hours
---
๐ Security & Permissions
Access Control
// Authentication required for all actions
include_once("../public/authentication.php");
User Tracking
// Track user who creates/modifies operations
$settingOperation->userID = $_SESSION['userid'];
$settingOperation->operationDate = date('Y-m-d');
Input Sanitization
- โข POST data validation: All form inputs processed through PHP superglobals
- โข SQL injection protection: DAO layer handles parameterized queries
- โข Session validation: User session checked before database operations
---
๐ Performance Considerations
Database Optimization
1. Indexes Recommended:
CREATE INDEX idx_settingop_workstation ON settingoperation(workStationID);
CREATE INDEX idx_settingop_asset ON settingoperation(assetesID);
CREATE INDEX idx_settingop_conditions ON settingoperation(conditions);
CREATE INDEX idx_workstationworker_station ON workstationworker(workstationid);
```
2. **Query Performance**:
- Use of extended DAO for JOIN queries (`queryAllWithWorkstation()`)
- Efficient foreign key relationships
- Minimal data loading per operation
3. **Memory Management**:
- Lightweight operations list
- Reference data loaded once per form display
- No complex calculations or large datasets
---
## ๐ Common Issues & Troubleshooting
### 1. **Missing Reference Data**
**Issue**: Dropdowns show empty or incomplete data
**Cause**: No workstations, assets, or workers configured
**Debug**:
sql
-- Check workstations
SELECT * FROM workstation;
-- Check assets
SELECT * FROM assets;
-- Check worker assignments
SELECT w.*, ws.workStationName
FROM workstationworker w
JOIN workstation ws ON w.workstationid = ws.workStationID;
### 2. **Operation Creation Fails**
**Issue**: Add operation returns error
**Cause**: Missing required fields or invalid foreign key references
**Fix**:
php
// Validate required fields before insert
if (empty($settingOperationName) || empty($workStationID)) {
throw new Exception("Missing required fields");
}
// Verify foreign key exists
$workStation = $workStationDAO->load($workStationID);
if (!$workStation) {
throw new Exception("Invalid workstation ID");
}
### 3. **Worker Count Not Updating**
**Issue**: Worker number shows old value
**Cause**: `getworkersNo()` function not called with correct workstation ID
**Debug**:
sql
-- Check worker assignments for workstation
SELECT COUNT(*) as worker_count
FROM workstationworker
WHERE workstationid = [WORKSTATION_ID];
### 4. **Operation Status Issues**
**Issue**: Start/stop operation not working
**Cause**: Conditions field not properly toggled
**Fix**:
php
// Ensure proper status handling
$operation = $settingOperationDAO->load($id);
if ($operation) {
$operation->conditions = ($operation->conditions == 0) ? 1 : 0;
$settingOperationDAO->update($operation);
}
---
## ๐งช Testing Scenarios
### Test Case 1: Complete Operation Setup
1. Create test workstation
2. Create test assets
3. Assign workers to workstation
4. Create new manufacturing operation
5. Verify all relationships are correct
6. Test operation start/stop functionality
### Test Case 2: Operation Management
1. Create multiple operations
2. Edit operation details
3. Change workstation assignments
4. Update worker requirements
5. Test delete functionality
6. Verify data consistency
### Test Case 3: Reference Data Validation
1. Create operation with invalid workstation ID
2. Test with missing assets
3. Verify error handling
4. Check foreign key constraints
5. Test with empty worker assignments
```
---
๐ Related Documentation
- โข CLAUDE.md - PHP 8.2 migration guide
- โข workstationController.php - Workstation management
- โข assetController.md - Asset management
- โข productionOrderController.md - Production planning
- โข Database Schema Documentation - Table relationships
---
Documented By: AI Assistant
Review Status: โ Complete
Next Review: When manufacturing requirements change