🎯 SQL Script พร้อมคำอธิบาย (Initial Schema)
-- ตารางผู้ใช้งานระบบ
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
full_name VARCHAR(100),
email VARCHAR(100),
phone VARCHAR(20),
role_id INT,
department_id INT,
is_active BOOLEAN DEFAULT TRUE
);
-- ตารางบทบาท
CREATE TABLE roles (
role_id INT AUTO_INCREMENT PRIMARY KEY,
role_name VARCHAR(50)
);
-- ตารางคลังวัสดุ
CREATE TABLE warehouses (
warehouse_id INT AUTO_INCREMENT PRIMARY KEY,
warehouse_name VARCHAR(100),
location TEXT,
is_active BOOLEAN DEFAULT TRUE
);
-- ตารางหมวดหมู่วัสดุ
CREATE TABLE item_categories (
category_id INT AUTO_INCREMENT PRIMARY KEY,
category_code VARCHAR(10),
category_name VARCHAR(100)
);
-- ตารางรายการวัสดุ
CREATE TABLE items (
item_id INT AUTO_INCREMENT PRIMARY KEY,
item_code VARCHAR(20),
item_name VARCHAR(100),
category_id INT,
unit VARCHAR(20),
is_controlled BOOLEAN DEFAULT FALSE,
reorder_point INT,
image_url TEXT
);
-- ตารางเชื่อมคลังกับรายการวัสดุ
CREATE TABLE warehouse_items (
warehouse_item_id INT AUTO_INCREMENT PRIMARY KEY,
warehouse_id INT,
item_id INT,
stock_quantity INT DEFAULT 0,
is_active BOOLEAN DEFAULT TRUE
);
-- ตารางรับเข้าคลัง
CREATE TABLE stock_ins (
stock_in_id INT AUTO_INCREMENT PRIMARY KEY,
stock_in_code VARCHAR(20),
warehouse_id INT,
received_date DATE,
supplier_id INT,
reason TEXT,
status VARCHAR(20),
created_by INT,
created_at DATETIME
);
CREATE TABLE stock_in_items (
stock_in_item_id INT AUTO_INCREMENT PRIMARY KEY,
stock_in_id INT,
item_id INT,
quantity INT,
unit_price DECIMAL(10,2),
lot_no VARCHAR(50),
remarks TEXT
);
-- ตารางเบิกจ่ายวัสดุ
CREATE TABLE requisitions (
requisition_id INT AUTO_INCREMENT PRIMARY KEY,
requisition_code VARCHAR(20),
requester_id INT,
department_id INT,
warehouse_id INT,
request_date DATE,
purpose TEXT,
status VARCHAR(20),
created_at DATETIME
);
CREATE TABLE requisition_items (
requisition_item_id INT AUTO_INCREMENT PRIMARY KEY,
requisition_id INT,
item_id INT,
quantity INT,
remarks TEXT
);
-- ตารางตัดจำหน่าย
CREATE TABLE write_offs (
write_off_id INT AUTO_INCREMENT PRIMARY KEY,
write_off_code VARCHAR(20),
warehouse_id INT,
reason TEXT,
write_off_date DATE,
status VARCHAR(20),
created_by INT
);
CREATE TABLE write_off_items (
write_off_item_id INT AUTO_INCREMENT PRIMARY KEY,
write_off_id INT,
item_id INT,
quantity INT,
remarks TEXT
);
-- ตารางโอนวัสดุ
CREATE TABLE transfers (
transfer_id INT AUTO_INCREMENT PRIMARY KEY,
transfer_code VARCHAR(20),
from_warehouse_id INT,
to_warehouse_id INT,
transfer_date DATE,
status VARCHAR(20),
created_by INT
);
CREATE TABLE transfer_items (
transfer_item_id INT AUTO_INCREMENT PRIMARY KEY,
transfer_id INT,
item_id INT,
quantity INT,
remarks TEXT
);
-- ตารางเส้นทางการอนุมัติ
CREATE TABLE approval_routes (
route_id INT AUTO_INCREMENT PRIMARY KEY,
process_type ENUM('stock_in', 'stock_out', 'write_off', 'transfer'),
department_id INT,
created_by INT
);
CREATE TABLE approval_steps (
step_id INT AUTO_INCREMENT PRIMARY KEY,
route_id INT,
level INT,
approver_user_id INT,
can_override BOOLEAN DEFAULT FALSE
);
CREATE TABLE approval_logs (
log_id INT AUTO_INCREMENT PRIMARY KEY,
process_id INT,
process_type VARCHAR(20),
step_level INT,
approved_by INT,
status ENUM('approved', 'rejected', 'returned'),
comment TEXT,
timestamp DATETIME
);
🗂️ ER-Diagram (สรุปความสัมพันธ์)
[users]--< [requisitions] >--[requisition_items] >--[items] <--> [item_categories]
\ /
+--< [approval_logs] >-- [approval_steps] >-- [approval_routes]
[warehouses]--< [warehouse_items] >--[items]
| |
| [stock_in_items] <--> [stock_ins] <--> [suppliers]
|
+--< [transfers] >-- [transfer_items] >--[items]
[write_offs] >-- [write_off_items] >-- [items]
🧾 Data Dictionary (ตัวย่อ – คำอธิบาย)
ชื่อตาราง | คำอธิบาย |
---|---|
users | ข้อมูลผู้ใช้งานระบบ |
roles | บทบาทของผู้ใช้งาน เช่น admin, officer |
warehouses | รายชื่อคลังวัสดุ เช่น คลัง A, คลัง B |
items | รายการวัสดุแต่ละรายการ |
item_categories | หมวดหมู่วัสดุ เช่น เครื่องเขียน, อุปกรณ์ไฟฟ้า |
warehouse_items | ความสัมพันธ์ระหว่างคลังและวัสดุ (คงคลัง) |
stock_ins | รายการรับวัสดุเข้าคลัง |
stock_in_items | รายการวัสดุในเอกสารรับเข้า |
requisitions | รายการเบิกวัสดุ |
requisition_items | รายการวัสดุในเอกสารเบิก |
write_offs | รายการตัดจำหน่ายวัสดุ |
write_off_items | รายการวัสดุในเอกสารตัดจำหน่าย |
transfers | รายการโอนวัสดุระหว่างคลัง |
transfer_items | รายการวัสดุในเอกสารโอน |
approval_routes | เส้นทางการอนุมัติของแต่ละกระบวนการ |
approval_steps | ลำดับขั้นของผู้อนุมัติในแต่ละ route |
approval_logs | บันทึกการอนุมัติแต่ละขั้นตอน |
📦 แยก Module UI ตามเมนูในระบบ
- Dashboard
- สรุปใบเบิก (รออนุมัติ, รอจ่าย)
- วัสดุใกล้หมด, คงคลัง, กราฟ
- ปุ่มลัดเข้าหน้าเมนูเบิก/รับ/จ่าย/โอน
- รับวัสดุเข้าคลัง (Stock-In)
- Tab: ประวัติ / รออนุมัติ / สร้างรายการใหม่ / รายการร่าง
- เบิกจ่ายวัสดุ (Requisition)
- Tab: ประวัติ / รออนุมัติ / สร้างใบเบิก / ตะกร้าวัสดุ / รายการร่าง
- จัดเตรียมวัสดุ (Prepare)
- Tab: รอจัดเตรียม / จัดเตรียมแล้ว / QR Code รับของ
- รายการวัสดุคงคลัง (Inventory)
- หมวดหมู่ / เพิ่มวัสดุใหม่ / Stock Card / QR Code วัสดุ
- ตัดจำหน่ายวัสดุ (Write-off)
- Tab: ประวัติ / รออนุมัติ / สร้างรายการใหม่ / รายการร่าง
- โอนวัสดุข้ามคลัง (Transfer)
- Tab: ประวัติ / รออนุมัติ / สร้างรายการใหม่ / รายการร่าง
- ตั้งค่า (Settings)
- เส้นทางการอนุมัติ
- ลายเซ็นอิเล็กทรอนิกส์
- รายชื่อเจ้าหน้าที่คลัง
- Supplier / สิทธิ์เข้าถึงคลัง
- รายงาน & Dashboard ผู้บริหาร
- รายงานรับ-จ่าย
- รายงานคงคลัง
- รายงานต้นทุนเบิกจ่าย
- รายงานวัสดุใกล้หมด / ใต้ reorder point