Files
sam-kd/askitem/insert.php
hskwon aca1767eb9 초기 커밋: 5130 레거시 시스템
- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경
- DB 연결 하드코딩 → .env 기반으로 변경
- MySQL strict mode DATE 오류 수정
2025-12-10 20:14:31 +09:00

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 . "&#10"; // 개행문자 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));
?>