feat: Enhance email functionality and PDF generation for Sales Orders

- Enabled SMTP debugging in PHPMailer for better error tracking.
- Added a "Test send email" link in the Inventory Detail View for quick email testing.
- Implemented automatic PDF generation and email sending upon Sales Order creation.
- Created a new action for sending Sales Order emails with attached PDFs.
- Added a new AJAX action for testing outgoing email server configurations.
- Updated outgoing server settings to use new SMTP credentials.
- Improved email templates for better user experience.
- Added test scripts for validating PDF generation and email sending.
This commit is contained in:
BACHIR SOULDI
2026-02-17 15:59:31 +01:00
parent 2794e62571
commit 2a647b138a
46 changed files with 25100 additions and 1296 deletions

View File

@@ -1,129 +1,273 @@
<?php
require_once 'include/utils/utils.php';
require_once 'includes/Loader.php';
vimport ('includes.runtime.EntryPoint');
require_once 'SUtiles.php';
@session_start();
if(isset($_GET['table'])){
$table = $_GET['table'];
$roleid = $_GET['roleid'];
$filename = "Data_".$table.".csv";
outputCsv($filename,$table,$roleid);
}
function outputCsv($fileName,$table,$roleid)
{
global $adb;
$filter = [];
$sub = reset(getSubordinateRoleAndUsers($roleid));
$flag = false;
foreach($sub as $key => $value){
array_push($filter,$value);
};
$user_query = 'select * from '.$table;
$result =$adb->query($user_query);
ob_clean();
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment;filename=' . $fileName);
$fp = fopen('php://output', 'w');
while ($row = $adb->fetchByAssoc($result)) {
if (!$flag) {
// display field/column names as first row
fputcsv($fp, array_keys($row),';');
$flag = true;
}
if(isMedicalSuperviseur($roleid)){
if(in_array($row['visiteur'],$filter)){
$csv_values = array_map('decode_html', array_values($row));
fputcsv($fp, $csv_values,';');
}
}
else{
$csv_values = array_map('decode_html', array_values($row));
fputcsv($fp, $csv_values,';');
}
}
fclose($fp);
ob_flush();
die;
}
/* ancien code lakheder ben
<?php
require_once 'include/utils/utils.php';
require_once 'includes/Loader.php';
vimport ('includes.runtime.EntryPoint');
require_once 'SUtiles.php';
@session_start();
// ✅ Securely initialize the current user (important for permission control)
if (isset($_SESSION['authenticated_user_id'])) {
$current_user = new Users();
$current_user->retrieveCurrentUserInfoFromFile($_SESSION['authenticated_user_id']);
$roleid = $current_user->roleid;
} else {
echo "Access denied. Not logged in.";
exit;
}
if(isset($_GET['table'])){
$table = $_GET['table'];
$current_user = new Users();
$current_user->retrieveCurrentUserInfoFromFile($_SESSION['authenticated_user_id']);
$roleid = $current_user->roleid;
$filename = "Data_".$table.".csv";
outputCsv($filename,$table,$roleid);
}
function outputCsv($fileName,$table,$roleid)
{
global $adb;
$filter = [];
$sub = (getMySubordinates($roleid));
$flag = false;
foreach($sub as $key => $value){
array_push($filter,$value);
};
$user_query = 'select * from '.$table;
if ($roleid == 'H34' || $roleid == 'H36' || $roleid == 'H38' || $roleid == 'H42' || $roleid == 'H44') {
$user_query = "SELECT * FROM `$table` WHERE parentrole LIKE '%::$roleid::%' OR parentrole = '$roleid'";
}
$result =$adb->query($user_query);
ob_clean();
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment;filename=' . $fileName);
$fp = fopen('php://output', 'w');
while ($row = $adb->fetchByAssoc($result)) {
if (!$flag) {
// display field/column names as first row
fputcsv($fp, array_keys($row),';');
$flag = true;
}
// if(isMedicalSuperviseur($roleid)){
// if (in_array($row['visiteur1'], $filter) || in_array($row['visiteur2'], $filter) || in_array($row['visiteur3'], $filter) || in_array($row['visiteur3'], $filter)) {
// $csv_values = array_map('decode_html', array_values($row));
// fputcsv($fp, $csv_values,';');
// }
// }
// else{
$csv_values = array_map('decode_html', array_values($row));
fputcsv($fp, $csv_values,';');
// }
}
fclose($fp);
ob_flush();
die;
}
/* ancien code lakheder ben
if(isset($_GET['table'])){
$table = $_GET['table'];
}
$extension = ".xls";//".csv";
if(isset($_GET['xls']) && $_GET['xls'] == true)
$extension = ".xls";
global $adb;
$filename = "Data_".$table.$extension; // File Name
// Download file
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");
$user_query = 'select * from '.$table;
$result =$adb->query($user_query);
// Write data to file
$flag = false;
ob_end_clean();
ob_start();
while ($row = $adb->fetch_array($result)) {
unset($row['0']);
unset($row['1']);
unset($row['2']);
unset($row['3']);
unset($row['4']);
unset($row['5']);
unset($row['6']);
unset($row['7']);
unset($row['8']);
unset($row['9']);
unset($row['10']);
unset($row['11']);
unset($row['12']);
unset($row['13']);
unset($row['14']);
unset($row['15']);
unset($row['16']);
unset($row['17']);
unset($row['18']);
unset($row['19']);
unset($row['20']);
unset($row['21']);
if (!$flag) {
// display field/column names as first row
echo implode("\t", array_keys($row)) . "\r\n";
$flag = true;
}
$temp = implode("\t", array_values($row));
$temp = str_replace("&#039;", " ", $temp);
$temp = str_replace("&rsquo;", " ", $temp);
$temp = str_replace("&ccedil;", "c", $temp);
$temp = str_replace("&acirc;", "a", $temp);
$temp = str_replace("&egrave;", "e", $temp);
$temp = str_replace('&eacute;', 'e', $temp);
$temp = str_replace('&iuml;', 'e', $temp);
$temp = str_replace('&Iuml;', 'i', $temp);
$temp = str_replace('&Eacute;', 'E', $temp);
$temp = str_replace('&nbsp;', "", $temp);
$temp = str_replace('&ocirc;', "o", $temp);
$temp = str_replace(array("\r", "\n"), '', $temp);
//preg_replace( "/\r|\n/", "", $temp );
echo str_replace('.', ',', $temp)."\r\n";
}
*/
?>