295 lines
11 KiB
PHP
295 lines
11 KiB
PHP
|
|
<?php include $_SERVER['DOCUMENT_ROOT'] . '/session.php';
|
||
|
|
|
||
|
|
header("Content-Type: application/json"); //json을 사용하기 위해 필요한 구문
|
||
|
|
|
||
|
|
// 임시저장된 첨부파일을 확정하기 위해 검사하기
|
||
|
|
isset($_REQUEST["timekey"]) ? $timekey=$_REQUEST["timekey"] : $timekey=''; // 신규데이터에 생성할때 임시저장키
|
||
|
|
|
||
|
|
$mode = $_REQUEST["mode"] ?? 'insert';
|
||
|
|
$num = $_REQUEST["num"] ?? '';
|
||
|
|
$done = $_REQUEST["done"] ?? ''; // 결재완료 여부
|
||
|
|
|
||
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/eworks/_request.php';
|
||
|
|
|
||
|
|
$expense_data_json = isset($_POST['expense_data']) ? $_POST['expense_data'] : null;
|
||
|
|
|
||
|
|
// 전자결재의 변수에 매칭 (저장변수가 다른경우 선언)
|
||
|
|
$expense_data = null;
|
||
|
|
if ($expense_data_json) {
|
||
|
|
try {
|
||
|
|
$expense_data = json_decode($expense_data_json, true);
|
||
|
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
||
|
|
throw new Exception('Invalid JSON data');
|
||
|
|
}
|
||
|
|
} catch (Exception $e) {
|
||
|
|
echo json_encode([
|
||
|
|
"error" => true,
|
||
|
|
"message" => "지출 데이터 처리 중 오류가 발생했습니다: " . $e->getMessage()
|
||
|
|
], JSON_UNESCAPED_UNICODE);
|
||
|
|
exit;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 첫 번째 expense_item 추출 및 전체 건수 계산
|
||
|
|
if (!empty($expense_data) && isset($expense_data[0]['expense_item'])) {
|
||
|
|
$firstItem = $expense_data[0]['expense_item'];
|
||
|
|
$total = count($expense_data);
|
||
|
|
|
||
|
|
if ($total > 1) {
|
||
|
|
// 첫 번째 항목 외 나머지 건수 표시
|
||
|
|
$e_title = $firstItem . ' 외 ' . ($total - 1) . '건';
|
||
|
|
} else {
|
||
|
|
// 단건일 때는 항목명만
|
||
|
|
$e_title = $firstItem;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$e_title = '';
|
||
|
|
}
|
||
|
|
|
||
|
|
$eworks_item = '지출결의서';
|
||
|
|
|
||
|
|
// 전자 결재에 보여질 내용 data 수정 update
|
||
|
|
$data = array(
|
||
|
|
"e_title" => $e_title,
|
||
|
|
"indate" => $indate,
|
||
|
|
"author" => $author,
|
||
|
|
"suppliercost" => $suppliercost, // 비용 총액 저장
|
||
|
|
"paymentdate" => $paymentdate, // 결재일자
|
||
|
|
"requestpaymentdate" => $requestpaymentdate, // 지출요청일자
|
||
|
|
"expense_data" => $expense_data // 지출결의서 내역(JSON)
|
||
|
|
);
|
||
|
|
|
||
|
|
$contents = json_encode($data, JSON_UNESCAPED_UNICODE);
|
||
|
|
|
||
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
|
||
|
|
$pdo = db_connect();
|
||
|
|
|
||
|
|
// 전자결재 이름찾아 결재 아이디 찾아내기
|
||
|
|
try {
|
||
|
|
$membersql = "SELECT * FROM {$DB}.member WHERE name = ?";
|
||
|
|
$stmh = $pdo->prepare($membersql);
|
||
|
|
$stmh->bindValue(1, trim($author), PDO::PARAM_STR);
|
||
|
|
$stmh->execute();
|
||
|
|
$rowMember = $stmh->fetch(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
// 조회된 데이터가 있는지 확인 후 설정
|
||
|
|
$first_approval_id = trim($rowMember['first_approval_id']) ?? ''; // 값이 없으면 빈 문자열
|
||
|
|
$first_approval_name = trim($rowMember['first_approval_name']) ?? '';
|
||
|
|
|
||
|
|
} catch (PDOException $Exception) {
|
||
|
|
print "오류: " . $Exception->getMessage();
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($mode=="modify"){
|
||
|
|
$data=date("Y-m-d H:i:s") . " - " . $_SESSION["name"] . " " ;
|
||
|
|
$update_log = $data . $update_log . "
"; // 개행문자 Textarea
|
||
|
|
|
||
|
|
// 결재금액이 10만원 미만인 경우 결재라인과 아이디를 공백으로 설정
|
||
|
|
$numeric_cost = (int)str_replace(',', '', $suppliercost);
|
||
|
|
if ($numeric_cost < 100000) {
|
||
|
|
$e_line_id = '';
|
||
|
|
$e_line = '';
|
||
|
|
$status = 'end';
|
||
|
|
} else {
|
||
|
|
$e_line_id = $first_approval_id;
|
||
|
|
$e_line = $first_approval_name;
|
||
|
|
if($done=='done'){ // 결재완료일때는 그대로 기록되게 수정
|
||
|
|
$status = 'end';
|
||
|
|
} else {
|
||
|
|
$status = 'send';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
$pdo->beginTransaction();
|
||
|
|
|
||
|
|
// UPDATE 문 (변경된 컬럼명 반영)
|
||
|
|
$sql = "UPDATE {$DB}.eworks SET
|
||
|
|
indate = ?,
|
||
|
|
outworkplace = ?,
|
||
|
|
request_comment = ?,
|
||
|
|
first_writer = ?,
|
||
|
|
author = ?,
|
||
|
|
update_log = ?,
|
||
|
|
contents = ?,
|
||
|
|
e_title = ?,
|
||
|
|
eworks_item = ?,
|
||
|
|
al_content=?,
|
||
|
|
suppliercost=?,
|
||
|
|
store=?,
|
||
|
|
paymentdate=?,
|
||
|
|
requestpaymentdate=?,
|
||
|
|
expense_data=?,
|
||
|
|
companyCard=?,
|
||
|
|
status=?,
|
||
|
|
e_line_id=?,
|
||
|
|
e_line=? ,
|
||
|
|
al_company=?
|
||
|
|
WHERE num = ?
|
||
|
|
LIMIT 1";
|
||
|
|
|
||
|
|
$stmh = $pdo->prepare($sql);
|
||
|
|
|
||
|
|
// 바인딩된 값
|
||
|
|
$stmh->bindValue(1, $indate, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(2, $outworkplace, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(3, $request_comment, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(4, $first_writer, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(5, $author, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(6, $update_log, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(7, $contents, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(8, $e_title, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(9, $eworks_item, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(10, $al_content, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(11, $suppliercost, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(12, $store, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(13, $paymentdate, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(14, $requestpaymentdate, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(15, json_encode($expense_data), PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(16, $companyCard, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(17, $status, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(18, $e_line_id, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(19, $e_line, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(20, $al_company, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(21, $num, PDO::PARAM_STR);
|
||
|
|
|
||
|
|
$stmh->execute();
|
||
|
|
$pdo->commit();
|
||
|
|
} catch (PDOException $Exception) {
|
||
|
|
$pdo->rollBack();
|
||
|
|
print "오류: " . $Exception->getMessage();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
else if ($mode == "copy" || $mode == "insert") {
|
||
|
|
// 데이터 신규 등록
|
||
|
|
$registdate = date("Y-m-d H:i:s");
|
||
|
|
|
||
|
|
// 결재 상태 설정
|
||
|
|
$status = 'send';
|
||
|
|
$author_id = $user_id;
|
||
|
|
$author = $user_name;
|
||
|
|
|
||
|
|
// 최초 등록자 정보
|
||
|
|
$first_writer = $_SESSION["name"] . " _" . date("Y-m-d H:i:s");
|
||
|
|
|
||
|
|
// 결재금액이 10만원 미만인 경우 결재라인과 아이디를 공백으로 설정
|
||
|
|
$numeric_cost = (int)str_replace(',', '', $suppliercost);
|
||
|
|
if ($numeric_cost < 100000) {
|
||
|
|
$e_line_id = '';
|
||
|
|
$e_line = '';
|
||
|
|
$status = 'end';
|
||
|
|
} else {
|
||
|
|
$e_line_id = $first_approval_id;
|
||
|
|
$e_line = $first_approval_name;
|
||
|
|
}
|
||
|
|
try {
|
||
|
|
$pdo->beginTransaction();
|
||
|
|
|
||
|
|
$sql = "INSERT INTO {$DB}.eworks (
|
||
|
|
indate, outworkplace, request_comment, first_writer, author,
|
||
|
|
update_log, contents, e_title, eworks_item, registdate,
|
||
|
|
author_id, status, e_line_id, e_line, al_content,
|
||
|
|
suppliercost, store, paymentdate, requestpaymentdate, expense_data,
|
||
|
|
companyCard, al_company
|
||
|
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||
|
|
|
||
|
|
$stmh = $pdo->prepare($sql);
|
||
|
|
|
||
|
|
// 바인딩된 값 설정
|
||
|
|
$stmh->bindValue(1, $indate, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(2, $outworkplace, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(3, $request_comment, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(4, $first_writer, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(5, $author, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(6, $update_log, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(7, $contents, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(8, $e_title, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(9, $eworks_item, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(10, $registdate, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(11, $author_id, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(12, $status, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(13, rtrim($e_line_id, '!'), PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(14, rtrim($e_line, '!'), PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(15, $al_content, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(16, $suppliercost, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(17, $store, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(18, $paymentdate, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(19, $requestpaymentdate, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(20, json_encode($expense_data), PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(21, $companyCard, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(22, $al_company, PDO::PARAM_STR);
|
||
|
|
|
||
|
|
$stmh->execute();
|
||
|
|
$pdo->commit();
|
||
|
|
} catch (PDOException $Exception) {
|
||
|
|
$pdo->rollBack();
|
||
|
|
echo json_encode([
|
||
|
|
"error" => true,
|
||
|
|
"message" => $Exception->getMessage()
|
||
|
|
], JSON_UNESCAPED_UNICODE);
|
||
|
|
exit;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 신규 레코드 번호 가져오기
|
||
|
|
try {
|
||
|
|
$sql = "SELECT num FROM {$DB}.eworks ORDER BY num DESC LIMIT 1";
|
||
|
|
$stmh = $pdo->prepare($sql);
|
||
|
|
$stmh->execute();
|
||
|
|
$row = $stmh->fetch(PDO::FETCH_ASSOC);
|
||
|
|
$num = $row["num"];
|
||
|
|
} catch (PDOException $Exception) {
|
||
|
|
print "오류: " . $Exception->getMessage();
|
||
|
|
}
|
||
|
|
|
||
|
|
// 첨부파일의 임시 키를 정상적인 번호로 업데이트
|
||
|
|
try {
|
||
|
|
$pdo->beginTransaction();
|
||
|
|
$sql = "UPDATE {$DB}.picuploads SET parentnum = ? WHERE parentnum = ?";
|
||
|
|
$stmh = $pdo->prepare($sql);
|
||
|
|
$stmh->bindValue(1, $num, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(2, $timekey, PDO::PARAM_STR);
|
||
|
|
$stmh->execute();
|
||
|
|
$pdo->commit();
|
||
|
|
} catch (PDOException $Exception) {
|
||
|
|
$pdo->rollBack();
|
||
|
|
print "오류: " . $Exception->getMessage();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
else if ($mode == "delete") {
|
||
|
|
try {
|
||
|
|
// update_log에 삭제자 기록 추가
|
||
|
|
$logEntry = date("Y-m-d H:i:s") . " - " . $_SESSION["name"] . " 삭제됨\n";
|
||
|
|
$update_log = $logEntry . ($update_log ?? '');
|
||
|
|
|
||
|
|
$pdo->beginTransaction();
|
||
|
|
$sql = "UPDATE {$DB}.eworks
|
||
|
|
SET is_deleted = 1,
|
||
|
|
update_log = ?
|
||
|
|
WHERE num = ?
|
||
|
|
LIMIT 1";
|
||
|
|
$stmh = $pdo->prepare($sql);
|
||
|
|
$stmh->bindValue(1, $update_log, PDO::PARAM_STR);
|
||
|
|
$stmh->bindValue(2, $num, PDO::PARAM_INT);
|
||
|
|
$stmh->execute();
|
||
|
|
$pdo->commit();
|
||
|
|
|
||
|
|
echo json_encode(["num"=>$num, "mode"=>$mode], JSON_UNESCAPED_UNICODE);
|
||
|
|
} catch (PDOException $e) {
|
||
|
|
$pdo->rollBack();
|
||
|
|
echo json_encode(["error"=>$e->getMessage()], JSON_UNESCAPED_UNICODE);
|
||
|
|
}
|
||
|
|
|
||
|
|
exit;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
$data = array(
|
||
|
|
"num" => $num,
|
||
|
|
"mode" => $mode
|
||
|
|
);
|
||
|
|
|
||
|
|
//json 출력
|
||
|
|
echo(json_encode($data, JSON_UNESCAPED_UNICODE));
|