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
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());
|
|
}
|
|
|