From ac41d5e0d8e45836edc9c8af91b6ff93a797add4 Mon Sep 17 00:00:00 2001 From: pqhuy1987 Date: Fri, 8 May 2026 15:28:40 +0700 Subject: [PATCH] [CLAUDE] Scripts: SQL clean transactional UAT (Session 17 V2 testing) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User UAT V2 schema cần clean phiếu cũ trên prod để đỡ rối mắt + giữ master data (Users / Suppliers / Projects / Departments / Workflows). scripts/sql/clean-transactional-uat.sql: - DELETE theo FK order (child → parent): 1. PE child rows (DeptApprovals/Opinions/Attachments/Changelogs/ Approvals/Quotes/Details/Suppliers) 2. PE main (giải phóng FK PE.ContractId/BudgetId) 3. Contract per-type Details (7 bảng) + Contract child rows 4. Contract main 5. Budget child rows + main 6. CodeSequences (PE + Contract reset) 7. Notifications (dangling refs sau khi xóa phiếu) - Wrap BEGIN/COMMIT TRANSACTION - Verify queries cuối in count master KEEP + transactional after-clean KEEP master: Users, Roles, MenuItems, Permissions, Suppliers, Projects, Departments, UnitsOfMeasure, MaterialItems, ServiceItems, WorkItems, ContractTemplates, ContractClauses, WorkflowTypeAssignments, WorkflowDefinitions (V1 legacy), PurchaseEvaluationWorkflowDefinitions, ApprovalWorkflows + Steps + Levels (V2 Mig 22). Required SET QUOTED_IDENTIFIER ON; ANSI_NULLS ON; cho filtered indexes Mig 19/20 (sqlcmd default off → DELETE fail). Verify local Dev: chạy OK, 1 Contract + 0 PE + 0 Budget cleaned, master giữ (Users=2 admin seed, Suppliers=3, Projects=1, Departments=9, V1 WfDef=7). --- scripts/sql/clean-transactional-uat.sql | 118 ++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 scripts/sql/clean-transactional-uat.sql diff --git a/scripts/sql/clean-transactional-uat.sql b/scripts/sql/clean-transactional-uat.sql new file mode 100644 index 0000000..49c0e34 --- /dev/null +++ b/scripts/sql/clean-transactional-uat.sql @@ -0,0 +1,118 @@ +-- ================================================================= +-- Clean transactional data cho UAT V2 schema (Mig 22-24, Session 17) +-- ================================================================= +-- Xóa: PE / Contract / Budget + tất cả con cháu + Notifications + CodeSequences +-- Giữ: Master data (Users, Suppliers, Projects, Departments, MaterialItems, +-- ServiceItems, WorkItems, UnitsOfMeasure, MenuItems, Permissions, Roles) +-- + Workflow config (V1 PurchaseEvaluationWorkflowDefinitions, WorkflowDefinitions +-- legacy + V2 ApprovalWorkflows/Steps/Levels) + ContractTemplates/Clauses +-- +-- USAGE: +-- Local Dev: sqlcmd -S "(localdb)\MSSQLLocalDB" -d SolutionErp_Dev -i scripts\sql\clean-transactional-uat.sql +-- Prod (VPS): paste vào SSMS hoặc sqlcmd connect prod DB +-- +-- ⚠ DESTRUCTIVE — backup trước nếu data còn cần. +-- ================================================================= + +-- Required cho filtered indexes (Mig 19/20) — sqlcmd default off +SET QUOTED_IDENTIFIER ON; +SET ANSI_NULLS ON; +SET NOCOUNT ON; +PRINT '===================================================='; +PRINT 'Clean transactional data START at ' + CONVERT(varchar, GETUTCDATE(), 120) + ' UTC'; +PRINT '===================================================='; + +BEGIN TRANSACTION; + +-- ===== 1. PE module — child rows trước (FK Cascade chain) ===== +DELETE FROM dbo.PurchaseEvaluationDepartmentApprovals; +PRINT ' PE.DepartmentApprovals : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; +DELETE FROM dbo.PurchaseEvaluationDepartmentOpinions; +PRINT ' PE.DepartmentOpinions : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; +DELETE FROM dbo.PurchaseEvaluationAttachments; +PRINT ' PE.Attachments : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; +DELETE FROM dbo.PurchaseEvaluationChangelogs; +PRINT ' PE.Changelogs : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; +DELETE FROM dbo.PurchaseEvaluationApprovals; +PRINT ' PE.Approvals : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; +DELETE FROM dbo.PurchaseEvaluationQuotes; +PRINT ' PE.Quotes : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; +DELETE FROM dbo.PurchaseEvaluationDetails; +PRINT ' PE.Details : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; +DELETE FROM dbo.PurchaseEvaluationSuppliers; +PRINT ' PE.Suppliers : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; + +-- ===== 2. PE main (giải phóng FK PE.ContractId + PE.BudgetId trước) ===== +DELETE FROM dbo.PurchaseEvaluations; +PRINT ' PurchaseEvaluations : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; + +-- ===== 3. Contract per-type Details ===== +DELETE FROM dbo.ThauPhuDetails; +DELETE FROM dbo.GiaoKhoanDetails; +DELETE FROM dbo.NhaCungCapDetails; +DELETE FROM dbo.DichVuDetails; +DELETE FROM dbo.MuaBanDetails; +DELETE FROM dbo.NguyenTacNccDetails; +DELETE FROM dbo.NguyenTacDvDetails; +PRINT ' Contract per-type Details : cleaned'; + +-- ===== 4. Contract child rows ===== +DELETE FROM dbo.ContractDepartmentApprovals; +DELETE FROM dbo.ContractAttachments; +DELETE FROM dbo.ContractComments; +DELETE FROM dbo.ContractChangelogs; +DELETE FROM dbo.ContractApprovals; +PRINT ' Contract child rows : cleaned'; + +-- ===== 5. Contract main ===== +DELETE FROM dbo.Contracts; +PRINT ' Contracts : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; + +-- ===== 6. Budget module (PE+Contract đã giải phóng FK BudgetId) ===== +DELETE FROM dbo.BudgetDepartmentApprovals; +DELETE FROM dbo.BudgetChangelogs; +DELETE FROM dbo.BudgetApprovals; +DELETE FROM dbo.BudgetDetails; +DELETE FROM dbo.Budgets; +PRINT ' Budgets + children : cleaned'; + +-- ===== 7. Code sequences (reset count) ===== +DELETE FROM dbo.PurchaseEvaluationCodeSequences; +DELETE FROM dbo.ContractCodeSequences; +PRINT ' Code sequences : reset'; + +-- ===== 8. Notifications (dangling refs sau khi xóa phiếu) ===== +DELETE FROM dbo.Notifications; +PRINT ' Notifications : ' + CAST(@@ROWCOUNT as varchar) + ' rows deleted'; + +COMMIT TRANSACTION; + +PRINT ''; +PRINT '===================================================='; +PRINT 'Clean transactional data DONE at ' + CONVERT(varchar, GETUTCDATE(), 120) + ' UTC'; +PRINT '===================================================='; +PRINT ''; +PRINT '===== Master KEEP verify ====='; + +SELECT + (SELECT COUNT(*) FROM dbo.Users) AS Users, + (SELECT COUNT(*) FROM dbo.Suppliers) AS Suppliers, + (SELECT COUNT(*) FROM dbo.Projects) AS Projects, + (SELECT COUNT(*) FROM dbo.Departments) AS Departments, + (SELECT COUNT(*) FROM dbo.MaterialItems) AS Materials, + (SELECT COUNT(*) FROM dbo.ServiceItems) AS Services, + (SELECT COUNT(*) FROM dbo.WorkItems) AS WorkItems, + (SELECT COUNT(*) FROM dbo.UnitsOfMeasure) AS Units; + +SELECT + (SELECT COUNT(*) FROM dbo.ApprovalWorkflows) AS Aw_V2, + (SELECT COUNT(*) FROM dbo.ApprovalWorkflowSteps) AS Aw_V2_Steps, + (SELECT COUNT(*) FROM dbo.ApprovalWorkflowLevels) AS Aw_V2_Levels, + (SELECT COUNT(*) FROM dbo.WorkflowDefinitions) AS Wf_V1_Legacy_HD, + (SELECT COUNT(*) FROM dbo.PurchaseEvaluationWorkflowDefinitions) AS Wf_V1_Legacy_PE; + +SELECT + (SELECT COUNT(*) FROM dbo.PurchaseEvaluations) AS PE_after_clean, + (SELECT COUNT(*) FROM dbo.Contracts) AS Contract_after_clean, + (SELECT COUNT(*) FROM dbo.Budgets) AS Budget_after_clean, + (SELECT COUNT(*) FROM dbo.Notifications) AS Notify_after_clean;