@@ -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