You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

137 lines
4.3 KiB

<?php
require_once('../conn.php');
require dirname(dirname(dirname(__DIR__))) . '/common/composer/vendor/autoload.php';
header("Content-Type: application/json");
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Fill;
//數字轉英文(0=>A、1=>B、26=>AA...以此類推)
function num2alpha($n)
{
for ($r = ""; $n >= 0; $n = intval($n / 26) - 1)
$r = chr($n % 26 + 0x41) . $r;
return $r;
}
//英文轉數字(A=>0、B=>1、AA=>26...以此類推)
function alpha2num($a)
{
$l = strlen($a);
$n = 0;
for ($i = 0; $i < $l; $i++)
$n = $n * 26 + ord($a[$i]) - 0x40;
return $n - 1;
}
try {
$department_id = isset($_REQUEST['department_id']) ? $_REQUEST['department_id'] : '';
$user_id = isset($_REQUEST['user_id']) ? $_REQUEST['user_id'] : '';
$search = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';
$sql_str = "
SELECT
sm.system_name AS '序號',
fm.flow_name AS '系統名稱',
f.form_key AS '流程名稱',
sf.current_assigner AS '當前簽核者',
a.name AS '姓名',
d.depart_name AS '所屬部門',
sf.update_date AS '接收日期'
FROM flow AS f
LEFT JOIN system_main as sm
ON f.system_id = sm.system_id
LEFT JOIN flow_main as fm
ON f.flow_id = fm.flow_id
LEFT JOIN (
SELECT
form_key,
current_assigner,
IF(update_date IS NULL,create_date,update_date) AS update_date,
MAX(seq) AS seq
FROM subflow
WHERE 1 = 1
GROUP BY form_key, current_assigner, update_date
) AS sf
ON f.form_key = sf.form_key
LEFT JOIN account AS a
ON sf.current_assigner = a.accountid
LEFT JOIN (
SELECT DISTINCT
department_id,
name AS depart_name
FROM department
) AS d
ON a.department_id = d.department_id
WHERE 1 =1
AND f.flow_code != 'Z'
AND sf.form_key != ''
AND sf.form_key IS NOT NULL
AND sf.current_assigner != ''
AND sf.current_assigner IS NOT NULL
";
$sql_str .= !empty($department_id) ? " AND a.department_id = :department_id " : "";
$sql_str .= !empty($user_id) ? " AND sf.current_assigner = :user_id " : "";
if (!empty($search)) {
$sql_str .= " AND (
sm.system_name LIKE :search
OR fm.flow_name LIKE :search
OR f.form_key LIKE :search
OR sf.current_assigner LIKE :search
OR a.name LIKE :search
OR d.department_id LIKE :search
OR d.depart_name LIKE :search
OR sf.update_date LIKE :search
) ";
}
$stmt = $conn->prepare($sql_str);
!empty($department_id) ? $stmt->bindParam(':department_id', $department_id) : '';
!empty($user_id) ? $stmt->bindParam(':user_id', $user_id) : '';
!empty($search) ? $stmt->bindValue(':search', '%' . $search . '%') : '';
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->execute();
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('部門逾期待簽');
// 設定標題
$colTitleArr = [];
for ($i = 0; $i < $stmt->columnCount(); $i++) {
$columnMeta = $stmt->getColumnMeta($i);
$colTitleArr[] = $columnMeta['name'];
}
// 標題寫入 excel 第一列
for ($i = 0; $i < count($colTitleArr); $i++)
$sheet->setCellValue(num2alpha($i) . '1', $colTitleArr[$i]);
// 設定內容
$data = $stmt->fetchAll(PDO::FETCH_NUM);
$i = 2;
foreach ($data as $row) {
for ($j = 0; $j < count($row); $j++) {
$sheet->setCellValue(num2alpha($j) . $i, $row[$j]);
}
$i++;
}
$writer = new Xlsx($spreadsheet);
$file_path = dirname(dirname(dirname(__DIR__))) . '/wms/excel/' . 'signed_overdue_date.xlsx';
$writer->save($file_path);
try {
$writer->save($file_path);
// 回傳檔案路徑給 JavaScript
echo json_encode(['data' => $file_path]);
} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}
exit();
} catch (PDOException $e) {
die("ERROR!!!: " . $e->getMessage());
}