SQL Script พร้อมคำอธิบาย ระบบ warehouses

🎯 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 ตามเมนูในระบบ

  1. Dashboard
    • สรุปใบเบิก (รออนุมัติ, รอจ่าย)
    • วัสดุใกล้หมด, คงคลัง, กราฟ
    • ปุ่มลัดเข้าหน้าเมนูเบิก/รับ/จ่าย/โอน
  2. รับวัสดุเข้าคลัง (Stock-In)
    • Tab: ประวัติ / รออนุมัติ / สร้างรายการใหม่ / รายการร่าง
  3. เบิกจ่ายวัสดุ (Requisition)
    • Tab: ประวัติ / รออนุมัติ / สร้างใบเบิก / ตะกร้าวัสดุ / รายการร่าง
  4. จัดเตรียมวัสดุ (Prepare)
    • Tab: รอจัดเตรียม / จัดเตรียมแล้ว / QR Code รับของ
  5. รายการวัสดุคงคลัง (Inventory)
    • หมวดหมู่ / เพิ่มวัสดุใหม่ / Stock Card / QR Code วัสดุ
  6. ตัดจำหน่ายวัสดุ (Write-off)
    • Tab: ประวัติ / รออนุมัติ / สร้างรายการใหม่ / รายการร่าง
  7. โอนวัสดุข้ามคลัง (Transfer)
    • Tab: ประวัติ / รออนุมัติ / สร้างรายการใหม่ / รายการร่าง
  8. ตั้งค่า (Settings)
    • เส้นทางการอนุมัติ
    • ลายเซ็นอิเล็กทรอนิกส์
    • รายชื่อเจ้าหน้าที่คลัง
    • Supplier / สิทธิ์เข้าถึงคลัง
  9. รายงาน & Dashboard ผู้บริหาร
    • รายงานรับ-จ่าย
    • รายงานคงคลัง
    • รายงานต้นทุนเบิกจ่าย
    • รายงานวัสดุใกล้หมด / ใต้ reorder point

Loading