Skip to content

Commit 0a2e1c5

Browse files
authored
Merge pull request #100 from openimis/feature/OTC-463
OTC-463: Do not create payment if the amount is not passed during renewal
2 parents 7cba2a1 + e1c1c76 commit 0a2e1c5

2 files changed

Lines changed: 245 additions & 2 deletions

File tree

Empty databases/openIMIS_ONLINE.sql

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13703,8 +13703,12 @@ BEGIN
1370313703

1370413704
DECLARE @PolicyID INT = (SELECT SCOPE_IDENTITY())
1370513705

13706-
INSERT INTO tblPremium(PolicyID, Amount, Receipt, PayDate, PayType, AuditUserID, PayerID)
13707-
Values(@PolicyID, @Amount, @Receipt, @Date, 'C',0, @PayerId)
13706+
-- No need to create contribution if the payment is not made yet
13707+
IF @Amount > 0
13708+
BEGIN
13709+
INSERT INTO tblPremium(PolicyID, Amount, Receipt, PayDate, PayType, AuditUserID, PayerID)
13710+
Values(@PolicyID, @Amount, @Receipt, @Date, 'C',0, @PayerId)
13711+
END
1370813712

1370913713

1371013714

Migration script/openIMIS migration latest.sql

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8889,3 +8889,242 @@ NextPolicy:
88898889
END
88908890
GO
88918891

