Charity Documentation

Charity Controller Documentation

File: /controllers/charityController.php

Purpose: Manages charity organizations and their beneficiaries within the ERP system

Last Updated: December 20, 2024

Total Functions: 5

Lines of Code: ~234

---

๐Ÿ“‹ Overview

The Charity Controller is a specialized module for managing charitable organizations and their associated beneficiaries. It handles:

Primary Functions

Related Controllers

---

๐Ÿ—„๏ธ Database Tables

Primary Tables (Direct Operations)

Table NamePurposeKey Columns
**charities**Charity organization masterid, charityname, charitynumber, charityphone, charityaddress, charityimage, charitynote, center_id, createdate, del, sysdate, user_id
**charitiescenter**Charity centers/locationsid, name, description, del
### Related Tables (Referenced)

Table NamePurposeKey Columns
**beneficiaries**Charity beneficiariesid, charity_id, del
**subvention**Charity subsidiesid, charity_id
**subventionpay**Subsidy paymentsid, charity_id, benefeciary_id, del
**user**System usersuserid, employeename, username
---

๐Ÿ”‘ Key Functions

1. Default Action - Add Charity Form

Location: Lines 9-18

Purpose: Display the charity registration form

Process Flow:

1. Load available charity centers

2. Display header template

3. Show charity add form

4. Display footer with charity menu active

Template: charityview/add.html

---

2. show() - List Charities

Location: Lines 18-30

Purpose: Display charity listing page with data tables

Process Flow:

1. Check authentication

2. Set display mode if specified (show=2)

3. Assign current date

4. Display charity show template

Template: charityview/show.html

---

3. edit() - Edit Charity Form

Location: Lines 30-44

Purpose: Display charity editing form with existing data

Process Flow:

1. Check authentication

2. Load charity record by ID

3. Load available charity centers

4. Assign data to template

5. Display edit form

Template: charityview/edit.html

---

4. savedata() - Save/Update Charity

Location: Lines 55-102

Purpose: Create new charity or update existing charity record

Function Flow:

function savedata() {
    // Get form data
    $charityname = filter_input(INPUT_POST, 'charityname');
    $createdate = filter_input(INPUT_POST, 'createdate');
    $charityphone = filter_input(INPUT_POST, 'charityphone');
    $charitynumber = filter_input(INPUT_POST, 'charitynumber');
    $charityaddress = filter_input(INPUT_POST, 'charityaddress');
    $charitynote = filter_input(INPUT_POST, 'charitynote');
    $center_id = filter_input(INPUT_POST, 'center_id');
    $charityid = filter_input(INPUT_POST, 'charityid');
    
    if (!$charityid) {
        // Create new charity
        $charities = R::dispense('charities');
        $charityimage = uploadImages($handle, "../views/default/images/charities", 300, 300);
    } else {
        // Update existing charity
        $charities = R::load('charities', $charityid);
        $charityimage = updateImages($handle, "oldcharityimage", "../views/default/images/charities", 300, 300);
        unlink("../views/default/images/charities" . $charities->charityimage);
    }
    
    // Save charity data
    R::store($charities);
}

Image Handling:

---

5. showajax() - Ajax Data Table

Location: Lines 103-201

Purpose: Provide data for charity listing with search, pagination, and filtering

Function Signature:

function showajax()

Search Filters:

Columns Returned:

1. ID

2. Charity image (40x40px with fallback)

3. Charity name

4. Charity number

5. Phone number

6. System date

7. Total beneficiaries count

8. Paid beneficiaries count

9. Edit button (if active)

10. Delete button (if active)

Special Features:

---

6. removecontroller() - Soft Delete Charity

Location: Lines 204-220

Purpose: Mark charity as deleted (soft delete)

Process Flow:

1. Get charity ID from POST

2. Load charity record

3. Set del = 2 (deleted status)

4. Record deletion timestamp and user

5. Save changes

Audit Fields Updated:

---

7. removeAllBen() - Mass Delete Beneficiaries

Location: Lines 222-233

Purpose: Remove all beneficiaries associated with a charity (hard delete)

