Skip to content

Commit fc9ab6f

Browse files
authored
Finish feature/OTC-67
adding readystate in matchpayment
2 parents 5206445 + 5e0610f commit fc9ab6f

2 files changed

Lines changed: 380 additions & 0 deletions

File tree

1.38 KB
Binary file not shown.

Migration script/openIMIS migration v1.4.2 - 1.5.0.sql

Lines changed: 380 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4138,5 +4138,385 @@ UPDATE tblPolicy SET isOffline=0
41384138
WHERE (SELECT 1 FROM tblIMISDefaults where OfflineCHF = 1 And OfflineHF = 1) is null;
41394139

41404140

4141+
-- ready status support
41414142

41424143

4144+
/****** Object: StoredProcedure [dbo].[uspMatchPayment] Script Date: 11/4/2020 3:19:16 PM ******/
4145+
SET ANSI_NULLS ON
4146+
GO
4147+
SET QUOTED_IDENTIFIER ON
4148+
GO
4149+
ALTER PROCEDURE [dbo].[uspMatchPayment]
4150+
@PaymentID INT = NULL,
4151+
@AuditUserId INT = NULL
4152+
AS
4153+
BEGIN
4154+
4155+
BEGIN TRY
4156+
---CHECK IF PAYMENTID EXISTS
4157+
IF NOT @PaymentID IS NULL
4158+
BEGIN
4159+
IF NOT EXISTS ( SELECT PaymentID FROM tblPayment WHERE PaymentID = @PaymentID AND ValidityTo IS NULL)
4160+
RETURN 1
4161+
END
4162+
4163+
SET @AuditUserId =ISNULL(@AuditUserId, -1)
4164+
4165+
DECLARE @InTopIsolation as bit
4166+
SET @InTopIsolation = -1
4167+
IF @@TRANCOUNT = 0
4168+
SET @InTopIsolation =0
4169+
ELSE
4170+
SET @InTopIsolation =1
4171+
IF @InTopIsolation = 0
4172+
BEGIN
4173+
BEGIN TRANSACTION MATCHPAYMENT
4174+
END
4175+
4176+
4177+
4178+
DECLARE @tblHeader TABLE(PaymentID BIGINT, officerCode nvarchar(12),PhoneNumber nvarchar(12),paymentDate DATE,ReceivedAmount DECIMAL(18,2),TotalPolicyValue DECIMAL(18,2), isValid BIT, TransactionNo NVARCHAR(50))
4179+
DECLARE @tblDetail TABLE(PaymentDetailsID BIGINT, PaymentID BIGINT, InsuranceNumber nvarchar(12),productCode nvarchar(8), enrollmentDate DATE,PolicyStage CHAR(1), MatchedDate DATE, PolicyValue DECIMAL(18,2),DistributedValue DECIMAL(18,2), policyID INT, RenewalpolicyID INT, PremiumID INT, PolicyStatus INT)
4180+
DECLARE @tblResult TABLE(policyID INT, PremiumId INT)
4181+
DECLARE @tblFeedback TABLE(fdMsg NVARCHAR(MAX), fdType NVARCHAR(1),paymentID INT,InsuranceNumber nvarchar(12),PhoneNumber nvarchar(12),productCode nvarchar(8), Balance DECIMAL(18,2), isActivated BIT, PaymentFound INT, PaymentMatched INT, APIKey NVARCHAR(100))
4182+
DECLARE @tblPaidPolicies TABLE(PolicyID INT, Amount DECIMAL(18,2), PolicyValue DECIMAL(18,2))
4183+
DECLARE @tblPeriod TABLE(startDate DATE, expiryDate DATE, HasCycle BIT)
4184+
DECLARE @paymentFound INT
4185+
DECLARE @paymentMatched INT
4186+
4187+
4188+
--GET ALL UNMATCHED RECEIVED PAYMENTS
4189+
INSERT INTO @tblDetail(PaymentDetailsID, PaymentID, InsuranceNumber, ProductCode, enrollmentDate, policyID, PolicyStage, PolicyValue, PremiumID,PolicyStatus)
4190+
SELECT PaymentDetailsID, PaymentID, InsuranceNumber, ProductCode, EnrollDate, PolicyID, PolicyStage, PolicyValue, PremiumId, PolicyStatus FROM(
4191+
SELECT ROW_NUMBER() OVER(PARTITION BY PR.ProductCode,I.CHFID ORDER BY PL.EnrollDate DESC) RN, PD.PaymentDetailsID, PY.PaymentID,PD.InsuranceNumber, PD.ProductCode,PL.EnrollDate, PL.PolicyID, PD.PolicyStage, PL.PolicyValue, PRM.PremiumId, PL.PolicyStatus FROM tblPaymentDetails PD
4192+
LEFT OUTER JOIN tblInsuree I ON I.CHFID = PD.InsuranceNumber
4193+
LEFT OUTER JOIN tblFamilies F ON F.FamilyID = I.FamilyID
4194+
LEFT OUTER JOIN tblProduct PR ON PR.ProductCode = PD.ProductCode
4195+
LEFT OUTER JOIN (SELECT PolicyID, EnrollDate, PolicyValue,FamilyID, ProdID,PolicyStatus FROM tblPolicy WHERE ProdID = ProdID AND FamilyID = FamilyID AND ValidityTo IS NULL AND PolicyStatus NOT IN (4,8) ) PL ON PL.ProdID = PR.ProdID AND PL.FamilyID = I.FamilyID
4196+
LEFT OUTER JOIN ( SELECT MAX(PremiumId) PremiumId , PolicyID FROM tblPremium WHERE ValidityTo IS NULL GROUP BY PolicyID ) PRM ON PRM.PolicyID = PL.PolicyID
4197+
INNER JOIN tblPayment PY ON PY.PaymentID = PD.PaymentID
4198+
WHERE PD.PremiumID IS NULL
4199+
AND PD.ValidityTo IS NULL
4200+
AND I.ValidityTo IS NULL
4201+
AND PR.ValidityTo IS NULL
4202+
AND F.ValidityTo IS NULL
4203+
AND PY.ValidityTo IS NULL
4204+
AND PY.PaymentStatus = 4 --Received Payment
4205+
AND PD.PaymentID = ISNULL(@PaymentID,PD.PaymentID)
4206+
)XX --WHERE RN =1
4207+
4208+
INSERT INTO @tblHeader(PaymentID, ReceivedAmount, PhoneNumber, TotalPolicyValue, TransactionNo, officerCode)
4209+
SELECT P.PaymentID, P.ReceivedAmount, P.PhoneNumber, D.TotalPolicyValue, P.TransactionNo, P.OfficerCode FROM tblPayment P
4210+
INNER JOIN (SELECT PaymentID, SUM(PolicyValue) TotalPolicyValue FROM @tblDetail GROUP BY PaymentID) D ON P.PaymentID = D.PaymentID
4211+
WHERE P.ValidityTo IS NULL AND P.PaymentStatus = 4
4212+
4213+
IF EXISTS(SELECT COUNT(1) FROM @tblHeader PH )
4214+
BEGIN
4215+
SET @paymentFound= (SELECT COUNT(1) FROM @tblHeader PH )
4216+
INSERT INTO @tblFeedback(fdMsg, fdType )
4217+
SELECT CONVERT(NVARCHAR(4), ISNULL(@paymentFound,0)) +' Unmatched Payment(s) found ', 'I'
4218+
END
4219+
4220+
4221+
/**********************************************************************************************************************
4222+
VALIDATION STARTS
4223+
*********************************************************************************************************************/
4224+
4225+
--1. Insurance number is missing on tblPaymentDetails
4226+
IF EXISTS(SELECT 1 FROM @tblDetail WHERE LEN(ISNULL(InsuranceNumber,'')) = 0)
4227+
BEGIN
4228+
INSERT INTO @tblFeedback(fdMsg, fdType, paymentID )
4229+
SELECT CONVERT(NVARCHAR(4), COUNT(1) OVER(PARTITION BY InsuranceNumber)) +' Insurance number(s) missing in tblPaymentDetails ', 'E', PaymentID FROM @tblDetail WHERE LEN(ISNULL(InsuranceNumber,'')) = 0
4230+
END
4231+
4232+
--2. Product code is missing on tblPaymentDetails
4233+
INSERT INTO @tblFeedback(fdMsg, fdType, paymentID )
4234+
SELECT 'Family with Insurance Number ' + QUOTENAME(PD.InsuranceNumber) + ' is missing product code ', 'E', PD.PaymentID FROM @tblDetail PD WHERE LEN(ISNULL(productCode,'')) = 0
4235+
4236+
--2. Insurance number is missing in tblinsuree
4237+
INSERT INTO @tblFeedback(fdMsg, fdType, paymentID )
4238+
SELECT 'Family with Insurance Number' + QUOTENAME(PD.InsuranceNumber) + ' does not exists', 'E', PD.PaymentID FROM @tblDetail PD
4239+
LEFT OUTER JOIN tblInsuree I ON I.CHFID = PD.InsuranceNumber
4240+
WHERE I.ValidityTo IS NULL
4241+
AND I.CHFID IS NULL
4242+
4243+
--1. Policy/Prevous Policy not found
4244+
INSERT INTO @tblFeedback(fdMsg, fdType, paymentID )
4245+
SELECT 'Family with Insurance Number ' + QUOTENAME(PD.InsuranceNumber) + ' does not have Policy or Previous Policy for the product '+QUOTENAME(PD.productCode), 'E', PD.PaymentID FROM @tblDetail PD
4246+
WHERE policyID IS NULL
4247+
AND ISNULL(LEN(PD.productCode),'') > 0
4248+
AND ISNULL(LEN(PD.InsuranceNumber),'') > 0
4249+
4250+
--3. Invalid Product
4251+
INSERT INTO @tblFeedback(fdMsg, fdType, paymentID)
4252+
SELECT 'Family with insurance number '+ QUOTENAME(PD.InsuranceNumber) +' can not enroll to product '+ QUOTENAME(PD.productCode),'E',PD.PaymentID FROM @tblDetail PD
4253+
INNER JOIN tblInsuree I ON I.CHFID = PD.InsuranceNumber
4254+
INNER JOIN tblFamilies F ON F.InsureeID = I.InsureeID
4255+
INNER JOIN tblVillages V ON V.VillageId = F.LocationId
4256+
INNER JOIN tblWards W ON W.WardId = V.WardId
4257+
INNER JOIN tblDistricts D ON D.DistrictId = W.DistrictId
4258+
INNER JOIN tblRegions R ON R.RegionId = D.Region
4259+
LEFT OUTER JOIN tblProduct PR ON (PR.LocationId IS NULL OR PR.LocationId = D.Region OR PR.LocationId = D.DistrictId) AND (GETDATE() BETWEEN PR.DateFrom AND PR.DateTo) AND PR.ProductCode = PD.ProductCode
4260+
WHERE
4261+
I.ValidityTo IS NULL
4262+
AND F.ValidityTo IS NULL
4263+
AND PR.ValidityTo IS NULL
4264+
AND PR.ProdID IS NULL
4265+
AND ISNULL(LEN(PD.productCode),'') > 0
4266+
AND ISNULL(LEN(PD.InsuranceNumber),'') > 0
4267+
4268+
4269+
--4. Invalid Officer
4270+
INSERT INTO @tblFeedback(fdMsg, fdType, paymentID)
4271+
SELECT 'Enrollment officer '+ QUOTENAME(PY.officerCode) +' does not exists ' ,'E',PD.PaymentID FROM @tblDetail PD
4272+
INNER JOIN @tblHeader PY ON PY.PaymentID = PD.PaymentID
4273+
LEFT OUTER JOIN tblOfficer O ON O.Code = PY.OfficerCode
4274+
WHERE
4275+
O.ValidityTo IS NULL
4276+
AND PY.OfficerCode IS NOT NULL
4277+
AND O.Code IS NULL
4278+
4279+
4280+
--4. Invalid Officer/Product Match
4281+
INSERT INTO @tblFeedback(fdMsg, fdType, paymentID)
4282+
SELECT 'Enrollment officer '+ QUOTENAME(PY.officerCode) +' can not sell the product '+ QUOTENAME(PD.productCode),'E',PD.PaymentID FROM @tblDetail PD
4283+
INNER JOIN @tblHeader PY ON PY.PaymentID = PD.PaymentID
4284+
LEFT OUTER JOIN tblOfficer O ON O.Code = PY.OfficerCode
4285+
INNER JOIN tblDistricts D ON D.DistrictId = O.LocationId
4286+
LEFT JOIN tblProduct PR ON PR.ProductCode = PD.ProductCode AND (PR.LocationId IS NULL OR PR.LocationID = D.Region OR PR.LocationId = D.DistrictId)
4287+
WHERE
4288+
O.ValidityTo IS NULL
4289+
AND PY.OfficerCode IS NOT NULL
4290+
AND PR.ValidityTo IS NULL
4291+
AND D.ValidityTo IS NULL
4292+
AND PR.ProdID IS NULL
4293+
4294+
--5. Premiums not available
4295+
INSERT INTO @tblFeedback(fdMsg, fdType, paymentID)
4296+
SELECT 'Premium from Enrollment officer '+ QUOTENAME(PY.officerCode) +' is not yet available ','E',PD.PaymentID FROM @tblDetail PD
4297+
INNER JOIN @tblHeader PY ON PY.PaymentID = PD.PaymentID
4298+
WHERE
4299+
PD.PremiumID IS NULL
4300+
AND PY.officerCode IS NOT NULL
4301+
4302+
4303+
4304+
4305+
/**********************************************************************************************************************
4306+
VALIDATION ENDS
4307+
*********************************************************************************************************************/
4308+
4309+
4310+
---DELETE ALL INVALID PAYMENTS
4311+
DELETE PY FROM @tblHeader PY
4312+
INNER JOIN @tblFeedback F ON F.paymentID = PY.PaymentID
4313+
WHERE F.fdType ='E'
4314+
4315+
4316+
DELETE PD FROM @tblDetail PD
4317+
INNER JOIN @tblFeedback F ON F.paymentID = PD.PaymentID
4318+
WHERE F.fdType ='E'
4319+
4320+
IF NOT EXISTS(SELECT 1 FROM @tblHeader)
4321+
INSERT INTO @tblFeedback(fdMsg, fdType )
4322+
SELECT 'No Payment matched ', 'I' FROM @tblHeader P
4323+
4324+
--DISTRIBUTE PAYMENTS EVENLY
4325+
UPDATE PD SET PD.DistributedValue = PH.ReceivedAmount*( PD.PolicyValue/PH.TotalPolicyValue) FROM @tblDetail PD
4326+
INNER JOIN @tblHeader PH ON PH.PaymentID = PD.PaymentID
4327+
4328+
--INSERT ONLY RENEWALS
4329+
DECLARE @DistributedValue DECIMAL(18, 2)
4330+
DECLARE @InsuranceNumber NVARCHAR(12)
4331+
DECLARE @productCode NVARCHAR(8)
4332+
DECLARE @PhoneNumber NVARCHAR(12)
4333+
DECLARE @PaymentDetailsID INT
4334+
DECLARE @Ready INT = 16
4335+
DECLARe @PolicyStage INT
4336+
4337+
--loop below only for SELF PAYER (stage R no office) or contribution without payment (Stage N status @ready with office)
4338+
DECLARE @PreviousPolicyID INT
4339+
IF EXISTS(SELECT 1 FROM @tblDetail PD INNER JOIN @tblHeader P ON PD.PaymentID = P.PaymentID WHERE ((PD.PolicyStage ='R' AND P.officerCode IS NULL ) OR (PD.PolicyStatus=@Ready AND PD.PolicyStage ='N' AND P.officerCode IS NOT NULL))AND P.PhoneNumber IS NOT NULL AND PD.policyID IS NOT NULL)
4340+
BEGIN
4341+
DECLARE CurPolicies CURSOR FOR SELECT PaymentDetailsID, InsuranceNumber, productCode, PhoneNumber, DistributedValue, policyID, PolicyStage FROM @tblDetail PD INNER JOIN @tblHeader P ON PD.PaymentID = P.PaymentID
4342+
OPEN CurPolicies;
4343+
FETCH NEXT FROM CurPolicies INTO @PaymentDetailsID, @InsuranceNumber, @productCode, @PhoneNumber, @DistributedValue, @PreviousPolicyID, @PolicyStage
4344+
WHILE @@FETCH_STATUS = 0
4345+
BEGIN
4346+
DECLARE @ProdId INT
4347+
DECLARE @FamilyId INT
4348+
DECLARE @OfficerID INT
4349+
DECLARE @PolicyId INT
4350+
DECLARE @PremiumId INT
4351+
DECLARE @StartDate DATE
4352+
DECLARE @ExpiryDate DATE
4353+
DECLARE @EffectiveDate DATE
4354+
DECLARE @EnrollmentDate DATE = GETDATE()
4355+
DECLARE @PolicyStatus TINYINT=1
4356+
DECLARE @PreviousPolicyStatus TINYINT=1
4357+
DECLARE @PolicyValue DECIMAL(18, 2)
4358+
DECLARE @PaidAmount DECIMAL(18, 2)
4359+
DECLARE @Balance DECIMAL(18, 2)
4360+
DECLARE @ErrorCode INT
4361+
DECLARE @HasCycle BIT
4362+
DECLARE @isActivated BIT = 0
4363+
DECLARE @TransactionNo NVARCHAR(50)
4364+
-- DECLARE @PolicyStage INT
4365+
SELECT @ProdId = ProdID, @FamilyId = FamilyID, @OfficerID = OfficerID, @PreviousPolicyStatus = PolicyStatus FROM tblPolicy WHERE PolicyID = @PreviousPolicyID AND ValidityTo IS NULL
4366+
-- execute the storeProc for PolicyID unknown
4367+
EXEC @PolicyValue = uspPolicyValue @FamilyId, @ProdId, 0, @PolicyStage, @enrollmentDate, @PreviousPolicyID, @ErrorCode OUTPUT;
4368+
DELETE FROM @tblPeriod
4369+
4370+
SET @TransactionNo = (SELECT ISNULL(PY.TransactionNo,'') FROM @tblHeader PY INNER JOIN @tblDetail PD ON PD.PaymentID = PY.PaymentID AND PD.policyID = @PreviousPolicyID)
4371+
4372+
DECLARE @Idle TINYINT = 1
4373+
DECLARE @Active TINYINT = 2
4374+
-- DECLARE @Ready TINYINT = 16
4375+
DECLARE @ActivationOption INT
4376+
4377+
SELECT @ActivationOption = ActivationOption FROM tblIMISDefaults
4378+
4379+
IF (@PreviousPolicyStatus = @Idle AND @PolicyStage = 'R') OR (@PreviousPolicyStatus = @Ready AND @ActivationOption = 3 AND @PolicyStage = 'N')
4380+
BEGIN
4381+
--Get the previous paid amount for only Iddle policy
4382+
SELECT @PaidAmount = ISNULL(SUM(Amount),0) FROM tblPremium PR
4383+
LEFT OUTER JOIN tblPolicy PL ON PR.PolicyID = PL.PolicyID
4384+
WHERE PR.PolicyID = @PreviousPolicyID
4385+
AND PR.ValidityTo IS NULL
4386+
AND PL.ValidityTo IS NULL
4387+
AND PL.PolicyStatus = @Idle
4388+
4389+
SELECT @PolicyValue = ISNULL(PolicyValue,0) FROM tblPolicy WHERE PolicyID = @PreviousPolicyID AND ValidityTo IS NULL
4390+
4391+
IF (ISNULL(@DistributedValue,0) + ISNULL(@PaidAmount,0)) - ISNULL(@PolicyValue,0) >= 0
4392+
BEGIN
4393+
SET @PolicyStatus = @Active
4394+
SET @EffectiveDate = (SELECT StartDate FROM tblPolicy WHERE PolicyID = @PreviousPolicyID AND ValidityTo IS NULL)
4395+
SET @isActivated = 1
4396+
SET @Balance = 0
4397+
4398+
INSERT INTO tblPolicy(FamilyID,EnrollDate,StartDate,EffectiveDate,ExpiryDate,PolicyStatus,PolicyValue,ProdID,OfficerID,PolicyStage,ValidityFrom, ValidityTo, LegacyID, AuditUserID, isOffline)
4399+
SELECT FamilyID,EnrollDate,StartDate,EffectiveDate,ExpiryDate,PolicyStatus,PolicyValue,ProdID,OfficerID,PolicyStage,ValidityFrom,GETDATE(), PolicyID, AuditUserID, isOffline FROM tblPolicy WHERE PolicyID = @PreviousPolicyID
4400+
4401+
4402+
INSERT INTO tblInsureePolicy
4403+
(InsureeId,PolicyId,EnrollmentDate,StartDate,EffectiveDate,ExpiryDate,ValidityFrom,ValidityTo,LegacyId,AuditUserId,isOffline)
4404+
SELECT InsureeId, PolicyId, EnrollmentDate, StartDate, EffectiveDate,ExpiryDate,ValidityFrom,GETDATE(),PolicyId,AuditUserId,isOffline FROM tblInsureePolicy
4405+
WHERE PolicyID = @PreviousPolicyID AND ValidityTo IS NULL
4406+
4407+
UPDATE tblPolicy SET PolicyStatus = @PolicyStatus, EffectiveDate = @EffectiveDate, ExpiryDate = @ExpiryDate, ValidityFrom = GETDATE(), AuditUserID = @AuditUserId WHERE PolicyID = @PreviousPolicyID
4408+
4409+
UPDATE tblInsureePolicy SET EffectiveDate = @EffectiveDate, ValidityFrom = GETDATE(), AuditUserID = @AuditUserId WHERE ValidityTo IS NULL AND PolicyId = @PreviousPolicyID AND EffectiveDate IS NULL
4410+
SET @PolicyId = @PreviousPolicyID
4411+
4412+
END
4413+
ELSE
4414+
BEGIN
4415+
SET @Balance = ISNULL(@PolicyValue,0) - (ISNULL(@DistributedValue,0) + ISNULL(@PaidAmount,0))
4416+
SET @isActivated = 0
4417+
SET @PolicyId = @PreviousPolicyID
4418+
END
4419+
END
4420+
ELSE
4421+
BEGIN --insert new Renewals if the policy is not Iddle
4422+
DECLARE @StartCycle NVARCHAR(5)
4423+
SELECT @StartCycle= ISNULL(StartCycle1, ISNULL(StartCycle2,ISNULL(StartCycle3,StartCycle4))) FROM tblProduct WHERE ProdID = @PreviousPolicyID
4424+
IF @StartCycle IS NOT NULL
4425+
SET @HasCycle = 1
4426+
ELSE
4427+
SET @HasCycle = 0
4428+
SET @EnrollmentDate = (SELECT DATEADD(DAY,1,expiryDate) FROM tblPolicy WHERE PolicyID = @PreviousPolicyID AND ValidityTo IS NULL)
4429+
INSERT INTO @tblPeriod(StartDate, ExpiryDate, HasCycle)
4430+
EXEC uspGetPolicyPeriod @ProdId, @EnrollmentDate, @HasCycle;
4431+
SET @StartDate = (SELECT startDate FROM @tblPeriod)
4432+
SET @ExpiryDate =(SELECT expiryDate FROM @tblPeriod)
4433+
IF ISNULL(@DistributedValue,0) - ISNULL(@PolicyValue,0) >= 0
4434+
BEGIN
4435+
SET @PolicyStatus = @Active
4436+
SET @EffectiveDate = @StartDate
4437+
SET @isActivated = 1
4438+
SET @Balance = 0
4439+
END
4440+
ELSE
4441+
BEGIN
4442+
SET @Balance = ISNULL(@PolicyValue,0) - (ISNULL(@DistributedValue,0))
4443+
SET @isActivated = 0
4444+
SET @PolicyStatus = @Idle
4445+
4446+
END
4447+
4448+
INSERT INTO tblPolicy(FamilyID,EnrollDate,StartDate,EffectiveDate,ExpiryDate,PolicyStatus,PolicyValue,ProdID,OfficerID,PolicyStage,ValidityFrom,AuditUserID, isOffline)
4449+
SELECT @FamilyId, GETDATE(),@StartDate,@EffectiveDate,@ExpiryDate,@PolicyStatus,@PolicyValue,@ProdID,@OfficerID,@PolicyStage,GETDATE(),@AuditUserId, 0 isOffline
4450+
SELECT @PolicyId = SCOPE_IDENTITY()
4451+
4452+
UPDATE @tblDetail SET policyID = @PolicyId WHERE policyID = @PreviousPolicyID
4453+
4454+
DECLARE @InsureeId INT
4455+
DECLARE CurNewPolicy CURSOR FOR SELECT I.InsureeID FROM tblInsuree I WHERE I.FamilyID = @FamilyId AND I.ValidityTo IS NULL
4456+
OPEN CurNewPolicy;
4457+
FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
4458+
WHILE @@FETCH_STATUS = 0
4459+
BEGIN
4460+
EXEC uspAddInsureePolicy @InsureeId;
4461+
FETCH NEXT FROM CurNewPolicy INTO @InsureeId;
4462+
END
4463+
CLOSE CurNewPolicy;
4464+
DEALLOCATE CurNewPolicy;
4465+
4466+
4467+
END
4468+
4469+
--INSERT PREMIUMS FOR INDIVIDUAL RENEWALS ONLY
4470+
INSERT INTO tblPremium(PolicyID, Amount, PayType, Receipt, PayDate, ValidityFrom, AuditUserID)
4471+
SELECT @PolicyId, @DistributedValue, 'C',@TransactionNo, GETDATE() PayDate, GETDATE() ValidityFrom, @AuditUserId AuditUserID
4472+
SELECT @PremiumId = SCOPE_IDENTITY()
4473+
4474+
UPDATE @tblDetail SET PremiumID = @PremiumId WHERE PaymentDetailsID = @PaymentDetailsID
4475+
4476+
INSERT INTO @tblFeedback(InsuranceNumber, productCode, PhoneNumber, isActivated ,Balance, fdType)
4477+
SELECT @InsuranceNumber, @productCode, @PhoneNumber, @isActivated,@Balance, 'A'
4478+
4479+
FETCH NEXT FROM CurPolicies INTO @PaymentDetailsID, @InsuranceNumber, @productCode, @PhoneNumber, @DistributedValue, @PreviousPolicyID;
4480+
END
4481+
CLOSE CurPolicies;
4482+
DEALLOCATE CurPolicies;
4483+
END
4484+
4485+
-- ABOVE LOOP SELF PAYER ONLY
4486+
4487+
--Update the actual tblpayment & tblPaymentDetails
4488+
UPDATE PD SET PD.PremiumID = TPD.PremiumId, PD.Amount = TPD.DistributedValue, ValidityFrom =GETDATE(), AuditedUserId = @AuditUserId
4489+
FROM @tblDetail TPD
4490+
INNER JOIN tblPaymentDetails PD ON PD.PaymentDetailsID = TPD.PaymentDetailsID
4491+
4492+
4493+
UPDATE P SET P.PaymentStatus = 5, P.MatchedDate = GETDATE(), ValidityFrom = GETDATE(), AuditedUSerID = @AuditUserId FROM tblPayment P
4494+
INNER JOIN @tblDetail PD ON PD.PaymentID = P.PaymentID
4495+
4496+
IF EXISTS(SELECT COUNT(1) FROM @tblHeader PH )
4497+
BEGIN
4498+
SET @paymentMatched= (SELECT COUNT(1) FROM @tblHeader PH )
4499+
INSERT INTO @tblFeedback(fdMsg, fdType )
4500+
SELECT CONVERT(NVARCHAR(4), ISNULL(@paymentMatched,0)) +' Payment(s) matched ', 'I'
4501+
END
4502+
4503+
UPDATE @tblFeedback SET PaymentFound =ISNULL(@paymentFound,0), PaymentMatched = ISNULL(@paymentMatched,0),APIKey = (SELECT APIKey FROM tblIMISDefaults)
4504+
4505+
IF @InTopIsolation = 0
4506+
COMMIT TRANSACTION MATCHPAYMENT
4507+
4508+
SELECT fdMsg, fdType, productCode, InsuranceNumber, PhoneNumber, isActivated, Balance,PaymentFound, PaymentMatched, APIKey FROM @tblFeedback
4509+
RETURN 0
4510+
END TRY
4511+
BEGIN CATCH
4512+
IF @InTopIsolation = 0
4513+
ROLLBACK TRANSACTION MATCHPAYMENT
4514+
SELECT fdMsg, fdType FROM @tblFeedback
4515+
SELECT ERROR_MESSAGE ()
4516+
RETURN -1
4517+
END CATCH
4518+
4519+
4520+
END
4521+
GO
4522+

0 commit comments

Comments
 (0)