# HQLAND - HƯỚNG DẪN PHIÊN LÀM VIỆC TIẾP THEO > File này giúp AI Agent nhanh chóng bắt nhịp khi bạn chuyển sang máy tính khác. > **Cập nhật:** 28/04/2026 --- ## 1. NHỮNG GÌ VỪA HOÀN THÀNH ### ✅ Module mới: Sales Phases (Đợt mở bán) - **Models:** `SalesPhase`, `SalesPhaseProduct` (pivot) - **Migration:** `sales_phases`, `sales_phase_products`, `add_sales_phase_id_to_contracts` - **SalesPhaseResource:** Form + Table + Pages đầy đủ (Schemas) - **ContractForm:** Chọn `sales_phase_id` → auto-populate giá từ pivot - **CreateContract:** Fallback lấy `paymentTemplate` từ `salesPhase` nếu HĐ không chọn template trực tiếp - **Product/Project models:** Thêm relationships với SalesPhase ### ✅ Kiến trúc cũ vẫn giữ nguyên - Calculation Pipeline, Form Templates, Payment/Finance modules - Dashboard widgets, PaymentFine/Appendix/Settlement Resources - 9 tests passing --- ## 2. CẤU HÌNH DATABASE ### Chạy migrate (NẾU CHƯA CHẠY) ```bash DB_HOST=127.0.0.1 php artisan migrate --force ``` --- ## 3. TEST ```bash DB_HOST=127.0.0.1 ./vendor/bin/pest ``` --- ## 4. VIỆC CẦN LÀM TIẾP THEO - [ ] **Notification:** Cảnh báo đợt thanh toán sắp đến hạn - [ ] **Export Excel:** Báo cáo công nợ khách hàng - [ ] **In ấn thực tế:** Tích hợp MailMergeService với action "In" trong ContractResource --- ## 5. TÀI KHOẢN - **Email:** admin@phuongtc.com - **Password:** 1Qazxsw2@!321 --- *Commit ngay lập tức trước khi tắt máy!* --- ## PHIÊN TIẾP THEO - PHÂN QUYỀN (CÒN DỞ) ### Đã có: - [x] Migration: permission_modules, role_templates, users columns - [x] Models: PermissionModule, RoleTemplate - [x] Command: `php artisan permissions:sync` - [x] User Model: getEffectivePermissions(), hasEffectivePermission(), can() override - [x] RoleTemplateResource: Form + Table + Pages (UI tạo mẫu nhóm) - [x] UserResource: Form + Table + Pages (UI gán quyền user) - [x] permissionActions trong 10 Resource ### CHƯA CÓ (Ưu tiên): 1. [ ] Áp dụng can() checks vào TẤT CẢ Resource - Chưa có canViewAny(), canCreate(), canEdit(), canDelete()... trong Resource - Cần thêm vào hoặc tạo base trait để auto check - Hiện tại tất cả user vẫn full quyền! 2. [ ] Tạo seeder/sample data cho role_templates - Admin: full quyền - Sales: contracts CRUD, customers CRUD, products view - Kế toán: payments CRUD, contracts view, reports view 3. [ ] Test User::can() override hoạt động đúng - Login → tính effective permissions → lưu session - Logout → xóa session - can('contracts.create') → true/false đúng ### Cách áp dụng can() vào Resource (gợi ý): ```php // Trong mỗi Resource class public static function canViewAny(): bool { return auth()->user()?->can('contracts.view') ?? false; } public static function canCreate(): bool { return auth()->user()?->can('contracts.create') ?? false; } public static function canEdit($record): bool { return auth()->user()?->can('contracts.update') ?? false; } public static function canDelete($record): bool { return auth()->user()?->can('contracts.delete') ?? false; } ``` ### Lưu ý: - Không chạy `php artisan permissions:sync` tự động (chạy tay khi thêm module) - Action mới mặc định TẮT - Layout RoleTemplateForm đã fix full width