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