Skip to content

Commit 5e0610f

Browse files
committed
adding readystate in matchpayment
1 parent 699a1d1 commit 5e0610f

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
@@ -4133,5 +4133,385 @@ UPDATE tblPolicy SET isOffline=0
41334133
WHERE (SELECT 1 FROM tblIMISDefaults where OfflineCHF = 1 And OfflineHF = 1) is null;
41344134

41354135

4136+
-- ready status support
41364137

41374138

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

0 commit comments

Comments
 (0)