๐Ÿ“š ERP Documentation Viewer

Beautiful, colorful documentation for your ERP system

Project Daily Report Controller Documentation

File: /controllers/projectdailyreportController.php

Purpose: Manage daily progress reports with multimedia attachments for active projects

Last Updated: 2024-12-20

---

๐Ÿ“‹ Overview

Primary Functions

Related Controllers

---

๐Ÿ—„๏ธ Database Tables

Primary Tables

Table NamePurposeKey Columns
projectdailyreportsDaily progress reportsid, projectid, title, descripe, datechosse, images, files
projectProject master dataid, name, del, finish
### Secondary Tables (Referenced)

Table NamePurposeRelationship
userSystem usersForeign Key: projectdailyreports.adduserid
---

๐Ÿ”ง Key Functions

1. savedata()

Purpose: Create or update daily report with multimedia attachments

Called By: AJAX POST to ?do=savedata

Parameters:

Returns: JSON response (1 = success, 0 = error)

Database Operations:

Business Logic:

1. File Upload Processing:

   if (!$projectdailyreportid) {
       $images = uploadfileMultipleWithName("images", '../upload/project'); 
       $files = uploadfileMultipleWithName("files", '../upload/project'); 
   } else {
       if (isset($_FILES["images"]) && !empty($_FILES["images"])) {
           $images = uploadfileMultipleWithName("images", '../upload/project', explode(',', $oldimages));
       }
   }
   ```

2. **Data Storage**:
   ```php
   $projectclients->images = implode(',', $images[0]);
   $projectclients->files = implode(',', $files[0]);
   $projectclients->nameimages = implode(',', $images[1]);
   $projectclients->namefiles = implode(',', $files[1]);
   ```

### 2. showajax()
**Purpose**: DataTables-compatible data source for report listing  
**Called By**: AJAX POST to `?do=showajax`  
**Parameters**:
- `$start_date` (string) - Filter start date
- `$end_date` (string) - Filter end date  
- `$data1` (int) - Project ID filter
- Standard DataTables parameters

**Returns**: JSON DataTables response

**Database Operations**:
- SELECT with JOIN to user and project tables
- COUNT for pagination
- Dynamic WHERE clause construction

**Business Logic**:
1. **Dynamic Filtering**:
   ```php
   if($data1 != '') {
       $searchQuery .= " and projectdailyreports.projectid = ".$data1;
   }
   if($start_date != '' && $end_date != '') {
       $searchQuery .= 'and projectdailyreports.addtoday >= "'.$start_date.' 00-00-00" 
                        and projectdailyreports.addtoday <= "'.$end_date.' 23-59-55"';
   }
   ```

2. **Output Formatting**:
   ```php
   $sub_array[] = $row["id"];
   $sub_array[] = $row["name"];     // Project name
   $sub_array[] = $row["title"];    // Report title
   $sub_array[] = $row["datechosse"]; // Report date
   $sub_array[] = $row["addtoday"];   // Creation date
   $sub_array[] = $row['employeename']; // Creator name
   ```

### 3. File Management Functions
**Purpose**: Handle multimedia attachments for reports

**File Processing**:
1. **Image Handling**:
   - Multiple image upload
   - Original filename preservation
   - Comma-separated storage

2. **Document Handling**:
   - Multiple file upload
   - Name and file path separation
   - Support for various file types

3. **Update Logic**:
   ```php
   $allfiles = explode(',', $projectdailyreport->files);
   $namefiles = explode(',', $projectdailyreport->namefiles);
   $files = [];
   for ($i=0; $i < count($allfiles); $i++) { 
       $files[] = ['name' => $namefiles[$i], 'file' => $allfiles[$i]];
   }
   ```

---

## ๐Ÿ“Š Main Workflows

### Workflow 1: Daily Report Creation

1. Select active project

โ†“

2. Set report date

โ†“

3. Add title and description

โ†“

4. Upload images and files

โ†“

5. Submit via AJAX

โ†“

6. Process file uploads

โ†“

7. Store report data

โ†“

8. Return success status

**Files Involved**:
- View: `/views/default/projectdailyreportview/add.html`
- Upload: `/upload/project/` directory

### Workflow 2: Report Display & Management

1. Load report listing

โ†“

2. Apply project filters

โ†“

3. DataTables AJAX request

โ†“

4. Build query with filters

โ†“

5. Return paginated data

โ†“

6. Render with action buttons

### Workflow 3: Project Progress Overview

1. Select project (prodetail)

โ†“

2. Load all project reports

โ†“

3. Process multimedia files

โ†“

4. Display chronological view

โ†“

5. Show project timeline

---

## ๐Ÿ”— File Dependencies

### Includes
php

include("../public/impOpreation.php");

include("../library/uploadImages.php"); // For file upload processing

### Upload Directory
- Location: `/upload/project/`
- File types: Images and documents
- Naming: Original filenames preserved

### Related Views
- `/views/default/projectdailyreportview/add.html` - Report creation
- `/views/default/projectdailyreportview/show.html` - Report listing
- `/views/default/projectdailyreportview/edit.html` - Report editing
- `/views/default/projectdailyreportview/detail.html` - Report details
- `/views/default/projectdailyreportview/prodetail.html` - Project overview

---

## ๐ŸŽฏ URL Routes & Actions

| Action (`?do=`) | Method | Description | View Template |
|-----------------|--------|-------------|---------------|
| (empty) | GET | Display creation form | add.html |
| show | GET | Display report listing | show.html |
| edit | GET | Display edit form | edit.html |
| detail | GET | Show report details | detail.html |
| prodetail | GET | Show all project reports | prodetail.html |
| savedata | POST | Create/update report (AJAX) | JSON response |
| showajax | POST | DataTables data source (AJAX) | JSON response |
| removecontroller | POST | Delete report (AJAX) | JSON response |

---

## โš ๏ธ Known Issues & Fixes

### Issue 1: Wrong Table in Delete Function (Line 268)
**Problem**: References 'students' table instead of 'projectdailyreports'  
**Cause**: Copy-paste error from student controller  
**Fix**: Change to `R::load('projectdailyreports',$id)`  
**File**: Line 268

### Issue 2: Student-specific Cleanup (Lines 274-277)
**Problem**: Updates student-related tables in removecontroller()  
**Cause**: Copy-paste error  
**Fix**: Remove or replace with appropriate cleanup  
**File**: Lines 274-277

### Issue 3: File Update Logic (Lines 130-135)
**Problem**: Complex conditional logic for file updates  
**Cause**: Handles both new and existing files  
**Fix**: Simplify with helper functions  
**File**: Lines 130-135

### Issue 4: Missing File Validation
**Problem**: No validation for file types or sizes  
**Cause**: Direct upload without checks  
**Fix**: Add file validation before upload  
**File**: Multiple upload locations

---

## ๐Ÿ” Permissions & Security

### Required Permissions
- Project daily report management
- File upload permissions

### Security Checks
php

include_once("../public/authentication.php");

### File Security
- Upload directory restrictions
- File type validation needed
- Size limitations required

### Input Validation
- All POST data filtered with `filter_input()`
- Project ID validation
- Date format validation

---

## ๐Ÿ“ File Management

### Upload Structure

/upload/project/

โ”œโ”€โ”€ images/

โ”‚ โ”œโ”€โ”€ report_image_1.jpg

โ”‚ โ””โ”€โ”€ report_image_2.png

โ””โ”€โ”€ documents/

โ”œโ”€โ”€ progress_report.pdf

โ””โ”€โ”€ specifications.doc

### File Storage Format
php

// Database storage

$report->images = "file1.jpg,file2.png,file3.gif";

$report->nameimages = "Progress Photo,Site View,Equipment";

$report->files = "doc1.pdf,doc2.docx";

$report->namefiles = "Daily Report,Specifications";

### File Retrieval
php

// Convert to usable format

$allfiles = explode(',', $projectdailyreport->files);

$namefiles = explode(',', $projectdailyreport->namefiles);

$files = [];

for ($i=0; $i < count($allfiles); $i++) {

$files[] = [

'name' => $namefiles[$i],

'file' => $allfiles[$i]

];

}

```

---

๐Ÿ“ Notes

Important Considerations

Project Integration

Future Improvements

Performance Considerations

---

๐Ÿ“š Related Documentation

โ†‘