Skip to content

Commit ebd867b

Browse files
authored
Finish feature/OTC-462
Resolved renewal bugs when the product is discontinued and a conversion product is assigned
2 parents 62d61aa + a1227fc commit ebd867b

File tree

2 files changed

+165
-93
lines changed

2 files changed

+165
-93
lines changed

Empty databases/openIMIS_ONLINE.sql

Lines changed: 130 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -13307,7 +13307,7 @@ GO
1330713307

1330813308
CREATE PROCEDURE [dbo].[uspIsValidRenewal]
1330913309
(
13310-
@FileName NVARCHAR(200),
13310+
@FileName NVARCHAR(200) = '',
1331113311
@XML XML
1331213312
)
1331313313
/*
@@ -13338,12 +13338,8 @@ BEGIN
1333813338

1333913339
DECLARE @FromPhoneId INT = 0;
1334013340
DECLARE @RecordCount INT = 0
13341-
13342-
--SELECT @FilePath = 'C:/inetpub/wwwroot/IMIS' + FTPPolicyRenewalFolder + '/' + @FileName FROM tblIMISDefaults
13343-
13344-
--SET @Query = (N'SELECT @XML = (SELECT CAST(X AS XML) FROM OPENROWSET(BULK ''' + @FileName +''',SINGLE_BLOB) AS T(X))')
13345-
13346-
--EXECUTE sp_executesql @Query,N'@XML XML OUTPUT',@XML OUTPUT
13341+
DECLARE @RenewalOrder INT = 0
13342+
DECLARE @ResponseStatus INT = 0
1334713343

1334813344
SELECT
1334913345
@RenewalId = T.Policy.query('RenewalId').value('.','INT'),
@@ -13371,11 +13367,7 @@ BEGIN
1337113367
AND OfficerCode = @Officer AND CHFID = @CHFID AND PR.RenewalID = @RenewalId
1337213368

1337313369

13374-
IF @DocStatus ='R'
13375-
RETURN -3
13376-
ELSE IF @DocStatus ='A'
13377-
RETURN -4
13378-
13370+
1337913371
--Insert the file details in the tblFromPhone
1338013372
--Initially we keep to DocStatus REJECTED and once the renewal is accepted we will update the Status
1338113373
INSERT INTO tblFromPhone(DocType, DocName, DocStatus, OfficerCode, CHFID)
@@ -13385,38 +13377,71 @@ BEGIN
1338513377

1338613378
DECLARE @PreviousPolicyId INT = 0
1338713379

13388-
SELECT @PreviousPolicyId = PolicyId FROM tblPolicyRenewals WHERE ValidityTo IS NULL AND RenewalID = @RenewalId;
13380+
SELECT @PreviousPolicyId = PolicyId,@ResponseStatus=ResponseStatus FROM tblPolicyRenewals WHERE ValidityTo IS NULL AND RenewalID = @RenewalId;
13381+
IF @ResponseStatus = 1
13382+
BEGIN
13383+
RETURN - 4
13384+
END
1338913385

1339013386

1339113387
DECLARE @Tbl TABLE(Id INT)
1339213388

13389+
13390+
;WITH PrevProducts
13391+
AS
13392+
(
13393+
SELECT Prod.ProductCode, Prod.ProdId, OldProd.ProdID PrevProd
13394+
FROM tblProduct Prod
13395+
LEFT OUTER JOIN tblProduct OldProd ON Prod.ProdId = OldProd.ConversionProdId
13396+
WHERE Prod.ValidityTo IS NULL
13397+
AND OldProd.ValidityTo IS NULL
13398+
AND Prod.ProductCode = @ProductCode
13399+
)
1339313400
INSERT INTO @Tbl(Id)
1339413401
SELECT TOP 1 I.InsureeID Result
1339513402
FROM tblInsuree I INNER JOIN tblPolicy PL ON I.FamilyID = PL.FamilyID
13396-
INNER JOIN tblProduct PR ON PL.ProdID = PR.ProdID
13403+
INNER JOIN PrevProducts PR ON PL.ProdId = PR.ProdId OR PL.ProdId = PR.PrevProd --PL.ProdID = PR.ProdID
1339713404
WHERE CHFID = @CHFID
1339813405
AND PR.ProductCode = @ProductCode
1339913406
AND I.ValidityTo IS NULL
1340013407
AND PL.ValidityTo IS NULL
1340113408
UNION ALL
13402-
SELECT OfficerID
13403-
FROM tblOfficer
13404-
WHERE Code =@Officer
13405-
AND ValidityTo IS NULL
13409+
SELECT OfficerID
13410+
FROM tblOfficer
13411+
WHERE Code =@Officer
13412+
AND ValidityTo IS NULL
1340613413

1340713414

1340813415
DECLARE @FamilyID INT = (SELECT FamilyId from tblInsuree WHERE CHFID = @CHFID AND ValidityTo IS NULL)
1340913416
DECLARE @ProdId INT
1341013417
DECLARE @StartDate DATE
1341113418
DECLARE @ExpiryDate DATE
1341213419
DECLARE @HasCycle BIT
13420+
--PAUL -24/04/2019 INSERTED @@AND tblPolicy.ValidityTo@@ to ensure that query does not include deleted policies
13421+
;WITH PrevProducts
13422+
AS
13423+
(
13424+
SELECT Prod.ProductCode, Prod.ProdId, OldProd.ProdID PrevProd
13425+
FROM tblProduct Prod
13426+
LEFT OUTER JOIN tblProduct OldProd ON Prod.ProdId = OldProd.ConversionProdId
13427+
WHERE Prod.ValidityTo IS NULL
13428+
AND OldProd.ValidityTo IS NULL
13429+
AND Prod.ProductCode = @ProductCode
13430+
)
13431+
SELECT TOP 1 @ProdId = PR.ProdId, @ExpiryDate = PL.ExpiryDate
13432+
FROM tblInsuree I INNER JOIN tblPolicy PL ON I.FamilyID = PL.FamilyID
13433+
INNER JOIN PrevProducts PR ON PL.ProdId = PR.ProdId OR PL.ProdId = PR.PrevProd
13434+
WHERE CHFID = @CHFID
13435+
AND PR.ProductCode = @ProductCode
13436+
AND I.ValidityTo IS NULL
13437+
AND PL.ValidityTo IS NULL
13438+
ORDER BY PL.ExpiryDate DESC;
1341313439

13414-
SELECT TOP 1 @ProdId = tblPolicy.ProdID, @ExpiryDate = tblPolicy.ExpiryDate from tblPolicy INNER JOIN tblProduct ON tblPolicy.ProdID = tblProduct.ProdID WHERE FamilyID = @FamilyID AND tblProduct.ProductCode = @ProductCode AND tblProduct.ValidityTo IS NULL ORDER BY ExpiryDate DESC
13415-
1341613440
IF EXISTS(SELECT 1 FROM tblPremium PR INNER JOIN tblPolicy PL ON PR.PolicyID = PL.PolicyID
1341713441
WHERE PR.Receipt = @Receipt
1341813442
AND PL.ProdID = @ProdId
13419-
AND PR.ValidityTo IS NULL)
13443+
AND PR.ValidityTo IS NULL
13444+
AND LEN(PR.Receipt) > 0)
1342013445

1342113446
RETURN -1;
1342213447

@@ -13427,92 +13452,112 @@ BEGIN
1342713452
WHERE ValidityTo IS NULL
1342813453
AND ProdId = @ProdId;
1342913454

13430-
IF @LastRenewalDate < @Date
13431-
RETURN -2
1343213455

13433-
SELECT @RecordCount = COUNT(1) FROM @Tbl;
13456+
--IF EXISTS(SELECT 1 FROM tblProduct WHERE ProdId = @ProdId AND LEN(StartCycle1) > 0)
13457+
-- --CHECK IF IT IS A FREE PRODUCT AND IGNORE GRACE PERIOD RENEWAL, IF IS NOT A FREE PRODUCT RETURN -2
13458+
-- IF @LastRenewalDate < @Date
13459+
-- BEGIN
13460+
-- RETURN -2
13461+
-- END
13462+
SELECT @RecordCount = COUNT(1) FROM @Tbl;
13463+
1343413464

1343513465
IF @RecordCount = 2
13436-
BEGIN
13437-
IF @Discontinue = 'false' OR @Discontinue = N''
13438-
BEGIN
13439-
13440-
--Get policy period
13441-
DECLARE @tblPeriod TABLE(StartDate DATE, ExpiryDate DATE, HasCycle BIT)
13442-
13443-
INSERT INTO @tblPeriod
13444-
EXEC uspGetPolicyPeriod @ProdId, @ExpiryDate, @HasCycle OUTPUT;
13466+
BEGIN
13467+
IF @Discontinue = 'false' OR @Discontinue = N''
13468+
BEGIN
13469+
13470+
DECLARE @tblPeriod TABLE(StartDate DATE, ExpiryDate DATE, HasCycle BIT)
13471+
DECLARE @EnrolmentDate DATE =DATEADD(D,1,@ExpiryDate)
13472+
INSERT INTO @tblPeriod
13473+
EXEC uspGetPolicyPeriod @ProdId, @Date, @HasCycle OUTPUT,'R';
1344513474

13446-
DECLARE @ExpiryDatePreviousPolicy DATE
13447-
SELECT @ExpiryDatePreviousPolicy = ExpiryDate FROM tblPolicy WHERE PolicyID=@PreviousPolicyId AND ValidityTo IS NULL
13448-
SELECT @StartDate = StartDate, @ExpiryDate = ExpiryDate FROM @tblPeriod;
13449-
IF @StartDate < @ExpiryDatePreviousPolicy
13450-
UPDATE @tblPeriod SET StartDate=DATEADD(DAY, 1, @ExpiryDatePreviousPolicy)
13475+
DECLARE @ExpiryDatePreviousPolicy DATE
1345113476

13452-
13453-
IF @HasCycle = 1
13454-
SELECT @StartDate = StartDate, @ExpiryDate = ExpiryDate FROM @tblPeriod;
13455-
ELSE
13456-
SELECT @StartDate = @Date, @ExpiryDate = DATEADD(DAY,-1,DATEADD(MONTH,InsurancePeriod,@Date)) FROM tblProduct WHERE ProdID = @ProdId;
13477+
SELECT @ExpiryDatePreviousPolicy = ExpiryDate FROM tblPolicy WHERE PolicyID=@PreviousPolicyId AND ValidityTo IS NULL
13478+
13479+
13480+
IF @HasCycle = 1
13481+
BEGIN
13482+
SELECT @StartDate = StartDate, @ExpiryDate = ExpiryDate FROM @tblPeriod;
13483+
IF @StartDate < @ExpiryDatePreviousPolicy
13484+
BEGIN
13485+
UPDATE @tblPeriod SET StartDate=DATEADD(DAY, 1, @ExpiryDatePreviousPolicy)
13486+
SELECT @StartDate = StartDate, @ExpiryDate = ExpiryDate FROM @tblPeriod;
13487+
END
13488+
END
13489+
ELSE
13490+
BEGIN
13491+
13492+
IF @Date < @ExpiryDate
13493+
SELECT @StartDate =DATEADD(D,1,@ExpiryDate), @ExpiryDate = DATEADD(DAY,-1,DATEADD(MONTH,InsurancePeriod,DATEADD(D,1,@ExpiryDate))) FROM tblProduct WHERE ProdID = @ProdId;
13494+
ELSE
13495+
SELECT @StartDate = @Date, @ExpiryDate = DATEADD(DAY,-1,DATEADD(MONTH,InsurancePeriod,@Date)) FROM tblProduct WHERE ProdID = @ProdId;
13496+
END
13497+
1345713498

1345813499

13459-
DECLARE @OfficerID INT = (SELECT OfficerID FROM tblOfficer WHERE Code = @Officer AND ValidityTo IS NULL)
13460-
DECLARE @PolicyValue DECIMAL(18,2)
13461-
--EXEC @PolicyValue = uspPolicyValue 0, 0,@FamilyID, @ProdId,@Date,
13462-
EXEC @PolicyValue = uspPolicyValue
13463-
@FamilyId = @FamilyID,
13464-
@ProdId = @ProdId,
13465-
@EnrollDate = @Date,
13466-
@PreviousPolicyId = @PreviousPolicyId,
13467-
@PolicyStage = 'R';
13468-
13469-
DECLARE @PolicyStatus TINYINT = 2
13500+
DECLARE @OfficerID INT = (SELECT OfficerID FROM tblOfficer WHERE Code = @Officer AND ValidityTo IS NULL)
13501+
DECLARE @PolicyValue DECIMAL(18,2)
13502+
13503+
SET @EnrolmentDate = @Date
13504+
EXEC @PolicyValue = uspPolicyValue
13505+
@FamilyId = @FamilyID,
13506+
@ProdId = @ProdId,
13507+
@EnrollDate = @EnrolmentDate,
13508+
@PreviousPolicyId = @PreviousPolicyId,
13509+
@PolicyStage = 'R';
1347013510

13471-
IF @Amount < @PolicyValue SET @PolicyStatus = 1
13511+
DECLARE @PolicyStatus TINYINT = 2
1347213512

13473-
INSERT INTO tblPolicy(FamilyID, EnrollDate, StartDate, EffectiveDate, ExpiryDate, PolicyStatus, PolicyValue, ProdID, OfficerID, AuditUserID, PolicyStage)
13474-
VALUES(@FamilyID, @Date, @StartDate, @StartDate,@ExpiryDate, @PolicyStatus, @PolicyValue, @ProdId, @OfficerID, 0, 'R')
13513+
IF @Amount < @PolicyValue SET @PolicyStatus = 1
1347513514

13476-
DECLARE @PolicyID INT = (SELECT SCOPE_IDENTITY())
13515+
INSERT INTO tblPolicy(FamilyID, EnrollDate, StartDate, EffectiveDate, ExpiryDate, PolicyStatus, PolicyValue, ProdID, OfficerID, AuditUserID, PolicyStage)
13516+
VALUES(@FamilyID, @Date, @StartDate, @StartDate,@ExpiryDate, @PolicyStatus, @PolicyValue, @ProdId, @OfficerID, 0, 'R')
1347713517

13478-
-- No need to create contribution if the payment is not made yet
13518+
DECLARE @PolicyID INT = (SELECT SCOPE_IDENTITY())
13519+
13520+
-- No need to create if the payment is not made yet
1347913521
IF @Amount > 0
1348013522
BEGIN
1348113523
INSERT INTO tblPremium(PolicyID, Amount, Receipt, PayDate, PayType, AuditUserID, PayerID)
1348213524
Values(@PolicyID, @Amount, @Receipt, @Date, 'C',0, @PayerId)
1348313525
END
13484-
1348513526

1348613527

13487-
DECLARE @InsureeId INT
13488-
DECLARE CurNewPolicy CURSOR FOR SELECT I.InsureeID FROM tblInsuree I
13489-
INNER JOIN tblFamilies F ON I.FamilyID = F.FamilyID
13490-
INNER JOIN tblPolicy P ON P.FamilyID = F.FamilyID
13491-
WHERE P.PolicyId = @PolicyId
13492-
AND I.ValidityTo IS NULL
13493-
AND F.ValidityTo IS NULL
13494-
AND P.ValidityTo IS NULL
13495-
OPEN CurNewPolicy;
13496-
FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
13497-
WHILE @@FETCH_STATUS = 0
13498-
BEGIN
13499-
EXEC uspAddInsureePolicy @InsureeId;
13528+
DECLARE @InsureeId INT
13529+
DECLARE CurNewPolicy CURSOR FOR SELECT I.InsureeID FROM tblInsuree I
13530+
INNER JOIN tblFamilies F ON I.FamilyID = F.FamilyID
13531+
INNER JOIN tblPolicy P ON P.FamilyID = F.FamilyID
13532+
WHERE P.PolicyId = @PolicyId
13533+
AND I.ValidityTo IS NULL
13534+
AND F.ValidityTo IS NULL
13535+
AND P.ValidityTo IS NULL
13536+
OPEN CurNewPolicy;
1350013537
FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
13501-
END
13502-
CLOSE CurNewPolicy;
13503-
DEALLOCATE CurNewPolicy;
13538+
WHILE @@FETCH_STATUS = 0
13539+
BEGIN
13540+
EXEC uspAddInsureePolicy @InsureeId;
13541+
FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
13542+
END
13543+
CLOSE CurNewPolicy;
13544+
DEALLOCATE CurNewPolicy;
1350413545

13505-
UPDATE tblPolicyRenewals SET ResponseStatus = 1, ResponseDate = GETDATE() WHERE RenewalId = @RenewalId;
13506-
END
13507-
ELSE
13508-
BEGIN
13509-
UPDATE tblPolicyRenewals SET ResponseStatus = 2, ResponseDate = GETDATE() WHERE RenewalId = @RenewalId
13510-
END
13546+
UPDATE tblPolicyRenewals SET ResponseStatus = 1, ResponseDate = GETDATE() WHERE RenewalId = @RenewalId;
13547+
END
13548+
ELSE
13549+
BEGIN
13550+
UPDATE tblPolicyRenewals SET ResponseStatus = 2, ResponseDate = GETDATE() WHERE RenewalId = @RenewalId
13551+
END
1351113552

13512-
UPDATE tblFromPhone SET DocStatus = N'A' WHERE FromPhoneId = @FromPhoneId;
13553+
UPDATE tblFromPhone SET DocStatus = N'A' WHERE FromPhoneId = @FromPhoneId;
1351313554

13514-
SELECT * FROM @Tbl;
13515-
END
13555+
SELECT * FROM @Tbl;
13556+
END
13557+
ELSE
13558+
BEGIN
13559+
RETURN -5
13560+
END
1351613561
END TRY
1351713562
BEGIN CATCH
1351813563
SELECT ERROR_MESSAGE()

Migration script/openIMIS migration latest.sql

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8406,7 +8406,7 @@ GO
84068406

84078407
CREATE PROCEDURE [dbo].[uspIsValidRenewal]
84088408
(
8409-
@FileName NVARCHAR(200),
8409+
@FileName NVARCHAR(200) = '',
84108410
@XML XML
84118411
)
84128412
/*
@@ -8485,10 +8485,21 @@ BEGIN
84858485

84868486
DECLARE @Tbl TABLE(Id INT)
84878487

8488+
8489+
;WITH PrevProducts
8490+
AS
8491+
(
8492+
SELECT Prod.ProductCode, Prod.ProdId, OldProd.ProdID PrevProd
8493+
FROM tblProduct Prod
8494+
LEFT OUTER JOIN tblProduct OldProd ON Prod.ProdId = OldProd.ConversionProdId
8495+
WHERE Prod.ValidityTo IS NULL
8496+
AND OldProd.ValidityTo IS NULL
8497+
AND Prod.ProductCode = @ProductCode
8498+
)
84888499
INSERT INTO @Tbl(Id)
84898500
SELECT TOP 1 I.InsureeID Result
84908501
FROM tblInsuree I INNER JOIN tblPolicy PL ON I.FamilyID = PL.FamilyID
8491-
INNER JOIN tblProduct PR ON PL.ProdID = PR.ProdID
8502+
INNER JOIN PrevProducts PR ON PL.ProdId = PR.ProdId OR PL.ProdId = PR.PrevProd --PL.ProdID = PR.ProdID
84928503
WHERE CHFID = @CHFID
84938504
AND PR.ProductCode = @ProductCode
84948505
AND I.ValidityTo IS NULL
@@ -8506,12 +8517,30 @@ BEGIN
85068517
DECLARE @ExpiryDate DATE
85078518
DECLARE @HasCycle BIT
85088519
--PAUL -24/04/2019 INSERTED @@AND tblPolicy.ValidityTo@@ to ensure that query does not include deleted policies
8509-
SELECT TOP 1 @ProdId = tblPolicy.ProdID, @ExpiryDate = tblPolicy.ExpiryDate from tblPolicy INNER JOIN tblProduct ON tblPolicy.ProdID = tblProduct.ProdID AND tblPolicy.ValidityTo IS NULL WHERE FamilyID = @FamilyID AND tblProduct.ProductCode = @ProductCode AND tblProduct.ValidityTo IS NULL ORDER BY ExpiryDate DESC
8510-
8520+
;WITH PrevProducts
8521+
AS
8522+
(
8523+
SELECT Prod.ProductCode, Prod.ProdId, OldProd.ProdID PrevProd
8524+
FROM tblProduct Prod
8525+
LEFT OUTER JOIN tblProduct OldProd ON Prod.ProdId = OldProd.ConversionProdId
8526+
WHERE Prod.ValidityTo IS NULL
8527+
AND OldProd.ValidityTo IS NULL
8528+
AND Prod.ProductCode = @ProductCode
8529+
)
8530+
SELECT TOP 1 @ProdId = PR.ProdId, @ExpiryDate = PL.ExpiryDate
8531+
FROM tblInsuree I INNER JOIN tblPolicy PL ON I.FamilyID = PL.FamilyID
8532+
INNER JOIN PrevProducts PR ON PL.ProdId = PR.ProdId OR PL.ProdId = PR.PrevProd
8533+
WHERE CHFID = @CHFID
8534+
AND PR.ProductCode = @ProductCode
8535+
AND I.ValidityTo IS NULL
8536+
AND PL.ValidityTo IS NULL
8537+
ORDER BY PL.ExpiryDate DESC;
8538+
85118539
IF EXISTS(SELECT 1 FROM tblPremium PR INNER JOIN tblPolicy PL ON PR.PolicyID = PL.PolicyID
85128540
WHERE PR.Receipt = @Receipt
85138541
AND PL.ProdID = @ProdId
8514-
AND PR.ValidityTo IS NULL)
8542+
AND PR.ValidityTo IS NULL
8543+
AND LEN(PR.Receipt) > 0)
85158544

85168545
RETURN -1;
85178546

@@ -8530,9 +8559,7 @@ BEGIN
85308559
-- RETURN -2
85318560
-- END
85328561
SELECT @RecordCount = COUNT(1) FROM @Tbl;
8533-
8534-
8535-
8562+
85368563

85378564
IF @RecordCount = 2
85388565
BEGIN

0 commit comments

Comments
 (0)