- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
309 lines
11 KiB
PHP
309 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"] ?? '';
|
|
$indate = $_REQUEST["indate"] ?? '';
|
|
$outdate = $_REQUEST["outdate"] ?? '';
|
|
$mytitle = $_REQUEST["mytitle"] ?? '';
|
|
$content = $_REQUEST["content"] ?? '';
|
|
$content_reason = $_REQUEST["content_reason"] ?? '';
|
|
$first_writer = $_REQUEST["first_writer"] ?? '';
|
|
$author = $_REQUEST["author"] ?? '';
|
|
$update_log = $_REQUEST["update_log"] ?? '';
|
|
$suppliercost = $_REQUEST["suppliercost"] ?? '';
|
|
$store = $_REQUEST["store"] ?? '';
|
|
$secondordnum = $_REQUEST["secondordnum"] ?? '';
|
|
$secondordpaydate = $_REQUEST["secondordpaydate"] ?? '';
|
|
$status = $_REQUEST["status"] ?? '';
|
|
$al_company = $_REQUEST["al_company"] ?? '';
|
|
$done = $_REQUEST["done"] ?? ''; // 결재완료 여부
|
|
|
|
// 전자결재의 변수에 매칭 (저장변수가 다른경우 선언)
|
|
$outworkplace = $mytitle; // 제목
|
|
$al_content = $content; // 품의 내역
|
|
$request_comment = $content_reason; // 품의 사유
|
|
|
|
$e_title = $mytitle; // 전자결재 제목
|
|
$eworks_item = '품의서';
|
|
|
|
// 전자 결재에 보여질 내용 data 수정 update
|
|
$data = array(
|
|
"e_title" => $e_title,
|
|
"indate" => $indate,
|
|
"outdate" => $outdate,
|
|
"author" => $author,
|
|
"outworkplace" => $outworkplace, // mytitle 매칭
|
|
"al_content" => $al_content, // content 매칭
|
|
"request_comment" => $request_comment,
|
|
"store" => $store,
|
|
"suppliercost" => $suppliercost, // 비용 총액 저장
|
|
"secondordnum" => $secondordnum,
|
|
"secondordpaydate" => $secondordpaydate
|
|
);
|
|
|
|
$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']) ?? '';
|
|
$first_approval_id = 'km5130';
|
|
$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 || $secondordpaydate == '당월말' || $secondordpaydate == '익월말' ){
|
|
$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 = ?,
|
|
outdate = ?,
|
|
outworkplace = ?,
|
|
request_comment = ?,
|
|
first_writer = ?,
|
|
author = ?,
|
|
update_log = ?,
|
|
contents = ?,
|
|
e_title = ?,
|
|
eworks_item = ?,
|
|
al_content=?,
|
|
suppliercost=?,
|
|
store=?,
|
|
secondordnum=?,
|
|
secondordpaydate=?,
|
|
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, $outdate, PDO::PARAM_STR);
|
|
$stmh->bindValue(3, $outworkplace, PDO::PARAM_STR);
|
|
$stmh->bindValue(4, $request_comment, PDO::PARAM_STR);
|
|
$stmh->bindValue(5, $first_writer, PDO::PARAM_STR);
|
|
$stmh->bindValue(6, $author, PDO::PARAM_STR);
|
|
$stmh->bindValue(7, $update_log, PDO::PARAM_STR);
|
|
$stmh->bindValue(8, $contents, PDO::PARAM_STR);
|
|
$stmh->bindValue(9, $e_title, PDO::PARAM_STR);
|
|
$stmh->bindValue(10, $eworks_item, PDO::PARAM_STR);
|
|
$stmh->bindValue(11, $al_content, PDO::PARAM_STR);
|
|
$stmh->bindValue(12, $suppliercost, PDO::PARAM_STR);
|
|
$stmh->bindValue(13, $store, PDO::PARAM_STR);
|
|
$stmh->bindValue(14, $secondordnum, PDO::PARAM_STR);
|
|
$stmh->bindValue(15, $secondordpaydate, PDO::PARAM_STR);
|
|
$stmh->bindValue(16, $status, PDO::PARAM_STR);
|
|
$stmh->bindValue(17, $e_line_id, PDO::PARAM_STR);
|
|
$stmh->bindValue(18, $e_line, PDO::PARAM_STR);
|
|
$stmh->bindValue(19, $al_company, PDO::PARAM_STR);
|
|
$stmh->bindValue(20, $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");
|
|
|
|
// if (is_array($approvalLines)) {
|
|
// foreach ($approvalLines as $line) {
|
|
// if ($al_part == $line['savedName']) {
|
|
// foreach ($line['approvalOrder'] as $order) {
|
|
// $e_line_id .= $order['user-id'] . '!';
|
|
// $e_line .= $order['name'] . '!';
|
|
// }
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// 결재 상태 설정
|
|
|
|
$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 || $secondordpaydate == '당월말' || $secondordpaydate == '익월말' ){
|
|
$e_line_id = '';
|
|
$e_line = '';
|
|
$status = 'end';
|
|
} else {
|
|
$e_line_id = $first_approval_id;
|
|
$e_line = $first_approval_name;
|
|
$status = 'send';
|
|
}
|
|
|
|
try {
|
|
$pdo->beginTransaction();
|
|
|
|
$sql = "INSERT INTO {$DB}.eworks (
|
|
indate, outdate, 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, secondordnum, secondordpaydate, al_company
|
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
|
|
|
$stmh = $pdo->prepare($sql);
|
|
|
|
// 바인딩된 값 설정
|
|
$stmh->bindValue(1, $indate, PDO::PARAM_STR);
|
|
$stmh->bindValue(2, $outdate, PDO::PARAM_STR);
|
|
$stmh->bindValue(3, $outworkplace, PDO::PARAM_STR);
|
|
$stmh->bindValue(4, $request_comment, PDO::PARAM_STR);
|
|
$stmh->bindValue(5, $first_writer, PDO::PARAM_STR);
|
|
$stmh->bindValue(6, $author, PDO::PARAM_STR);
|
|
$stmh->bindValue(7, $update_log, PDO::PARAM_STR);
|
|
$stmh->bindValue(8, $contents, PDO::PARAM_STR);
|
|
$stmh->bindValue(9, $e_title, PDO::PARAM_STR);
|
|
$stmh->bindValue(10, $eworks_item, PDO::PARAM_STR);
|
|
$stmh->bindValue(11, $registdate, PDO::PARAM_STR);
|
|
$stmh->bindValue(12, $author_id, PDO::PARAM_STR);
|
|
$stmh->bindValue(13, $status, PDO::PARAM_STR);
|
|
$stmh->bindValue(14, rtrim($e_line_id, '!'), PDO::PARAM_STR);
|
|
$stmh->bindValue(15, rtrim($e_line, '!'), PDO::PARAM_STR);
|
|
$stmh->bindValue(16, $al_content, PDO::PARAM_STR);
|
|
$stmh->bindValue(17, $suppliercost, PDO::PARAM_STR);
|
|
$stmh->bindValue(18, $store, PDO::PARAM_STR);
|
|
$stmh->bindValue(19, $secondordnum, PDO::PARAM_STR);
|
|
$stmh->bindValue(20, $secondordpaydate, PDO::PARAM_STR);
|
|
$stmh->bindValue(21, $al_company, PDO::PARAM_STR);
|
|
|
|
$stmh->execute();
|
|
$pdo->commit();
|
|
} catch (PDOException $Exception) {
|
|
$pdo->rollBack();
|
|
print "오류: " . $Exception->getMessage();
|
|
}
|
|
|
|
// 신규 레코드 번호 가져오기
|
|
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;
|
|
|
|
// 첨부파일 삭제
|
|
// try{
|
|
// $pdo->beginTransaction();
|
|
// $sql1 = "delete from {$DB}.picuploads where parentnum = ? and tablename = ? ";
|
|
// $stmh1 = $pdo->prepare($sql1);
|
|
// $stmh1->bindValue(1,$num, PDO::PARAM_STR);
|
|
// $stmh1->bindValue(2,'request_etc', PDO::PARAM_STR);
|
|
// $stmh1->execute();
|
|
|
|
// $pdo->commit();
|
|
|
|
// } catch (Exception $ex) {
|
|
// $pdo->rollBack();
|
|
// print "오류: ".$Exception->getMessage();
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
$data = array(
|
|
"num" => $num,
|
|
"mode" => $mode
|
|
);
|
|
|
|
//json 출력
|
|
echo(json_encode($data, JSON_UNESCAPED_UNICODE));
|
|
?>
|