From c869d2617d6426e0c46723a6914db37c14fe7576 Mon Sep 17 00:00:00 2001 From: pqhuy1987 Date: Thu, 11 Jun 2026 17:14:06 +0700 Subject: [PATCH] [CLAUDE] PurchaseEvaluation: rename 71 WorkItems theo format PMH anh Kiet FDC chot (MAT-n/SUB-n/MEP-SUB-n/MEP-EQU-n + ten "STT nhom ten") + FE sort numeric - anh Kiet 16:59: "MA CV gom chu MEP-SUB-1 roi ten 1 MEP Sub MEP (Full) - dung kieu vay". - DbInitializer seed tuples 71 ma moi (VT->MAT, TP->SUB, MEP-0n->MEP-SUB-n, TB->MEP-EQU-n). - scripts/s59-rename-workitems-pmh.sql DA CHAY prod + LocalDB Dev TRUOC push (UPDATE giu Id, 71/71, OLD-CODES=0, verify JSON qua API prod tieng Viet nguyen ven). - FE x2 app (SHA256 mirror): PeWorkspaceCreateView + PeHeaderForm sort numeric-aware (ma khong pad -> string-sort loan "10"<"2") + tree Panel 1 workItemName numeric:true. - scripts/master-import-data.generated.md sync 71 dong W| + note mapping. --- fe-admin/src/components/pe/PeHeaderForm.tsx | 6 +- .../components/pe/PeWorkspaceCreateView.tsx | 7 +- .../pages/pe/PurchaseEvaluationsListPage.tsx | 3 +- fe-user/src/components/pe/PeHeaderForm.tsx | 6 +- .../components/pe/PeWorkspaceCreateView.tsx | 7 +- .../pages/pe/PurchaseEvaluationsListPage.tsx | 3 +- scripts/master-import-data.generated.md | 146 ++++++++--------- scripts/s59-rename-workitems-pmh.sql | 109 +++++++++++++ .../Persistence/DbInitializer.cs | 147 +++++++++--------- 9 files changed, 286 insertions(+), 148 deletions(-) create mode 100644 scripts/s59-rename-workitems-pmh.sql diff --git a/fe-admin/src/components/pe/PeHeaderForm.tsx b/fe-admin/src/components/pe/PeHeaderForm.tsx index 519a68f..ad354b4 100644 --- a/fe-admin/src/components/pe/PeHeaderForm.tsx +++ b/fe-admin/src/components/pe/PeHeaderForm.tsx @@ -59,10 +59,14 @@ export function PeHeaderForm({ }) // S57bis — list Hạng mục công việc (active only, mirror PeWorkspaceCreateView). + // S59 — sort numeric-aware client (mã PMH không pad số — mirror CreateView). const workItems = useQuery({ queryKey: ['catalogs', 'work-items'], queryFn: async () => (await api.get('/catalogs/work-items')).data, - select: rows => rows.filter(r => r.isActive !== false), + select: rows => rows + .filter(r => r.isActive !== false) + .sort((a, b) => (a.category ?? '').localeCompare(b.category ?? '', 'vi') + || a.code.localeCompare(b.code, 'vi', { numeric: true })), }) const [form, setForm] = useState({ diff --git a/fe-admin/src/components/pe/PeWorkspaceCreateView.tsx b/fe-admin/src/components/pe/PeWorkspaceCreateView.tsx index 67a5bbe..351ad93 100644 --- a/fe-admin/src/components/pe/PeWorkspaceCreateView.tsx +++ b/fe-admin/src/components/pe/PeWorkspaceCreateView.tsx @@ -87,10 +87,15 @@ export function PeWorkspaceCreateView({ }) // S57bis — list Hạng mục công việc (active only — filter client nếu BE trả isActive). + // S59 — sort numeric-aware client: mã PMH không pad số (MAT-1..16, MEP-SUB-1…) + // → BE OrderBy(Code) string xếp "MAT-10" trước "MAT-2"; re-sort {numeric:true}. const workItems = useQuery({ queryKey: ['catalogs', 'work-items'], queryFn: async () => (await api.get('/catalogs/work-items')).data, - select: rows => rows.filter(r => r.isActive !== false), + select: rows => rows + .filter(r => r.isActive !== false) + .sort((a, b) => (a.category ?? '').localeCompare(b.category ?? '', 'vi') + || a.code.localeCompare(b.code, 'vi', { numeric: true })), }) // Mig 23 — fetch list quy trình duyệt V2 (filter ApplicableType khớp defaultType). diff --git a/fe-admin/src/pages/pe/PurchaseEvaluationsListPage.tsx b/fe-admin/src/pages/pe/PurchaseEvaluationsListPage.tsx index 95b0113..10f02aa 100644 --- a/fe-admin/src/pages/pe/PurchaseEvaluationsListPage.tsx +++ b/fe-admin/src/pages/pe/PurchaseEvaluationsListPage.tsx @@ -170,7 +170,8 @@ export function PurchaseEvaluationsListPage() { for (const yg of arr) { yg.projects.sort((a, b) => a.projectName.localeCompare(b.projectName, 'vi')) for (const pg of yg.projects) { - pg.workItems.sort((a, b) => a.workItemName.localeCompare(b.workItemName, 'vi')) + // S59 — numeric:true vì tên PMH bắt đầu bằng STT không pad ("2 Mat…" < "10 Mat…") + pg.workItems.sort((a, b) => a.workItemName.localeCompare(b.workItemName, 'vi', { numeric: true })) for (const wg of pg.workItems) { wg.items.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()) } diff --git a/fe-user/src/components/pe/PeHeaderForm.tsx b/fe-user/src/components/pe/PeHeaderForm.tsx index 519a68f..ad354b4 100644 --- a/fe-user/src/components/pe/PeHeaderForm.tsx +++ b/fe-user/src/components/pe/PeHeaderForm.tsx @@ -59,10 +59,14 @@ export function PeHeaderForm({ }) // S57bis — list Hạng mục công việc (active only, mirror PeWorkspaceCreateView). + // S59 — sort numeric-aware client (mã PMH không pad số — mirror CreateView). const workItems = useQuery({ queryKey: ['catalogs', 'work-items'], queryFn: async () => (await api.get('/catalogs/work-items')).data, - select: rows => rows.filter(r => r.isActive !== false), + select: rows => rows + .filter(r => r.isActive !== false) + .sort((a, b) => (a.category ?? '').localeCompare(b.category ?? '', 'vi') + || a.code.localeCompare(b.code, 'vi', { numeric: true })), }) const [form, setForm] = useState({ diff --git a/fe-user/src/components/pe/PeWorkspaceCreateView.tsx b/fe-user/src/components/pe/PeWorkspaceCreateView.tsx index 67a5bbe..351ad93 100644 --- a/fe-user/src/components/pe/PeWorkspaceCreateView.tsx +++ b/fe-user/src/components/pe/PeWorkspaceCreateView.tsx @@ -87,10 +87,15 @@ export function PeWorkspaceCreateView({ }) // S57bis — list Hạng mục công việc (active only — filter client nếu BE trả isActive). + // S59 — sort numeric-aware client: mã PMH không pad số (MAT-1..16, MEP-SUB-1…) + // → BE OrderBy(Code) string xếp "MAT-10" trước "MAT-2"; re-sort {numeric:true}. const workItems = useQuery({ queryKey: ['catalogs', 'work-items'], queryFn: async () => (await api.get('/catalogs/work-items')).data, - select: rows => rows.filter(r => r.isActive !== false), + select: rows => rows + .filter(r => r.isActive !== false) + .sort((a, b) => (a.category ?? '').localeCompare(b.category ?? '', 'vi') + || a.code.localeCompare(b.code, 'vi', { numeric: true })), }) // Mig 23 — fetch list quy trình duyệt V2 (filter ApplicableType khớp defaultType). diff --git a/fe-user/src/pages/pe/PurchaseEvaluationsListPage.tsx b/fe-user/src/pages/pe/PurchaseEvaluationsListPage.tsx index 95b0113..10f02aa 100644 --- a/fe-user/src/pages/pe/PurchaseEvaluationsListPage.tsx +++ b/fe-user/src/pages/pe/PurchaseEvaluationsListPage.tsx @@ -170,7 +170,8 @@ export function PurchaseEvaluationsListPage() { for (const yg of arr) { yg.projects.sort((a, b) => a.projectName.localeCompare(b.projectName, 'vi')) for (const pg of yg.projects) { - pg.workItems.sort((a, b) => a.workItemName.localeCompare(b.workItemName, 'vi')) + // S59 — numeric:true vì tên PMH bắt đầu bằng STT không pad ("2 Mat…" < "10 Mat…") + pg.workItems.sort((a, b) => a.workItemName.localeCompare(b.workItemName, 'vi', { numeric: true })) for (const wg of pg.workItems) { wg.items.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()) } diff --git a/scripts/master-import-data.generated.md b/scripts/master-import-data.generated.md index 5068ca0..1a9a82d 100644 --- a/scripts/master-import-data.generated.md +++ b/scripts/master-import-data.generated.md @@ -67,77 +67,81 @@ P|ZOTE01|2025|Zotefoams new manufacturing plant|Building and building service|Zo # PROJECTS_TOTAL=62 ## WORKITEMS | Code | Category | Name -W|VT-01|Vật tư - Xây dựng|Bê tông -W|VT-02|Vật tư - Xây dựng|Thép cây, Thép lưới hàn -W|VT-03|Vật tư - Xây dựng|Cọc ly tâm -W|VT-04|Vật tư - Xây dựng|Cống ly tâm -W|VT-05|Vật tư - Xây dựng|Cừ tràm -W|VT-06|Vật tư - Xây dựng|Kim loại ( rọ đầu cọc, V mạ kẽm, Vinox, bản mã…) -W|VT-07|Vật tư - Xây dựng|Nắp gang -W|VT-08|Vật tư - Xây dựng|Gạch xây, Xi măng, cát, đá, gạch trồng cỏ -W|VT-09|Vật tư - Xây dựng|Gạch trồng cỏ, gạch trang trí… -W|VT-10|Vật tư - Xây dựng|Gạch ốp lát -W|VT-11|Vật tư - Xây dựng|Ván khuôn -W|VT-12|Vật tư - Xây dựng|Sơn nước -W|VT-13|Vật tư - Xây dựng|Phụ gia (sika, vinkem, Gps…) -W|VT-14|Vật tư - Xây dựng|PVC, vải địa -W|VT-15|Vật tư - Xây dựng|Nẹp inox, nẹp nhựa -W|VT-16|Vật tư - Xây dựng|Khác -W|TP-01|Thầu phụ - Xây dựng|Thầu phụ cọc ( cơ, robot) -W|TP-02|Thầu phụ - Xây dựng|Thầu phụ cọc Khoan nhồi -W|TP-03|Thầu phụ - Xây dựng|Thầu phụ cọc CDM -W|TP-04|Thầu phụ - Xây dựng|Kết cấu thép -W|TP-05|Thầu phụ - Xây dựng|Cáp dự ứng lực -W|TP-06|Thầu phụ - Xây dựng|Panel -W|TP-07|Thầu phụ - Xây dựng|Nhôm kính, alu -W|TP-08|Thầu phụ - Xây dựng|Cửa thép, Cửa cuốn, sectional door -W|TP-09|Thầu phụ - Xây dựng|Cửa gỗ -W|TP-10|Thầu phụ - Xây dựng|Cơ khí hoàn thiện lan can, cầu thang -W|TP-11|Thầu phụ - Xây dựng|Dây cứu sinh -W|TP-12|Thầu phụ - Xây dựng|Nội thất -W|TP-13|Thầu phụ - Xây dựng|Vách trần thạch cao -W|TP-14|Thầu phụ - Xây dựng|Vách ngăn di động -W|TP-15|Thầu phụ - Xây dựng|Vách ngăn vệ sinh -W|TP-16|Thầu phụ - Xây dựng|Granit -W|TP-17|Thầu phụ - Xây dựng|Hoàn thiện sàn thảm, vinyl -W|TP-18|Thầu phụ - Xây dựng|Chống mối -W|TP-19|Thầu phụ - Xây dựng|Chống thấm -W|TP-20|Thầu phụ - Xây dựng|Sơn PU, Epoxy, liquid -W|TP-21|Thầu phụ - Xây dựng|Dock Leveler. -W|TP-22|Thầu phụ - Xây dựng|Cẩu trục -W|TP-23|Thầu phụ - Xây dựng|Trạm cân -W|TP-24|Thầu phụ - Xây dựng|Thang máy, thang hàng, … -W|TP-25|Thầu phụ - Xây dựng|Sàn nâng. -W|TP-26|Thầu phụ - Xây dựng|Landscape -W|TP-27|Thầu phụ - Xây dựng|Cổng xếp. -W|TP-28|Thầu phụ - Xây dựng|Logo, Bảng hiệu. -W|TP-29|Thầu phụ - Xây dựng|TP thi công Màng nhựa -W|TP-30|Thầu phụ - Xây dựng|Khác -W|MEP-01|MEP|MEP (Full) -W|MEP-02|MEP|Hệ thống trung thế -W|MEP-03|MEP|PCCC (Phòng cháy chữa cháy). -W|MEP-04|MEP|Hệ thống điện, điện nhẹ -W|MEP-05|MEP|Hệ thống HVAC, Utility (Thông gió & Điều hòa không khí & Phù trợ). -W|MEP-06|MEP|Hệ thống cấp thoát nước -W|MEP-07|MEP|Hệ thống xử lý nước thải -W|MEP-08|MEP|Hệ thống solar -W|MEP-09|MEP|Khác -W|TB-01|Thiết bị|Máy biến áp -W|TB-02|Thiết bị|Tủ điện -W|TB-03|Thiết bị|Tủ trung thế. -W|TB-04|Thiết bị|Busway -W|TB-05|Thiết bị|Cáp điện -W|TB-06|Thiết bị|Thiết bị Utility (Máy nén khí, Hút bụi hút mùi, Boiler,...) -W|TB-07|Thiết bị|Máy lạnh -W|TB-08|Thiết bị|Ống thép, inox -W|TB-09|Thiết bị|Thang máng cáp -W|TB-10|Thiết bị|Ống PVC, HDPE -W|TB-11|Thiết bị|Thiết bị báo cháy -W|TB-12|Thiết bị|Đèn (đèn chiếu sáng, đèn năng lượng, đèn exit….) -W|TB-13|Thiết bị|Thiết bị chữa cháy (Sprinkler, Chữa cháy khí, FM200,…) -W|TB-14|Thiết bị|Bơm (bơm PCCC, Bơm nước…) -W|TB-15|Thiết bị|Bồn nước, Thiết bị vệ sinh -W|TB-16|Thiết bị|Khác +# S59 (2026-06-11) RENAMED theo format PMH anh Kiệt FDC chốt ("MÃ CV gồm chữ MEP-SUB-1 +# rồi tên 1 MEP Sub MEP (Full) — đúng kiểu vậy"): Code = nhóm+STT không pad, Name = +# "STT nhóm tên". Mapping cũ→mới: VT-nn→MAT-n · TP-nn→SUB-n · MEP-0n→MEP-SUB-n · +# TB-nn→MEP-EQU-n (scripts/s59-rename-workitems-pmh.sql — UPDATE giữ Id, prod+Dev). +W|MAT-1|Vật tư - Xây dựng|1 Mat Bê tông +W|MAT-2|Vật tư - Xây dựng|2 Mat Thép cây, Thép lưới hàn +W|MAT-3|Vật tư - Xây dựng|3 Mat Cọc ly tâm +W|MAT-4|Vật tư - Xây dựng|4 Mat Cống ly tâm +W|MAT-5|Vật tư - Xây dựng|5 Mat Cừ tràm +W|MAT-6|Vật tư - Xây dựng|6 Mat Kim loại ( rọ đầu cọc, V mạ kẽm, Vinox, bản mã…) +W|MAT-7|Vật tư - Xây dựng|7 Mat Nắp gang +W|MAT-8|Vật tư - Xây dựng|8 Mat Gạch xây, Xi măng, cát, đá, gạch trồng cỏ +W|MAT-9|Vật tư - Xây dựng|9 Mat Gạch trồng cỏ, gạch trang trí… +W|MAT-10|Vật tư - Xây dựng|10 Mat Gạch ốp lát +W|MAT-11|Vật tư - Xây dựng|11 Mat Ván khuôn +W|MAT-12|Vật tư - Xây dựng|12 Mat Sơn nước +W|MAT-13|Vật tư - Xây dựng|13 Mat Phụ gia (sika, vinkem, Gps…) +W|MAT-14|Vật tư - Xây dựng|14 Mat PVC, vải địa +W|MAT-15|Vật tư - Xây dựng|15 Mat Nẹp inox, nẹp nhựa +W|MAT-16|Vật tư - Xây dựng|16 Mat Khác +W|SUB-1|Thầu phụ - Xây dựng|1 Sub Thầu phụ cọc ( cơ, robot) +W|SUB-2|Thầu phụ - Xây dựng|2 Sub Thầu phụ cọc Khoan nhồi +W|SUB-3|Thầu phụ - Xây dựng|3 Sub Thầu phụ cọc CDM +W|SUB-4|Thầu phụ - Xây dựng|4 Sub Kết cấu thép +W|SUB-5|Thầu phụ - Xây dựng|5 Sub Cáp dự ứng lực +W|SUB-6|Thầu phụ - Xây dựng|6 Sub Panel +W|SUB-7|Thầu phụ - Xây dựng|7 Sub Nhôm kính, alu +W|SUB-8|Thầu phụ - Xây dựng|8 Sub Cửa thép, Cửa cuốn, sectional door +W|SUB-9|Thầu phụ - Xây dựng|9 Sub Cửa gỗ +W|SUB-10|Thầu phụ - Xây dựng|10 Sub Cơ khí hoàn thiện lan can, cầu thang +W|SUB-11|Thầu phụ - Xây dựng|11 Sub Dây cứu sinh +W|SUB-12|Thầu phụ - Xây dựng|12 Sub Nội thất +W|SUB-13|Thầu phụ - Xây dựng|13 Sub Vách trần thạch cao +W|SUB-14|Thầu phụ - Xây dựng|14 Sub Vách ngăn di động +W|SUB-15|Thầu phụ - Xây dựng|15 Sub Vách ngăn vệ sinh +W|SUB-16|Thầu phụ - Xây dựng|16 Sub Granit +W|SUB-17|Thầu phụ - Xây dựng|17 Sub Hoàn thiện sàn thảm, vinyl +W|SUB-18|Thầu phụ - Xây dựng|18 Sub Chống mối +W|SUB-19|Thầu phụ - Xây dựng|19 Sub Chống thấm +W|SUB-20|Thầu phụ - Xây dựng|20 Sub Sơn PU, Epoxy, liquid +W|SUB-21|Thầu phụ - Xây dựng|21 Sub Dock Leveler. +W|SUB-22|Thầu phụ - Xây dựng|22 Sub Cẩu trục +W|SUB-23|Thầu phụ - Xây dựng|23 Sub Trạm cân +W|SUB-24|Thầu phụ - Xây dựng|24 Sub Thang máy, thang hàng, … +W|SUB-25|Thầu phụ - Xây dựng|25 Sub Sàn nâng. +W|SUB-26|Thầu phụ - Xây dựng|26 Sub Landscape +W|SUB-27|Thầu phụ - Xây dựng|27 Sub Cổng xếp. +W|SUB-28|Thầu phụ - Xây dựng|28 Sub Logo, Bảng hiệu. +W|SUB-29|Thầu phụ - Xây dựng|29 Sub TP thi công Màng nhựa +W|SUB-30|Thầu phụ - Xây dựng|30 Sub Khác +W|MEP-SUB-1|MEP|1 MEP Sub MEP (Full) +W|MEP-SUB-2|MEP|2 MEP Sub Hệ thống trung thế +W|MEP-SUB-3|MEP|3 MEP Sub PCCC (Phòng cháy chữa cháy). +W|MEP-SUB-4|MEP|4 MEP Sub Hệ thống điện, điện nhẹ +W|MEP-SUB-5|MEP|5 MEP Sub Hệ thống HVAC, Utility (Thông gió & Điều hòa không khí & Phù trợ). +W|MEP-SUB-6|MEP|6 MEP Sub Hệ thống cấp thoát nước +W|MEP-SUB-7|MEP|7 MEP Sub Hệ thống xử lý nước thải +W|MEP-SUB-8|MEP|8 MEP Sub Hệ thống solar +W|MEP-SUB-9|MEP|9 MEP Sub Khác +W|MEP-EQU-1|Thiết bị|1 MEP _ Equ Máy biến áp +W|MEP-EQU-2|Thiết bị|2 MEP _ Equ Tủ điện +W|MEP-EQU-3|Thiết bị|3 MEP _ Equ Tủ trung thế. +W|MEP-EQU-4|Thiết bị|4 MEP _ Equ Busway +W|MEP-EQU-5|Thiết bị|5 MEP _ Equ Cáp điện +W|MEP-EQU-6|Thiết bị|6 MEP _ Equ Thiết bị Utility (Máy nén khí, Hút bụi hút mùi, Boiler,...) +W|MEP-EQU-7|Thiết bị|7 MEP _ Equ Máy lạnh +W|MEP-EQU-8|Thiết bị|8 MEP _ Equ Ống thép, inox +W|MEP-EQU-9|Thiết bị|9 MEP _ Equ Thang máng cáp +W|MEP-EQU-10|Thiết bị|10 MEP _ Equ Ống PVC, HDPE +W|MEP-EQU-11|Thiết bị|11 MEP _ Equ Thiết bị báo cháy +W|MEP-EQU-12|Thiết bị|12 MEP _ Equ Đèn (đèn chiếu sáng, đèn năng lượng, đèn exit….) +W|MEP-EQU-13|Thiết bị|13 MEP _ Equ Thiết bị chữa cháy (Sprinkler, Chữa cháy khí, FM200,…) +W|MEP-EQU-14|Thiết bị|14 MEP _ Equ Bơm (bơm PCCC, Bơm nước…) +W|MEP-EQU-15|Thiết bị|15 MEP _ Equ Bồn nước, Thiết bị vệ sinh +W|MEP-EQU-16|Thiết bị|16 MEP _ Equ Khác # WORKITEMS_TOTAL=71 (VatTu=16 ThauPhu=30 MEP=9 ThietBi=16) ## SUPPLIERS (3) | Code | Name | Type(NhaThauPhu/NhaCungCap) | TaxCode | Phone | Email | Address | ContactPerson | NotePacked diff --git a/scripts/s59-rename-workitems-pmh.sql b/scripts/s59-rename-workitems-pmh.sql new file mode 100644 index 0000000..a93f6ef --- /dev/null +++ b/scripts/s59-rename-workitems-pmh.sql @@ -0,0 +1,109 @@ +-- ============================================================================ +-- S59 đợt 3 (2026-06-11) — RENAME 71 WorkItems theo format PMH anh Kiệt FDC chốt +-- (Zalo 16:59 "MÃ CV gồm chữ MEP-SUB-1 rồi tên 1 MEP Sub MEP (Full) — đúng kiểu vậy"): +-- Mã CV = nhóm + STT không pad: MAT-n / SUB-n / MEP-SUB-n / MEP-EQU-n +-- Tên CV = "STT nhóm tên": "1 Mat Bê tông", "1 MEP Sub MEP (Full)"… +-- UPDATE giữ nguyên Id (phiếu PE/2026/A/001 vừa tạo trỏ WorkItemId vẫn đúng). +-- PHẢI chạy TRƯỚC khi deploy commit seed mới (per-code idempotent: nếu deploy +-- trước, app restart thấy mã mới "thiếu" sẽ ADD 71 row mới = 142). +-- Run: sqlcmd -S .\SQLEXPRESS -d SolutionErp -i s59-rename-workitems-pmh.sql +-- ============================================================================ +SET QUOTED_IDENTIFIER ON; +SET NOCOUNT ON; + +PRINT '=== BEFORE ==='; +SELECT 'TOTAL' AS T, COUNT(*) AS C FROM WorkItems +UNION ALL SELECT 'OLD-CODES', COUNT(*) FROM WorkItems WHERE Code LIKE 'VT-%' OR Code LIKE 'TP-%' OR (Code LIKE 'MEP-0%') OR Code LIKE 'TB-%'; + +BEGIN TRANSACTION; + +-- VẬT TƯ - XÂY DỰNG: VT-01..16 -> MAT-1..16 +UPDATE WorkItems SET Code=N'MAT-1', Name=N'1 Mat Bê tông' WHERE Code=N'VT-01'; +UPDATE WorkItems SET Code=N'MAT-2', Name=N'2 Mat Thép cây, Thép lưới hàn' WHERE Code=N'VT-02'; +UPDATE WorkItems SET Code=N'MAT-3', Name=N'3 Mat Cọc ly tâm' WHERE Code=N'VT-03'; +UPDATE WorkItems SET Code=N'MAT-4', Name=N'4 Mat Cống ly tâm' WHERE Code=N'VT-04'; +UPDATE WorkItems SET Code=N'MAT-5', Name=N'5 Mat Cừ tràm' WHERE Code=N'VT-05'; +UPDATE WorkItems SET Code=N'MAT-6', Name=N'6 Mat Kim loại ( rọ đầu cọc, V mạ kẽm, Vinox, bản mã…)' WHERE Code=N'VT-06'; +UPDATE WorkItems SET Code=N'MAT-7', Name=N'7 Mat Nắp gang' WHERE Code=N'VT-07'; +UPDATE WorkItems SET Code=N'MAT-8', Name=N'8 Mat Gạch xây, Xi măng, cát, đá, gạch trồng cỏ' WHERE Code=N'VT-08'; +UPDATE WorkItems SET Code=N'MAT-9', Name=N'9 Mat Gạch trồng cỏ, gạch trang trí…' WHERE Code=N'VT-09'; +UPDATE WorkItems SET Code=N'MAT-10', Name=N'10 Mat Gạch ốp lát' WHERE Code=N'VT-10'; +UPDATE WorkItems SET Code=N'MAT-11', Name=N'11 Mat Ván khuôn' WHERE Code=N'VT-11'; +UPDATE WorkItems SET Code=N'MAT-12', Name=N'12 Mat Sơn nước' WHERE Code=N'VT-12'; +UPDATE WorkItems SET Code=N'MAT-13', Name=N'13 Mat Phụ gia (sika, vinkem, Gps…)' WHERE Code=N'VT-13'; +UPDATE WorkItems SET Code=N'MAT-14', Name=N'14 Mat PVC, vải địa' WHERE Code=N'VT-14'; +UPDATE WorkItems SET Code=N'MAT-15', Name=N'15 Mat Nẹp inox, nẹp nhựa' WHERE Code=N'VT-15'; +UPDATE WorkItems SET Code=N'MAT-16', Name=N'16 Mat Khác' WHERE Code=N'VT-16'; + +-- THẦU PHỤ - XÂY DỰNG: TP-01..30 -> SUB-1..30 +UPDATE WorkItems SET Code=N'SUB-1', Name=N'1 Sub Thầu phụ cọc ( cơ, robot)' WHERE Code=N'TP-01'; +UPDATE WorkItems SET Code=N'SUB-2', Name=N'2 Sub Thầu phụ cọc Khoan nhồi' WHERE Code=N'TP-02'; +UPDATE WorkItems SET Code=N'SUB-3', Name=N'3 Sub Thầu phụ cọc CDM' WHERE Code=N'TP-03'; +UPDATE WorkItems SET Code=N'SUB-4', Name=N'4 Sub Kết cấu thép' WHERE Code=N'TP-04'; +UPDATE WorkItems SET Code=N'SUB-5', Name=N'5 Sub Cáp dự ứng lực' WHERE Code=N'TP-05'; +UPDATE WorkItems SET Code=N'SUB-6', Name=N'6 Sub Panel' WHERE Code=N'TP-06'; +UPDATE WorkItems SET Code=N'SUB-7', Name=N'7 Sub Nhôm kính, alu' WHERE Code=N'TP-07'; +UPDATE WorkItems SET Code=N'SUB-8', Name=N'8 Sub Cửa thép, Cửa cuốn, sectional door' WHERE Code=N'TP-08'; +UPDATE WorkItems SET Code=N'SUB-9', Name=N'9 Sub Cửa gỗ' WHERE Code=N'TP-09'; +UPDATE WorkItems SET Code=N'SUB-10', Name=N'10 Sub Cơ khí hoàn thiện lan can, cầu thang' WHERE Code=N'TP-10'; +UPDATE WorkItems SET Code=N'SUB-11', Name=N'11 Sub Dây cứu sinh' WHERE Code=N'TP-11'; +UPDATE WorkItems SET Code=N'SUB-12', Name=N'12 Sub Nội thất' WHERE Code=N'TP-12'; +UPDATE WorkItems SET Code=N'SUB-13', Name=N'13 Sub Vách trần thạch cao' WHERE Code=N'TP-13'; +UPDATE WorkItems SET Code=N'SUB-14', Name=N'14 Sub Vách ngăn di động' WHERE Code=N'TP-14'; +UPDATE WorkItems SET Code=N'SUB-15', Name=N'15 Sub Vách ngăn vệ sinh' WHERE Code=N'TP-15'; +UPDATE WorkItems SET Code=N'SUB-16', Name=N'16 Sub Granit' WHERE Code=N'TP-16'; +UPDATE WorkItems SET Code=N'SUB-17', Name=N'17 Sub Hoàn thiện sàn thảm, vinyl' WHERE Code=N'TP-17'; +UPDATE WorkItems SET Code=N'SUB-18', Name=N'18 Sub Chống mối' WHERE Code=N'TP-18'; +UPDATE WorkItems SET Code=N'SUB-19', Name=N'19 Sub Chống thấm' WHERE Code=N'TP-19'; +UPDATE WorkItems SET Code=N'SUB-20', Name=N'20 Sub Sơn PU, Epoxy, liquid' WHERE Code=N'TP-20'; +UPDATE WorkItems SET Code=N'SUB-21', Name=N'21 Sub Dock Leveler.' WHERE Code=N'TP-21'; +UPDATE WorkItems SET Code=N'SUB-22', Name=N'22 Sub Cẩu trục' WHERE Code=N'TP-22'; +UPDATE WorkItems SET Code=N'SUB-23', Name=N'23 Sub Trạm cân' WHERE Code=N'TP-23'; +UPDATE WorkItems SET Code=N'SUB-24', Name=N'24 Sub Thang máy, thang hàng, …' WHERE Code=N'TP-24'; +UPDATE WorkItems SET Code=N'SUB-25', Name=N'25 Sub Sàn nâng.' WHERE Code=N'TP-25'; +UPDATE WorkItems SET Code=N'SUB-26', Name=N'26 Sub Landscape' WHERE Code=N'TP-26'; +UPDATE WorkItems SET Code=N'SUB-27', Name=N'27 Sub Cổng xếp.' WHERE Code=N'TP-27'; +UPDATE WorkItems SET Code=N'SUB-28', Name=N'28 Sub Logo, Bảng hiệu.' WHERE Code=N'TP-28'; +UPDATE WorkItems SET Code=N'SUB-29', Name=N'29 Sub TP thi công Màng nhựa' WHERE Code=N'TP-29'; +UPDATE WorkItems SET Code=N'SUB-30', Name=N'30 Sub Khác' WHERE Code=N'TP-30'; + +-- MEP: MEP-01..09 -> MEP-SUB-1..9 (chạy TRƯỚC khối MEP-EQU để LIKE 'MEP-0%' không đụng) +UPDATE WorkItems SET Code=N'MEP-SUB-1', Name=N'1 MEP Sub MEP (Full)' WHERE Code=N'MEP-01'; +UPDATE WorkItems SET Code=N'MEP-SUB-2', Name=N'2 MEP Sub Hệ thống trung thế' WHERE Code=N'MEP-02'; +UPDATE WorkItems SET Code=N'MEP-SUB-3', Name=N'3 MEP Sub PCCC (Phòng cháy chữa cháy).' WHERE Code=N'MEP-03'; +UPDATE WorkItems SET Code=N'MEP-SUB-4', Name=N'4 MEP Sub Hệ thống điện, điện nhẹ' WHERE Code=N'MEP-04'; +UPDATE WorkItems SET Code=N'MEP-SUB-5', Name=N'5 MEP Sub Hệ thống HVAC, Utility (Thông gió & Điều hòa không khí & Phù trợ).' WHERE Code=N'MEP-05'; +UPDATE WorkItems SET Code=N'MEP-SUB-6', Name=N'6 MEP Sub Hệ thống cấp thoát nước' WHERE Code=N'MEP-06'; +UPDATE WorkItems SET Code=N'MEP-SUB-7', Name=N'7 MEP Sub Hệ thống xử lý nước thải' WHERE Code=N'MEP-07'; +UPDATE WorkItems SET Code=N'MEP-SUB-8', Name=N'8 MEP Sub Hệ thống solar' WHERE Code=N'MEP-08'; +UPDATE WorkItems SET Code=N'MEP-SUB-9', Name=N'9 MEP Sub Khác' WHERE Code=N'MEP-09'; + +-- THIẾT BỊ: TB-01..16 -> MEP-EQU-1..16 +UPDATE WorkItems SET Code=N'MEP-EQU-1', Name=N'1 MEP _ Equ Máy biến áp' WHERE Code=N'TB-01'; +UPDATE WorkItems SET Code=N'MEP-EQU-2', Name=N'2 MEP _ Equ Tủ điện' WHERE Code=N'TB-02'; +UPDATE WorkItems SET Code=N'MEP-EQU-3', Name=N'3 MEP _ Equ Tủ trung thế.' WHERE Code=N'TB-03'; +UPDATE WorkItems SET Code=N'MEP-EQU-4', Name=N'4 MEP _ Equ Busway' WHERE Code=N'TB-04'; +UPDATE WorkItems SET Code=N'MEP-EQU-5', Name=N'5 MEP _ Equ Cáp điện' WHERE Code=N'TB-05'; +UPDATE WorkItems SET Code=N'MEP-EQU-6', Name=N'6 MEP _ Equ Thiết bị Utility (Máy nén khí, Hút bụi hút mùi, Boiler,...)' WHERE Code=N'TB-06'; +UPDATE WorkItems SET Code=N'MEP-EQU-7', Name=N'7 MEP _ Equ Máy lạnh' WHERE Code=N'TB-07'; +UPDATE WorkItems SET Code=N'MEP-EQU-8', Name=N'8 MEP _ Equ Ống thép, inox' WHERE Code=N'TB-08'; +UPDATE WorkItems SET Code=N'MEP-EQU-9', Name=N'9 MEP _ Equ Thang máng cáp' WHERE Code=N'TB-09'; +UPDATE WorkItems SET Code=N'MEP-EQU-10', Name=N'10 MEP _ Equ Ống PVC, HDPE' WHERE Code=N'TB-10'; +UPDATE WorkItems SET Code=N'MEP-EQU-11', Name=N'11 MEP _ Equ Thiết bị báo cháy' WHERE Code=N'TB-11'; +UPDATE WorkItems SET Code=N'MEP-EQU-12', Name=N'12 MEP _ Equ Đèn (đèn chiếu sáng, đèn năng lượng, đèn exit….)' WHERE Code=N'TB-12'; +UPDATE WorkItems SET Code=N'MEP-EQU-13', Name=N'13 MEP _ Equ Thiết bị chữa cháy (Sprinkler, Chữa cháy khí, FM200,…)' WHERE Code=N'TB-13'; +UPDATE WorkItems SET Code=N'MEP-EQU-14', Name=N'14 MEP _ Equ Bơm (bơm PCCC, Bơm nước…)' WHERE Code=N'TB-14'; +UPDATE WorkItems SET Code=N'MEP-EQU-15', Name=N'15 MEP _ Equ Bồn nước, Thiết bị vệ sinh' WHERE Code=N'TB-15'; +UPDATE WorkItems SET Code=N'MEP-EQU-16', Name=N'16 MEP _ Equ Khác' WHERE Code=N'TB-16'; + +PRINT '=== AFTER (expect TOTAL 71 / OLD-CODES 0 / NEW-CODES 71) ==='; +SELECT 'TOTAL' AS T, COUNT(*) AS C FROM WorkItems +UNION ALL SELECT 'OLD-CODES', COUNT(*) FROM WorkItems WHERE Code LIKE 'VT-%' OR Code LIKE 'TP-%' OR (Code LIKE 'MEP-0%') OR Code LIKE 'TB-%' +UNION ALL SELECT 'NEW-MAT', COUNT(*) FROM WorkItems WHERE Code LIKE 'MAT-%' +UNION ALL SELECT 'NEW-SUB', COUNT(*) FROM WorkItems WHERE Code LIKE 'SUB-%' +UNION ALL SELECT 'NEW-MEP-SUB', COUNT(*) FROM WorkItems WHERE Code LIKE 'MEP-SUB-%' +UNION ALL SELECT 'NEW-MEP-EQU', COUNT(*) FROM WorkItems WHERE Code LIKE 'MEP-EQU-%'; +SELECT TOP 5 Code, Name FROM WorkItems WHERE Code LIKE 'MEP-SUB-%' ORDER BY Code; + +COMMIT TRANSACTION; +PRINT 'S59 rename PMH COMMITTED.'; diff --git a/src/Backend/SolutionErp.Infrastructure/Persistence/DbInitializer.cs b/src/Backend/SolutionErp.Infrastructure/Persistence/DbInitializer.cs index 59e4c58..d43ad95 100644 --- a/src/Backend/SolutionErp.Infrastructure/Persistence/DbInitializer.cs +++ b/src/Backend/SolutionErp.Infrastructure/Persistence/DbInitializer.cs @@ -2562,79 +2562,84 @@ public static class DbInitializer if (addedProjects > 0) logger.LogInformation("Seeded {Count} real projects (S55 import)", addedProjects); // ---------- WORKITEMS (71) — (Code, Category, Name) ---------- + // S59 (2026-06-11) anh Kiệt FDC chốt format theo file PMH: Mã CV = nhóm+STT + // không pad (MAT-1 / SUB-1 / MEP-SUB-1 / MEP-EQU-1), Tên CV = "STT nhóm tên" + // ("1 MEP Sub MEP (Full)" — "đúng kiểu vậy"). Đã UPDATE rename prod+Dev cùng + // commit (scripts/s59-rename-workitems-pmh.sql) — giữ nguyên Id rows. + // FE sort client numeric-aware (mã không pad → string-sort loạn "10"<"2"). var workItems = new (string Code, string Category, string Name)[] { - ("VT-01", "Vật tư - Xây dựng", "Bê tông"), - ("VT-02", "Vật tư - Xây dựng", "Thép cây, Thép lưới hàn"), - ("VT-03", "Vật tư - Xây dựng", "Cọc ly tâm"), - ("VT-04", "Vật tư - Xây dựng", "Cống ly tâm"), - ("VT-05", "Vật tư - Xây dựng", "Cừ tràm"), - ("VT-06", "Vật tư - Xây dựng", "Kim loại ( rọ đầu cọc, V mạ kẽm, Vinox, bản mã…)"), - ("VT-07", "Vật tư - Xây dựng", "Nắp gang"), - ("VT-08", "Vật tư - Xây dựng", "Gạch xây, Xi măng, cát, đá, gạch trồng cỏ"), - ("VT-09", "Vật tư - Xây dựng", "Gạch trồng cỏ, gạch trang trí…"), - ("VT-10", "Vật tư - Xây dựng", "Gạch ốp lát"), - ("VT-11", "Vật tư - Xây dựng", "Ván khuôn"), - ("VT-12", "Vật tư - Xây dựng", "Sơn nước"), - ("VT-13", "Vật tư - Xây dựng", "Phụ gia (sika, vinkem, Gps…)"), - ("VT-14", "Vật tư - Xây dựng", "PVC, vải địa"), - ("VT-15", "Vật tư - Xây dựng", "Nẹp inox, nẹp nhựa"), - ("VT-16", "Vật tư - Xây dựng", "Khác"), - ("TP-01", "Thầu phụ - Xây dựng", "Thầu phụ cọc ( cơ, robot)"), - ("TP-02", "Thầu phụ - Xây dựng", "Thầu phụ cọc Khoan nhồi"), - ("TP-03", "Thầu phụ - Xây dựng", "Thầu phụ cọc CDM"), - ("TP-04", "Thầu phụ - Xây dựng", "Kết cấu thép"), - ("TP-05", "Thầu phụ - Xây dựng", "Cáp dự ứng lực"), - ("TP-06", "Thầu phụ - Xây dựng", "Panel"), - ("TP-07", "Thầu phụ - Xây dựng", "Nhôm kính, alu"), - ("TP-08", "Thầu phụ - Xây dựng", "Cửa thép, Cửa cuốn, sectional door"), - ("TP-09", "Thầu phụ - Xây dựng", "Cửa gỗ"), - ("TP-10", "Thầu phụ - Xây dựng", "Cơ khí hoàn thiện lan can, cầu thang"), - ("TP-11", "Thầu phụ - Xây dựng", "Dây cứu sinh"), - ("TP-12", "Thầu phụ - Xây dựng", "Nội thất"), - ("TP-13", "Thầu phụ - Xây dựng", "Vách trần thạch cao"), - ("TP-14", "Thầu phụ - Xây dựng", "Vách ngăn di động"), - ("TP-15", "Thầu phụ - Xây dựng", "Vách ngăn vệ sinh"), - ("TP-16", "Thầu phụ - Xây dựng", "Granit"), - ("TP-17", "Thầu phụ - Xây dựng", "Hoàn thiện sàn thảm, vinyl"), - ("TP-18", "Thầu phụ - Xây dựng", "Chống mối"), - ("TP-19", "Thầu phụ - Xây dựng", "Chống thấm"), - ("TP-20", "Thầu phụ - Xây dựng", "Sơn PU, Epoxy, liquid"), - ("TP-21", "Thầu phụ - Xây dựng", "Dock Leveler."), - ("TP-22", "Thầu phụ - Xây dựng", "Cẩu trục"), - ("TP-23", "Thầu phụ - Xây dựng", "Trạm cân"), - ("TP-24", "Thầu phụ - Xây dựng", "Thang máy, thang hàng, …"), - ("TP-25", "Thầu phụ - Xây dựng", "Sàn nâng."), - ("TP-26", "Thầu phụ - Xây dựng", "Landscape"), - ("TP-27", "Thầu phụ - Xây dựng", "Cổng xếp."), - ("TP-28", "Thầu phụ - Xây dựng", "Logo, Bảng hiệu."), - ("TP-29", "Thầu phụ - Xây dựng", "TP thi công Màng nhựa"), - ("TP-30", "Thầu phụ - Xây dựng", "Khác"), - ("MEP-01", "MEP", "MEP (Full)"), - ("MEP-02", "MEP", "Hệ thống trung thế"), - ("MEP-03", "MEP", "PCCC (Phòng cháy chữa cháy)."), - ("MEP-04", "MEP", "Hệ thống điện, điện nhẹ"), - ("MEP-05", "MEP", "Hệ thống HVAC, Utility (Thông gió & Điều hòa không khí & Phù trợ)."), - ("MEP-06", "MEP", "Hệ thống cấp thoát nước"), - ("MEP-07", "MEP", "Hệ thống xử lý nước thải"), - ("MEP-08", "MEP", "Hệ thống solar"), - ("MEP-09", "MEP", "Khác"), - ("TB-01", "Thiết bị", "Máy biến áp"), - ("TB-02", "Thiết bị", "Tủ điện"), - ("TB-03", "Thiết bị", "Tủ trung thế."), - ("TB-04", "Thiết bị", "Busway"), - ("TB-05", "Thiết bị", "Cáp điện"), - ("TB-06", "Thiết bị", "Thiết bị Utility (Máy nén khí, Hút bụi hút mùi, Boiler,...)"), - ("TB-07", "Thiết bị", "Máy lạnh"), - ("TB-08", "Thiết bị", "Ống thép, inox"), - ("TB-09", "Thiết bị", "Thang máng cáp"), - ("TB-10", "Thiết bị", "Ống PVC, HDPE"), - ("TB-11", "Thiết bị", "Thiết bị báo cháy"), - ("TB-12", "Thiết bị", "Đèn (đèn chiếu sáng, đèn năng lượng, đèn exit….)"), - ("TB-13", "Thiết bị", "Thiết bị chữa cháy (Sprinkler, Chữa cháy khí, FM200,…)"), - ("TB-14", "Thiết bị", "Bơm (bơm PCCC, Bơm nước…)"), - ("TB-15", "Thiết bị", "Bồn nước, Thiết bị vệ sinh"), - ("TB-16", "Thiết bị", "Khác"), + ("MAT-1", "Vật tư - Xây dựng", "1 Mat Bê tông"), + ("MAT-2", "Vật tư - Xây dựng", "2 Mat Thép cây, Thép lưới hàn"), + ("MAT-3", "Vật tư - Xây dựng", "3 Mat Cọc ly tâm"), + ("MAT-4", "Vật tư - Xây dựng", "4 Mat Cống ly tâm"), + ("MAT-5", "Vật tư - Xây dựng", "5 Mat Cừ tràm"), + ("MAT-6", "Vật tư - Xây dựng", "6 Mat Kim loại ( rọ đầu cọc, V mạ kẽm, Vinox, bản mã…)"), + ("MAT-7", "Vật tư - Xây dựng", "7 Mat Nắp gang"), + ("MAT-8", "Vật tư - Xây dựng", "8 Mat Gạch xây, Xi măng, cát, đá, gạch trồng cỏ"), + ("MAT-9", "Vật tư - Xây dựng", "9 Mat Gạch trồng cỏ, gạch trang trí…"), + ("MAT-10", "Vật tư - Xây dựng", "10 Mat Gạch ốp lát"), + ("MAT-11", "Vật tư - Xây dựng", "11 Mat Ván khuôn"), + ("MAT-12", "Vật tư - Xây dựng", "12 Mat Sơn nước"), + ("MAT-13", "Vật tư - Xây dựng", "13 Mat Phụ gia (sika, vinkem, Gps…)"), + ("MAT-14", "Vật tư - Xây dựng", "14 Mat PVC, vải địa"), + ("MAT-15", "Vật tư - Xây dựng", "15 Mat Nẹp inox, nẹp nhựa"), + ("MAT-16", "Vật tư - Xây dựng", "16 Mat Khác"), + ("SUB-1", "Thầu phụ - Xây dựng", "1 Sub Thầu phụ cọc ( cơ, robot)"), + ("SUB-2", "Thầu phụ - Xây dựng", "2 Sub Thầu phụ cọc Khoan nhồi"), + ("SUB-3", "Thầu phụ - Xây dựng", "3 Sub Thầu phụ cọc CDM"), + ("SUB-4", "Thầu phụ - Xây dựng", "4 Sub Kết cấu thép"), + ("SUB-5", "Thầu phụ - Xây dựng", "5 Sub Cáp dự ứng lực"), + ("SUB-6", "Thầu phụ - Xây dựng", "6 Sub Panel"), + ("SUB-7", "Thầu phụ - Xây dựng", "7 Sub Nhôm kính, alu"), + ("SUB-8", "Thầu phụ - Xây dựng", "8 Sub Cửa thép, Cửa cuốn, sectional door"), + ("SUB-9", "Thầu phụ - Xây dựng", "9 Sub Cửa gỗ"), + ("SUB-10", "Thầu phụ - Xây dựng", "10 Sub Cơ khí hoàn thiện lan can, cầu thang"), + ("SUB-11", "Thầu phụ - Xây dựng", "11 Sub Dây cứu sinh"), + ("SUB-12", "Thầu phụ - Xây dựng", "12 Sub Nội thất"), + ("SUB-13", "Thầu phụ - Xây dựng", "13 Sub Vách trần thạch cao"), + ("SUB-14", "Thầu phụ - Xây dựng", "14 Sub Vách ngăn di động"), + ("SUB-15", "Thầu phụ - Xây dựng", "15 Sub Vách ngăn vệ sinh"), + ("SUB-16", "Thầu phụ - Xây dựng", "16 Sub Granit"), + ("SUB-17", "Thầu phụ - Xây dựng", "17 Sub Hoàn thiện sàn thảm, vinyl"), + ("SUB-18", "Thầu phụ - Xây dựng", "18 Sub Chống mối"), + ("SUB-19", "Thầu phụ - Xây dựng", "19 Sub Chống thấm"), + ("SUB-20", "Thầu phụ - Xây dựng", "20 Sub Sơn PU, Epoxy, liquid"), + ("SUB-21", "Thầu phụ - Xây dựng", "21 Sub Dock Leveler."), + ("SUB-22", "Thầu phụ - Xây dựng", "22 Sub Cẩu trục"), + ("SUB-23", "Thầu phụ - Xây dựng", "23 Sub Trạm cân"), + ("SUB-24", "Thầu phụ - Xây dựng", "24 Sub Thang máy, thang hàng, …"), + ("SUB-25", "Thầu phụ - Xây dựng", "25 Sub Sàn nâng."), + ("SUB-26", "Thầu phụ - Xây dựng", "26 Sub Landscape"), + ("SUB-27", "Thầu phụ - Xây dựng", "27 Sub Cổng xếp."), + ("SUB-28", "Thầu phụ - Xây dựng", "28 Sub Logo, Bảng hiệu."), + ("SUB-29", "Thầu phụ - Xây dựng", "29 Sub TP thi công Màng nhựa"), + ("SUB-30", "Thầu phụ - Xây dựng", "30 Sub Khác"), + ("MEP-SUB-1", "MEP", "1 MEP Sub MEP (Full)"), + ("MEP-SUB-2", "MEP", "2 MEP Sub Hệ thống trung thế"), + ("MEP-SUB-3", "MEP", "3 MEP Sub PCCC (Phòng cháy chữa cháy)."), + ("MEP-SUB-4", "MEP", "4 MEP Sub Hệ thống điện, điện nhẹ"), + ("MEP-SUB-5", "MEP", "5 MEP Sub Hệ thống HVAC, Utility (Thông gió & Điều hòa không khí & Phù trợ)."), + ("MEP-SUB-6", "MEP", "6 MEP Sub Hệ thống cấp thoát nước"), + ("MEP-SUB-7", "MEP", "7 MEP Sub Hệ thống xử lý nước thải"), + ("MEP-SUB-8", "MEP", "8 MEP Sub Hệ thống solar"), + ("MEP-SUB-9", "MEP", "9 MEP Sub Khác"), + ("MEP-EQU-1", "Thiết bị", "1 MEP _ Equ Máy biến áp"), + ("MEP-EQU-2", "Thiết bị", "2 MEP _ Equ Tủ điện"), + ("MEP-EQU-3", "Thiết bị", "3 MEP _ Equ Tủ trung thế."), + ("MEP-EQU-4", "Thiết bị", "4 MEP _ Equ Busway"), + ("MEP-EQU-5", "Thiết bị", "5 MEP _ Equ Cáp điện"), + ("MEP-EQU-6", "Thiết bị", "6 MEP _ Equ Thiết bị Utility (Máy nén khí, Hút bụi hút mùi, Boiler,...)"), + ("MEP-EQU-7", "Thiết bị", "7 MEP _ Equ Máy lạnh"), + ("MEP-EQU-8", "Thiết bị", "8 MEP _ Equ Ống thép, inox"), + ("MEP-EQU-9", "Thiết bị", "9 MEP _ Equ Thang máng cáp"), + ("MEP-EQU-10", "Thiết bị", "10 MEP _ Equ Ống PVC, HDPE"), + ("MEP-EQU-11", "Thiết bị", "11 MEP _ Equ Thiết bị báo cháy"), + ("MEP-EQU-12", "Thiết bị", "12 MEP _ Equ Đèn (đèn chiếu sáng, đèn năng lượng, đèn exit….)"), + ("MEP-EQU-13", "Thiết bị", "13 MEP _ Equ Thiết bị chữa cháy (Sprinkler, Chữa cháy khí, FM200,…)"), + ("MEP-EQU-14", "Thiết bị", "14 MEP _ Equ Bơm (bơm PCCC, Bơm nước…)"), + ("MEP-EQU-15", "Thiết bị", "15 MEP _ Equ Bồn nước, Thiết bị vệ sinh"), + ("MEP-EQU-16", "Thiết bị", "16 MEP _ Equ Khác"), }; var existingWorkItemCodes = await db.WorkItems.Select(w => w.Code).ToListAsync();