Tables Affected:

DELETE FROM beneficiaries WHERE charity_id = ?
DELETE FROM subvention WHERE charity_id = ?
DELETE FROM subventionpay WHERE charity_id = ?

Warning: This is a hard delete operation that permanently removes data.

---

๐Ÿ”„ Workflows

Workflow 1: Charity Registration

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
START: Charity Registration
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
1Display Registration Form
- Load charity centers
- Show form template
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
2User Fills Form
- Basic charity information
- Upload charity image
- Select charity center
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
3Process Form Submission
- Validate input data
- Process image upload (300x300)
- Create charity record
- Set audit fields
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
4Save and Respond
- Store charity in database
- Return success/failure status
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

---

Workflow 2: Charity Management

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
START: Charity Management
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
1Load Charity List
- Apply user permissions
- Load active charities
- Display with data table
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
2User Actions
โ†’ Edit charity details
โ†’ Delete charity (soft delete)
โ†’ Mass delete beneficiaries
โ”‚ โ””โ”€โ†’ Filter/search charities โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ–ผ
โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
3Process Actions
- Update charity records
- Maintain audit trail
- Update beneficiary counts
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

---

๐ŸŒ URL Routes & Actions

URL ParameterFunction CalledDescription
`do=` (empty)Default actionDisplay charity add form
`do=show`Show viewDisplay charity listing page
`do=edit&id={id}`Edit viewDisplay charity edit form
`do=savedata``savedata()`Process charity save/update
`do=showajax``showajax()`Ajax data for charity table
`do=removecontroller``removecontroller()`Soft delete charity
`do=removeAllBen``removeAllBen()`Mass delete beneficiaries
---

๐Ÿ”’ Security & Permissions

Session-Based Access Control

// Charity access restriction
if ($_SESSION['charityids'] && !$data1)
    $searchQuery .= ' and charities.id in(' . $_SESSION['charityids'] . ')';

Input Sanitization

Audit Trail

---

๐Ÿ“Š Performance Considerations

Database Optimization

1. Indexes Required:

- charities(del, sysdate)

- charities(center_id)

- beneficiaries(charity_id, del)

2. Query Optimization:

- Beneficiary counts calculated via sub-queries

- Efficient WHERE clause filtering

- Pagination support

Image Management

---

๐Ÿ› Common Issues & Troubleshooting

1. Image Upload Failures

Issue: Images not uploading or displaying

Cause: File permissions or path issues

Debug:

// Check image path permissions
ls -la ../views/default/images/charities/
chmod 755 ../views/default/images/charities/

2. Beneficiary Count Mismatch

Issue: Counts don't match actual beneficiaries

Cause: Soft delete status confusion

Fix:

-- Check beneficiary soft delete status
SELECT COUNT(*) FROM beneficiaries WHERE del < 2 AND charity_id = {id};
SELECT COUNT(DISTINCT benefeciary_id) FROM subventionpay WHERE del < 2 AND charity_id = {id};

3. Session Restrictions Not Working

Issue: Users see charities they shouldn't

Cause: Session charityids not set properly

Debug:

// Check session values
var_dump($_SESSION['charityids']);
// Should contain comma-separated charity IDs

---

๐Ÿงช Testing Scenarios

Test Case 1: Charity Registration

1. Navigate to charity controller (empty do parameter)
2. Fill charity form with all required fields
3. Upload charity image (JPG/PNG)
4. Submit form
5. Verify charity created with correct data
6. Check image uploaded and resized correctly

Test Case 2: Beneficiary Count Accuracy

1. Create charity with known beneficiaries
2. Add/remove beneficiaries through beneficiaries controller
3. Check charity listing shows correct counts
4. Verify paid vs total beneficiary counts match

Test Case 3: Mass Delete Operation

1. Create charity with multiple beneficiaries
2. Use removeAllBen function
3. Verify all related records deleted
4. Check data integrity maintained

---

๐Ÿ“š Related Documentation

---

Documented By: AI Assistant

Review Status: โœ… Complete

Next Review: When major changes occur