From 4f658d6f39fb3c7e92c8f978758967a574e7b91a Mon Sep 17 00:00:00 2001 From: Seweryn Niedzielski Date: Wed, 21 Apr 2021 10:14:56 +0200 Subject: [PATCH 1/2] OP-324: added delete case insuree from family to consumeEnrollment --- Empty databases/openIMIS_ONLINE.sql | 56 +++++++++++++++++++ .../openIMIS migration latest.sql | 56 +++++++++++++++++++ 2 files changed, 112 insertions(+) diff --git a/Empty databases/openIMIS_ONLINE.sql b/Empty databases/openIMIS_ONLINE.sql index 9ee59ba..675b951 100644 --- a/Empty databases/openIMIS_ONLINE.sql +++ b/Empty databases/openIMIS_ONLINE.sql @@ -9953,6 +9953,62 @@ CREATE PROCEDURE [dbo].[uspConsumeEnrollments]( AND TP.isOffline = 0 + /******************************************************************************************************** + CHECK IF SOME INSUREE ARE ABOUT TO DELETE FROM FAMILY + ********************************************************************************************************/ + + -- get the family id to process from online database + DECLARE @familyIdToProcess TABLE (FamilyId INT) + INSERT INTO @familyIdToProcess(FamilyId) + SELECT I.FamilyId + FROM @tblInsuree TI + INNER JOIN tblInsuree I ON TI.CHFID = I.CHFID + WHERE I.ValidityTo IS NULL AND TI.isOffline = 1 + GROUP BY I.FamilyID + + -- get to compare the structure of families (list of insuree) from online database + DECLARE @insureeToProcess TABLE(CHFID NVARCHAR(12), FamilyID INT) + INSERT INTO @insureeToProcess(CHFID, FamilyID) + SELECT I.CHFID, F.FamilyID FROM tblInsuree I + LEFT JOIN tblFamilies F ON I.FamilyID = F.FamilyID + WHERE F.FamilyID IN (SELECT * FROM @familyIdToProcess) AND I.ValidityTo is NULL + GROUP BY I.CHFID, F.FamilyID + + -- select the insuree to delete based on received XML payload + -- get the insuree which are not included in "insureeToProcess" + DECLARE @insureeToDelete TABLE(CHFID NVARCHAR(12)) + INSERT INTO @insureeToDelete(CHFID) + SELECT CHFID + FROM ( + SELECT CHFID FROM @insureeToProcess + UNION ALL + SELECT CHFID FROM @tblInsuree TI + ) tbl + GROUP BY CHFID + HAVING count(*) = 1 + ORDER BY CHFID; + + -- iterate through insuree to delete - process them to remove from existing family + -- use SP uspAPIDeleteMemberFamily and 'delete' InsureePolicy also like in webapp + IF EXISTS(SELECT 1 FROM @insureeToDelete) + BEGIN + DECLARE @CurInsureeCHFID NVARCHAR(12) + DECLARE CurInsuree CURSOR FOR SELECT CHFID FROM @insureeToDelete + OPEN CurInsuree + FETCH NEXT FROM CurInsuree INTO @CurInsureeCHFID; + WHILE @@FETCH_STATUS = 0 + BEGIN + DECLARE @currentInsureeId INT + SET @currentInsureeId = (SELECT InsureeID FROM tblInsuree WHERE CHFID=@CurInsureeCHFID AND ValidityTo is NULL) + EXEC uspAPIDeleteMemberFamily -2, @CurInsureeCHFID + UPDATE tblInsureePolicy SET ValidityTo = GETDATE() WHERE InsureeId = @currentInsureeId + FETCH NEXT FROM CurInsuree INTO @CurInsureeCHFID; + END + CLOSE CurInsuree + DEALLOCATE CurInsuree; + END + + /******************************************************************************************************** DELETE REJECTED RECORDS ********************************************************************************************************/ diff --git a/Migration script/openIMIS migration latest.sql b/Migration script/openIMIS migration latest.sql index 69c4ce8..eb30bac 100644 --- a/Migration script/openIMIS migration latest.sql +++ b/Migration script/openIMIS migration latest.sql @@ -648,6 +648,62 @@ CREATE PROCEDURE [dbo].[uspConsumeEnrollments]( AND PR.PolicyID = TPR.NewPolicyId WHERE PR.ValidityTo IS NULL AND TP.isOffline = 0 + + + /******************************************************************************************************** + CHECK IF SOME INSUREE ARE ABOUT TO DELETE FROM FAMILY + ********************************************************************************************************/ + + -- get the family id to process from online database + DECLARE @familyIdToProcess TABLE (FamilyId INT) + INSERT INTO @familyIdToProcess(FamilyId) + SELECT I.FamilyId + FROM @tblInsuree TI + INNER JOIN tblInsuree I ON TI.CHFID = I.CHFID + WHERE I.ValidityTo IS NULL AND TI.isOffline = 1 + GROUP BY I.FamilyID + + -- get to compare the structure of families (list of insuree) from online database + DECLARE @insureeToProcess TABLE(CHFID NVARCHAR(12), FamilyID INT) + INSERT INTO @insureeToProcess(CHFID, FamilyID) + SELECT I.CHFID, F.FamilyID FROM tblInsuree I + LEFT JOIN tblFamilies F ON I.FamilyID = F.FamilyID + WHERE F.FamilyID IN (SELECT * FROM @familyIdToProcess) AND I.ValidityTo is NULL + GROUP BY I.CHFID, F.FamilyID + + -- select the insuree to delete based on received XML payload + -- get the insuree which are not included in "insureeToProcess" + DECLARE @insureeToDelete TABLE(CHFID NVARCHAR(12)) + INSERT INTO @insureeToDelete(CHFID) + SELECT CHFID + FROM ( + SELECT CHFID FROM @insureeToProcess + UNION ALL + SELECT CHFID FROM @tblInsuree TI + ) tbl + GROUP BY CHFID + HAVING count(*) = 1 + ORDER BY CHFID; + + -- iterate through insuree to delete - process them to remove from existing family + -- use SP uspAPIDeleteMemberFamily and 'delete' InsureePolicy also like in webapp + IF EXISTS(SELECT 1 FROM @insureeToDelete) + BEGIN + DECLARE @CurInsureeCHFID NVARCHAR(12) + DECLARE CurInsuree CURSOR FOR SELECT CHFID FROM @insureeToDelete + OPEN CurInsuree + FETCH NEXT FROM CurInsuree INTO @CurInsureeCHFID; + WHILE @@FETCH_STATUS = 0 + BEGIN + DECLARE @currentInsureeId INT + SET @currentInsureeId = (SELECT InsureeID FROM tblInsuree WHERE CHFID=@CurInsureeCHFID AND ValidityTo is NULL) + EXEC uspAPIDeleteMemberFamily -2, @CurInsureeCHFID + UPDATE tblInsureePolicy SET ValidityTo = GETDATE() WHERE InsureeId = @currentInsureeId + FETCH NEXT FROM CurInsuree INTO @CurInsureeCHFID; + END + CLOSE CurInsuree + DEALLOCATE CurInsuree; + END /******************************************************************************************************** From a252649066625501e8a33bd649728f5b4c6f342b Mon Sep 17 00:00:00 2001 From: Seweryn Niedzielski Date: Wed, 21 Apr 2021 15:21:33 +0200 Subject: [PATCH 2/2] OP-324: modify 'insuree to delete' variable --- Empty databases/openIMIS_ONLINE.sql | 12 +++--------- Migration script/openIMIS migration latest.sql | 12 +++--------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/Empty databases/openIMIS_ONLINE.sql b/Empty databases/openIMIS_ONLINE.sql index 675b951..a5e0350 100644 --- a/Empty databases/openIMIS_ONLINE.sql +++ b/Empty databases/openIMIS_ONLINE.sql @@ -9978,15 +9978,9 @@ CREATE PROCEDURE [dbo].[uspConsumeEnrollments]( -- get the insuree which are not included in "insureeToProcess" DECLARE @insureeToDelete TABLE(CHFID NVARCHAR(12)) INSERT INTO @insureeToDelete(CHFID) - SELECT CHFID - FROM ( - SELECT CHFID FROM @insureeToProcess - UNION ALL - SELECT CHFID FROM @tblInsuree TI - ) tbl - GROUP BY CHFID - HAVING count(*) = 1 - ORDER BY CHFID; + SELECT IP.CHFID FROM @insureeToProcess IP + LEFT JOIN @tblInsuree I ON I.CHFID=IP.CHFID + WHERE I.CHFID is NULL -- iterate through insuree to delete - process them to remove from existing family -- use SP uspAPIDeleteMemberFamily and 'delete' InsureePolicy also like in webapp diff --git a/Migration script/openIMIS migration latest.sql b/Migration script/openIMIS migration latest.sql index eb30bac..9000744 100644 --- a/Migration script/openIMIS migration latest.sql +++ b/Migration script/openIMIS migration latest.sql @@ -675,15 +675,9 @@ CREATE PROCEDURE [dbo].[uspConsumeEnrollments]( -- get the insuree which are not included in "insureeToProcess" DECLARE @insureeToDelete TABLE(CHFID NVARCHAR(12)) INSERT INTO @insureeToDelete(CHFID) - SELECT CHFID - FROM ( - SELECT CHFID FROM @insureeToProcess - UNION ALL - SELECT CHFID FROM @tblInsuree TI - ) tbl - GROUP BY CHFID - HAVING count(*) = 1 - ORDER BY CHFID; + SELECT IP.CHFID FROM @insureeToProcess IP + LEFT JOIN @tblInsuree I ON I.CHFID=IP.CHFID + WHERE I.CHFID is NULL -- iterate through insuree to delete - process them to remove from existing family -- use SP uspAPIDeleteMemberFamily and 'delete' InsureePolicy also like in webapp