# 📋 Project Plan: Satisfaction Survey System

## 🎯 ภาพรวมโครงการ

ระบบ Satisfaction Survey เป็นระบบสำหรับสร้าง แจกจ่าย และรวบรวมผลการประเมินความพึงพอใจจากลูกค้า โดยใช้ Laravel Framework และสามารถ integrate กับระบบ ServTrack ได้

---

## 📊 Phase Overview

| Phase | Phase Name | Description |
|-------|------------|-------------|
| Phase 1 | วางแผนและออกแบบ (Foundation) | การวางแผน ออกแบบ และเตรียมโครงสร้างพื้นฐานของระบบ |
| Phase 2 | พัฒนาระบบสำหรับผู้ใช้ทั่วไป (User Interface Development) | การพัฒนาฟีเจอร์และอินเทอร์เฟซสำหรับผู้ใช้ทั่วไป |
| Phase 3 | พัฒนาระบบสำหรับแอดมิน (Admin Interface Development) | การพัฒนาฟีเจอร์และอินเทอร์เฟซสำหรับผู้ดูแลระบบ |

---

## Phase 1: วางแผนและออกแบบ (Foundation)

### 1.1 Project Planning & Requirements Analysis
- วิเคราะห์ความต้องการของระบบและกำหนด Scope
- กำหนด Features และ Functionalities หลัก
- กำหนด User Roles และ Permissions (admin, superadmin, user, consult)
- วางแผน Architecture และ Technology Stack (Laravel 12, PHP 8.2+)
- กำหนด Database Schema และ Relationships ระหว่างตาราง

### 1.2 Environment Setup
- ติดตั้ง Laravel Framework และ Dependencies
- ตั้งค่า PHP Environment และ Database Connection
- สร้างไฟล์ Configuration (`.env`, `config/app.php`, `config/database.php`)
- ตั้งค่า Application Key และ Session Configuration
- ตั้งค่า Git Repository และ Development Tools

### 1.3 Database Design & Migration
- ออกแบบ Database Schema สำหรับตารางทั้งหมด
- กำหนด Relationships, Foreign Keys, และ Constraints
- สร้าง Migrations สำหรับ Core Tables: `customer`, `agency`, `agency_customer`, `masterproduct`, `service`
- สร้าง Migrations สำหรับ Survey Tables: `surveys`, `survey_questions`, `survey_invitations`, `survey_responses`, `response_details`, `survey_annual_summary`
- รัน Migrations และตรวจสอบ Database Schema

### 1.4 Models Development
- สร้าง Core Models: `Customer`, `Agency`, `AgencyCustomer`, `MasterProduct`, `Service` พร้อม Relationships และ Scopes
- สร้าง Survey Models: `Survey`, `Question`, `SurveyInvitation`, `SurveyResponse`, `ResponseDetail`, `SurveyAnnualSummary` พร้อม Relationships
- กำหนด Query Scopes, Business Logic Methods, และ Attribute Casting
- กำหนด Custom Timestamps (DtmIns, DtmUdp) สำหรับ Models ที่ต้องการ

### 1.5 Authentication & Authorization Setup
- ตั้งค่า Authentication Configuration และปรับแต่ง Customer Model ให้เป็น Authenticatable
- พัฒนา Custom Middleware `CheckUserLevel` สำหรับตรวจสอบ User Level
- กำหนด User Levels และลงทะเบียน Middleware ใน `bootstrap/app.php`
- พัฒนา Helper Methods ใน Customer Model สำหรับตรวจสอบ Level

### 1.6 Services & Utilities Development
- สร้าง `SurveyAnnualSummaryService` สำหรับจัดการสรุปรายปี
- พัฒนา Methods สำหรับคำนวณและอัปเดต Annual Summary
- พัฒนา Budget Year Calculation Logic (จาก Response Date)
- สร้าง Console Commands: `UpdateAnnualSummaries`, `UpdateExpiredSurveys`

---

