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

112 lines
3.3 KiB
PHP

<?php
/**
* 대량등록 모달에서 전달된 데이터를 account_plan 테이블에 저장
*/
ob_start();
header('Content-Type: application/json; charset=utf-8');
// 세션 및 권한 검사
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
if (!isset($_SESSION["level"]) || $_SESSION["level"] > 5) {
ob_end_clean();
echo json_encode(['status' => 'error', 'message' => '권한이 없습니다.']);
exit;
}
// DB 연결
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
$DB = 'chandj';
$tablename = 'account_plan_juil';
// 클라이언트로부터 JSON 받기
$input = file_get_contents('php://input');
$data = json_decode($input, true);
// 자바스크립트에서 _bulk는 제거되서 넘어옴
if (empty($data['entries']) || !is_array($data['entries'])) {
ob_end_clean();
echo json_encode(['status' => 'error', 'message' => '저장할 데이터가 없습니다.']);
exit;
}
try {
$pdo->beginTransaction();
$insertedCount = 0;
$errors = [];
$sql = "INSERT INTO {$DB}.{$tablename} (
registDate, inoutsep, content, amount, memo,
ForeDate, first_writer, searchtag, update_log
) VALUES (
:registDate, :inoutsep, :content, :amount, :memo,
:ForeDate, :first_writer, :searchtag, :update_log
)";
$stmt = $pdo->prepare($sql);
foreach ($data['entries'] as $entry) {
// bulk 필드에서 원본 컬럼으로 매핑
$registDate = $entry['registDate'] ?? date('Y-m-d');
$inoutsep = $entry['inoutsep'] ?? '';
$content = $entry['content'] ?? '';
$amount = str_replace(',', '', $entry['amount']) ?? '' ;
$memo = $entry['memo'] ?? '';
$ForeDate = $entry['ForeDate'] ?? '';
// Construct the searchtag value
$searchtag = $registDate . ' ' . $inoutsep . ' ' . $content . ' ' . $amount . $memo ;
$first_writer = date("Y-m-d H:i:s") . " - " . $_SESSION["name"] ;
$update_log = date("Y-m-d H:i:s") . " - " . $_SESSION["name"] . " " . $update_log . "&#10";
$ok = $stmt->execute([
':registDate' => $registDate,
':inoutsep' => $inoutsep,
':content' => $content,
':amount' => $amount,
':memo' => $memo,
':ForeDate' => $ForeDate,
':first_writer' => $first_writer,
':searchtag' => $searchtag,
':update_log' => $update_log
]);
if ($ok) {
$insertedCount++;
} else {
$errors[] = "등록 실패: {$content} ({$registDate})";
}
}
if (!empty($errors)) {
$pdo->rollBack();
ob_end_clean();
echo json_encode([
'status' => 'error',
'message' => '일부 저장 실패: ' . implode('; ', $errors)
]);
exit;
}
$pdo->commit();
ob_end_clean();
echo json_encode([
'status' => 'success',
'message' => "{$insertedCount}건 저장 완료",
'insertedCount'=> $insertedCount
]);
} catch (Exception $e) {
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
ob_end_clean();
echo json_encode([
'status' => 'error',
'message' => '서버 오류: ' . $e->getMessage()
]);
}