ImportContract Documentation
Import Contract Controller Documentation
File: /controllers/importContractController.php
Purpose: Manages import contracts for vehicles including chassis numbers, contract details, and client associations
Last Updated: December 20, 2024
Total Functions: 8+
Lines of Code: ~279
---
๐ Overview
The Import Contract Controller manages vehicle import contracts and related documentation. It handles:
- โข Import contract creation and management
- โข Vehicle chassis number tracking and validation
- โข Contract document uploads and storage
- โข Client-contract associations
- โข Contract search and filtering
- โข Vehicle details (brand, model, color, motor, etc.)
- โข Contract value and payment tracking
- โข Integration with product serial numbers
Primary Functions
- โ Create new import contracts
- โ Edit existing contracts
- โ Delete/archive contracts
- โ Upload contract images/documents
- โ Validate chassis number uniqueness
- โ Search and filter contracts
- โ Link contracts to clients
- โ Track vehicle specifications
- โ Ajax-based data loading
- โ User permission management
Related Controllers
- โข sellbillController.php - Vehicle sales
- โข clientController.php - Customer management
- โข productController.php - Product management
- โข buybillController.php - Purchase operations
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **importcontract** | Main contract records | id, clientid, chasisno, brand, carmodel, carcolor, cartype, contractvalue, carnumber, carmotor, contractimage, notes, sysdate, user_id, del | |
| **client** | Customer information | clientid, clientname, conditions, delegateid |
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **productserial** | Vehicle serial tracking | billid, chassisNo, del, conditions | |
| **buybill** | Purchase bills | buybillid, conditions | |
| **user** | System users | userid, delegateid |
๐ Key Functions
1. Default Action (empty $do) - Add Contract Form
Location: Line 25
Purpose: Display form for creating new import contracts
Process Flow:
1. Load user permissions and client data
2. Query available chassis numbers from product serials
3. Display add contract form with dropdown data
4. Set Smarty template variables
Template Variables:
- โข
$allClients- Available customers - โข
$allChasis- Available chassis numbers - โข
$customsellbillModel- UI flag
---
2. show - Contract Listing
Location: Line 43
Purpose: Display contracts with search and filter capabilities
Features:
- โข Permission-based client filtering
- โข Date range filtering
- โข Show/hide deleted contracts
- โข Ajax-powered data tables
---
3. edit - Edit Contract Form
Location: Line 63
Purpose: Load and display contract for editing
Process Flow:
1. Load contract data by ID
2. Load related client information
3. Populate form with existing data
4. Display edit template
---
4. savedata() - Save/Update Contract
Location: Line 124
Purpose: Create new contract or update existing one
Function Signature:
function savedata()
Process Flow:
1. Extract form data from POST
2. Handle image upload using upload class
3. Create new contract record or load existing
4. Set contract properties
5. Store to database with error handling
Key Fields:
- โข
clientid- Associated customer - โข
brand,carmodel,carcolor- Vehicle specifications - โข
chasisno- Unique chassis identifier - โข
cartype- New (0) or Used (1) - โข
contractvalue- Contract monetary value - โข
carnumber,carmotor- Vehicle identifiers - โข
contractimage- Uploaded document image
Image Handling:
$handle = new upload($_FILES['contractimage']);
$contractimage = uploadImages($handle, "../views/default/images/importcontract", 300, 300);
---
5. showajax() - Ajax Data Provider
Location: Line 180
Purpose: Provide contract data for DataTables with server-side processing
Function Signature:
function showajax()
Features:
- โข Server-side pagination
- โข Search functionality
- โข Date range filtering
- โข Client-based filtering
- โข Sorting capabilities
- โข Permission-based data access
Search Filters:
- โข
start_date,end_date- Date range - โข
del- Deletion status filter - โข
data1- Client ID filter - โข Global search across ID, date, client name
Response Format:
$output = array(
"draw" => intval($_POST["draw"]),
"recordsTotal" => intval($apps),
"recordsFiltered" => $totals,
"data" => array()
);
---
6. removecontroller() - Soft Delete
Location: Line 262
Purpose: Mark contract as deleted without physical removal
Process Flow:
1. Load contract record by ID
2. Set deletion flag (del = 2)
3. Record deletion date and user
4. Save changes
---
7. getChasisData - Chassis Information Lookup
Location: Line 96
Purpose: Retrieve vehicle data by chassis number
Returns:
{
"carnumber": "ABC123",
"carmotor": "V6-2.5L",
"cartype": "ุฌุฏูุฏ"
}
---
8. checkExist - Chassis Uniqueness Validation
Location: Line 108
Purpose: Validate chassis number uniqueness during creation/editing
Logic:
$exist = R::getCell('SELECT COUNT(*) FROM importcontract WHERE chasisno = ? '.$qs, [$chasisNo]);
echo $exist > 0 ? 1 : 0;
---
๐ Workflows
Workflow 1: Create New Import Contract
Workflow 2: Contract Management
---
๐ URL Routes & Actions
| URL Parameter | Function Called | Description | |
|---|---|---|---|
| `do=` (empty) | Default action | Show add contract form | |
| `do=show` | show | Display contracts list | |
| `do=edit` | edit | Show edit contract form | |
| `do=savedata` | `savedata()` | Save/update contract | |
| `do=showajax` | `showajax()` | Ajax data provider | |
| `do=removecontroller` | `removecontroller()` | Soft delete contract | |
| `do=getChasisData` | - | Get vehicle data by chassis | |
| `do=checkExist` | - | Validate chassis uniqueness |
๐ Security & Permissions
User Permission Levels
$userData = R::getRow('SELECT * FROM user WHERE userid = ?', [$_SESSION['userid']]);
if ($userData['viewclients'] == 1) {
$allClients = R::getAll('select * from client where conditions = 0');
} else {
$allClients = R::getAll('select * from client where conditions = 0 and delegateid = ?', [$_SESSION['userid']]);
}
Permission Logic:
- โข Users see all clients if
viewclients = 1 - โข Restricted users only see clients assigned to them (
delegateid)
Input Validation
- โข All POST inputs filtered with
filter_input(INPUT_POST, 'field') - โข Chassis number uniqueness validation
- โข File upload validation through upload class
- โข SQL injection prevention via parameterized queries
---
๐ Performance Considerations
Database Optimization
1. Indexes Required:
- importcontract(chasisno) - Unique constraint
- importcontract(clientid) - Foreign key
- importcontract(sysdate) - Date filtering
- client(delegateid) - Permission filtering
2. Query Efficiency:
- Ajax pagination reduces memory usage
- JOIN queries combine related data
- Proper WHERE clauses for filtering
File Storage
- โข Images resized to 300x300 for consistency
- โข Organized in
/images/importcontract/directory - โข Old images removed during updates
---
๐ Common Issues & Troubleshooting
1. Chassis Number Conflicts
Issue: Duplicate chassis numbers not allowed
Solution: Real-time validation via checkExist action
2. Image Upload Failures
Issue: Contract images not saving
Debug: Check upload directory permissions and file size limits
3. Permission Issues
Issue: Users can't see contracts
Check: User's viewclients setting and delegateid assignments
4. Ajax Loading Problems
Issue: Contract table not loading
Debug: Check browser console for JavaScript errors and server response
---
๐งช Testing Scenarios
Test Case 1: Contract Creation
1. Access add form
2. Fill required fields
3. Upload valid contract image
4. Submit form
5. Verify database record created
6. Check image file saved
Test Case 2: Chassis Validation
1. Enter existing chassis number
2. Verify validation error appears
3. Enter unique chassis number
4. Verify validation passes
Test Case 3: Permission Enforcement
1. Login as restricted user
2. Verify only assigned clients appear
3. Test contract access restrictions
---
๐ Related Documentation
- โข CLAUDE.md - PHP 8.2 migration guide
- โข clientController.php - Customer management
- โข sellbillController.md - Vehicle sales operations
- โข Upload Images Documentation - File upload handling
---
Documented By: AI Assistant
Review Status: โ Complete
Next Review: When major changes occur