๐Ÿ“š ERP Documentation Viewer

Beautiful, colorful documentation for your ERP system

Maintenance Sends Controller Documentation

File: /controllers/maintenancesends.php

Purpose: Manages shipment policies and tracking for products sent to maintenance centers

Last Updated: December 20, 2024

Total Functions: 5

Lines of Code: ~288

---

๐Ÿ“‹ Overview

The Maintenance Sends Controller handles the logistics and documentation of shipping products to external maintenance centers. It manages:

Primary Functions

Related Controllers

---

๐Ÿ—„๏ธ Database Tables

Primary Tables (Direct Operations)

Table NamePurposeKey Columns
**maintenancepolicys**Shipping policy recordsid, policydate, policynumber, supplierid, maintenancecompanieid, policystatement, shippingvalue, sendorreceipt, conditions, userid
**maintenancecompanies**Maintenance service companiesid, companyname, companyphone, companyaddress, conditions, userid
**maintenances**Items being shippedid, supplierid, maintenancepolicyid, maintenancecaseid, shipprice, shipcharge, shipnumber
### Reference Tables

Table NamePurposeKey Columns
**supplier**Product supplierssupplierid, suppliername
**product**Product catalogproductId, productName
**user**System usersuserid, employeename
---

๐Ÿ”‘ Key Functions

1. Default Action - Add New Shipping Policy

Location: Lines 9-14

Purpose: Display form for creating new maintenance shipping policies

Process Flow:

1. Display header and add form template

2. Set maintenance module flag for navigation

---

2. show() - Display Shipping Policies

Location: Lines 15-22

Purpose: Show listing of all shipping policies with filtering

Features:

---

3. edit() - Edit Shipping Policy

Location: Lines 23-46

Purpose: Edit existing policy and manage associated maintenance items

Function Signature:

$id = filter_input(INPUT_GET, 'id');
$del = filter_input(INPUT_GET, 'del');

Process Flow:

1. Load maintenance policy data by ID

2. Query maintenance items for specific supplier

3. Filter items that are warranty type 2 with case < 3

4. Load product names for display

5. Assign data to edit template

SQL Query:

SELECT maintenances.*, suppliername 
FROM maintenances 
LEFT JOIN supplier ON maintenances.supplierid = supplier.supplierid 
WHERE maintenances.maintorguar = 2 
  AND maintenances.maintenancecaseid < 3 
  AND maintenances.conditions = 0 
  AND maintenances.supplierid = [supplierid]

---

4. savedata() - Save/Update Shipping Policy

Location: Lines 105-161

Purpose: Main function for saving shipping policies with item assignments

Function Signature:

function savedata()

Input Parameters:

Process Flow:

1. Create or update maintenance policy record

2. Set sendorreceipt = 1 (indicates sending)

3. Reset shipping details for existing policy items

4. Loop through maintenance items and update shipping information

5. Change maintenance case status to 2 (shipped)

6. Return JSON response

Item Processing Loop:

for ($i = 1; $i <= $maintenanceitr; $i++) {
    $maintenanceid = filter_input(INPUT_POST, 'maintenanceid_' . $i);
    $shipprice = filter_input(INPUT_POST, 'shipprice_' . $i);
    $shipcharge = filter_input(INPUT_POST, 'shipcharge_' . $i);
    $shipnumber = filter_input(INPUT_POST, 'shipnumber_' . $i);
    
    // Update maintenance record with shipping details
    $maintenances->maintenancecaseid = 2; // Status: Shipped
    $maintenances->maintenancepolicyid = $maintenancepolicyid;
}

---

5. savecompany() - Maintenance Company Management

Location: Lines 75-103

Purpose: Create or update maintenance company information

Function Signature:

function savecompany()

Input Parameters:

Process Flow:

1. Create new company or update existing

2. Store company information with user tracking

3. Return JSON with company data for dropdown updates

---

6. showajax() - DataTables AJAX Handler

Location: Lines 164-271

Purpose: Provide server-side processing for policy listing table

Function Signature:

function showajax()

Filter Parameters:

Process Flow:

1. Build dynamic WHERE clause based on filters

2. Add search functionality across policy fields

3. Apply sorting and pagination

4. Join with supplier and company tables

5. Generate action buttons based on policy status

SQL Query Structure:

SELECT maintenancepolicys.*, employeename, suppliername, companyname 
FROM maintenancepolicys 
LEFT JOIN user ON maintenancepolicys.userid = user.userid 
LEFT JOIN supplier ON maintenancepolicys.supplierid = supplier.supplierid
LEFT JOIN maintenancecompanies ON maintenancepolicys.maintenancecompanieid = maintenancecompanies.id
WHERE 1 [filters]

---

7. getmaintenances - Load Available Maintenance Items

Location: Lines 55-70

Purpose: AJAX endpoint to load maintenance items for a specific supplier

Function Signature:

$supplierid = filter_input(INPUT_POST, 'supplierid');

Process Flow:

1. Query maintenance items that are:

- Warranty type 2 (repair)

- Case status 1 (new/awaiting shipment)

- Not assigned to any policy (maintenancepolicyid = 0)

- Belong to specified supplier

