|
81 | 81 | END |
82 | 82 | GO |
83 | 83 |
|
| 84 | +IF COL_LENGTH('tblPayment', 'SmsRequired') IS NULL |
| 85 | +BEGIN |
| 86 | + ALTER TABLE tblPayment ADD [SmsRequired] [bit] NULL |
| 87 | +END |
| 88 | +GO |
| 89 | + |
| 90 | +if not exists ( |
| 91 | + select * |
| 92 | + from sys.all_columns c |
| 93 | + join sys.tables t on t.object_id = c.object_id |
| 94 | + join sys.schemas s on s.schema_id = t.schema_id |
| 95 | + join sys.default_constraints d on c.default_object_id = d.object_id |
| 96 | + where t.name = 'tblPayment' |
| 97 | + and c.name = 'PaymentUUID' |
| 98 | + and s.name = 'dbo') |
| 99 | +ALTER TABLE [dbo].[tblPayment] ADD DEFAULT (newid()) FOR PaymentUUID |
| 100 | +GO |
| 101 | + |
84 | 102 | ALTER VIEW [dbo].[uvwLocations] |
85 | 103 | AS |
86 | 104 | SELECT 0 LocationId, null VillageId, null VillageName,NULL VillageCode, null WardId, null WardName,NULL WardCode, null DistrictId,null DistrictName, NULL DistrictCode, NULL RegionId, N'National' RegionName, null RegionCode, 0 ParentLocationId |
@@ -4451,7 +4469,7 @@ BEGIN TRY |
4451 | 4469 | --DISTRIBUTE PAYMENTS |
4452 | 4470 | DECLARE @curPaymentID int, @ReceivedAmount DECIMAL(18,2), @TotalPolicyValue DECIMAL(18,2), @AmountAvailable DECIMAL(18,2) |
4453 | 4471 | DECLARE CUR_Pay CURSOR FAST_FORWARD FOR |
4454 | | - SELECT PH.PaymentID, ReceivedAmount, TotalPolicyValue FROM @tblHeader PH |
| 4472 | + SELECT PH.PaymentID, ReceivedAmount FROM @tblHeader PH |
4455 | 4473 | OPEN CUR_Pay |
4456 | 4474 | FETCH NEXT FROM CUR_Pay INTO @curPaymentID, @ReceivedAmount |
4457 | 4475 | WHILE @@FETCH_STATUS = 0 |
@@ -5021,5 +5039,339 @@ END TRY |
5021 | 5039 | END CATCH |
5022 | 5040 |
|
5023 | 5041 | END |
| 5042 | +GO |
5024 | 5043 |
|
5025 | 5044 | SET ANSI_NULLS ON |
| 5045 | + |
| 5046 | + |
| 5047 | +IF OBJECT_ID('[uspInsertPaymentIntent]', 'P') IS NOT NULL |
| 5048 | + DROP PROCEDURE [uspInsertPaymentIntent] |
| 5049 | +GO |
| 5050 | +CREATE PROCEDURE [dbo].[uspInsertPaymentIntent] |
| 5051 | +( |
| 5052 | + @XML XML, |
| 5053 | + @ExpectedAmount DECIMAL(18,2) = 0 OUT, |
| 5054 | + @PaymentID INT = 0 OUT, |
| 5055 | + @ErrorNumber INT = 0, |
| 5056 | + @ErrorMsg NVARCHAR(255)=NULL, |
| 5057 | + @ProvidedAmount decimal(18,2) = 0, |
| 5058 | + @PriorEnrollment BIT = 0 |
| 5059 | + |
| 5060 | +) |
| 5061 | + |
| 5062 | +AS |
| 5063 | +BEGIN |
| 5064 | + DECLARE @tblHeader TABLE(officerCode nvarchar(12),requestDate DATE, phoneNumber NVARCHAR(50),LanguageName NVARCHAR(10),SmsRequired BIT, AuditUSerID INT) |
| 5065 | + DECLARE @tblDetail TABLE(InsuranceNumber nvarchar(12),productCode nvarchar(8), PolicyStage NVARCHAR(1), isRenewal BIT, PolicyValue DECIMAL(18,2), isExisting BIT) |
| 5066 | + DECLARE @OfficerLocationID INT |
| 5067 | + DECLARE @OfficerParentLocationID INT |
| 5068 | + DECLARE @AdultMembers INT |
| 5069 | + DECLARE @ChildMembers INT |
| 5070 | + DECLARE @oAdultMembers INT |
| 5071 | + DECLARE @oChildMembers INT |
| 5072 | + |
| 5073 | + |
| 5074 | + DECLARE @isEO BIT |
| 5075 | + INSERT INTO @tblHeader(officerCode, requestDate, phoneNumber,LanguageName, SmsRequired, AuditUSerID) |
| 5076 | + SELECT |
| 5077 | + LEFT(NULLIF(T.H.value('(OfficerCode)[1]','NVARCHAR(50)'),''),12), |
| 5078 | + NULLIF(T.H.value('(RequestDate)[1]','NVARCHAR(50)'),''), |
| 5079 | + LEFT(NULLIF(T.H.value('(PhoneNumber)[1]','NVARCHAR(50)'),''),50), |
| 5080 | + NULLIF(T.H.value('(LanguageName)[1]','NVARCHAR(10)'),''), |
| 5081 | + T.H.value('(SmsRequired)[1]','BIT'), |
| 5082 | + NULLIF(T.H.value('(AuditUserId)[1]','INT'),'') |
| 5083 | + FROM @XML.nodes('PaymentIntent/Header') AS T(H) |
| 5084 | + |
| 5085 | + INSERT INTO @tblDetail(InsuranceNumber, productCode, isRenewal) |
| 5086 | + SELECT |
| 5087 | + LEFT(NULLIF(T.D.value('(InsuranceNumber)[1]','NVARCHAR(12)'),''),12), |
| 5088 | + LEFT(NULLIF(T.D.value('(ProductCode)[1]','NVARCHAR(8)'),''),8), |
| 5089 | + T.D.value('(IsRenewal)[1]','BIT') |
| 5090 | + FROM @XML.nodes('PaymentIntent/Details/Detail') AS T(D) |
| 5091 | + |
| 5092 | + IF @ErrorNumber != 0 |
| 5093 | + BEGIN |
| 5094 | + GOTO Start_Transaction; |
| 5095 | + END |
| 5096 | + |
| 5097 | + SELECT @AdultMembers =T.P.value('(AdultMembers)[1]','INT'), @ChildMembers = T.P.value('(ChildMembers)[1]','INT') , @oAdultMembers =T.P.value('(oAdultMembers)[1]','INT') , @oChildMembers = T.P.value('(oChildMembers)[1]','INT') FROM @XML.nodes('PaymentIntent/ProxySettings') AS T(P) |
| 5098 | + |
| 5099 | + SELECT @AdultMembers= ISNULL(@AdultMembers,0), @ChildMembers= ISNULL(@ChildMembers,0), @oAdultMembers= ISNULL(@oAdultMembers,0), @oChildMembers= ISNULL(@oChildMembers,0) |
| 5100 | + |
| 5101 | + |
| 5102 | + UPDATE D SET D.isExisting = 1 FROM @tblDetail D |
| 5103 | + INNER JOIN tblInsuree I ON D.InsuranceNumber = I.CHFID |
| 5104 | + WHERE I.IsHead = 1 AND I.ValidityTo IS NULL |
| 5105 | + |
| 5106 | + UPDATE @tblDetail SET isExisting = 0 WHERE isExisting IS NULL |
| 5107 | + |
| 5108 | + IF EXISTS(SELECT 1 FROM @tblHeader WHERE officerCode IS NOT NULL) |
| 5109 | + SET @isEO = 1 |
| 5110 | + /********************************************************************************************************************** |
| 5111 | + VALIDATION STARTS |
| 5112 | + *********************************************************************************************************************/ |
| 5113 | + /*Error Codes |
| 5114 | + 2- Not valid insurance or missing product code |
| 5115 | + 3- Not valid enrolment officer code |
| 5116 | + 4 –Enrolment officer code and insurance product code are not compatible |
| 5117 | + 5- Beneficiary has no policy of specified insurance product for renewal |
| 5118 | + 6- Can not issue a control number as default indicated prior enrollment and Insuree has not been enrolled yet |
| 5119 | +
|
| 5120 | + 7 - 'Insuree not enrolled and prior enrolement mandatory' |
| 5121 | +
|
| 5122 | +
|
| 5123 | + -1. Unexpected error |
| 5124 | + 0. Success |
| 5125 | + */ |
| 5126 | + |
| 5127 | + --2. Insurance number missing |
| 5128 | + IF EXISTS(SELECT 1 FROM @tblDetail WHERE LEN(ISNULL(InsuranceNumber,'')) =0) |
| 5129 | + BEGIN |
| 5130 | + SET @ErrorNumber = 2 |
| 5131 | + SET @ErrorMsg ='Not valid insurance or missing product code' |
| 5132 | + GOTO Start_Transaction; |
| 5133 | + END |
| 5134 | + |
| 5135 | + --4. Missing product or Product does not exists |
| 5136 | + IF EXISTS(SELECT 1 FROM @tblDetail D |
| 5137 | + LEFT OUTER JOIN tblProduct P ON P.ProductCode = D.productCode |
| 5138 | + WHERE |
| 5139 | + (P.ValidityTo IS NULL AND P.ProductCode IS NULL) |
| 5140 | + OR D.productCode IS NULL |
| 5141 | + ) |
| 5142 | + BEGIN |
| 5143 | + SET @ErrorNumber = 4 |
| 5144 | + SET @ErrorMsg ='Not valid insurance or missing product code' |
| 5145 | + GOTO Start_Transaction; |
| 5146 | + END |
| 5147 | + |
| 5148 | + |
| 5149 | + --3. Invalid Officer Code |
| 5150 | + IF EXISTS(SELECT 1 FROM @tblHeader H |
| 5151 | + LEFT JOIN tblOfficer O ON H.officerCode = O.Code |
| 5152 | + WHERE O.ValidityTo IS NULL |
| 5153 | + AND H.officerCode IS NOT NULL |
| 5154 | + AND O.Code IS NULL |
| 5155 | + ) |
| 5156 | + BEGIN |
| 5157 | + SET @ErrorNumber = 3 |
| 5158 | + SET @ErrorMsg ='Not valid enrolment officer code' |
| 5159 | + GOTO Start_Transaction; |
| 5160 | + END |
| 5161 | + |
| 5162 | + |
| 5163 | + --4. Wrong match of Enrollment Officer agaists Product |
| 5164 | + SELECT @OfficerLocationID= L.LocationId, @OfficerParentLocationID = L.ParentLocationId FROM tblLocations L |
| 5165 | + INNER JOIN tblOfficer O ON O.LocationId = L.LocationId AND O.Code = (SELECT officerCode FROM @tblHeader WHERE officerCode IS NOT NULL) |
| 5166 | + WHERE |
| 5167 | + L.ValidityTo IS NULL |
| 5168 | + AND O.ValidityTo IS NULL |
| 5169 | + |
| 5170 | + |
| 5171 | + IF EXISTS(SELECT D.productCode, P.ProductCode FROM @tblDetail D |
| 5172 | + LEFT OUTER JOIN tblProduct P ON P.ProductCode = D.productCode AND (P.LocationId IS NULL OR P.LocationId = @OfficerLocationID OR P.LocationId = @OfficerParentLocationID) |
| 5173 | + WHERE |
| 5174 | + P.ValidityTo IS NULL |
| 5175 | + AND P.ProductCode IS NULL |
| 5176 | + ) AND EXISTS(SELECT 1 FROM @tblHeader WHERE officerCode IS NOT NULL) |
| 5177 | + BEGIN |
| 5178 | + SET @ErrorNumber = 4 |
| 5179 | + SET @ErrorMsg ='Enrolment officer code and insurance product code are not compatible' |
| 5180 | + GOTO Start_Transaction; |
| 5181 | + END |
| 5182 | + |
| 5183 | + |
| 5184 | + --The family does't contain this product for renewal |
| 5185 | + IF EXISTS(SELECT 1 FROM @tblDetail D |
| 5186 | + LEFT OUTER JOIN tblProduct PR ON PR.ProductCode = D.productCode |
| 5187 | + LEFT OUTER JOIN tblInsuree I ON I.CHFID = D.InsuranceNumber |
| 5188 | + LEFT OUTER JOIN tblPolicy PL ON PL.FamilyID = I.FamilyID AND PL.ProdID = PR.ProdID |
| 5189 | + WHERE PR.ValidityTo IS NULL |
| 5190 | + AND D.isRenewal = 1 AND D.isExisting = 1 |
| 5191 | + AND I.ValidityTo IS NULL |
| 5192 | + AND PL.ValidityTo IS NULL AND PL.PolicyID IS NULL) |
| 5193 | + BEGIN |
| 5194 | + SET @ErrorNumber = 5 |
| 5195 | + SET @ErrorMsg ='Beneficiary has no policy of specified insurance product for renewal' |
| 5196 | + GOTO Start_Transaction; |
| 5197 | + END |
| 5198 | + |
| 5199 | + |
| 5200 | + |
| 5201 | + --5. Proxy family can not renew |
| 5202 | + IF EXISTS(SELECT 1 FROM @tblDetail WHERE isExisting =0 AND isRenewal= 1) |
| 5203 | + BEGIN |
| 5204 | + SET @ErrorNumber = 5 |
| 5205 | + SET @ErrorMsg ='Beneficiary has no policy of specified insurance product for renewal' |
| 5206 | + GOTO Start_Transaction; |
| 5207 | + END |
| 5208 | + |
| 5209 | + |
| 5210 | + --7. Insurance number not existing in system |
| 5211 | + IF @PriorEnrollment = 1 AND EXISTS(SELECT 1 FROM @tblDetail D |
| 5212 | + LEFT OUTER JOIN tblProduct PR ON PR.ProductCode = D.productCode |
| 5213 | + LEFT OUTER JOIN tblInsuree I ON I.CHFID = D.InsuranceNumber |
| 5214 | + LEFT OUTER JOIN tblPolicy PL ON PL.FamilyID = I.FamilyID AND PL.ProdID = PR.ProdID |
| 5215 | + WHERE PR.ValidityTo IS NULL |
| 5216 | + AND I.ValidityTo IS NULL |
| 5217 | + AND PL.ValidityTo IS NULL AND PL.PolicyID IS NULL) |
| 5218 | + BEGIN |
| 5219 | + SET @ErrorNumber = 7 |
| 5220 | + SET @ErrorMsg ='Insuree not enrolled and prior enrollment mandatory' |
| 5221 | + GOTO Start_Transaction; |
| 5222 | + END |
| 5223 | + |
| 5224 | + |
| 5225 | + |
| 5226 | + |
| 5227 | + /********************************************************************************************************************** |
| 5228 | + VALIDATION ENDS |
| 5229 | + *********************************************************************************************************************/ |
| 5230 | + /********************************************************************************************************************** |
| 5231 | + CALCULATIONS STARTS |
| 5232 | + *********************************************************************************************************************/ |
| 5233 | + |
| 5234 | + DECLARE @FamilyId INT, @ProductId INT, @PrevPolicyID INT, @PolicyID INT, @PremiumID INT |
| 5235 | + DECLARE @PolicyStatus TINYINT=1 |
| 5236 | + DECLARE @PolicyValue DECIMAL(18,2), @PolicyStage NVARCHAR(1), @InsuranceNumber nvarchar(12), @productCode nvarchar(8), @enrollmentDate DATE, @isRenewal BIT, @isExisting BIT, @ErrorCode NVARCHAR(50) |
| 5237 | + |
| 5238 | + IF @ProvidedAmount = 0 |
| 5239 | + BEGIN |
| 5240 | + --only calcuylate if we want the system to provide a value to settle |
| 5241 | + DECLARE CurFamily CURSOR FOR SELECT InsuranceNumber, productCode, isRenewal, isExisting FROM @tblDetail |
| 5242 | + OPEN CurFamily |
| 5243 | + FETCH NEXT FROM CurFamily INTO @InsuranceNumber, @productCode, @isRenewal, @isExisting; |
| 5244 | + WHILE @@FETCH_STATUS = 0 |
| 5245 | + BEGIN |
| 5246 | + |
| 5247 | + SET @PolicyStatus=1 |
| 5248 | + SET @FamilyId = NULL |
| 5249 | + SET @ProductId = NULL |
| 5250 | + SET @PolicyID = NULL |
| 5251 | + |
| 5252 | + |
| 5253 | + IF @isRenewal = 1 |
| 5254 | + SET @PolicyStage = 'R' |
| 5255 | + ELSE |
| 5256 | + SET @PolicyStage ='N' |
| 5257 | + |
| 5258 | + IF @isExisting = 1 |
| 5259 | + BEGIN |
| 5260 | + |
| 5261 | + SELECT @FamilyId = FamilyId FROM tblInsuree I WHERE IsHead = 1 AND CHFID = @InsuranceNumber AND ValidityTo IS NULL |
| 5262 | + SELECT @ProductId = ProdID FROM tblProduct WHERE ProductCode = @productCode AND ValidityTo IS NULL |
| 5263 | + SELECT TOP 1 @PolicyID = PolicyID FROM tblPolicy WHERE FamilyID = @FamilyId AND ProdID = @ProductId AND PolicyStage = @PolicyStage AND ValidityTo IS NULL ORDER BY EnrollDate DESC |
| 5264 | + |
| 5265 | + IF @isEO = 1 |
| 5266 | + IF EXISTS(SELECT 1 FROM tblPremium WHERE PolicyID = @PolicyID AND ValidityTo IS NULL) |
| 5267 | + BEGIN |
| 5268 | + SELECT @PolicyValue = ISNULL(PR.Amount - ISNULL(MatchedAmount,0),0) FROM tblPremium PR |
| 5269 | + INNER JOIN tblPolicy PL ON PL.PolicyID = PR.PolicyID |
| 5270 | + LEFT OUTER JOIN (SELECT PremiumID, SUM (Amount) MatchedAmount from tblPaymentDetails WHERE ValidityTo IS NULL GROUP BY PremiumID ) PD ON PD.PremiumID = PR.PremiumId |
| 5271 | + WHERE |
| 5272 | + PR.ValidityTo IS NULL |
| 5273 | + AND PL.ValidityTo IS NULL AND PL.PolicyID = @PolicyID |
| 5274 | + IF @PolicyValue < 0 |
| 5275 | + SET @PolicyValue = 0.00 |
| 5276 | + END |
| 5277 | + ELSE |
| 5278 | + BEGIN |
| 5279 | + EXEC @PolicyValue = uspPolicyValue @FamilyId, @ProductId, 0, @PolicyStage, NULL, 0; |
| 5280 | + END |
| 5281 | + |
| 5282 | + ELSE IF @PolicyStage ='N' |
| 5283 | + BEGIN |
| 5284 | + EXEC @PolicyValue = uspPolicyValue @FamilyId, @ProductId, 0, 'N', NULL, 0; |
| 5285 | + END |
| 5286 | + ELSE |
| 5287 | + BEGIN |
| 5288 | + SELECT TOP 1 @PrevPolicyID = PolicyID, @PolicyStatus = PolicyStatus FROM tblPolicy WHERE ProdID = @ProductId AND FamilyID = @FamilyId AND ValidityTo IS NULL AND PolicyStatus != 4 ORDER BY EnrollDate DESC |
| 5289 | + IF @PolicyStatus = 1 |
| 5290 | + BEGIN |
| 5291 | + SELECT @PolicyValue = (ISNULL(SUM(PL.PolicyValue),0) - ISNULL(SUM(Amount),0)) FROM tblPolicy PL |
| 5292 | + LEFT OUTER JOIN tblPremium PR ON PR.PolicyID = PL.PolicyID |
| 5293 | + WHERE PL.ValidityTo IS NULL |
| 5294 | + AND PR.ValidityTo IS NULL |
| 5295 | + AND PL.PolicyID = @PrevPolicyID |
| 5296 | + IF @PolicyValue < 0 |
| 5297 | + SET @PolicyValue =0 |
| 5298 | + END |
| 5299 | + ELSE |
| 5300 | + BEGIN |
| 5301 | + EXEC @PolicyValue = uspPolicyValue @FamilyId, @ProductId, 0, 'R', @enrollmentDate, @PrevPolicyID, @ErrorCode OUTPUT; |
| 5302 | + END |
| 5303 | + END |
| 5304 | + END |
| 5305 | + ELSE |
| 5306 | + BEGIN |
| 5307 | + EXEC @PolicyValue = uspPolicyValueProxyFamily @productCode, @AdultMembers, @ChildMembers,@oAdultMembers,@oChildMembers |
| 5308 | + END |
| 5309 | + UPDATE @tblDetail SET PolicyValue = ISNULL(@PolicyValue,0), PolicyStage = @PolicyStage WHERE InsuranceNumber = @InsuranceNumber AND productCode = @productCode AND isRenewal = @isRenewal |
| 5310 | + FETCH NEXT FROM CurFamily INTO @InsuranceNumber, @productCode, @isRenewal, @isExisting; |
| 5311 | + END |
| 5312 | + CLOSE CurFamily |
| 5313 | + DEALLOCATE CurFamily; |
| 5314 | + |
| 5315 | + |
| 5316 | + |
| 5317 | + END |
| 5318 | + |
| 5319 | + |
| 5320 | + |
| 5321 | + |
| 5322 | + --IF IT REACHES UP TO THIS POINT THEN THERE IS NO ERROR |
| 5323 | + SET @ErrorNumber = 0 |
| 5324 | + SET @ErrorMsg = NULL |
| 5325 | + |
| 5326 | + |
| 5327 | + /********************************************************************************************************************** |
| 5328 | + CALCULATIONS ENDS |
| 5329 | + *********************************************************************************************************************/ |
| 5330 | + |
| 5331 | + /********************************************************************************************************************** |
| 5332 | + INSERTION STARTS |
| 5333 | + *********************************************************************************************************************/ |
| 5334 | + Start_Transaction: |
| 5335 | + BEGIN TRY |
| 5336 | + BEGIN TRANSACTION INSERTPAYMENTINTENT |
| 5337 | + |
| 5338 | + IF @ProvidedAmount > 0 |
| 5339 | + SET @ExpectedAmount = @ProvidedAmount |
| 5340 | + ELSE |
| 5341 | + SELECT @ExpectedAmount = SUM(ISNULL(PolicyValue,0)) FROM @tblDetail |
| 5342 | + |
| 5343 | + SET @ErrorMsg = ISNULL(CONVERT(NVARCHAR(5),@ErrorNumber)+': '+ @ErrorMsg,NULL) |
| 5344 | + --Inserting Payment |
| 5345 | + INSERT INTO [dbo].[tblPayment] |
| 5346 | + ([ExpectedAmount],[OfficerCode],[PhoneNumber],[RequestDate],[PaymentStatus],[ValidityFrom],[AuditedUSerID],[RejectedReason],[LanguageName],[SmsRequired]) |
| 5347 | + SELECT |
| 5348 | + @ExpectedAmount, officerCode, phoneNumber, GETDATE(),CASE @ErrorNumber WHEN 0 THEN 0 ELSE -1 END, GETDATE(), AuditUSerID, @ErrorMsg,LanguageName,SmsRequired |
| 5349 | + FROM @tblHeader |
| 5350 | + SELECT @PaymentID= SCOPE_IDENTITY(); |
| 5351 | + |
| 5352 | + --Inserting Payment Details |
| 5353 | + DECLARE @AuditedUSerID INT |
| 5354 | + SELECT @AuditedUSerID = AuditUSerID FROM @tblHeader |
| 5355 | + INSERT INTO [dbo].[tblPaymentDetails] |
| 5356 | + ([PaymentID],[ProductCode],[InsuranceNumber],[PolicyStage],[ValidityFrom],[AuditedUserId], ExpectedAmount) SELECT |
| 5357 | + @PaymentID, productCode, InsuranceNumber, CASE isRenewal WHEN 0 THEN 'N' ELSE 'R' END, GETDATE(), @AuditedUSerID, PolicyValue |
| 5358 | + FROM @tblDetail D |
| 5359 | + |
| 5360 | + |
| 5361 | + |
| 5362 | + COMMIT TRANSACTION INSERTPAYMENTINTENT |
| 5363 | + RETURN @ErrorNumber |
| 5364 | + END TRY |
| 5365 | + BEGIN CATCH |
| 5366 | + ROLLBACK TRANSACTION INSERTPAYMENTINTENT |
| 5367 | + SELECT ERROR_MESSAGE() |
| 5368 | + RETURN -1 |
| 5369 | + END CATCH |
| 5370 | + |
| 5371 | + /********************************************************************************************************************** |
| 5372 | + INSERTION ENDS |
| 5373 | + *********************************************************************************************************************/ |
| 5374 | + |
| 5375 | +END |
| 5376 | +GO |
| 5377 | + |
0 commit comments