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; ?>