190 lines
4.7 KiB
PHP
190 lines
4.7 KiB
PHP
<?php
|
|
ini_set('display_errors', 1);
|
|
error_reporting(E_ALL);
|
|
|
|
header("Content-Type: application/json; charset=utf-8");
|
|
|
|
try {
|
|
$pdo = new PDO(
|
|
"mysql:host=localhost;dbname=egbim;charset=utf8mb4",
|
|
"egbim",
|
|
"baron3840!!",
|
|
[
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
|
|
]
|
|
);
|
|
} catch(Exception $e) {
|
|
echo json_encode(["status"=>"error","message"=>"DB 연결 실패"]);
|
|
exit;
|
|
}
|
|
|
|
$action = $_POST['action'] ?? $_GET['action'] ?? "";
|
|
|
|
/* ===========================
|
|
1) 전체 일정 + 직원 목록
|
|
=========================== */
|
|
if ($action === "month") {
|
|
|
|
$year = $_GET['year'] ?? date("Y");
|
|
$month = $_GET['month'] ?? date("m");
|
|
|
|
// 직원 목록
|
|
$employees = $pdo->query("
|
|
SELECT emp_no, emp_name
|
|
FROM sales_members
|
|
ORDER BY emp_name ASC
|
|
")->fetchAll();
|
|
|
|
// 해당 월 전체 일정
|
|
$stmt = $pdo->prepare("
|
|
SELECT
|
|
s.seq_no,
|
|
s.schedule_date,
|
|
s.time_period,
|
|
s.client_code,
|
|
c.client_name,
|
|
s.emp_no,
|
|
s.content,
|
|
s.status
|
|
FROM sales_schedules s
|
|
LEFT JOIN sales_clients c ON s.client_code = c.client_code
|
|
WHERE DATE_FORMAT(s.schedule_date, '%Y-%m') = ?
|
|
ORDER BY s.schedule_date ASC
|
|
");
|
|
$stmt->execute([ "$year-$month" ]);
|
|
$schedules = $stmt->fetchAll();
|
|
|
|
echo json_encode([
|
|
"status" => "ok",
|
|
"employees" => $employees,
|
|
"schedules" => $schedules
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
|
|
/* ===========================
|
|
2) INSERT
|
|
=========================== */
|
|
if ($action === "insert") {
|
|
$seq = $pdo->query("SELECT IFNULL(MAX(seq_no), 0) + 1 AS next_no FROM sales_schedules")
|
|
->fetch()['next_no'];
|
|
|
|
$stmt = $pdo->prepare("
|
|
INSERT INTO sales_schedules (seq_no, schedule_date, client_code, emp_no, content, status)
|
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
");
|
|
|
|
$stmt->execute([
|
|
$seq,
|
|
$_POST['schedule_date'],
|
|
$_POST['client_code'],
|
|
$_POST['emp_no'],
|
|
$_POST['content'],
|
|
$_POST['status']
|
|
]);
|
|
|
|
echo json_encode(["status" => "ok"]);
|
|
exit;
|
|
}
|
|
|
|
|
|
/* ===========================
|
|
3) UPDATE
|
|
=========================== */
|
|
if ($action === "update") {
|
|
|
|
// 🔥 emp_no 필수 확인
|
|
if (empty($_POST['emp_no'])) {
|
|
echo json_encode([
|
|
"status" => "fail",
|
|
"message" => "emp_no missing in update"
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
$stmt = $pdo->prepare("
|
|
UPDATE sales_schedules
|
|
SET schedule_date=?, time_period=?, client_code=?, emp_no=?, content=?, status=?, updated_at=NOW()
|
|
WHERE seq_no=?
|
|
");
|
|
|
|
$stmt->execute([
|
|
$_POST['schedule_date'],
|
|
$_POST['time_period'],
|
|
$_POST['client_code'],
|
|
$_POST['emp_no'],
|
|
$_POST['content'],
|
|
$_POST['status'],
|
|
$_POST['seq_no']
|
|
]);
|
|
|
|
echo json_encode(["status" => "ok"]);
|
|
exit;
|
|
}
|
|
|
|
|
|
/* ===========================
|
|
4) DELETE
|
|
=========================== */
|
|
if ($action === "delete") {
|
|
|
|
$stmt = $pdo->prepare("DELETE FROM sales_schedules WHERE seq_no=?");
|
|
$stmt->execute([ $_POST['seq_no'] ]);
|
|
|
|
echo json_encode(["status"=>"ok"]);
|
|
exit;
|
|
}
|
|
|
|
|
|
//대시보드 캘린더 요청 API
|
|
if ($action === "calendar") {
|
|
|
|
$year = $_GET['year'] ?? date("Y");
|
|
$month = $_GET['month'] ?? date("m");
|
|
$ym = "$year-$month";
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT
|
|
s.schedule_date,
|
|
s.time_period,
|
|
s.content,
|
|
s.status,
|
|
m.emp_name,
|
|
c.client_name
|
|
FROM sales_schedules s
|
|
LEFT JOIN sales_members m ON s.emp_no = m.emp_no
|
|
LEFT JOIN sales_clients c ON s.client_code = c.client_code
|
|
WHERE DATE_FORMAT(s.schedule_date,'%Y-%m') = ?
|
|
ORDER BY s.schedule_date, s.time_period
|
|
");
|
|
$stmt->execute([$ym]);
|
|
$rows = $stmt->fetchAll();
|
|
|
|
$result = [];
|
|
|
|
foreach ($rows as $r) {
|
|
$date = $r['schedule_date'];
|
|
|
|
// 담당자 첫글자 → 기존 UI에서 color tag 로 사용
|
|
$tag = mb_substr($r['emp_name'], 0, 1);
|
|
|
|
$result[$date][] = [
|
|
"title" => $r['client_name'] ?: '',
|
|
"desc" => $r['content'],
|
|
"time" => $r['time_period'],
|
|
"status" => $r['status'],
|
|
"tags" => [$tag]
|
|
];
|
|
}
|
|
|
|
echo json_encode(["status" => "ok", "events" => $result]);
|
|
exit;
|
|
}
|
|
|
|
|
|
echo json_encode(["status"=>"fail","message"=>"잘못된 요청"]);
|
|
exit;
|
|
?>
|