378c9939e616144a49565532be6b65106be45444
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m12s
User feedback 2026-05-07 (annotation screenshot):
1. "Lưu" thay "Lưu (đóng)" — KHÔNG đóng workspace, chỉ toast + invalidate sync
2. Thêm nút "Xóa phiếu" bottom — CHỈ Bản nháp (DangSoanThao), KHÔNG xóa Trả lại
(đã có lịch sử workflow). Soft-delete (AuditableEntity IsDeleted=true,
không xóa hoàn toàn DB).
3. Bỏ nút "Sửa header" + "Đóng" + "Xóa" header bar workspace mode (chuyển
xuống bottom action bar). Header bar chỉ còn nhóm display info + nút "Đóng"
cho non-workspace view (Danh sách / Duyệt readOnly).
4. Section 4 column header NCC: dùng s.supplierName (master) thay vì
displayName ?? supplierName (custom). displayName fallback sang title tooltip.
5. Section 3 row Xóa: nếu NCC đã có quotes (báo giá ở Section 4) → KHÔNG cho
xóa (tránh mất báo giá). Hiển thị icon disabled + tooltip "xóa báo giá
trước rồi mới xóa NCC".
Implementation:
~ PeDetailTabs.tsx (× 2 app)
- Header bar workspace mode actions: bỏ "Sửa header" Pencil button (có
inline edit Section 1 + pencil hover Panel 1 thay thế), bỏ "Xóa" (chuyển
xuống bottom). "Đóng" giữ chỉ cho readOnly + non-workspace view.
- useNavigate import bỏ (chỉ dùng còn ở CreateContractDialog scope local).
- Bottom action bar workspace + canEdit + !readOnly:
* LEFT: "Xóa phiếu" red button (chỉ phase === DangSoanThao) + confirm
dialog "soft-delete, không xóa hoàn toàn DB" + onDelete callback (existing
DELETE /pe/:id endpoint, AuditableEntity IsDeleted=true).
* CENTER: status text "✓ Các thay đổi đã tự động lưu khi chỉnh sửa..."
* RIGHT: "Lưu" ghost button → invalidate ['pe-detail', id] + ['pe-list']
+ toast "Đã lưu — sync server" (KHÔNG onBack — workspace stay open).
* RIGHT: "Lưu & Gửi Duyệt →" giữ nguyên (POST transitions).
- SuppliersTab row actions: hasQuotes computed (= ev.details.some(d =>
d.quotes.some(q => q.purchaseEvaluationSupplierId === s.id))). canDelete
= !isWinner && !hasQuotes. Render Trash button enabled vs disabled span
với tooltip "xóa báo giá trước".
- ItemsTab matrix column header: {s.supplierName} (was {s.displayName ??
s.supplierName}). title attr giữ displayName tooltip.
Verify: npm run build fe-admin + fe-user pass · 0 TS error · áp rule strict
verify khi remove import + button/condition logic changes.
UAT mode: skip dotnet test (FE-only), push ngay.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SOLUTION_ERP
Hệ thống quản lý Hợp đồng Nhà cung cấp / Thầu phụ / Tổ đội cho Công ty TNHH Xây dựng Solutions.
📘 AI context:
CLAUDE.md(pointer) →docs/CLAUDE.md(full)
Quick start (dev)
Yêu cầu: .NET 10 SDK, Node 20+, SQL Server (local hoặc qua Docker).
# 1. DB — chạy SQL Server qua Docker (nếu chưa có local)
docker compose up -d
# 2. Backend — migration + run Api (port 5443)
dotnet ef database update --project src/Backend/SolutionErp.Infrastructure --startup-project src/Backend/SolutionErp.Api
dotnet run --project src/Backend/SolutionErp.Api
# 3. Frontend admin (port 8082) — terminal mới
cd fe-admin
npm install
npm run dev
# 4. Frontend user (port 8080) — terminal mới
cd fe-user
npm install
npm run dev
Admin mặc định (sẽ seed sau Phase 1): admin@solutionerp.local / Admin@123456
Architecture
fe-admin (:8082) fe-user (:8080)
│ │
└────── /api proxy ──────┘
▼
SolutionErp.Api (:5443)
│
┌──────────────┼──────────────┐
▼ ▼ ▼
Application Domain Infrastructure ── SQL Server
Tech stack
- Backend: .NET 10 + Clean Architecture + CQRS (MediatR) + FluentValidation + AutoMapper + EF Core + ASP.NET Identity + JWT
- Frontend: React 18 + Vite + TypeScript + Tailwind + shadcn/ui + TanStack Query
- DB: SQL Server 2022
- Deploy: Windows Server + IIS
Roadmap
| Phase | Tuần | Focus |
|---|---|---|
| 0 Draft | T1 | Scaffold, parse FORM + QUY_TRINH |
| 1 Alpha Core | T2-4 | Auth, Permission, CRUD master |
| 2 Form Engine | T5-6 | Render template docx/xlsx |
| 3 Workflow | T7-9 | State machine 9 phase |
| 4 Report + Polish | T10-11 | Dashboard + Excel export |
| 5 Production | T12-13 | CI/CD IIS, UAT, go-live |
Chi tiết ở docs/changelog/migration-todos.md.
License
Proprietary — Công ty TNHH Xây dựng Solutions.
Description
Languages
C#
55%
TypeScript
42.7%
PowerShell
1.3%
JavaScript
0.3%
CSS
0.3%
Other
0.3%