chinh sua theo tieu chuan phan mem BDS_1

This commit is contained in:
2026-04-28 08:49:28 +00:00
parent e229da5e8c
commit 0712046f4b
18 changed files with 623 additions and 59 deletions

View File

@@ -1,7 +1,7 @@
# HQLAND - TRẠNG THÁI CODEBASE & LỘ TRÌNH PHÁT TRIỂN
> File này được tạo để lưu trữ ngữ cảnh dự án cho các phiên làm việc sau.
> **Cập nhật:** 24/04/2026
> **Cập nhật:** 28/04/2026
> **Dự án:** HQLand - Hệ thống quản lý Bất động sản
> **Stack:** Laravel 13 + Filament v5.5 (Schemas Architecture) + PostgreSQL + UUID
@@ -128,6 +128,7 @@
**Quan hệ:**
- `product()`, `customers()` (belongsToMany qua contract_customers)
- `paymentTemplate()` (belongsTo PaymentTemplate)
- `salesPhase()` (belongsTo SalesPhase)
- `appendices()`, `paymentSchedule()`, `scheduleItems()` (HasManyThrough)
- `payments()`, `paymentFines()`
@@ -214,6 +215,38 @@
---
### 3.6. Sales Phases (Đợt mở bán)
**Models:** `SalesPhase`, `SalesPhaseProduct` (pivot)
**SalesPhase:**
- `project_id`, `name`, `code`, `status` (Chuẩn bị | Đang mở bán | Tạm dừng | Đã đóng)
- `start_date`, `end_date`, `description`
- `payment_template_id` - Mẫu lịch thanh toán mặc định cho đợt
- `discount_policy` (JSONB) - Chính sách chiết khấu mặc định
**SalesPhaseProduct (pivot):**
- `sales_phase_id`, `product_id`
- `sale_price`, `land_value`, `foundation_value` - Giá bán riêng của đợt
- `discount_details` (JSONB) - Chiết khấu riêng cho từng sản phẩm trong đợt
- `status` (Còn hàng | Đã giữ | Đã bán | Khóa)
**Quan hệ:**
- `SalesPhase` belongsTo `Project`, belongsTo `PaymentTemplate`
- `SalesPhase` belongsToMany `Product` qua `sales_phase_products`
- `Product` belongsToMany `SalesPhase`
- `Project` hasMany `SalesPhase`
- `Contract` belongsTo `SalesPhase` (nullable)
**Logic tích hợp:**
- `ContractForm`: Khi chọn `sales_phase_id` + `product_id`, tự động populate giá trị tài chính từ `SalesPhaseProduct` pivot
- `CreateContract`: Nếu HĐ có `sales_phase_id` và không có `payment_template_id` trực tiếp, tự động lấy template từ `salesPhase->paymentTemplate`
- `SalesPhaseForm`: Repeater `phaseProducts` cho phép thêm sản phẩm với giá và chiết khấu riêng
**Filament Resources:**
- `SalesPhaseResource``SalesPhaseForm` + `SalesPhasesTable`
---
## 4. CÁC COMMAND IMPORT DỮ LIỆU
### `import:products-excel {file=sanpham.xlsx}`
@@ -269,6 +302,7 @@
- [x] **Discount Engine:** Tính toán tự động chiết khấu + hiển thị `final_value` trong ContractForm
- [x] **Calculation Pipeline:** Kiến trúc tính toán tường minh (Step-by-step) với làm tròn tại mỗi bước
- [x] **Form Templates:** Mail Merge Engine cho phiếu tính giá, HĐ, phụ lục - Admin tự tạo template
- [x] **Sales Phase Module:** Quản lý đợt mở bán, giá bán riêng theo đợt, tích hợp vào ContractForm
### 5.2. Đang dở / Cần tiếp tục
- [x] **Dashboard thống kê:** Đã tạo `ContractStatsOverview` + `UpcomingPaymentsTable`
@@ -334,6 +368,8 @@ DB_HOST=127.0.0.1 php artisan migrate
- `database/migrations/2026_04_24_083000_add_payment_template_id_to_contracts.php`
- `database/migrations/2026_04_28_013900_add_calculation_log_to_contracts.php`
- `database/migrations/2026_04_28_020000_create_form_templates_tables.php`
- `database/migrations/2026_04_28_030000_create_sales_phases_tables.php`
- `database/migrations/2026_04_28_031000_add_sales_phase_id_to_contracts.php`
### Services mới
- `app/Services/DiscountEngine.php` - Tính toán chiết khấu
@@ -346,20 +382,27 @@ DB_HOST=127.0.0.1 php artisan migrate
- `app/Filament/Resources/Appendices/` (Resource + Form + Table + Pages)
- `app/Filament/Resources/Settlements/` (Resource + Form + Table + Pages)
- `app/Filament/Resources/FormTemplates/` (Resource + Form + Table + Pages)
- `app/Filament/Resources/SalesPhases/` (Resource + Form + Table + Pages)
### Widgets mới
- `app/Filament/Widgets/ContractStatsOverview.php` - Dashboard tổng quan tài chính
- `app/Filament/Widgets/UpcomingPaymentsTable.php` - Danh sách đợt TT sắp đến hạn
### Models mới
- `app/Models/SalesPhase.php` - Đợt mở bán
- `app/Models/SalesPhaseProduct.php` - Pivot model giá bán theo đợt
### Models sửa đổi
- `app/Models/Contract.php` - Thêm `paymentTemplate()`, accessor `final_value`
- `app/Models/Contract.php` - Thêm `paymentTemplate()`, `salesPhase()`, accessor `final_value`
- `app/Models/PaymentScheduleItem.php` - Thêm accessor `paid_amount`, `remaining_amount`
- `app/Models/Product.php` - Thêm `salesPhases()`, `activeSalesPhase()`
- `app/Models/Project.php` - Thêm `salesPhases()`
- `app/Models/User.php` - Thêm `FilamentUser` interface để user có quyền truy cập panel
### Forms/Tables sửa đổi
- `app/Filament/Resources/Contracts/ContractResource.php` - Fix action `EditAction` namespace (`Filament\Actions\EditAction`)
- `app/Filament/Resources/Contracts/Schemas/ContractForm.php` - Fix `payment_template_id`, thêm `final_value_display`
- `app/Filament/Resources/Contracts/Pages/CreateContract.php` - Refactor dùng `$contract->payment_template_id`
- `app/Filament/Resources/Contracts/Schemas/ContractForm.php` - Fix `payment_template_id`, thêm `final_value_display`, thêm `sales_phase_id` với auto-populate giá từ SalesPhaseProduct
- `app/Filament/Resources/Contracts/Pages/CreateContract.php` - Refactor dùng `$contract->payment_template_id`, fallback lấy từ `salesPhase->paymentTemplate`
- `app/Filament/Resources/Payments/Schemas/PaymentForm.php` - Thêm validation amount + helper text công nợ
- `app/Filament/Resources/Payments/Tables/PaymentsTable.php` - Thêm cột Loại đợt, Đối soát, Còn thiếu
- `app/Filament/Resources/Payments/PaymentResource.php` - Thêm eager load `scheduleItem.payments`