[CLAUDE] Scripts: SQL clean transactional UAT (Session 17 V2 testing)
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m12s

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).
This commit is contained in:
pqhuy1987
2026-05-08 15:28:40 +07:00
parent 9e63e2da10
commit ac41d5e0d8

View File

@ -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;