Files
hqland-app/NEXT_SESSION.md

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 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)

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


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):

  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 ý):

// 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