8892+
IF NOT OBJECT_ID('uspIsValidRenewal') IS NULL
8893+
DROP PROCEDURE uspIsValidRenewal
8894+
GO
8895+
8896+
CREATE PROCEDURE [dbo].[uspIsValidRenewal]
8897+
(
8898+
@FileName NVARCHAR(200),
8899+
@XML XML
8900+
)
8901+
/*
8902+
-5: Fatal Error
8903+
0: All OK
8904+
-1: Duplicate Receipt found
8905+
-2: Grace Period is over
8906+
-3: Renewal was alredy rejected
8907+
-4: Renewal was alredy accepted
8908+
8909+
*/
8910+
AS
8911+
BEGIN
8912+
BEGIN TRY
8913+
8914+
--DECLARE @FilePath NVARCHAR(250)
8915+
--DECLARE @XML XML
8916+
DECLARE @RenewalId INT
8917+
DECLARE @CHFID VARCHAR(12)
8918+
DECLARE @ProductCode VARCHAR(15)
8919+
DECLARE @Officer VARCHAR(15)
8920+
DECLARE @Date DATE
8921+
DECLARE @Amount DECIMAL(18,2)
8922+
DECLARE @Receipt NVARCHAR(50)
8923+
DECLARE @Discontinue VARCHAR(10)
8924+
DECLARE @PayerId INT
8925+
DECLARE @Query NVARCHAR(3000)
8926+
8927+
DECLARE @FromPhoneId INT = 0;
8928+
DECLARE @RecordCount INT = 0
8929+
DECLARE @RenewalOrder INT = 0
8930+
DECLARE @ResponseStatus INT = 0
8931+
8932+
SELECT
8933+
@RenewalId = T.Policy.query('RenewalId').value('.','INT'),
8934+
@CHFID = T.Policy.query('CHFID').value('.','VARCHAR(12)'),
8935+
@ProductCode = T.Policy.query('ProductCode').value('.','VARCHAR(15)'),
8936+
@Officer = T.Policy.query('Officer').value('.','VARCHAR(15)') ,
8937+
@Date = T.Policy.query('Date').value('.','DATE'),
8938+
@Amount = T.Policy.query('Amount').value('.','DECIMAL(18,2)'),
8939+
@Receipt = T.Policy.query('ReceiptNo').value('.','NVARCHAR(50)'),
8940+
@Discontinue = T.policy.query('Discontinue').value('.','VARCHAR(10)'),
8941+
@PayerId = NULLIF(T.policy.query('PayerId').value('.', 'INT'), 0)
8942+
FROM
8943+
@XML.nodes('Policy') AS T(Policy);
8944+
8945+
IF NOT ( @XML.exist('(Policy/RenewalId)')=1 )
8946+
RETURN -5
8947+
8948+
8949+
--Checking if the renewal already exists and get the status
8950+
DECLARE @DocStatus NVARCHAR(1)
8951+
SELECT @DocStatus = FP.DocStatus FROM tblPolicyRenewals PR
8952+
INNER JOIN tblOfficer O ON PR.NewOfficerID = O.OfficerID
8953+
INNER JOIN tblFromPhone FP ON FP.OfficerCode = O.Code
8954+
WHERE O.ValidityTo IS NULL
8955+
AND OfficerCode = @Officer AND CHFID = @CHFID AND PR.RenewalID = @RenewalId
8956+
8957+
8958+
8959+
--Insert the file details in the tblFromPhone
8960+
--Initially we keep to DocStatus REJECTED and once the renewal is accepted we will update the Status
8961+
INSERT INTO tblFromPhone(DocType, DocName, DocStatus, OfficerCode, CHFID)
8962+
SELECT N'R' DocType, @FileName DocName, N'R' DocStatus, @Officer OfficerCode, @CHFID CHFID;
8963+
8964+
SELECT @FromPhoneId = SCOPE_IDENTITY();
8965+
8966+
DECLARE @PreviousPolicyId INT = 0
8967+
8968+
SELECT @PreviousPolicyId = PolicyId,@ResponseStatus=ResponseStatus FROM tblPolicyRenewals WHERE ValidityTo IS NULL AND RenewalID = @RenewalId;
8969+
IF @ResponseStatus = 1
8970+
BEGIN
8971+
RETURN - 4
8972+
END
8973+
8974+
8975+
DECLARE @Tbl TABLE(Id INT)
8976+
8977+
INSERT INTO @Tbl(Id)
8978+
SELECT TOP 1 I.InsureeID Result
8979+
FROM tblInsuree I INNER JOIN tblPolicy PL ON I.FamilyID = PL.FamilyID
8980+
INNER JOIN tblProduct PR ON PL.ProdID = PR.ProdID
8981+
WHERE CHFID = @CHFID
8982+
AND PR.ProductCode = @ProductCode
8983+
AND I.ValidityTo IS NULL
8984+
AND PL.ValidityTo IS NULL
8985+
UNION ALL
8986+
SELECT OfficerID
8987+
FROM tblOfficer
8988+
WHERE Code =@Officer
8989+
AND ValidityTo IS NULL
8990+
8991+
8992+
DECLARE @FamilyID INT = (SELECT FamilyId from tblInsuree WHERE CHFID = @CHFID AND ValidityTo IS NULL)
8993+
DECLARE @ProdId INT
8994+
DECLARE @StartDate DATE
8995+
DECLARE @ExpiryDate DATE
8996+
DECLARE @HasCycle BIT
8997+
--PAUL -24/04/2019 INSERTED @@AND tblPolicy.ValidityTo@@ to ensure that query does not include deleted policies
8998+
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
8999+
9000+
IF EXISTS(SELECT 1 FROM tblPremium PR INNER JOIN tblPolicy PL ON PR.PolicyID = PL.PolicyID
9001+
WHERE PR.Receipt = @Receipt
9002+
AND PL.ProdID = @ProdId
9003+
AND PR.ValidityTo IS NULL)
9004+
9005+
RETURN -1;
9006+
9007+
--Check if the renewal is not after the grace period
9008+
DECLARE @LastRenewalDate DATE
9009+
SELECT @LastRenewalDate = DATEADD(MONTH,GracePeriodRenewal,DATEADD(DAY,1,@ExpiryDate))
9010+
FROM tblProduct
9011+
WHERE ValidityTo IS NULL
9012+
AND ProdId = @ProdId;
9013+
9014+
9015+
--IF EXISTS(SELECT 1 FROM tblProduct WHERE ProdId = @ProdId AND LEN(StartCycle1) > 0)
9016+
-- --CHECK IF IT IS A FREE PRODUCT AND IGNORE GRACE PERIOD RENEWAL, IF IS NOT A FREE PRODUCT RETURN -2
9017+
-- IF @LastRenewalDate < @Date
9018+
-- BEGIN
9019+
-- RETURN -2
9020+
-- END
9021+
SELECT @RecordCount = COUNT(1) FROM @Tbl;
9022+
9023+
9024+
9025+
9026+
IF @RecordCount = 2
9027+
BEGIN
9028+
IF @Discontinue = 'false' OR @Discontinue = N''
9029+
BEGIN
9030+
9031+
DECLARE @tblPeriod TABLE(StartDate DATE, ExpiryDate DATE, HasCycle BIT)
9032+
DECLARE @EnrolmentDate DATE =DATEADD(D,1,@ExpiryDate)
9033+
INSERT INTO @tblPeriod
9034+
EXEC uspGetPolicyPeriod @ProdId, @Date, @HasCycle OUTPUT,'R';
9035+
9036+
DECLARE @ExpiryDatePreviousPolicy DATE
9037+
9038+
SELECT @ExpiryDatePreviousPolicy = ExpiryDate FROM tblPolicy WHERE PolicyID=@PreviousPolicyId AND ValidityTo IS NULL
9039+
9040+
9041+
IF @HasCycle = 1
9042+
BEGIN
9043+
SELECT @StartDate = StartDate, @ExpiryDate = ExpiryDate FROM @tblPeriod;
9044+
IF @StartDate < @ExpiryDatePreviousPolicy
9045+
BEGIN
9046+
UPDATE @tblPeriod SET StartDate=DATEADD(DAY, 1, @ExpiryDatePreviousPolicy)
9047+
SELECT @StartDate = StartDate, @ExpiryDate = ExpiryDate FROM @tblPeriod;
9048+
END
9049+
END
9050+
ELSE
9051+
BEGIN
9052+
9053+
IF @Date < @ExpiryDate
9054+
SELECT @StartDate =DATEADD(D,1,@ExpiryDate), @ExpiryDate = DATEADD(DAY,-1,DATEADD(MONTH,InsurancePeriod,DATEADD(D,1,@ExpiryDate))) FROM tblProduct WHERE ProdID = @ProdId;
9055+
ELSE
9056+
SELECT @StartDate = @Date, @ExpiryDate = DATEADD(DAY,-1,DATEADD(MONTH,InsurancePeriod,@Date)) FROM tblProduct WHERE ProdID = @ProdId;
9057+
END
9058+
9059+
9060+
9061+
DECLARE @OfficerID INT = (SELECT OfficerID FROM tblOfficer WHERE Code = @Officer AND ValidityTo IS NULL)
9062+
DECLARE @PolicyValue DECIMAL(18,2)
9063+
9064+
SET @EnrolmentDate = @Date
9065+
EXEC @PolicyValue = uspPolicyValue
9066+
@FamilyId = @FamilyID,
9067+
@ProdId = @ProdId,
9068+
@EnrollDate = @EnrolmentDate,
9069+
@PreviousPolicyId = @PreviousPolicyId,
9070+
@PolicyStage = 'R';
9071+
9072+
DECLARE @PolicyStatus TINYINT = 2
9073+
9074+
IF @Amount < @PolicyValue SET @PolicyStatus = 1
9075+
9076+
INSERT INTO tblPolicy(FamilyID, EnrollDate, StartDate, EffectiveDate, ExpiryDate, PolicyStatus, PolicyValue, ProdID, OfficerID, AuditUserID, PolicyStage)
9077+
VALUES(@FamilyID, @Date, @StartDate, @StartDate,@ExpiryDate, @PolicyStatus, @PolicyValue, @ProdId, @OfficerID, 0, 'R')
9078+
9079+
DECLARE @PolicyID INT = (SELECT SCOPE_IDENTITY())
9080+
9081+
-- No need to create if the payment is not made yet
9082+
IF @Amount > 0
9083+
BEGIN
9084+
INSERT INTO tblPremium(PolicyID, Amount, Receipt, PayDate, PayType, AuditUserID, PayerID)
9085+
Values(@PolicyID, @Amount, @Receipt, @Date, 'C',0, @PayerId)
9086+
END
9087+
9088+
9089+
DECLARE @InsureeId INT
9090+
DECLARE CurNewPolicy CURSOR FOR SELECT I.InsureeID FROM tblInsuree I
9091+
INNER JOIN tblFamilies F ON I.FamilyID = F.FamilyID
9092+
INNER JOIN tblPolicy P ON P.FamilyID = F.FamilyID
9093+
WHERE P.PolicyId = @PolicyId
9094+
AND I.ValidityTo IS NULL
9095+
AND F.ValidityTo IS NULL
9096+
AND P.ValidityTo IS NULL
9097+
OPEN CurNewPolicy;
9098+
FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
9099+
WHILE @@FETCH_STATUS = 0
9100+
BEGIN
9101+
EXEC uspAddInsureePolicy @InsureeId;
9102+
FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
9103+
END
9104+
CLOSE CurNewPolicy;
9105+
DEALLOCATE CurNewPolicy;
9106+
9107+
UPDATE tblPolicyRenewals SET ResponseStatus = 1, ResponseDate = GETDATE() WHERE RenewalId = @RenewalId;
9108+
END
9109+
ELSE
9110+
BEGIN
9111+
UPDATE tblPolicyRenewals SET ResponseStatus = 2, ResponseDate = GETDATE() WHERE RenewalId = @RenewalId
9112+
END
9113+
9114+
UPDATE tblFromPhone SET DocStatus = N'A' WHERE FromPhoneId = @FromPhoneId;
9115+
9116+
SELECT * FROM @Tbl;
9117+
END
9118+
ELSE
9119+
BEGIN
9120+
RETURN -5
9121+
END
9122+
END TRY
9123+
BEGIN CATCH
9124+
SELECT ERROR_MESSAGE()
9125+
RETURN -1
9126+
END CATCH
9127+
9128+
RETURN 0
9129+
END
9130+
GO

0 commit comments

Comments
 (0)