=== Spa Appointment Manager ===
Contributors: 9bricks
Tags: appointments, booking, spa, salon, zalo
Requires at least: 6.8
Tested up to: 6.8
Requires PHP: 8.2
Stable tag: 1.1.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Quản lý lịch hẹn cho spa, massage, gội đầu dưỡng sinh, nail và salon tóc ngay trong WordPress Admin, kèm nhắc lịch tự động qua Zalo OA.

== Description ==

Spa Appointment Manager biến WordPress Admin thành một cuốn sổ lịch hẹn dùng được thật: xem lịch theo ngày/tuần/tháng/năm, kéo thả để đổi giờ, mỗi nhân viên một màu, và không bao giờ cho phép hai lịch trùng giờ của cùng một người.

Tính năng chính:

* **Calendar trực quan** — FullCalendar với 4 chế độ xem, kéo thả đổi giờ, kéo mép đổi thời lượng.
* **Quản lý nhân viên** — tên, điện thoại, Zalo ID, màu riêng, bật/tắt hoạt động.
* **Quản lý lịch hẹn** — khách hàng, dịch vụ, nhân viên, giờ bắt đầu/kết thúc, trạng thái, ghi chú.
* **Phát hiện trùng lịch** — chặn ngay khi lưu nếu nhân viên đã có lịch khác trong khung giờ đó.
* **Lịch sử đầy đủ** — mọi lần tạo/sửa/hủy/khôi phục đều được ghi lại kèm dữ liệu cũ và mới.
* **Không xóa cứng** — lịch hẹn bị hủy vẫn nằm trong cơ sở dữ liệu và có thể khôi phục.
* **Nhắc lịch qua Zalo OA** — nhắc trước giờ hẹn, tổng hợp lịch mỗi sáng, báo khi lịch thay đổi hoặc bị hủy.
* **Hàng đợi gửi lại** — tin nhắn thất bại được thử lại tự động theo lịch.

Plugin viết theo hướng đối tượng, có namespace, dùng REST API, escape output, sanitize input, kiểm tra nonce và capability. Mọi hành vi đều mở rộng được qua action/filter.

== Installation ==

1. Tải file `spa-appointment-manager.zip`.
2. Vào **Plugins → Add New → Upload Plugin**, chọn file zip, bấm **Install Now**.
3. Bấm **Activate**. Plugin tự tạo bảng dữ liệu và đăng ký các tác vụ định kỳ.
4. Vào menu **Lịch hẹn → Nhân viên** để thêm nhân viên, sau đó **Lịch hẹn → Lịch** để bắt đầu đặt lịch.
5. (Tùy chọn) Vào **Lịch hẹn → Cài đặt → Zalo** để dán OA Access Token nếu muốn nhắc lịch tự động.

== Frequently Asked Questions ==

= Nhân viên có cần tài khoản WordPress không? =

Không. Nhân viên chỉ là bản ghi trong plugin và nhận thông báo qua Zalo. Chỉ Administrator mới vào được các trang quản lý.

= Lấy Zalo User ID của nhân viên ở đâu? =

Nhân viên phải quan tâm (follow) Official Account của cửa hàng. Sau đó ID của họ xuất hiện trong danh sách người quan tâm ở Zalo Official Account Manager, hoặc trong payload webhook mà plugin nhận được.

= Nhắc lịch không chạy? =

WP-Cron chỉ chạy khi có người truy cập website. Với cửa hàng ít traffic, hãy tắt WP-Cron nội bộ và gọi `wp-cron.php` bằng cron hệ thống mỗi 5 phút.

= Gỡ plugin có mất dữ liệu không? =

Không, trừ khi bạn bật tùy chọn "Xóa toàn bộ dữ liệu khi gỡ cài đặt" trong **Cài đặt → Chung**.

== Screenshots ==

1. Bảng điều khiển với thống kê hôm nay, lịch sắp tới và trạng thái tác vụ định kỳ.
2. Calendar theo tuần, mỗi nhân viên một màu, kéo thả để đổi giờ.
3. Form lịch hẹn kèm lịch sử thay đổi.
4. Trang cài đặt Zalo với nút kiểm tra kết nối.

== Changelog ==

= 1.1.0 =
* Thêm danh mục **Dịch vụ**: quản lý tên, thời lượng, giá và trạng thái cung cấp. Chọn dịch vụ khi đặt lịch sẽ tự tính giờ kết thúc theo thời lượng.
* Thêm shortcode `[spa_dashboard]` hiển thị lịch hẹn ra frontend, chỉ dành cho người đã đăng nhập có quyền quản lý.
* Thêm hướng dẫn khởi động sau khi kích hoạt, tự ẩn khi cửa hàng đã thiết lập xong.

= 1.0.0 =
* Phát hành lần đầu: quản lý nhân viên, quản lý lịch hẹn, calendar, lịch sử, phát hiện trùng lịch, nhắc lịch Zalo, cài đặt và trình cài đặt cơ sở dữ liệu.