## Phase 2: พัฒนาระบบสำหรับผู้ใช้ทั่วไป (User Interface Development)

### 2.1 Authentication System
- พัฒนา `CustomerController` สำหรับจัดการ Authentication
- พัฒนา Methods: `showLoginForm()`, `login()`, `logout()`, `showRegisterForm()`, `register()`
- สร้าง Views: `auth/login.blade.php`, `auth/register.blade.php`
- ออกแบบ UI/UX สำหรับ Authentication Pages พร้อม Error Handling และ Validation Messages
- สร้าง Routes สำหรับ Authentication (GET/POST login, GET/POST register, POST logout)

### 2.2 User Dashboard
- สร้าง View `user/dashboard.blade.php` สำหรับ User Dashboard
- พัฒนา Methods: `getUserSurveys()`, `getUserServiceRequests()` ใน `ServiceRequestController`
- พัฒนา UI สำหรับแสดงแบบประเมินที่ได้รับ พร้อมสถานะ (pending, sent, opened, completed, expired)
- พัฒนา UI สำหรับแสดงแบบประเมินที่หมดอายุ
- สร้าง Routes สำหรับ User Dashboard (`/dashboard`, `/user/dashboard`)

### 2.3 Survey Taking Interface
- พัฒนา Method `showSurveyByToken()` ใน `SurveyController` สำหรับแสดงแบบประเมินตาม Token
- พัฒนา Token Validation, Invitation Status Check, และ Expiration Check
- สร้าง View `survey/take.blade.php` สำหรับหน้าตอบแบบประเมิน
- พัฒนา UI สำหรับ Question Types: Rating (พร้อม Rating Feedback System), Multiple Choice, Yes/No, Text
- พัฒนา Required Field Validation (Frontend) และ Form Submission ด้วย AJAX

### 2.4 Survey Response Submission
- พัฒนา Method `submitSurveyResponse()` ใน `ServiceRequestController` สำหรับส่งคำตอบแบบประเมิน
- พัฒนา Response Validation, Score Calculation Logic, และ Answer Processing สำหรับแต่ละ Question Type
- พัฒนา Average Score และ Total Score Calculation
- พัฒนา Response Details Storage และ Invitation Status Update (completed)
- Integrate กับ `SurveyAnnualSummaryService` เพื่ออัปเดตสรุปรายปีอัตโนมัติ

### 2.5 Survey Completion & Error Handling
- สร้าง View `survey/completed.blade.php` สำหรับหน้าสำเร็จหลังตอบแบบประเมิน
- สร้าง View `survey/error.blade.php` สำหรับหน้า Error (Token ไม่ถูกต้อง, หมดอายุ, ไม่มีสิทธิ์)
- พัฒนา Error Handling และ Error Messages ที่ชัดเจน
- สร้าง Routes สำหรับ Survey Response (`/survey/{token}`)

### 2.6 Email Integration
- สร้าง `SurveyInvitationMail` Class สำหรับจัดการอีเมลเชิญทำแบบประเมิน
- สร้าง View `emails/survey-invitation.blade.php` สำหรับ Email Template (Responsive Design)
- ออกแบบ Email Layout พร้อม Header, Footer, Content Section, CTA Button, และ Fallback Link
- ตั้งค่า Mail Configuration และ Integrate Mail Sending ใน Survey Distribution Process

---

## Phase 3: พัฒนาระบบสำหรับแอดมิน (Admin Interface Development)

### 3.1 Admin Dashboard & Layout
- สร้าง View `admin/dashboard.blade.php` เป็น Layout หลักสำหรับ Admin
- พัฒนา Navigation Menu, Sidebar, และ Top Navigation Bar
- ออกแบบ UI/UX สำหรับ Admin Interface ที่ใช้งานง่ายและสวยงาม
- สร้าง Routes สำหรับ Admin Dashboard (`/admin/dashboard`)