2. Load product names for each item

3. Display via template for selection

---

๐Ÿ”„ Workflows

Workflow 1: Maintenance Shipping Policy Creation

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
START: Create Shipping Policy
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
1Policy Information
- Enter policy date and number
- Select supplier
- Choose maintenance company
- Add policy statement/description
- Set total shipping value
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
2Load Available Items
- System queries maintenance items for supplier
- Filter: maintorguar = 2 (repair)
- Filter: maintenancecaseid = 1 (new)
- Filter: maintenancepolicyid = 0 (unassigned)
- Display with product names
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
3Assign Shipping Details
FOR EACH selected maintenance item:
โ”‚
โ†’ Set shipping price
โ†’ Set shipping charge
โ†’ Assign shipment tracking number
โ”‚ โ””โ”€โ†’ Update maintenance status to 2 (shipped) โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
4Save and Track
- Create policy record
- Link all items to policy
- Update maintenance case statuses
- Ready for shipment tracking
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

---

Workflow 2: Maintenance Status Progression

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
Maintenance Lifecycle
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
Case 1: New Request
- Created in maintenances.php
- Ready for center assignment
- maintenancecaseid = 1
- maintenancepolicyid = 0
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
Case 2: Shipped to Maintenance
- Assigned to shipping policy
- maintenancecaseid = 2
- maintenancepolicyid = [policy_id]
- Shipping details filled
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
Case 3+: Further Processing
- Work in progress at center
- Completion and return
- Customer pickup
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

---

๐ŸŒ URL Routes & Actions

URL ParameterFunction CalledDescription
`do=` (empty)Default actionDisplay add policy form
`do=show`show()Display policy listing
`do=edit`edit()Edit policy and items
`do=savedata`savedata()Save/update policy
`do=showajax`showajax()DataTables AJAX data
`do=savecompany`savecompany()Save maintenance company
`do=getmaintenances`getmaintenancesLoad available items AJAX
---

๐Ÿงฎ Calculation Methods

Shipping Cost Allocation

// Total shipping value distributed among items
$shippingvalue = filter_input(INPUT_POST, 'shippingvalue');

// Individual item shipping costs
for ($i = 1; $i <= $maintenanceitr; $i++) {
    $shipprice = filter_input(INPUT_POST, 'shipprice_' . $i);
    $shipcharge = filter_input(INPUT_POST, 'shipcharge_' . $i);
}

Policy Cost Summary

---

๐Ÿ”’ Security & Permissions

Authentication

Input Sanitization

// All inputs properly filtered
$policydate = filter_input(INPUT_POST, 'policydate');
$policynumber = filter_input(INPUT_POST, 'policynumber');
$supplierid = filter_input(INPUT_POST, 'supplier');

Data Validation

---

๐Ÿ“Š Performance Considerations

Database Optimization

1. Indexes Needed:

- maintenancepolicys(supplierid, sendorreceipt)

- maintenances(supplierid, maintenancecaseid, maintenancepolicyid)

- maintenancecompanies(conditions)

2. Query Performance:

- Efficient filtering of available maintenance items

- Bulk updates during policy assignment

- Optimized joins for policy display

Bulk Operations

---

๐Ÿ› Common Issues & Troubleshooting

1. Missing Maintenance Items

Issue: No items show when creating policy

Cause: Items already assigned to other policies or wrong case status

Debug:

SELECT COUNT(*) FROM maintenances 
WHERE supplierid = [ID] 
  AND maintorguar = 2 
  AND maintenancecaseid = 1 
  AND maintenancepolicyid = 0 
  AND conditions = 0;

2. Policy Assignment Errors

Issue: Items not properly assigned to policy

Cause: Transaction failure during bulk update

Fix: Check for proper transaction handling and verify foreign key constraints

3. Status Update Issues

Issue: Maintenance case status not changing to 2

Cause: Invalid maintenance ID or database constraint

Debug:

SELECT id, maintenancecaseid, maintenancepolicyid 
FROM maintenances 
WHERE maintenancepolicyid = [POLICY_ID];

4. Company Selection Problems

Issue: Maintenance companies not appearing in dropdown

Cause: Companies marked as deleted or not properly saved

Fix:

SELECT * FROM maintenancecompanies WHERE conditions = 0;

---

๐Ÿงช Testing Scenarios

Test Case 1: Policy Creation

1. Create new shipping policy with valid supplier
2. Verify maintenance items load correctly
3. Assign shipping details to items
4. Confirm policy saves and items update status

Test Case 2: Company Management

1. Create new maintenance company via AJAX
2. Verify company appears in policy dropdown
3. Test company edit functionality
4. Confirm company data integrity

Test Case 3: Item Status Tracking

1. Start with maintenance in case 1
2. Assign to shipping policy
3. Verify status changes to case 2
4. Confirm policy relationship established

Test Case 4: Bulk Operations

1. Select multiple maintenance items for policy
2. Set different shipping costs per item
3. Verify all items update correctly
4. Test partial assignment scenarios

---

๐Ÿ“š Related Documentation

---

Documented By: AI Assistant

Review Status: โœ… Complete

Next Review: When major changes occur

โ†‘