Skip to content

Commit 102746d

Browse files
authored
Merge pull request #66 from openimis/feature/OP-324
OP-324: Delete member of family in uspConsumeEnrollment
2 parents 51a8db0 + a252649 commit 102746d

2 files changed

Lines changed: 100 additions & 0 deletions

File tree

Empty databases/openIMIS_ONLINE.sql

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9953,6 +9953,56 @@ CREATE PROCEDURE [dbo].[uspConsumeEnrollments](
99539953
AND TP.isOffline = 0
99549954

99559955

9956+
/********************************************************************************************************
9957+
CHECK IF SOME INSUREE ARE ABOUT TO DELETE FROM FAMILY
9958+
********************************************************************************************************/
9959+
9960+
-- get the family id to process from online database
9961+
DECLARE @familyIdToProcess TABLE (FamilyId INT)
9962+
INSERT INTO @familyIdToProcess(FamilyId)
9963+
SELECT I.FamilyId
9964+
FROM @tblInsuree TI
9965+
INNER JOIN tblInsuree I ON TI.CHFID = I.CHFID
9966+
WHERE I.ValidityTo IS NULL AND TI.isOffline = 1
9967+
GROUP BY I.FamilyID
9968+
9969+
-- get to compare the structure of families (list of insuree) from online database
9970+
DECLARE @insureeToProcess TABLE(CHFID NVARCHAR(12), FamilyID INT)
9971+
INSERT INTO @insureeToProcess(CHFID, FamilyID)
9972+
SELECT I.CHFID, F.FamilyID FROM tblInsuree I
9973+
LEFT JOIN tblFamilies F ON I.FamilyID = F.FamilyID
9974+
WHERE F.FamilyID IN (SELECT * FROM @familyIdToProcess) AND I.ValidityTo is NULL
9975+
GROUP BY I.CHFID, F.FamilyID
9976+
9977+
-- select the insuree to delete based on received XML payload
9978+
-- get the insuree which are not included in "insureeToProcess"
9979+
DECLARE @insureeToDelete TABLE(CHFID NVARCHAR(12))
9980+
INSERT INTO @insureeToDelete(CHFID)
9981+
SELECT IP.CHFID FROM @insureeToProcess IP
9982+
LEFT JOIN @tblInsuree I ON I.CHFID=IP.CHFID
9983+
WHERE I.CHFID is NULL
9984+
9985+
-- iterate through insuree to delete - process them to remove from existing family
9986+
-- use SP uspAPIDeleteMemberFamily and 'delete' InsureePolicy also like in webapp
9987+
IF EXISTS(SELECT 1 FROM @insureeToDelete)
9988+
BEGIN
9989+
DECLARE @CurInsureeCHFID NVARCHAR(12)
9990+
DECLARE CurInsuree CURSOR FOR SELECT CHFID FROM @insureeToDelete
9991+
OPEN CurInsuree
9992+
FETCH NEXT FROM CurInsuree INTO @CurInsureeCHFID;
9993+
WHILE @@FETCH_STATUS = 0
9994+
BEGIN
9995+
DECLARE @currentInsureeId INT
9996+
SET @currentInsureeId = (SELECT InsureeID FROM tblInsuree WHERE CHFID=@CurInsureeCHFID AND ValidityTo is NULL)
9997+
EXEC uspAPIDeleteMemberFamily -2, @CurInsureeCHFID
9998+
UPDATE tblInsureePolicy SET ValidityTo = GETDATE() WHERE InsureeId = @currentInsureeId
9999+
FETCH NEXT FROM CurInsuree INTO @CurInsureeCHFID;
10000+
END
10001+
CLOSE CurInsuree
10002+
DEALLOCATE CurInsuree;
10003+
END
10004+
10005+
995610006
/********************************************************************************************************
995710007
DELETE REJECTED RECORDS
995810008
********************************************************************************************************/

Migration script/openIMIS migration latest.sql

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,56 @@ CREATE PROCEDURE [dbo].[uspConsumeEnrollments](
648648
AND PR.PolicyID = TPR.NewPolicyId
649649
WHERE PR.ValidityTo IS NULL
650650
AND TP.isOffline = 0
651+
652+
653+
/********************************************************************************************************
654+
CHECK IF SOME INSUREE ARE ABOUT TO DELETE FROM FAMILY
655+
********************************************************************************************************/
656+
657+
-- get the family id to process from online database
658+
DECLARE @familyIdToProcess TABLE (FamilyId INT)
659+
INSERT INTO @familyIdToProcess(FamilyId)
660+
SELECT I.FamilyId
661+
FROM @tblInsuree TI
662+
INNER JOIN tblInsuree I ON TI.CHFID = I.CHFID
663+
WHERE I.ValidityTo IS NULL AND TI.isOffline = 1
664+
GROUP BY I.FamilyID
665+
666+
-- get to compare the structure of families (list of insuree) from online database
667+
DECLARE @insureeToProcess TABLE(CHFID NVARCHAR(12), FamilyID INT)
668+
INSERT INTO @insureeToProcess(CHFID, FamilyID)
669+
SELECT I.CHFID, F.FamilyID FROM tblInsuree I
670+
LEFT JOIN tblFamilies F ON I.FamilyID = F.FamilyID
671+
WHERE F.FamilyID IN (SELECT * FROM @familyIdToProcess) AND I.ValidityTo is NULL
672+
GROUP BY I.CHFID, F.FamilyID
673+
674+
-- select the insuree to delete based on received XML payload
675+
-- get the insuree which are not included in "insureeToProcess"
676+
DECLARE @insureeToDelete TABLE(CHFID NVARCHAR(12))
677+
INSERT INTO @insureeToDelete(CHFID)
678+
SELECT IP.CHFID FROM @insureeToProcess IP
679+
LEFT JOIN @tblInsuree I ON I.CHFID=IP.CHFID
680+
WHERE I.CHFID is NULL
681+
682+
-- iterate through insuree to delete - process them to remove from existing family
683+
-- use SP uspAPIDeleteMemberFamily and 'delete' InsureePolicy also like in webapp
684+
IF EXISTS(SELECT 1 FROM @insureeToDelete)
685+
BEGIN
686+
DECLARE @CurInsureeCHFID NVARCHAR(12)
687+
DECLARE CurInsuree CURSOR FOR SELECT CHFID FROM @insureeToDelete
688+
OPEN CurInsuree
689+
FETCH NEXT FROM CurInsuree INTO @CurInsureeCHFID;
690+
WHILE @@FETCH_STATUS = 0
691+
BEGIN
692+
DECLARE @currentInsureeId INT
693+
SET @currentInsureeId = (SELECT InsureeID FROM tblInsuree WHERE CHFID=@CurInsureeCHFID AND ValidityTo is NULL)
694+
EXEC uspAPIDeleteMemberFamily -2, @CurInsureeCHFID
695+
UPDATE tblInsureePolicy SET ValidityTo = GETDATE() WHERE InsureeId = @currentInsureeId
696+
FETCH NEXT FROM CurInsuree INTO @CurInsureeCHFID;
697+
END
698+
CLOSE CurInsuree
699+
DEALLOCATE CurInsuree;
700+
END
651701

652702

653703
/********************************************************************************************************

0 commit comments

Comments
 (0)