### 3.2 Survey Management System
- พัฒนา `SurveyController` สำหรับจัดการแบบประเมิน
- พัฒนา Methods: `index()`, `store()`, `show()`, `update()`, `destroy()`, `getStats()`
- สร้าง View `admin/questions/index.blade.php` สำหรับหน้าจัดการแบบประเมิน
- พัฒนา UI สำหรับสร้างแบบประเมิน (Modal Form), แก้ไข, ลบ, และแสดงรายการแบบประเมิน (Table พร้อม Statistics)
- สร้าง Admin Routes สำหรับ Survey Management พร้อม Middleware (auth, check.level:admin,superadmin)

### 3.3 Survey Version Management
- พัฒนา Survey Versioning System และเพิ่ม Column `survey_version` ในตาราง `surveys`
- พัฒนา Methods: `getVersionHistory()`, `getVersionData()`, `incrementSurveyVersion()`
- จัดการ Soft Delete สำหรับ Questions (is_active) เพื่อรักษาประวัติข้อมูล
- พัฒนa UI สำหรับแสดงและจัดการ Survey Versions

### 3.4 Question Management
- พัฒนา Question Types: rating, multiple_choice, yes_no, text
- พัฒนา Question Options Management (JSON), Validation Rules, Ordering System, และ Help Text
- พัฒนา UI สำหรับจัดการ Questions ในแบบประเมิน

### 3.5 Service Request Management
- พัฒนา `ServiceRequestController` สำหรับจัดการ Service Requests
- พัฒนา Methods: `getServiceRequest()`, `index()`, `getActiveSurveys()`
- สร้าง View `admin/service-requests/index.blade.php` สำหรับหน้าจัดการ Service Requests
- พัฒนา UI สำหรับแสดงรายการ Service Requests
- สร้าง Admin Routes สำหรับ Service Request Management

### 3.6 Survey Distribution System
- พัฒนา Survey Invitation System พร้อม Token Generation (32 characters random string)
- พัฒนา Method `sendSurvey()` สำหรับส่งแบบประเมินให้ผู้ใช้
- พัฒนา Multiple Survey Selection, Multiple Customer Selection, และ Expiration Days Configuration
- พัฒนา Survey Version Tracking เพื่อบันทึกเวอร์ชันที่ส่งให้ผู้ใช้
- สร้าง Component `send-survey-modal-standalone.blade.php` และ Standalone JavaScript
- พัฒนา Send Survey Modal UI และ Integrate Mail Sending

### 3.7 Reporting & Analytics System
- พัฒนา Methods ใน `SurveyController`: `getReportsData()`, `getChartComparisonData()`, `getChartQuestionData()`, `getSurveysList()`, `getSurveyDetails()`, `getResponseDetailsByResponseId()`, `getResponseDetailsBySurveyAndInvitation()`
- Integrate `SurveyAnnualSummaryService` สำหรับคำนวณสรุปรายปี
- สร้าง View `admin/reports/index.blade.php` สำหรับหน้าดูรายงาน
- พัฒนา UI สำหรับกราฟเปรียบเทียบ (Chart.js), กราฟคำถาม, ตารางข้อมูล, และ Filter (Survey, Year, Product, Version)
- พัฒนา Method `exportToExcel()` สำหรับส่งออกข้อมูลเป็น Excel (ใช้ PhpSpreadsheet Library)
- สร้าง Admin Routes สำหรับ Reports

### 3.8 Survey Cancellation & Management
- พัฒนา Method `cancelSurveyInvitation()` สำหรับยกเลิกการส่งแบบประเมิน
- พัฒนา UI สำหรับยกเลิกการส่งและ Status Update (cancelled)
- พัฒนา Method `updateExpiredSurveys()` สำหรับอัปเดตสถานะแบบประเมินที่หมดอายุ
- ตั้งค่า Scheduled Task (Cron Job) สำหรับ Update Expired Surveys

