**Đóng vai:** Bạn là chuyên gia Laravel 13.5. **Nhiệm vụ:** Tạo Factories và DatabaseSeeder để sinh dữ liệu mẫu cho hệ thống HQLand (Sử dụng UUID làm khóa chính). **Thực hiện các bước sau:** **Bước 1: Tạo ProjectFactory** Chạy lệnh tạo factory và viết code cho `database/factories/ProjectFactory.php`: - `name`: Tên dự án ngẫu nhiên (VD: "Khu đô thị HQLand Alpha", "Chung cư HQLand Beta"). - `type`: Random giữa ['Khu đô thị', 'Chung cư', 'Đất nền phân lô']. - `address`: Địa chỉ ngẫu nhiên. **Bước 2: Tạo ProductFactory** Chạy lệnh tạo factory và viết code cho `database/factories/ProductFactory.php`: - `project_id`: Lấy ngẫu nhiên từ Project::factory(). - `product_type`: Random ['LAND', 'APARTMENT']. - `code`: Random mã lô chữ hoa (VD: 'STH-'.fake()->unique()->randomNumber(4)). - `area`: Random float từ 50 đến 200. - `price_per_unit`: Random từ 20 triệu đến 100 triệu. - `total_price`: `area` * `price_per_unit`. - `custom_data`: Trả về mảng JSON tùy theo `product_type`. Nếu LAND: có `frontage`, `road_width`. Nếu APARTMENT: có `block`, `floor`, `view`. - `status`: 'Đang mở bán'. **Bước 3: Tạo CustomerFactory** Chạy lệnh tạo factory và viết code cho `database/factories/CustomerFactory.php`: - `full_name`: fake()->name(). - `cmnd_cccd`: fake()->unique()->numerify('0##########'). - `phone`: fake()->phoneNumber(). - `email`: fake()->safeEmail(). - `address`: Trả về mảng JSON gồm `street`, `ward`, `district`, `city`. - `dob`: fake()->date(). **Bước 4: Tạo ContractFactory** Chạy lệnh tạo factory và viết code cho `database/factories/ContractFactory.php`: - `product_id`: Product::factory(). - `contract_number`: 'HDMB-'.fake()->unique()->randomNumber(5). - `total_value`: Lấy từ total_price của Product tương ứng. - `paid_amount`: Random một số nhỏ hơn total_value. - `contract_type`: 'HĐMB'. - `transfer_order`: 0. **Bước 5: Viết kịch bản tại DatabaseSeeder** Mở file `database/seeders/DatabaseSeeder.php` và viết code vào hàm `run()` để: 1. Xóa sạch dữ liệu cũ (nếu có). 2. Tạo 1 tài khoản Admin mặc định (email: admin@phuongtc.com, pass: 1Qazxsw2@!321) nếu chưa có. 3. Tạo 3 Dự án (Projects). 4. Mỗi dự án tạo 15 Sản phẩm (Products). 5. Tạo 20 Khách hàng (Customers). 6. Lấy 10 Khách hàng đầu tiên, mỗi người tạo 1 Hợp đồng (Contracts) gắn ngẫu nhiên với 10 Sản phẩm khác nhau. (Nhớ attach cả vào bảng trung gian `contract_customers`).