3.4 KiB
3.4 KiB
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
paymentTemplatetừsalesPhasenế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)
DB_HOST=127.0.0.1 php artisan migrate --force
3. TEST
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ó:
- Migration: permission_modules, role_templates, users columns
- Models: PermissionModule, RoleTemplate
- Command:
php artisan permissions:sync - User Model: getEffectivePermissions(), hasEffectivePermission(), can() override
- RoleTemplateResource: Form + Table + Pages (UI tạo mẫu nhóm)
- UserResource: Form + Table + Pages (UI gán quyền user)
- permissionActions trong 10 Resource
CHƯA CÓ (Ưu tiên):
-
Á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!
-
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
-
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 ý):
// 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:synctự động (chạy tay khi thêm module) - Action mới mặc định TẮT
- Layout RoleTemplateForm đã fix full width