### 3.9 ServTrack Integration
- วิเคราะห์ ServTrack System Architecture และกำหนด Integration Points
- พัฒนา API Endpoints: `/admin/service-requests/{id}`, `/admin/surveys-api`, `/admin/send-survey`
- พัฒนา Standalone JavaScript (`send-survey-modal.js`) สำหรับ API Integration
- สร้าง Configuration File `config/survey.php` และ Environment Variables สำหรับ ServTrack Integration
- พัฒนา URL Generation Logic (ตรวจสอบ Integration Status)
- ทดสอบ Integration ใน ServTrack Environment

### 3.10 Testing & Quality Assurance
- เขียน Unit Tests สำหรับ Models และ Services
- เขียน Integration Tests สำหรับ Controllers และ API Endpoints
- ทดสอบ Feature Flows ทั้งหมด (Survey Creation, Distribution, Response Collection, Reporting)
- ทดสอบ Security (Authentication, Authorization, CSRF, SQL Injection, XSS)
- ทดสอบ Performance และ Optimize Database Queries
- User Acceptance Testing และรวบรวม Feedback

### 3.11 Deployment & Documentation
- ตั้งค่า Production Environment (Server, Database, Web Server, PHP Configuration, SSL Certificate)
- ตั้งค่า Production Configuration (Environment Variables, Database Connection, Mail Configuration, Cache, Session)
- รัน Database Migrations ใน Production และตรวจสอบ Data Integrity
- Deploy Application Code และตั้งค่า File/Directory Permissions
- ตั้งค่า Scheduled Tasks (Cron Jobs) สำหรับ Update Expired Surveys และ Update Annual Summaries
- Optimize Application (Cache Routes, Config, Views)
- เขียน Documentation: README, API Docs, User Manual, Admin Manual, Developer Guide, Deployment Guide
- ตั้งค่า Monitoring, Logging, Backup Strategy, และ Disaster Recovery Plan

---

## 📝 Deliverables Summary

### Code Deliverables
- Laravel Application Code
- Database Migrations
- Models, Controllers, Services
- Views (Blade Templates)
- JavaScript Files
- CSS Files
- Configuration Files

### Documentation Deliverables
- README.md
- API Documentation
- User Manual
- Admin Manual
- Developer Guide
- Deployment Guide
- Architecture Documentation

### Testing Deliverables
- Unit Tests
- Integration Tests
- Test Reports

### Deployment Deliverables
- Production Environment
- Database Setup
- Scheduled Tasks Configuration
- Monitoring Setup

---

## 🎯 Success Criteria

### Functional Requirements
- ✅ ผู้ใช้สามารถล็อกอินและสมัครสมาชิกได้
- ✅ ผู้ใช้สามารถดูแบบประเมินที่ได้รับได้
- ✅ ผู้ใช้สามารถตอบแบบประเมินได้
- ✅ Admin สามารถสร้างแบบประเมินได้
- ✅ Admin สามารถส่งแบบประเมินให้ผู้ใช้ได้
- ✅ Admin สามารถดูรายงานและสถิติได้
- ✅ ระบบสามารถคำนวณคะแนนและสรุปรายปีได้
- ✅ ระบบสามารถส่งอีเมลได้
- ✅ ระบบสามารถ integrate กับ ServTrack ได้

### Non-Functional Requirements
- ✅ ระบบมีความปลอดภัย (Authentication, Authorization, CSRF Protection)
- ✅ ระบบมี Performance ที่ดี
- ✅ ระบบมี UI/UX ที่ดี
- ✅ ระบบมี Error Handling ที่ดี
- ✅ ระบบมี Logging และ Monitoring

---

## 📌 Notes

- Project Plan นี้เป็นแบบ Agile และสามารถปรับเปลี่ยนได้ตามความต้องการ
- แต่ละ Phase สามารถพัฒนาแบบ Parallel ได้ (ถ้ามีทีมงานหลายคน)
- ควรทำ Code Review และ Testing ในแต่ละ Phase
- ควรทำ Documentation ควบคู่ไปกับการพัฒนา
