# Thiết kế tính năng: Quản lý Báo giá (Quotation Management)

Tài liệu này mô tả chi tiết bộ tính năng Báo giá cho hệ thống POS/CRM, cho phép cửa hàng tạo, gửi và quản lý báo giá chuyên nghiệp cho khách hàng.

---

## 1. Tổng quan quy trình (Workflow)

1.  **Cửa hàng (Admin/Staff)**:
    *   Tạo báo giá mới.
    *   Chọn sản phẩm từ kho hoặc tự điền thông tin (Custom item).
    *   Thiết lập giảm giá, ghi chú và ngày hết hạn.
    *   Lưu và gửi link báo giá hoặc xuất PDF gửi khách.
2.  **Khách hàng (Client)**:
    *   Truy cập link báo giá (không cần đăng nhập).
    *   Xem thông tin sản phẩm, đơn giá, tổng tiền và thông tin cửa hàng.
    *   Thực hiện hành động: **Duyệt (Approve)**, **Từ chối (Reject)**, hoặc **Thương lượng (Negotiate)** kèm lời nhắn (ví dụ: trả giá, yêu cầu thay đổi số lượng).
3.  **Cửa hàng**:
    *   Nhận thông báo khi khách phản hồi.
    *   Cập nhật lại báo giá nếu cần (nếu khách trả giá).
    *   Khi khách duyệt -> Chuyển báo giá thành **Đơn hàng (Order)** chỉ với 1 click.

---

## 2. Thiết kế Cơ sở dữ liệu (Database Design)

### Bảng `quotations`
| Trường | Kiểu dữ liệu | Mô tả |
| :--- | :--- | :--- |
| `id` | BigInt (PK) | |
| `shop_id` | Foreign Key | Liên kết với cửa hàng |
| `customer_id` | Foreign Key | Liên kết với khách hàng (nullable) |
| `quotation_code` | String | Mã báo giá (ví dụ: BQ20240101-001) |
| `status` | Enum | `draft`, `sent`, `approved`, `rejected`, `negotiating`, `expired` |
| `sub_total` | Decimal | Tổng tiền trước thuế/giảm giá |
| `discount` | Decimal | Số tiền giảm giá |
| `total_amount` | Decimal | Tổng tiền cuối cùng |
| `notes` | Text | Ghi chú của cửa hàng |
| `customer_feedback` | Text | Lời nhắn từ khách hàng khi từ chối/trả giá |
| `expired_at` | DateTime | Ngày hết hạn |
| `token` | String | Token duy nhất để khách xem báo giá qua link công khai |
| `created_by` | Foreign Key | Nhân viên tạo báo giá |

### Bảng `quotation_items`
| Trường | Kiểu dữ liệu | Mô tả |
| :--- | :--- | :--- |
| `id` | BigInt (PK) | |
| `quotation_id` | Foreign Key | |
| `product_id` | Foreign Key | Null nếu là hàng tự điền |
| `product_name` | String | Tên sản phẩm (lấy từ kho hoặc tự điền) |
| `quantity` | Integer | Số lượng |
| `unit_price` | Decimal | Đơn giá |
| `sub_total` | Decimal | Thành tiền |

---

## 3. Giao diện người dùng (UI/UX)

### 3.1 Giao diện tạo báo giá (Shop Management)
*   **Tìm kiếm sản phẩm**: Ô tìm kiếm nhanh từ kho, click để add vào bảng.
*   **Sản phẩm tự điền**: Nút "Thêm sản phẩm ngoài danh mục" -> Hiện dòng trống để nhập Tên, Giá, SL.
*   **Cấu hình**: Cho phép chọn ngày hết hạn, nhập ghi chú/điều khoản thanh toán.
*   **Preview**: Nút xem trước bản PDF/Web ngay tại màn hình tạo.

### 3.2 Giao diện khách xem (Public Page)
*   **Header**: 
    *   Góc trái: Logo cửa hàng, tên cửa hàng, địa chỉ, hotline.
    *   Góc phải: Chữ "BÁO GIÁ" lớn, Mã BQ, Ngày tạo.
*   **Body**: 
    *   Thông tin khách hàng (Người nhận).
    *   Bảng sản phẩm: STT, Tên, SL, Đơn giá, Thành tiền. Được thiết kế tối giản, font chữ hiện đại (Inter/Roboto).
*   **Footer**: 
    *   Tổng cộng: Tổng tiền, Giảm giá, Tổng thanh toán (bằng số và bằng chữ).
    *   Thông tin thanh toán: Tên ngân hàng, Số tài khoản, Chủ tài khoản (Lấy từ cài đặt Shop).
    *   Ghi chú: Lời cảm ơn hoặc điều khoản bảo hành.
*   **Action Floating Bar (Cho khách)**:
    *   Nút **Duyệt báo giá** (Màu xanh, icon Check).
    *   Nút **Yêu cầu chỉnh sửa/Trả giá** (Màu vàng, mở popup nhập lời nhắn).
    *   Nút **Từ chối** (Màu đỏ).
    *   Nút **Tải PDF** (Action chính).

---

## 4. Đặc tả kỹ thuật (Technical Specs)

### Backend (Laravel)
*   **Controller**: `QuotationController` xử lý CRUD.
*   **API Công khai**: `GET /api/public/quotations/{token}` để lấy data cho khách xem.
*   **PDF**: Sử dụng `barryvdh/laravel-dompdf` hoặc stream HTML view ra cửa sổ in của trình duyệt để đạt layout đẹp nhất và tiết kiệm tài nguyên server.

### Frontend (Angular)
*   **Module**: `features/shop/quotations`.
*   **Components**: 
    *   `QuotationListComponent`: Danh sách báo giá.
    *   `QuotationCreateComponent`: Form tạo/sửa.
    *   `QuotationDetailComponent`: Chi tiết trong admin.
    *   `QuotationPublicComponent`: Giao diện cho khách (Route riêng không bảo mật).

---

## 5. Kế hoạch triển khai (Implementation Steps)

1.  **Database**: Tạo Migration cho bảng `quotations` và `quotation_items`.
2.  **Model & Relation**: Thiết lập quan hệ trong Laravel.
3.  **Backend API**: Viết các đầu API tạo, sửa, đổi trạng thái và API public.
4.  **Frontend Admin**: Build giao diện quản lý và form tạo báo giá.
5.  **Frontend Public**: Build trang view cho khách hàng với hiệu ứng animation mượt mà.
6.  **PDF/Export**: Hoàn thiện tính năng xuất file.
7.  **Automation**: Gắn tính năng "Convert to Order".

---

*Bạn có đồng ý với thiết kế này không? Nếu có tôi sẽ bắt đầu triển khai từng bước.*
